<?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>86281</bug_id>
          
          <creation_ts>2012-05-11 20:36:18 -0700</creation_ts>
          <short_desc>44% of Vector buffer capacity is unused</short_desc>
          <delta_ts>2022-09-06 17:16:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</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>
          <dependson>86438</dependson>
    
    <dependson>86568</dependson>
    
    <dependson>86434</dependson>
    
    <dependson>86435</dependson>
    
    <dependson>86436</dependson>
    
    <dependson>86437</dependson>
    
    <dependson>86560</dependson>
    
    <dependson>86561</dependson>
    
    <dependson>86562</dependson>
    
    <dependson>86563</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>ahmad.saleem792</cc>
    
    <cc>ap</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dtrebbien</cc>
    
    <cc>eric</cc>
    
    <cc>ggaren</cc>
    
    <cc>jochen</cc>
    
    <cc>jrogers</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>mitz</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>slewis</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>622220</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-11 20:36:18 -0700</bug_when>
    <thetext>I added logging to VectorBuffer to track the high water marks of m_size, and m_buffer.m_capacity. I then loaded a few common sites, and dumped the data:

Data on m_size frequency:

Size    Freq    %       Cumul   %
0       749339  54.26%  749339  54.26%
1       233851  16.93%  983190  71.19%
2       110291  7.99%   1093481 79.18%
3       56286   4.08%   1149767 83.26%
4       37070   2.68%   1186837 85.94%
5       25134   1.82%   1211971 87.76%
6       31826   2.30%   1243797 90.06%
7       10837   0.78%   1254634 90.85%
8       17178   1.24%   1271812 92.09%
9       6798    0.49%   1278610 92.59%
10      7826    0.57%   1286436 93.15%
11      5996    0.43%   1292432 93.59%
12      3844    0.28%   1296276 93.87%
13      5522    0.40%   1301798 94.26%
14      4251    0.31%   1306049 94.57%
15      3038    0.22%   1309087 94.79%
16      2785    0.20%   1311872 94.99%
17      2424    0.18%   1314296 95.17%
18      2571    0.19%   1316867 95.36%
19      1903    0.14%   1318770 95.49%
20      1274    0.09%   1320044 95.59%
21      1712    0.12%   1321756 95.71%
22      1906    0.14%   1323662 95.85%
23      2158    0.16%   1325820 96.00%
24      1265    0.09%   1327085 96.10%
25      763     0.06%   1327848 96.15%
26      1328    0.10%   1329176 96.25%
27      948     0.07%   1330124 96.32%
28      710     0.05%   1330834 96.37%
29      2449    0.18%   1333283 96.54%
30      636     0.05%   1333919 96.59%
31      582     0.04%   1334501 96.63%
32      1059    0.08%   1335560 96.71%
33      998     0.07%   1336558 96.78%
34      512     0.04%   1337070 96.82%
35      511     0.04%   1337581 96.86%
36      614     0.04%   1338195 96.90%
37      424     0.03%   1338619 96.93%
38      532     0.04%   1339151 96.97%
39      410     0.03%   1339561 97.00%
40      733     0.05%   1340294 97.05%
41      422     0.03%   1340716 97.08%
42      281     0.02%   1340997 97.10%
43      326     0.02%   1341323 97.13%
44      460     0.03%   1341783 97.16%
45      361     0.03%   1342144 97.19%
46      719     0.05%   1342863 97.24%
47      858     0.06%   1343721 97.30%
48      384     0.03%   1344105 97.33%
49+   36895   2.67%   1381000 100.00%

Total for all vectors allocated every: 67822.00KB used of 165432.40KB (41.00% used)

Data on fullness (at high water mark size):

% full      Freq        %
0           1048058     75.89%
1           2600        0.19%
2           4002        0.29%
3           3019        0.22%
4           10976       0.79%
5           5637        0.41%
6           3864        0.28%
7           89799       6.50%
8           5431        0.39%
9           2030        0.15%
10          4333        0.31%
11          2677        0.19%
12          693         0.05%
13          26030       1.88%
14          585         0.04%
15          1364        0.10%
16          1108        0.08%
17          911         0.07%
18          1378        0.10%
19          14983       1.08%
20          1737        0.13%
21          665         0.05%
22          838         0.06%
23          1071        0.08%
24          103         0.01%
25          26880       1.95%
26          41          0.00%
27          60          0.00%
28          15          0.00%
29          530         0.04%
30          1034        0.07%
31          31          0.00%
32          4636        0.34%
33          32          0.00%
34          26          0.00%
35          404         0.03%
36          415         0.03%
37          44          0.00%
38          8025        0.58%
39          13          0.00%
40          206         0.01%
41          401         0.03%
42          40          0.00%
43          33          0.00%
44          3260        0.24%
45          27          0.00%
46          20          0.00%
47          101         0.01%
48          32          0.00%
49          19          0.00%
50          11619       0.84%
51          38          0.00%
52          36          0.00%
53          17          0.00%
54          134         0.01%
55          44          0.00%
56          17          0.00%
57          1832        0.13%
58          61          0.00%
59          43          0.00%
60          56          0.00%
61          55          0.00%
62          25          0.00%
63          2719        0.20%
64          14          0.00%
65          56          0.00%
66          93          0.01%
67          24          0.00%
68          25          0.00%
69          1381        0.10%
70          45          0.00%
71          38          0.00%
72          46          0.00%
73          17          0.00%
74          0           0.00%
75          4439        0.32%
76          4           0.00%
77          16          0.00%
78          25          0.00%
79          33          0.00%
80          9           0.00%
81          1659        0.12%
82          1761        0.13%
83          589         0.04%
84          580         0.04%
85          587         0.04%
86          1607        0.12%
87          507         0.04%
88          1358        0.10%
89          1044        0.08%
90          385         0.03%
91          1006        0.07%
92          557         0.04%
93          736         0.05%
94          1794        0.13%
95          519         0.04%
96          735         0.05%
97          671         0.05%
98          519         0.04%
99          528         0.04%
100         60680       4.39%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622221</commentid>
    <comment_count>1</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-11 20:42:57 -0700</bug_when>
    <thetext>Data ignoring &quot;unused&quot; vectors (those with capacity 0):

vector size frequencies:

Size        Frequency   %           Cumul       %
0           60661       12.44%      60661       12.44%
1           174952      35.88%      235613      48.32%
2           63735       13.07%      299348      61.39%
3           35794       7.34%       335142      68.73%
4           19660       4.03%       354802      72.76%
5           11048       2.27%       365850      75.03%
6           10082       2.07%       375932      77.09%
7           7556        1.55%       383488      78.64%
8           9797        2.01%       393285      80.65%
9           4380        0.90%       397665      81.55%
10          5784        1.19%       403449      82.74%
11          4295        0.88%       407744      83.62%
12          2707        0.56%       410451      84.17%
13          4217        0.86%       414668      85.04%
14          3094        0.63%       417762      85.67%
15          1782        0.37%       419544      86.04%
16          1841        0.38%       421385      86.41%
17          1621        0.33%       423006      86.75%
18          1706        0.35%       424712      87.10%
19          1497        0.31%       426209      87.40%
20          950         0.19%       427159      87.60%
21          1279        0.26%       428438      87.86%
22          1647        0.34%       430085      88.20%
23          1767        0.36%       431852      88.56%
24          1095        0.22%       432947      88.78%
25          521         0.11%       433468      88.89%
26          1084        0.22%       434552      89.11%
27          705         0.14%       435257      89.26%
28          403         0.08%       435660      89.34%
29          2456        0.50%       438116      89.84%
30          491         0.10%       438607      89.95%
31          344         0.07%       438951      90.02%
32          395         0.08%       439346      90.10%
33          851         0.17%       440197      90.27%
34          552         0.11%       440749      90.38%
35          275         0.06%       441024      90.44%
36          496         0.10%       441520      90.54%
37          338         0.07%       441858      90.61%
38          564         0.12%       442422      90.73%
39          389         0.08%       442811      90.81%
40          679         0.14%       443490      90.95%
41          412         0.08%       443902      91.03%
42          207         0.04%       444109      91.07%
43          309         0.06%       444418      91.14%
44          470         0.10%       444888      91.23%
45          366         0.08%       445254      91.31%
46          674         0.14%       445928      91.45%
47          820         0.17%       446748      91.62%
48          341         0.07%       447089      91.68%
49          40547       8.32%       487636      100.00%


% fullness frequencies:

% full      Freq        %
0           60661       12.44%
1           2988        0.61%
2           3780        0.78%
3           3270        0.67%
4           12711       2.61%
5           5150        1.06%
6           4010        0.82%
7           146310      30.00%
8           4983        1.02%
9           2249        0.46%
10          4570        0.94%
11          2631        0.54%
12          755         0.15%
13          33811       6.93%
14          616         0.13%
15          1292        0.26%
16          1289        0.26%
17          905         0.19%
18          1313        0.27%
19          18414       3.78%
20          2172        0.45%
21          643         0.13%
22          1131        0.23%
23          1125        0.23%
24          98          0.02%
25          32034       6.57%
26          82          0.02%
27          70          0.01%
28          12          0.00%
29          618         0.13%
30          1322        0.27%
31          34          0.01%
32          5827        1.19%
33          38          0.01%
34          30          0.01%
35          497         0.10%
36          450         0.09%
37          76          0.02%
38          10849       2.22%
39          19          0.00%
40          252         0.05%
41          463         0.09%
42          40          0.01%
43          34          0.01%
44          3978        0.82%
45          27          0.01%
46          32          0.01%
47          105         0.02%
48          58          0.01%
49          29          0.01%
50          12405       2.54%
51          22          0.00%
52          38          0.01%
53          19          0.00%
54          182         0.04%
55          45          0.01%
56          20          0.00%
57          2279        0.47%
58          60          0.01%
59          43          0.01%
60          71          0.01%
61          59          0.01%
62          25          0.01%
63          2924        0.60%
64          15          0.00%
65          54          0.01%
66          153         0.03%
67          32          0.01%
68          44          0.01%
69          1659        0.34%
70          36          0.01%
71          21          0.00%
72          68          0.01%
73          16          0.00%
74          3           0.00%
75          4460        0.91%
76          13          0.00%
77          17          0.00%
78          30          0.01%
79          35          0.01%
80          44          0.01%
81          1775        0.36%
82          2356        0.48%
83          679         0.14%
84          723         0.15%
85          699         0.14%
86          2041        0.42%
87          665         0.14%
88          1650        0.34%
89          1486        0.30%
90          514         0.11%
91          1287        0.26%
92          721         0.15%
93          1164        0.24%
94          2101        0.43%
95          839         0.17%
96          955         0.20%
97          827         0.17%
98          671         0.14%
99          980         0.20%
100         66758       13.69%</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622222</commentid>
    <comment_count>2</comment_count>
      <attachid>141549</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-11 20:45:11 -0700</bug_when>
    <thetext>Created attachment 141549
Patch to log vector stats</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622223</commentid>
    <comment_count>3</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-11 20:51:20 -0700</bug_when>
    <thetext>Antti and I have been discussing an alternate allocation scheme for some high-volume classes that contain vectors, specifically StylePropertySet and ElementAttributeData.

The idea is basically to make the objects &quot;variable size&quot; and replace the Vector&lt;CSSProperty&gt; and Vector&lt;Attribute&gt; (respectively) by a size and an array. If/when the array mutates (presumably a rare occurrence) we replace the buffer by a heap-allocated Vector and redirect to that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622224</commentid>
    <comment_count>4</comment_count>
      <attachid>141550</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-11 20:55:25 -0700</bug_when>
    <thetext>Created attachment 141550
Delta on the previous patch to dump stacks when sparse vectors are destroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622225</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-11 20:57:30 -0700</bug_when>
    <thetext>Andreas: isn&apos;t that what inline capacity does, basically?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622226</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-11 21:06:06 -0700</bug_when>
    <thetext>The data above don&apos;t distinguish between inline and heap-allocated buffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622228</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-11 21:15:52 -0700</bug_when>
    <thetext>My logging needs to track live Vectors, not just collect data on destruction. The data are skewed by lots of stack-allocated Vectors with inline capacity.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622230</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-11 21:46:04 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Andreas: isn&apos;t that what inline capacity does, basically?

Kind of. Vector is currently { capacity, size, buffer }, and the new approach would allow us to eliminate &apos;capacity&apos; from these structures and pack &apos;buffer&apos; tightly with no overhead when there&apos;s no mutation.

Also, another thing that we should probably do is turn Vector&apos;s capacity and size into 32-bit unsigned integers. I don&apos;t think there&apos;s a good reason for them to be size_t, and this would save us 8 bytes per Vector on 64-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622419</commentid>
    <comment_count>9</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-12 14:45:56 -0700</bug_when>
    <thetext>An alternative approach to optimize for 0 is to create an automatic wrapper around an OwnPtr&lt;Vector&lt;T&gt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622472</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-12 22:40:46 -0700</bug_when>
    <thetext>I added some code to track extant Vectors, and log the unused space in those from time to time.

In a single tab after browsing to a few sites, I have:
145340 extant vectors wasting 23.21MB 67.59% (used 11671558 bytes, capacity 36014131 bytes):

RPRVT was about 228M at this point, so this accounts for about 10% of our memory use:

PID    COMMAND      %CPU TIME     #TH   #WQ  #POR #MREG RPRVT  RSHRD  RSIZE  VPRVT  VSIZE  PGRP  PPID  STATE    UID  FAULTS    COW     MSGSENT   MSGRECV   SYSBSD    SYSMACH   CSW
28172  WebProcess   0.0  00:27.57 10    1    128  685   228M   91M    520M   745M   4215M  28157 28171 sleeping 501  207107    1784    30340     13840     69599+    37470     8734+

I&apos;m collecting stack traces for Vector allocation, so I can find the most wasteful allocation points.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623611</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-14 21:21:46 -0700</bug_when>
    <thetext>Logging from a CFRunLoopObserver (so only logging non-temporaries), I get:


42191 extant vectors wasting 8.64MB 75.17% (used 2992158 bytes, capacity 12051495 bytes):

Most wasteful 5 stacks
3579 vectors, 164.22KB used of 2237.70KB, 2073.48KB wasted at:
1   0x107e4e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x107e3c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x107e2fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x107e2fd63 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x107e30400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)
6   0x107e1e47b WebCore::RuleSet::addRulesFromSheet(WebCore::StyleSheetInternal*, WebCore::MediaQueryEvaluator const&amp;, WebCore::StyleResolver*, WebCore::ContainerNode const*)
7   0x107e1ec05 WebCore::StyleResolver::appendAuthorStylesheets(unsigned int, WTF::Vector&lt;WTF::RefPtr&lt;WebCore::StyleSheet&gt;, 0ul&gt; const&amp;)
8   0x107e1d449 WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
9   0x107e1ca5c WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
10  0x106b3dd0c WebCore::Document::createStyleResolver()
11  0x1068cde2b WebCore::Document::styleResolver()
12  0x106d4363a WebCore::Element::styleForRenderer()
13  0x106d438af WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
14  0x106b3be32 WebCore::Document::recalcStyle(WebCore::Node::StyleChange)
15  0x106b3c963 WebCore::Document::updateStyleIfNeeded()
16  0x106e61751 WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive()
17  0x104e2e55b WebKit::WebPage::layoutIfNeeded()
18  0x104c51d85 WebKit::DrawingAreaImpl::display(WebKit::UpdateInfo&amp;)
19  0x104c50ef8 WebKit::DrawingAreaImpl::display()
20  0x104c4f8b5 WebKit::DrawingAreaImpl::displayTimerFired()
21  0x104c540cb WebCore::RunLoop::Timer&lt;WebKit::DrawingAreaImpl&gt;::fired()
22  0x107c92f3d WebCore::RunLoop::TimerBase::timerFired(__CFRunLoopTimer*, void*)
23  0x7fff99ad3934 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
24  0x7fff99ad3486 __CFRunLoopDoTimer
25  0x7fff99ab3e11 __CFRunLoopRun
26  0x7fff99ab3486 CFRunLoopRunSpecific
27  0x7fff966804d3 RunCurrentEventLoopInMode
28  0x7fff96687781 ReceiveNextEventCommon
29  0x7fff9668760e BlockUntilNextEventMatchingListInMode
30  0x7fff94a79e31 _DPSNextEvent
31  0x7fff94a79735 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]

2696 vectors, 164.22KB used of 2237.70KB, 2073.48KB wasted at:
1   0x107e4e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x107e3c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x107e2fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x107e2fd06 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x107e30400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)
6   0x107e1e47b WebCore::RuleSet::addRulesFromSheet(WebCore::StyleSheetInternal*, WebCore::MediaQueryEvaluator const&amp;, WebCore::StyleResolver*, WebCore::ContainerNode const*)
7   0x107e1ec05 WebCore::StyleResolver::appendAuthorStylesheets(unsigned int, WTF::Vector&lt;WTF::RefPtr&lt;WebCore::StyleSheet&gt;, 0ul&gt; const&amp;)
8   0x107e1d449 WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
9   0x107e1ca5c WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
10  0x106b3dd0c WebCore::Document::createStyleResolver()
11  0x1068cde2b WebCore::Document::styleResolver()
12  0x106d4363a WebCore::Element::styleForRenderer()
13  0x106d438af WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
14  0x106b3be32 WebCore::Document::recalcStyle(WebCore::Node::StyleChange)
15  0x106b3c963 WebCore::Document::updateStyleIfNeeded()
16  0x106e61751 WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive()
17  0x104e2e55b WebKit::WebPage::layoutIfNeeded()
18  0x104c51d85 WebKit::DrawingAreaImpl::display(WebKit::UpdateInfo&amp;)
19  0x104c50ef8 WebKit::DrawingAreaImpl::display()
20  0x104c4f8b5 WebKit::DrawingAreaImpl::displayTimerFired()
21  0x104c540cb WebCore::RunLoop::Timer&lt;WebKit::DrawingAreaImpl&gt;::fired()
22  0x107c92f3d WebCore::RunLoop::TimerBase::timerFired(__CFRunLoopTimer*, void*)
23  0x7fff99ad3934 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__
24  0x7fff99ad3486 __CFRunLoopDoTimer
25  0x7fff99ab3e11 __CFRunLoopRun
26  0x7fff99ab3486 CFRunLoopRunSpecific
27  0x7fff966804d3 RunCurrentEventLoopInMode
28  0x7fff96687781 ReceiveNextEventCommon
29  0x7fff9668760e BlockUntilNextEventMatchingListInMode
30  0x7fff94a79e31 _DPSNextEvent
31  0x7fff94a79735 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:]

2572 vectors, 164.22KB used of 2237.70KB, 2073.48KB wasted at:
1   0x107e4e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x107e3c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x107e2fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x107e2fd63 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x107e30400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)
6   0x107e1e47b WebCore::RuleSet::addRulesFromSheet(WebCore::StyleSheetInternal*, WebCore::MediaQueryEvaluator const&amp;, WebCore::StyleResolver*, WebCore::ContainerNode const*)
7   0x107e1ec05 WebCore::StyleResolver::appendAuthorStylesheets(unsigned int, WTF::Vector&lt;WTF::RefPtr&lt;WebCore::StyleSheet&gt;, 0ul&gt; const&amp;)
8   0x107e1d449 WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
9   0x107e1ca5c WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
10  0x106b3dd0c WebCore::Document::createStyleResolver()
11  0x1068cde2b WebCore::Document::styleResolver()
12  0x106d4363a WebCore::Element::styleForRenderer()
13  0x106d438af WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
14  0x106b3be32 WebCore::Document::recalcStyle(WebCore::Node::StyleChange)
15  0x106b3c963 WebCore::Document::updateStyleIfNeeded()
16  0x106b3cb33 WebCore::Document::updateLayout()
17  0x106b3ccd5 WebCore::Document::updateLayoutIgnorePendingStylesheets()
18  0x1069bde50 WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue(WebCore::CSSPropertyID, WebCore::EUpdateLayout) const
19  0x1069bdda7 WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue(WebCore::CSSPropertyID) const
20  0x1069d6092 WebCore::CSSComputedStyleDeclaration::getPropertyCSSValueInternal(WebCore::CSSPropertyID)
21  0x1072995d2 _ZN7WebCoreL17cssPropertyGetterEPN3JSC9ExecStateEPNS_21JSCSSStyleDeclarationEj
22  0x107299356 _ZN7WebCoreL25cssPropertyGetterCallbackEPN3JSC9ExecStateENS0_7JSValueEj
23  0x105b2500a JSC::PropertySlot::getValue(JSC::ExecState*, JSC::Identifier const&amp;) const
24  0x105b359ad JSC::JSValue::get(JSC::ExecState*, JSC::Identifier const&amp;, JSC::PropertySlot&amp;) const
25  0x105b358c5 JSC::JSValue::get(JSC::ExecState*, JSC::Identifier const&amp;) const
26  0x105ecfe26 JSC::LLInt::getByVal(JSC::ExecState*, JSC::JSValue, JSC::JSValue)
27  0x105ecaab0 llint_slow_path_get_by_val
28  0x105ed2dce llint_op_get_by_val
29  0x105cc4ba9 JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*)
30  0x105cc0b2e JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
31  0x105b8931b JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)

2398 vectors, 164.22KB used of 2237.70KB, 2073.48KB wasted at:
1   0x107e4e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x107e3c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x107e2fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x107e2fd06 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x107e30400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)
6   0x107e1e47b WebCore::RuleSet::addRulesFromSheet(WebCore::StyleSheetInternal*, WebCore::MediaQueryEvaluator const&amp;, WebCore::StyleResolver*, WebCore::ContainerNode const*)
7   0x107e1ec05 WebCore::StyleResolver::appendAuthorStylesheets(unsigned int, WTF::Vector&lt;WTF::RefPtr&lt;WebCore::StyleSheet&gt;, 0ul&gt; const&amp;)
8   0x107e1d449 WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
9   0x107e1ca5c WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
10  0x106b3dd0c WebCore::Document::createStyleResolver()
11  0x1068cde2b WebCore::Document::styleResolver()
12  0x106d4363a WebCore::Element::styleForRenderer()
13  0x106d438af WebCore::Element::recalcStyle(WebCore::Node::StyleChange)
14  0x106b3be32 WebCore::Document::recalcStyle(WebCore::Node::StyleChange)
15  0x106b3c963 WebCore::Document::updateStyleIfNeeded()
16  0x106b3cb33 WebCore::Document::updateLayout()
17  0x106b3ccd5 WebCore::Document::updateLayoutIgnorePendingStylesheets()
18  0x1069bde50 WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue(WebCore::CSSPropertyID, WebCore::EUpdateLayout) const
19  0x1069bdda7 WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue(WebCore::CSSPropertyID) const
20  0x1069d6092 WebCore::CSSComputedStyleDeclaration::getPropertyCSSValueInternal(WebCore::CSSPropertyID)
21  0x1072995d2 _ZN7WebCoreL17cssPropertyGetterEPN3JSC9ExecStateEPNS_21JSCSSStyleDeclarationEj
22  0x107299356 _ZN7WebCoreL25cssPropertyGetterCallbackEPN3JSC9ExecStateENS0_7JSValueEj
23  0x105b2500a JSC::PropertySlot::getValue(JSC::ExecState*, JSC::Identifier const&amp;) const
24  0x105b359ad JSC::JSValue::get(JSC::ExecState*, JSC::Identifier const&amp;, JSC::PropertySlot&amp;) const
25  0x105b358c5 JSC::JSValue::get(JSC::ExecState*, JSC::Identifier const&amp;) const
26  0x105ecfe26 JSC::LLInt::getByVal(JSC::ExecState*, JSC::JSValue, JSC::JSValue)
27  0x105ecaab0 llint_slow_path_get_by_val
28  0x105ed2dce llint_op_get_by_val
29  0x105cc4ba9 JSC::JITCode::execute(JSC::RegisterFile*, JSC::ExecState*, JSC::JSGlobalData*)
30  0x105cc0b2e JSC::Interpreter::executeCall(JSC::ExecState*, JSC::JSObject*, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)
31  0x105b8931b JSC::call(JSC::ExecState*, JSC::JSValue, JSC::CallType, JSC::CallData const&amp;, JSC::JSValue, JSC::ArgList const&amp;)

126 vectors, 164.22KB used of 2237.70KB, 2073.48KB wasted at:
1   0x107e4e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x107e3c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x107e2fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x107e2fdbb WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x107e1f331 _ZN7WebCoreL11makeRuleSetERKN3WTF6VectorINS_13StyleResolver11RuleFeatureELm0EEE
6   0x107e1ee48 WebCore::StyleResolver::collectFeatures()
7   0x107e1ec5f WebCore::StyleResolver::appendAuthorStylesheets(unsigned int, WTF::Vector&lt;WTF::RefPtr&lt;WebCore::StyleSheet&gt;, 0ul&gt; const&amp;)
8   0x107e1d449 WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
9   0x107e1ca5c WebCore::StyleResolver::StyleResolver(WebCore::Document*, bool)
10  0x106b3dd0c WebCore::Document::createStyleResolver()
11  0x1068cde2b WebCore::Document::styleResolver()
12  0x106d4363a WebCore::Element::styleForRenderer()
13  0x1078c32de WebCore::NodeRendererFactory::createRendererIfNeeded()
14  0x10789eec9 WebCore::Node::createRendererIfNeeded()
15  0x106d42e78 WebCore::Element::attach()
16  0x106f2ba1c _ZN7WebCoreL11executeTaskERNS_24HTMLConstructionSiteTaskE
17  0x106f2b89d WebCore::HTMLConstructionSite::executeQueuedTasks()
18  0x106f2bfa6 WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML(WebCore::AtomicHTMLToken&amp;)
19  0x107023062 WebCore::HTMLTreeBuilder::defaultForBeforeHTML()
20  0x10701d1c2 WebCore::HTMLTreeBuilder::processEndOfFile(WebCore::AtomicHTMLToken&amp;)
21  0x107018a18 WebCore::HTMLTreeBuilder::processToken(WebCore::AtomicHTMLToken&amp;)
22  0x107017adb WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken(WebCore::AtomicHTMLToken&amp;)
23  0x1070179ec WebCore::HTMLTreeBuilder::constructTreeFromToken(WebCore::HTMLToken&amp;)
24  0x106f4e1db WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode)
25  0x106f4dc0d WebCore::HTMLDocumentParser::pumpTokenizerIfPossible(WebCore::HTMLDocumentParser::SynchronousMode)
26  0x106f4da95 WebCore::HTMLDocumentParser::prepareToStopParsing()
27  0x106f4ee63 WebCore::HTMLDocumentParser::attemptToEnd()
28  0x106f4eeb8 WebCore::HTMLDocumentParser::finish()
29  0x106bac097 WebCore::DocumentWriter::end()
30  0x106e272cd WebCore::FrameLoader::init()
31  0x104ddf0fc WebCore::Frame::init()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623616</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-14 21:33:22 -0700</bug_when>
    <thetext>If we use fewer stack frames to amalgamate stacks, we see that JSC has some waste as well:

105272 extant vectors wasting 19.34MB 75.93% (used 6428218 bytes, capacity 26705401 bytes):

Most wasteful 20 stacks
13177 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x10344e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x10343c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x10342fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x10342fd63 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x103430400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)

10050 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x10344e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x10343c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x10342fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x10342fd06 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x103430400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)

1379 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x1011acae5 WTF::Vector&lt;JSC::ValueProfile, 0ul&gt;::Vector()
2   0x10119c795 WTF::Vector&lt;JSC::ValueProfile, 0ul&gt;::Vector()
3   0x101195868 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x10129e9f2 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x101297a88 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

6818 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x10116fa15 WTF::Vector&lt;JSC::Identifier, 0ul&gt;::Vector()
2   0x1013b9eb0 JSC::FunctionParameters::FunctionParameters(JSC::ParameterNode*)
3   0x1013b9e7d JSC::FunctionParameters::FunctionParameters(JSC::ParameterNode*)
4   0x1013bac29 JSC::FunctionParameters::create(JSC::ParameterNode*)
5   0x1013b9f54 JSC::FunctionBodyNode::finishParsing(JSC::SourceCode const&amp;, JSC::ParameterNode*, JSC::Identifier const&amp;)

1457 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x101179f25 WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;::Vector()
2   0x1011795f5 WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;::Vector()
3   0x101179594 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
4   0x101179435 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
5   0x1011792e9 JSC::CodeBlock::RareData::RareData()

1457 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x101179e15 WTF::Vector&lt;WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;*, 32ul&gt;::Vector()
2   0x101179615 WTF::Vector&lt;WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;*, 32ul&gt;::Vector()
3   0x1011795a6 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
4   0x101179435 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
5   0x1011792e9 JSC::CodeBlock::RareData::RareData()

1446 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x1011ac6f5 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x1011abef5 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1011abe86 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x10119c7d5 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x1011958a1 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

1446 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x1011ac6f5 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x1011abef5 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1011abe86 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x10119c7d5 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x10119588e JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

1446 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x1011ad185 WTF::Vector&lt;WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;*, 32ul&gt;::Vector()
2   0x1011ad105 WTF::Vector&lt;WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1011ad0b6 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
4   0x10119c645 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
5   0x101195771 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

1446 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x1011ac9d5 WTF::Vector&lt;WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x1011ac955 WTF::Vector&lt;WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1011ac906 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
4   0x10119c7b5 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
5   0x10119587b JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

1446 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x10117ea85 WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::Vector()
2   0x10117ea05 WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::Vector()
3   0x1011ad0a4 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
4   0x10119c645 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
5   0x101195771 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

3385 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x101405075 WTF::Vector&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, 0ul&gt;::Vector()
2   0x101404ff5 WTF::Vector&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, 0ul&gt;::Vector()
3   0x101404fc6 JSC::SourceProviderCacheItem::SourceProviderCacheItem(int, int)
4   0x101403be1 JSC::SourceProviderCacheItem::SourceProviderCacheItem(int, int)
5   0x10140ce93 bool JSC::Parser&lt;JSC::Lexer&lt;unsigned short&gt; &gt;::parseFunctionInfo&lt;(JSC::FunctionRequirements)0, false, JSC::SyntaxChecker&gt;(JSC::SyntaxChecker&amp;, JSC::Identifier const*&amp;, JSC::SyntaxChecker::FormalParameterList&amp;, JSC::SyntaxChecker::FunctionBody&amp;, int&amp;, int&amp;, int&amp;)

1379 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x1011acf15 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
2   0x10119c685 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
3   0x101195797 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x10129e9f2 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x101297a88 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

310 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x10344e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x10343c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x10342fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x10342ff1c WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x103430400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)

1457 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x10117a155 WTF::Vector&lt;JSC::LineInfo, 0ul&gt;::Vector()
2   0x1011793f5 WTF::Vector&lt;JSC::LineInfo, 0ul&gt;::Vector()
3   0x1011792c9 JSC::CodeBlock::RareData::RareData()
4   0x101175ba5 JSC::CodeBlock::RareData::RareData()
5   0x1011741e4 JSC::CodeBlock::createRareDataIfNecessary()

1457 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x10117a255 WTF::Vector&lt;JSC::ExpressionRangeInfo, 0ul&gt;::Vector()
2   0x1011793d5 WTF::Vector&lt;JSC::ExpressionRangeInfo, 0ul&gt;::Vector()
3   0x1011792b9 JSC::CodeBlock::RareData::RareData()
4   0x101175ba5 JSC::CodeBlock::RareData::RareData()
5   0x1011741e4 JSC::CodeBlock::createRareDataIfNecessary()

1446 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x101185ee5 WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;::Vector()
2   0x101185d05 WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;::Vector()
3   0x1011ac8f4 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
4   0x10119c7b5 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
5   0x10119587b JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

1379 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x1011ace35 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
2   0x10119c6d5 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
3   0x1011957bd JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x10129e9f2 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x101297a88 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

5512 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x103413da5 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
2   0x10340e195 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
3   0x1034086ac WebCore::StylePropertySet::StylePropertySet(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)
4   0x103408659 WebCore::StylePropertySet::StylePropertySet(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)
5   0x102071775 WebCore::StylePropertySet::create(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)

1379 vectors, 618.36KB used of 8247.54KB, 7629.18KB wasted at:
1   0x1011a69e5 WTF::Vector&lt;JSC::WriteBarrier&lt;JSC::Unknown&gt;, 0ul&gt;::Vector()
2   0x10119dbd5 WTF::Vector&lt;JSC::WriteBarrier&lt;JSC::Unknown&gt;, 0ul&gt;::Vector()
3   0x1011958f7 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x10129e9f2 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x101297a88 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623621</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-14 21:36:34 -0700</bug_when>
    <thetext>In most cases we can get rid of this by reserving capacity appropriately for the common cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623622</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-14 21:37:20 -0700</bug_when>
    <thetext>Why do these all say: 618.36KB used of 8247.54KB, 7629.18KB wasted

I think maybe the math is wrong?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623628</commentid>
    <comment_count>15</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-14 21:42:26 -0700</bug_when>
    <thetext>Sorry those numbers are wrong, yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623631</commentid>
    <comment_count>16</comment_count>
      <attachid>141851</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-14 21:45:02 -0700</bug_when>
    <thetext>Created attachment 141851
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623632</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-14 21:49:36 -0700</bug_when>
    <thetext>Fixed numbers:


131116 extant vectors wasting 16.07MB 63.23% (used 9795761 bytes, capacity 26641203 bytes):

Most wasteful 20 stacks
7150 vectors, 389.80KB used of 4488.95KB, 4099.14KB wasted at:
1   0x108c4e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x108c3c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x108c2fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x108c2fd63 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x108c30400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)

5324 vectors, 227.66KB used of 3330.98KB, 3103.32KB wasted at:
1   0x108c4e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x108c3c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x108c2fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x108c2fd06 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x108c30400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)

1996 vectors, 134.75KB used of 998.00KB, 863.25KB wasted at:
1   0x1069acb15 WTF::Vector&lt;JSC::ValueProfile, 0ul&gt;::Vector()
2   0x10699c7c5 WTF::Vector&lt;JSC::ValueProfile, 0ul&gt;::Vector()
3   0x106995898 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a9ea22 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a97ab8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2232 vectors, 0.31KB used of 558.00KB, 557.69KB wasted at:
1   0x106979f55 WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;::Vector()
2   0x106979625 WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;::Vector()
3   0x1069795c4 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
4   0x106979465 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
5   0x106979319 JSC::CodeBlock::RareData::RareData()

2232 vectors, 17.44KB used of 558.00KB, 540.56KB wasted at:
1   0x106979e45 WTF::Vector&lt;WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;*, 32ul&gt;::Vector()
2   0x106979645 WTF::Vector&lt;WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;*, 32ul&gt;::Vector()
3   0x1069795d6 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
4   0x106979465 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
5   0x106979319 JSC::CodeBlock::RareData::RareData()

2200 vectors, 17.20KB used of 550.00KB, 532.80KB wasted at:
1   0x1069ac725 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x1069abf25 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1069abeb6 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x10699c805 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x1069958d1 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2200 vectors, 20.92KB used of 550.00KB, 529.08KB wasted at:
1   0x1069ad1b5 WTF::Vector&lt;WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;*, 32ul&gt;::Vector()
2   0x1069ad135 WTF::Vector&lt;WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1069ad0e6 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
4   0x10699c675 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
5   0x1069957a1 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2200 vectors, 21.14KB used of 550.00KB, 528.86KB wasted at:
1   0x1069ac725 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x1069abf25 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1069abeb6 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x10699c805 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x1069958be JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2200 vectors, 43.21KB used of 550.47KB, 507.26KB wasted at:
1   0x1069aca05 WTF::Vector&lt;WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x1069ac985 WTF::Vector&lt;WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1069ac936 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
4   0x10699c7e5 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
5   0x1069958ab JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

6369 vectors, 60.39KB used of 546.38KB, 485.98KB wasted at:
1   0x10696fa45 WTF::Vector&lt;JSC::Identifier, 0ul&gt;::Vector()
2   0x106bb9ee0 JSC::FunctionParameters::FunctionParameters(JSC::ParameterNode*)
3   0x106bb9ead JSC::FunctionParameters::FunctionParameters(JSC::ParameterNode*)
4   0x106bbac59 JSC::FunctionParameters::create(JSC::ParameterNode*)
5   0x106bb9f84 JSC::FunctionBodyNode::finishParsing(JSC::SourceCode const&amp;, JSC::ParameterNode*, JSC::Identifier const&amp;)

2200 vectors, 240.43KB used of 687.50KB, 447.07KB wasted at:
1   0x10697eab5 WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::Vector()
2   0x10697ea35 WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::Vector()
3   0x1069ad0d4 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
4   0x10699c675 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
5   0x1069957a1 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

4567 vectors, 98.24KB used of 496.27KB, 398.02KB wasted at:
1   0x106c050a5 WTF::Vector&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, 0ul&gt;::Vector()
2   0x106c05025 WTF::Vector&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, 0ul&gt;::Vector()
3   0x106c04ff6 JSC::SourceProviderCacheItem::SourceProviderCacheItem(int, int)
4   0x106c03c11 JSC::SourceProviderCacheItem::SourceProviderCacheItem(int, int)
5   0x106c0cec3 bool JSC::Parser&lt;JSC::Lexer&lt;unsigned short&gt; &gt;::parseFunctionInfo&lt;(JSC::FunctionRequirements)0, false, JSC::SyntaxChecker&gt;(JSC::SyntaxChecker&amp;, JSC::Identifier const*&amp;, JSC::SyntaxChecker::FormalParameterList&amp;, JSC::SyntaxChecker::FunctionBody&amp;, int&amp;, int&amp;, int&amp;)

1996 vectors, 323.72KB used of 665.81KB, 342.09KB wasted at:
1   0x1069acf45 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
2   0x10699c6b5 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
3   0x1069957c7 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a9ea22 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a97ab8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

1996 vectors, 102.31KB used of 372.38KB, 270.06KB wasted at:
1   0x1069ace65 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
2   0x10699c705 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
3   0x1069957ed JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a9ea22 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a97ab8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2232 vectors, 66.41KB used of 310.97KB, 244.56KB wasted at:
1   0x10697a185 WTF::Vector&lt;JSC::LineInfo, 0ul&gt;::Vector()
2   0x106979425 WTF::Vector&lt;JSC::LineInfo, 0ul&gt;::Vector()
3   0x1069792f9 JSC::CodeBlock::RareData::RareData()
4   0x106975bd5 JSC::CodeBlock::RareData::RareData()
5   0x106974214 JSC::CodeBlock::createRareDataIfNecessary()

1996 vectors, 57.59KB used of 276.23KB, 218.64KB wasted at:
1   0x1069acd65 WTF::Vector&lt;JSC::MethodCallLinkInfo, 0ul&gt;::Vector()
2   0x10699c725 WTF::Vector&lt;JSC::MethodCallLinkInfo, 0ul&gt;::Vector()
3   0x106995800 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a9ea22 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a97ab8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2232 vectors, 486.60KB used of 692.79KB, 206.19KB wasted at:
1   0x10697a285 WTF::Vector&lt;JSC::ExpressionRangeInfo, 0ul&gt;::Vector()
2   0x106979405 WTF::Vector&lt;JSC::ExpressionRangeInfo, 0ul&gt;::Vector()
3   0x1069792e9 JSC::CodeBlock::RareData::RareData()
4   0x106975bd5 JSC::CodeBlock::RareData::RareData()
5   0x106974214 JSC::CodeBlock::createRareDataIfNecessary()

9271 vectors, 698.42KB used of 901.81KB, 203.39KB wasted at:
1   0x108c13da5 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
2   0x108c0e195 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
3   0x108c086ac WebCore::StylePropertySet::StylePropertySet(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)
4   0x108c08659 WebCore::StylePropertySet::StylePropertySet(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)
5   0x107871775 WebCore::StylePropertySet::create(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)

2200 vectors, 380.47KB used of 550.00KB, 169.53KB wasted at:
1   0x106985f15 WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;::Vector()
2   0x106985d35 WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;::Vector()
3   0x1069ac924 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
4   0x10699c7e5 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
5   0x1069958ab JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

314 vectors, 99.38KB used of 266.05KB, 166.68KB wasted at:
1   0x108c4e855 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x108c3c115 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x108c2fba1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x108c2ff1c WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x108c30400 WebCore::RuleSet::addStyleRule(WebCore::StyleRule*, bool, bool, bool)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624103</commentid>
    <comment_count>18</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-15 08:16:47 -0700</bug_when>
    <thetext>My data collection ignored the effects of shrinkToFit, so the above results are suspect. I&apos;ll collect some new data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624132</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-15 08:39:41 -0700</bug_when>
    <thetext>After fixing shrinkToFit the wastage is not as bad as I thought.



22148 extant vectors wasting 0.64MB 20.19% (used 2653873 bytes, capacity 3325039 bytes):

Most wasteful 20 stacks
10078 vectors, 747.23KB used of 974.86KB, 227.62KB wasted at:
1   0x10dcb86e5 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
2   0x10dcb2ad5 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
3   0x10dcacfec WebCore::StylePropertySet::StylePropertySet(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)
4   0x10dcacf99 WebCore::StylePropertySet::StylePropertySet(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)
5   0x10c914a75 WebCore::StylePropertySet::create(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)

332 vectors, 5.55KB used of 41.50KB, 35.95KB wasted at:
1   0x10c960e75 WTF::Vector&lt;WTF::RefPtr&lt;WebCore::CSSValue&gt;, 0ul&gt;::Vector()
2   0x10c960115 WTF::Vector&lt;WTF::RefPtr&lt;WebCore::CSSValue&gt;, 0ul&gt;::Vector()
3   0x10c95f5c1 WebCore::CSSValueList::CSSValueList(WebCore::CSSValue::ValueListSeparator)
4   0x10c95f56b WebCore::CSSValueList::CSSValueList(WebCore::CSSValue::ValueListSeparator)
5   0x10c87a2bc WebCore::CSSValueList::createCommaSeparated()

32 vectors, 25.50KB used of 47.62KB, 22.12KB wasted at:
1   0x10ba4f745 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
2   0x10ba3eaf5 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
3   0x10ba37c07 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x10bb41462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x10bb3a4f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

148 vectors, 1.73KB used of 23.62KB, 21.89KB wasted at:
1   0x10c74559a WTF::Vector&lt;WebCore::FrameData, 0ul&gt;::Vector(unsigned long)
2   0x10c74450d WTF::Vector&lt;WebCore::FrameData, 0ul&gt;::Vector(unsigned long)
3   0x10c742619 WebCore::BitmapImage::BitmapImage(WebCore::ImageObserver*)
4   0x10c74254d WebCore::BitmapImage::BitmapImage(WebCore::ImageObserver*)
5   0x10c770059 WebCore::BitmapImage::create(WebCore::ImageObserver*)

15 vectors, 1.31KB used of 21.00KB, 19.69KB wasted at:
1   0x10bb021b5 WTF::Vector&lt;JSC::DFG::OSREntryData, 0ul&gt;::Vector()
2   0x10bb01c45 WTF::Vector&lt;JSC::DFG::OSREntryData, 0ul&gt;::Vector()
3   0x10bb01bc9 JSC::CodeBlock::DFGData::DFGData()
4   0x10bb01b65 JSC::CodeBlock::DFGData::DFGData()
5   0x10bb00d76 JSC::CodeBlock::createDFGDataIfNecessary()

32 vectors, 5.25KB used of 23.00KB, 17.75KB wasted at:
1   0x10ba4f665 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
2   0x10ba3eb45 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
3   0x10ba37c2d JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x10bb41462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x10bb3a4f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

32 vectors, 3.94KB used of 20.12KB, 16.19KB wasted at:
1   0x10ba4f565 WTF::Vector&lt;JSC::MethodCallLinkInfo, 0ul&gt;::Vector()
2   0x10ba3eb65 WTF::Vector&lt;JSC::MethodCallLinkInfo, 0ul&gt;::Vector()
3   0x10ba37c40 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x10bb41462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x10bb3a4f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

27 vectors, 1.64KB used of 16.88KB, 15.23KB wasted at:
1   0x10dcf3255 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x10dce0a55 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x10dcd44e1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x10dcd46fb WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x10dcc3c71 _ZN7WebCoreL11makeRuleSetERKN3WTF6VectorINS_13StyleResolver11RuleFeatureELm0EEE

15 vectors, 5.25KB used of 20.06KB, 14.81KB wasted at:
1   0x10ba4f745 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
2   0x10ba3eaf5 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
3   0x10ba37490 JSC::CodeBlock::CodeBlock(JSC::CodeBlock::CopyParsedBlockTag, JSC::CodeBlock&amp;, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*)
4   0x10bb41892 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::CodeBlock::CopyParsedBlockTag, JSC::FunctionCodeBlock&amp;)
5   0x10bb3a0b3 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::CodeBlock::CopyParsedBlockTag, JSC::FunctionCodeBlock&amp;)

32 vectors, 2.19KB used of 16.00KB, 13.81KB wasted at:
1   0x10ba4f315 WTF::Vector&lt;JSC::ValueProfile, 0ul&gt;::Vector()
2   0x10ba3ec05 WTF::Vector&lt;JSC::ValueProfile, 0ul&gt;::Vector()
3   0x10ba37cd8 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x10bb41462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x10bb3a4f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

295 vectors, 7.12KB used of 20.03KB, 12.91KB wasted at:
1   0x10dcb86e5 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
2   0x10dcb2ad5 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
3   0x10dcace74 WebCore::StylePropertySet::StylePropertySet(WebCore::CSSParserMode)
4   0x10dcace2b WebCore::StylePropertySet::StylePropertySet(WebCore::CSSParserMode)
5   0x10c6e3627 WebCore::StylePropertySet::create(WebCore::CSSParserMode)

47 vectors, 0.38KB used of 11.75KB, 11.37KB wasted at:
1   0x10ba1c1c5 WTF::Vector&lt;WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;*, 32ul&gt;::Vector()
2   0x10ba1b9c5 WTF::Vector&lt;WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;*, 32ul&gt;::Vector()
3   0x10ba1b956 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
4   0x10ba1b7e5 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
5   0x10ba1b699 JSC::CodeBlock::RareData::RareData()

47 vectors, 0.62KB used of 11.75KB, 11.12KB wasted at:
1   0x10ba1c2d5 WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;::Vector()
2   0x10ba1b9a5 WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;::Vector()
3   0x10ba1b944 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
4   0x10ba1b7e5 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
5   0x10ba1b699 JSC::CodeBlock::RareData::RareData()

15 vectors, 1.75KB used of 11.00KB, 9.25KB wasted at:
1   0x10ba4f665 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
2   0x10ba3eb45 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
3   0x10ba374c2 JSC::CodeBlock::CodeBlock(JSC::CodeBlock::CopyParsedBlockTag, JSC::CodeBlock&amp;, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*)
4   0x10bb41892 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::CodeBlock::CopyParsedBlockTag, JSC::FunctionCodeBlock&amp;)
5   0x10bb3a0b3 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::CodeBlock::CopyParsedBlockTag, JSC::FunctionCodeBlock&amp;)

3 vectors, 24.22KB used of 32.94KB, 8.72KB wasted at:
1   0x10ca364b5 WTF::Vector&lt;WebCore::ResourceResponse, 0ul&gt;::Vector()
2   0x10ca2fed5 WTF::Vector&lt;WebCore::ResourceResponse, 0ul&gt;::Vector()
3   0x10ca2bd5f WebCore::DocumentLoader::DocumentLoader(WebCore::ResourceRequest const&amp;, WebCore::SubstituteData const&amp;)
4   0x10ca2bbc5 WebCore::DocumentLoader::DocumentLoader(WebCore::ResourceRequest const&amp;, WebCore::SubstituteData const&amp;)
5   0x10ac8ba71 WebCore::DocumentLoader::create(WebCore::ResourceRequest const&amp;, WebCore::SubstituteData const&amp;)

160 vectors, 1152.43KB used of 1160.83KB, 8.40KB wasted at:
1   0x10c6b0f85 WTF::Vector&lt;char, 0ul&gt;::Vector()
2   0x10c6ad965 WTF::Vector&lt;char, 0ul&gt;::Vector()
3   0x10dbe376d WebCore::SharedBuffer::SharedBuffer(char const*, int)
4   0x10dbe3723 WebCore::SharedBuffer::SharedBuffer(char const*, int)
5   0x10ccdc93f WebCore::SharedBuffer::create(char const*, int)

71 vectors, 0.55KB used of 8.88KB, 8.32KB wasted at:
1   0x10c960e75 WTF::Vector&lt;WTF::RefPtr&lt;WebCore::CSSValue&gt;, 0ul&gt;::Vector()
2   0x10c960115 WTF::Vector&lt;WTF::RefPtr&lt;WebCore::CSSValue&gt;, 0ul&gt;::Vector()
3   0x10c95f5c1 WebCore::CSSValueList::CSSValueList(WebCore::CSSValue::ValueListSeparator)
4   0x10c95f56b WebCore::CSSValueList::CSSValueList(WebCore::CSSValue::ValueListSeparator)
5   0x10c85970c WebCore::CSSValueList::createSpaceSeparated()

14 vectors, 0.62KB used of 8.75KB, 8.12KB wasted at:
1   0x10dcf3255 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x10dce0a55 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x10dcd44e1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x10dcd46a3 WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x10dcc3c71 _ZN7WebCoreL11makeRuleSetERKN3WTF6VectorINS_13StyleResolver11RuleFeatureELm0EEE

449 vectors, 6.78KB used of 14.59KB, 7.81KB wasted at:
1   0x10dc0b025 WTF::Vector&lt;WTF::AtomicString, 4ul&gt;::Vector()
2   0x10dc0abe5 WTF::Vector&lt;WTF::AtomicString, 4ul&gt;::Vector()
3   0x10dc0a652 WebCore::SpaceSplitStringData::SpaceSplitStringData(WTF::AtomicString const&amp;)
4   0x10dc0a56d WebCore::SpaceSplitStringData::SpaceSplitStringData(WTF::AtomicString const&amp;)
5   0x10dc0a3ff WebCore::SpaceSplitStringData::create(WTF::AtomicString const&amp;)

32 vectors, 0.25KB used of 8.00KB, 7.75KB wasted at:
1   0x10ba4ef25 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x10ba4e725 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x10ba4e6b6 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x10ba3ec45 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x10ba37d11 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624139</commentid>
    <comment_count>20</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-15 08:43:09 -0700</bug_when>
    <thetext>Previous data was with JS disabled (but some noise from JS, presumably from Reader). Here&apos;s data with JS enabled:



143217 extant vectors wasting 8.19MB 43.88% (used 10984622 bytes, capacity 19571855 bytes):

Most wasteful 20 stacks
2400 vectors, 198.53KB used of 1200.00KB, 1001.47KB wasted at:
1   0x106976315 WTF::Vector&lt;JSC::ValueProfile, 0ul&gt;::Vector()
2   0x106965c05 WTF::Vector&lt;JSC::ValueProfile, 0ul&gt;::Vector()
3   0x10695ecd8 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a68462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a614f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2501 vectors, 0.12KB used of 625.25KB, 625.12KB wasted at:
1   0x1069432d5 WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;::Vector()
2   0x1069429a5 WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;::Vector()
3   0x106942944 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
4   0x1069427e5 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
5   0x106942699 JSC::CodeBlock::RareData::RareData()

2501 vectors, 19.54KB used of 625.25KB, 605.71KB wasted at:
1   0x1069431c5 WTF::Vector&lt;WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;*, 32ul&gt;::Vector()
2   0x1069429c5 WTF::Vector&lt;WTF::Vector&lt;JSC::InlineCallFrame, 4ul&gt;*, 32ul&gt;::Vector()
3   0x106942956 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
4   0x1069427e5 WTF::SegmentedVector&lt;JSC::InlineCallFrame, 4ul&gt;::SegmentedVector()
5   0x106942699 JSC::CodeBlock::RareData::RareData()

2467 vectors, 19.28KB used of 616.75KB, 597.47KB wasted at:
1   0x106975f25 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x106975725 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1069756b6 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x106965c45 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x10695ed11 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2467 vectors, 22.40KB used of 616.75KB, 594.35KB wasted at:
1   0x106975f25 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x106975725 WTF::Vector&lt;WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1069756b6 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x106965c45 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x10695ecfe JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2467 vectors, 24.67KB used of 616.75KB, 592.08KB wasted at:
1   0x1069769b5 WTF::Vector&lt;WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;*, 32ul&gt;::Vector()
2   0x106976935 WTF::Vector&lt;WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;*, 32ul&gt;::Vector()
3   0x1069768e6 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
4   0x106965ab5 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
5   0x10695ebe1 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2467 vectors, 50.30KB used of 618.45KB, 568.14KB wasted at:
1   0x106976205 WTF::Vector&lt;WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;*, 32ul&gt;::Vector()
2   0x106976185 WTF::Vector&lt;WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;*, 32ul&gt;::Vector()
3   0x106976136 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
4   0x106965c25 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
5   0x10695eceb JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

7256 vectors, 77.48KB used of 637.12KB, 559.65KB wasted at:
1   0x106938dc5 WTF::Vector&lt;JSC::Identifier, 0ul&gt;::Vector()
2   0x106b83aa0 JSC::FunctionParameters::FunctionParameters(JSC::ParameterNode*)
3   0x106b83a6d JSC::FunctionParameters::FunctionParameters(JSC::ParameterNode*)
4   0x106b84819 JSC::FunctionParameters::create(JSC::ParameterNode*)
5   0x106b83b44 JSC::FunctionBodyNode::finishParsing(JSC::SourceCode const&amp;, JSC::ParameterNode*, JSC::Identifier const&amp;)

2467 vectors, 286.45KB used of 770.94KB, 484.49KB wasted at:
1   0x106947ef5 WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::Vector()
2   0x106947e75 WTF::Vector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::Vector()
3   0x1069768d4 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
4   0x106965ab5 WTF::SegmentedVector&lt;JSC::LLIntCallLinkInfo, 8ul&gt;::SegmentedVector()
5   0x10695ebe1 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2400 vectors, 280.12KB used of 718.12KB, 438.00KB wasted at:
1   0x106976745 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
2   0x106965af5 WTF::Vector&lt;JSC::StructureStubInfo, 0ul&gt;::Vector()
3   0x10695ec07 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a68462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a614f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2400 vectors, 123.88KB used of 444.00KB, 320.12KB wasted at:
1   0x106976665 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
2   0x106965b45 WTF::Vector&lt;JSC::CallLinkInfo, 0ul&gt;::Vector()
3   0x10695ec2d JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a68462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a614f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

12122 vectors, 916.64KB used of 1192.89KB, 276.25KB wasted at:
1   0x108bdf6e5 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
2   0x108bd9ad5 WTF::Vector&lt;WebCore::CSSProperty, 4ul&gt;::Vector()
3   0x108bd3fec WebCore::StylePropertySet::StylePropertySet(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)
4   0x108bd3f99 WebCore::StylePropertySet::StylePropertySet(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)
5   0x10783ba75 WebCore::StylePropertySet::create(WebCore::CSSProperty const*, int, WebCore::CSSParserMode)

2400 vectors, 63.88KB used of 295.42KB, 231.55KB wasted at:
1   0x106976565 WTF::Vector&lt;JSC::MethodCallLinkInfo, 0ul&gt;::Vector()
2   0x106965b65 WTF::Vector&lt;JSC::MethodCallLinkInfo, 0ul&gt;::Vector()
3   0x10695ec40 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a68462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a614f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2467 vectors, 425.50KB used of 616.75KB, 191.25KB wasted at:
1   0x10694f355 WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;::Vector()
2   0x10694f175 WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;::Vector()
3   0x106976124 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
4   0x106965c25 WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::SegmentedVector()
5   0x10695eceb JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2467 vectors, 0.66KB used of 154.19KB, 153.52KB wasted at:
1   0x106976035 WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;::Vector()
2   0x106975705 WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;::Vector()
3   0x1069756a4 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x106965c45 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x10695ed11 JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

2467 vectors, 15.26KB used of 154.19KB, 138.93KB wasted at:
1   0x106976035 WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;::Vector()
2   0x106975705 WTF::Vector&lt;JSC::RareCaseProfile, 8ul&gt;::Vector()
3   0x1069756a4 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
4   0x106965c45 WTF::SegmentedVector&lt;JSC::RareCaseProfile, 8ul&gt;::SegmentedVector()
5   0x10695ecfe JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

3972 vectors, 860.75KB used of 993.00KB, 132.25KB wasted at:
1   0x10694f355 WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;::Vector()
2   0x10694f175 WTF::Vector&lt;JSC::ValueProfile, 8ul&gt;::Vector()
3   0x10694ed8f void WTF::SegmentedVector&lt;JSC::ValueProfile, 8ul&gt;::append&lt;JSC::ValueProfile&gt;(JSC::ValueProfile const&amp;)
4   0x10691b060 JSC::CodeBlock::addValueProfile(int)
5   0x10690d687 JSC::BytecodeGenerator::emitProfiledOpcode(JSC::OpcodeID)

2400 vectors, 111.07KB used of 199.08KB, 88.00KB wasted at:
1   0x106978e05 WTF::Vector&lt;unsigned int, 0ul&gt;::Vector()
2   0x106965a95 WTF::Vector&lt;unsigned int, 0ul&gt;::Vector()
3   0x10695ebbb JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a68462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a614f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)

117 vectors, 7.11KB used of 73.12KB, 66.02KB wasted at:
1   0x108c1a255 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
2   0x108c07a55 WTF::Vector&lt;WebCore::RuleData, 0ul&gt;::Vector()
3   0x108bfb4e1 WebCore::RuleSet::addToRuleSet(WTF::AtomicStringImpl*, WTF::HashMap&lt;WTF::AtomicStringImpl*, WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt;, WTF::PtrHash&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::AtomicStringImpl*&gt;, WTF::HashTraits&lt;WTF::OwnPtr&lt;WTF::Vector&lt;WebCore::RuleData, 0ul&gt; &gt; &gt; &gt;&amp;, WebCore::RuleData const&amp;)
4   0x108bfb6fb WebCore::RuleSet::addRule(WebCore::StyleRule*, WebCore::CSSSelector*, bool, bool, bool)
5   0x108beac71 _ZN7WebCoreL11makeRuleSetERKN3WTF6VectorINS_13StyleResolver11RuleFeatureELm0EEE

2400 vectors, 46.38KB used of 110.20KB, 63.82KB wasted at:
1   0x106978e05 WTF::Vector&lt;unsigned int, 0ul&gt;::Vector()
2   0x106965a95 WTF::Vector&lt;unsigned int, 0ul&gt;::Vector()
3   0x10695ed2e JSC::CodeBlock::CodeBlock(JSC::ScriptExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, WTF::HashMap&lt;WTF::RefPtr&lt;WTF::StringImpl&gt;, JSC::SymbolTableEntry, JSC::IdentifierRepHash, WTF::HashTraits&lt;WTF::RefPtr&lt;WTF::StringImpl&gt; &gt;, JSC::SymbolTableIndexHashTraits&gt;*, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
4   0x106a68462 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)
5   0x106a614f8 JSC::FunctionCodeBlock::FunctionCodeBlock(JSC::FunctionExecutable*, JSC::CodeType, JSC::JSGlobalObject*, WTF::PassRefPtr&lt;JSC::SourceProvider&gt;, unsigned int, bool, WTF::PassOwnPtr&lt;JSC::CodeBlock&gt;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624142</commentid>
    <comment_count>21</comment_count>
      <attachid>141981</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-05-15 08:45:41 -0700</bug_when>
    <thetext>Created attachment 141981
Patch (fixes shrinkToFit)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701103</commentid>
    <comment_count>22</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-08-21 14:02:22 -0700</bug_when>
    <thetext>Vector::shrinkToFit always allocates a new buffer and copies the elements over. Is there any reason we are not using realloc?

What I can think is: if realloc anyway allocates a new address, the memcpy it does is unnecessary because anyway the copy ctor will be called by Vector.

However when shrinking memory, realloc usually keeps the same address (not guaranteed though). Also we can check VectorTraits and in the case memcpy is what we want, we don&apos;t have to do it again.

Thoughts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701126</commentid>
    <comment_count>23</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-08-21 14:25:28 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Vector::shrinkToFit always allocates a new buffer and copies the elements over. Is there any reason we are not using realloc?

One reason is that if the element class for the Vector has a non-trivial copy constructor, then realloc will not copy the elements correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701152</commentid>
    <comment_count>24</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-08-21 14:56:16 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Vector::shrinkToFit always allocates a new buffer and copies the elements over. Is there any reason we are not using realloc?
&gt; 
&gt; One reason is that if the element class for the Vector has a non-trivial copy constructor, then realloc will not copy the elements correctly.

But we can call the copy ctor again. Yeah it wastes cpu time on the extra memcpy. But if we can assume (on some ports) that, in most cases, a shrink doesn&apos;t relocate the memory, then it can still be perf boost</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701186</commentid>
    <comment_count>25</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-08-21 15:29:38 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #23)
&gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; Vector::shrinkToFit always allocates a new buffer and copies the elements over. Is there any reason we are not using realloc?
&gt; &gt; 
&gt; &gt; One reason is that if the element class for the Vector has a non-trivial copy constructor, then realloc will not copy the elements correctly.
&gt; 
&gt; But we can call the copy ctor again.

That doesn’t solve the problem. Since realloc both allocates the new memory and deallocates the old, it’s too late to call the copy constructor. We still have the old binary data in the new location, but that’s not good enough. There’s no guarantee that the copy constructor can work if the argument passed is the same as the this pointer, nor generally a guarantee that it’s OK to call any function, copy constructor included, on an object that was binary copied.

We may be able to make a better shrinkToFit with realloc for all the important cases; but this technical obstacle does get in the way of the general case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>701886</commentid>
    <comment_count>26</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2012-08-22 07:32:51 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (In reply to comment #23)
&gt; &gt; &gt; (In reply to comment #22)
&gt; &gt; &gt; &gt; Vector::shrinkToFit always allocates a new buffer and copies the elements over. Is there any reason we are not using realloc?
&gt; &gt; &gt; 
&gt; &gt; &gt; One reason is that if the element class for the Vector has a non-trivial copy constructor, then realloc will not copy the elements correctly.
&gt; &gt; 
&gt; &gt; But we can call the copy ctor again.
&gt; 
&gt; That doesn’t solve the problem. Since realloc both allocates the new memory and deallocates the old, it’s too late to call the copy constructor. We still have the old binary data in the new location, but that’s not good enough. 

Ha... I forgot this.

&gt; 
&gt; We may be able to make a better shrinkToFit with realloc for all the important cases; but this technical obstacle does get in the way of the general case.

We can use realloc only when canCopyWithMemcpy is true, or use a new trait. Also, how about using OSAllocator/mmap for large vectors?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771680</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-11-20 02:11:12 -0800</bug_when>
    <thetext>This data is very interesting.  Thank you for collecting it, Simon.  It appears this effort has paused for the while?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774665</commentid>
    <comment_count>28</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-11-23 11:34:28 -0800</bug_when>
    <thetext>This was a one-off investigation. I don&apos;t have time to continue it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1896092</commentid>
    <comment_count>29</comment_count>
    <who name="Ahmad Saleem">ahmad.saleem792</who>
    <bug_when>2022-09-03 14:56:01 -0700</bug_when>
    <thetext>@simon - Is this needed anymore or we can close this as &quot;RESOLVED LATER&quot; so if needed, can be looked in future? Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1896608</commentid>
    <comment_count>30</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2022-09-06 17:16:57 -0700</bug_when>
    <thetext>That sounds fine. The data is 10 years old at this point.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141549</attachid>
            <date>2012-05-11 20:45:11 -0700</date>
            <delta_ts>2012-05-14 21:44:49 -0700</delta_ts>
            <desc>Patch to log vector stats</desc>
            <filename>vector-stats.patch</filename>
            <type>text/plain</type>
            <size>13397</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4NzY4NTgKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuY3BwCkBAIC0wLDAgKzEsMTAw
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkF0b21pY3MuaCIKKyNp
bmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8
YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1hdGguaD4KKwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKK25h
bWVzcGFjZSBXVEYgeworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKworc3RhdGljIE11dGV4JiB2
ZWN0b3JTdGF0c011dGV4KCkKK3sKKyAgICBpbml0aWFsaXplVGhyZWFkaW5nKCk7IC8vIGljawor
ICAgIEF0b21pY2FsbHlJbml0aWFsaXplZFN0YXRpYyhNdXRleCYsIG11dGV4ID0gKm5ldyBNdXRl
eCk7CisgICAgcmV0dXJuIG11dGV4OworfQorCitzdGF0aWMgaW50IGJ1Y2tldEZvclNpemUoaW50
IGNvdW50LCBpbnQgbnVtQnVja2V0cykKK3sKKyAgICByZXR1cm4gbWluKGNvdW50LCBudW1CdWNr
ZXRzIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgZnVsbG5lc3NCdWNrZXQoaW50IHNpemUsIGludCBj
YXBhY2l0eSkKK3sKKyAgICBpZiAoIWNhcGFjaXR5KQorICAgICAgICByZXR1cm4gMDsKKworICAg
IEFTU0VSVChzaXplIDw9IGNhcGFjaXR5KTsKKyAgICByZXR1cm4gY2VpbCgxMDAuMCAqICgoZG91
YmxlKShzaXplKSAvIGNhcGFjaXR5KSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50QnVja2V0cyhp
bnQgYnVja2V0c1tdLCBpbnQgbnVtQnVja2V0cykKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bUJ1Y2tldHM7ICsraSkKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIlM2QgJThkXG4iLCBp
LCBidWNrZXRzW2ldKTsKK30KKwordm9pZCBWZWN0b3JTdGF0czo6cmVjb3JkVmVjdG9yU2l6ZShp
bnQgbWF4Q2FwYWNpdHksIGludCBtYXhTaXplLCBzaXplX3QgdmFsdWVTaXplKQoreworICAgIGNv
bnN0IGludCBudW1TaXplQnVja2V0cyA9IDUwOworICAgIHN0YXRpYyBpbnQgc2l6ZUJ1Y2tldHNb
bnVtU2l6ZUJ1Y2tldHNdOworCisgICAgY29uc3QgaW50IG51bUZ1bGxuZXNzQnVja2V0cyA9IDEw
MTsKKyAgICBzdGF0aWMgaW50IGZ1bGxuZXNzQnVja2V0c1tudW1GdWxsbmVzc0J1Y2tldHNdOwor
ICAgIAorICAgIHN0YXRpYyBpbnQgY2FsbENvdW50OworCisgICAgaWYgKG1heENhcGFjaXR5KSB7
CisgICAgICAgIGF0b21pY0luY3JlbWVudCgmc2l6ZUJ1Y2tldHNbYnVja2V0Rm9yU2l6ZShtYXhT
aXplLCBudW1TaXplQnVja2V0cyldKTsKKyAgICAgICAgYXRvbWljSW5jcmVtZW50KCZmdWxsbmVz
c0J1Y2tldHNbZnVsbG5lc3NCdWNrZXQobWF4U2l6ZSwgbWF4Q2FwYWNpdHkpXSk7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBsb25nIGxvbmcgdG90YWxVc2VkOworICAgIHN0YXRpYyBsb25nIGxv
bmcgdG90YWxDYXBhY2l0eTsKKworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayh2ZWN0
b3JTdGF0c011dGV4KCkpOworICAgIAorICAgICAgICBpZiAobWF4Q2FwYWNpdHkpIHsKKyAgICAg
ICAgICAgIHRvdGFsVXNlZCArPSAobWF4U2l6ZSAqIHZhbHVlU2l6ZSk7CisgICAgICAgICAgICB0
b3RhbENhcGFjaXR5ICs9IChtYXhDYXBhY2l0eSAqIHZhbHVlU2l6ZSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjb25zdCBpbnQgcHJpbnRGcmVxdWVuY3kgPSA1MDA7CisgICAgaWYgKCEoKytj
YWxsQ291bnQgJSBwcmludEZyZXF1ZW5jeSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICJc
blNpemUgRnJlcXVlbmN5XG4iKTsKKyAgICAgICAgcHJpbnRCdWNrZXRzKHNpemVCdWNrZXRzLCBu
dW1TaXplQnVja2V0cyk7CisKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICJcbkZ1bGwlJSBGcmVx
dWVuY3lcbiIpOworICAgICAgICBwcmludEJ1Y2tldHMoZnVsbG5lc3NCdWNrZXRzLCBudW1GdWxs
bmVzc0J1Y2tldHMpOworCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiVmVjdG9yOiAlLjJmS0Ig
dXNlZCBvZiAlLjJmS0IgKCUuMmYlJSlcbiIsIHN0YXRpY19jYXN0PGRvdWJsZT4odG90YWxVc2Vk
KSAvIDEwMjQsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxkb3VibGU+KHRvdGFsQ2FwYWNpdHkp
IC8gMTAyNCwgMTAwLjAgKiBzdGF0aWNfY2FzdDxkb3VibGU+KHRvdGFsVXNlZCkgLyB0b3RhbENh
cGFjaXR5KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvLyBEVU1QX1ZFQ1RPUl9TVEFUUworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYjU1ZGRkMi4uMTQ5OWY0
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03LDYgKzcs
NyBAQAogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJ
CTBGODI1QUJFMTU1RTAxODYwMDgxMENFOSAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjVBQkQxNTVFMDE4NjAwODEwQ0U5IC8q
IFZlY3Rvci5jcHAgKi87IH07CiAJCUE4NzZEQkQ4MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9y
bS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NkRC
RDcxNTE4MTZFNTAwREFEQjk1IC8qIFBsYXRmb3JtLmggKi87IH07CiAJCUE4QTQ3MzdGMTUxQTgy
NUIwMDQxMjNGRiAvKiBBbGlnbm1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4QTQ3MjU0MTUxQTgyNUEwMDQxMjNGRiAvKiBBbGlnbm1lbnQuaCAq
LzsgfTsKIAkJQThBNDczODAxNTFBODI1QjAwNDEyM0ZGIC8qIEFsd2F5c0lubGluZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyNTUxNTFBODI1
QTAwNDEyM0ZGIC8qIEFsd2F5c0lubGluZS5oICovOyB9OwpAQCAtMjQwLDYgKzI0MSw3IEBACiAv
KiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5j
ZSBzZWN0aW9uICovCisJCTBGODI1QUJEMTU1RTAxODYwMDgxMENFOSAvKiBWZWN0b3IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVjdG9yLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQyNDdCNjIxNDY4OUI4NjAwRTc4Qjc2IC8qIGxpYldURi5h
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZl
LmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJlZSA9IEJV
SUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJNUQyNDdCNkUxNDY4OUM0NzAwRTc4Qjc2IC8qIEJhc2Uu
eGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNUQyNDdCNkYxNDY4OUM0NzAwRTc4Qjc2IC8qIENvbXBpbGVyVmVyc2lvbi54
Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBDb21waWxlclZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MDAsNiArNzAyLDcgQEAKIAkJCQlBOEE0NzM1RDE1MUE4
MjVCMDA0MTIzRkYgLyogVW51c2VkUGFyYW0uaCAqLywKIAkJCQlBOEE0NzM1RTE1MUE4MjVCMDA0
MTIzRkYgLyogdXJsICovLAogCQkJCUE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNGRiAvKiBWYWx1ZUNo
ZWNrLmggKi8sCisJCQkJMEY4MjVBQkQxNTVFMDE4NjAwODEwQ0U5IC8qIFZlY3Rvci5jcHAgKi8s
CiAJCQkJQThBNDczNzAxNTFBODI1QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJCUE4QTQ3
MzcxMTUxQTgyNUIwMDQxMjNGRiAvKiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1
MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8sCkBAIC0xMTY4LDYgKzExNzEsNyBAQAogCQkJ
CUE4QTQ3NDc3MTUxQTgyNUIwMDQxMjNGRiAvKiBVUkxFc2NhcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQThBNDc0N0IxNTFBODI1QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE4QTQ3NDg2MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGODI1QUJFMTU1RTAxODYwMDgxMENFOSAvKiBWZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9TaXplTGltaXRz
LmNwcCBiL1NvdXJjZS9XVEYvd3RmL1NpemVMaW1pdHMuY3BwCmluZGV4IDk1ZDljMmIuLmU2NTNk
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1NpemVMaW1pdHMuY3BwCisrKyBiL1NvdXJj
ZS9XVEYvd3RmL1NpemVMaW1pdHMuY3BwCkBAIC02MCw2ICs2MCw3IEBAIENPTVBJTEVfQVNTRVJU
KHNpemVvZihQYXNzUmVmUHRyPFJlZkNvdW50ZWQ8aW50PiA+KSA9PSBzaXplb2YoaW50KiksIFBh
c3NSZWZQdHJfCiBDT01QSUxFX0FTU0VSVChzaXplb2YoUmVmQ291bnRlZDxpbnQ+KSA9PSBzaXpl
b2YoU2FtZVNpemVBc1JlZkNvdW50ZWQpLCBSZWZDb3VudGVkX3Nob3VsZF9zdGF5X3NtYWxsKTsK
IENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWZDb3VudGVkQ3VzdG9tQWxsb2NhdGVkPGludD4pID09
IHNpemVvZihTYW1lU2l6ZUFzUmVmQ291bnRlZCksIFJlZkNvdW50ZWRDdXN0b21BbGxvY2F0ZWRf
c2hvdWxkX3N0YXlfc21hbGwpOwogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlZlB0cjxSZWZDb3Vu
dGVkPGludD4gPikgPT0gc2l6ZW9mKGludCopLCBSZWZQdHJfc2hvdWxkX3N0YXlfc21hbGwpOwor
I2lmbmRlZiBEVU1QX1ZFQ1RPUl9TVEFUUwogQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFZlY3Rvcjxp
bnQ+KSA9PSAzICogc2l6ZW9mKGludCopLCBWZWN0b3Jfc2hvdWxkX3N0YXlfc21hbGwpOwotCisj
ZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5oIGIvU291cmNlL1dU
Ri93dGYvVmVjdG9yLmgKaW5kZXggMTllNmZmYi4uZDRkZjY4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvVmVjdG9yLmgKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTM3LDYg
KzM3LDE3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCisjZGVmaW5lIERVTVBfVkVDVE9SX1NUQVRT
IDEKKworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisKKyAgICBzdHJ1Y3QgVmVjdG9yU3RhdHMgewor
ICAgICAgICB+VmVjdG9yU3RhdHMoKTsKKyAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHJlY29yZFZlY3RvclNpemUoaW50IG1heENhcGFjaXR5LCBpbnQgbWF4U2l6ZSwgc2l6
ZV90IHZhbHVlU2l6ZSk7CisgICAgfTsKKworI2VuZGlmCisKICAgICB1c2luZyBzdGQ6Om1pbjsK
ICAgICB1c2luZyBzdGQ6Om1heDsKIApAQCAtNDkzLDE5ICs1MDQsMzIgQEAgbmFtZXNwYWNlIFdU
RiB7CiAKICAgICAgICAgVmVjdG9yKCkgCiAgICAgICAgICAgICA6IG1fc2l6ZSgwKQorI2lmIERV
TVBfVkVDVE9SX1NUQVRTCisgICAgICAgICAgICAsIG1fbWF4Q2FwYWNpdHkoMCkKKyAgICAgICAg
ICAgICwgbV9tYXhTaXplKDApCisjZW5kaWYKICAgICAgICAgewogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBleHBsaWNpdCBWZWN0b3Ioc2l6ZV90IHNpemUpIAogICAgICAgICAgICAgOiBt
X3NpemUoc2l6ZSkKICAgICAgICAgICAgICwgbV9idWZmZXIoc2l6ZSkKKyNpZiBEVU1QX1ZFQ1RP
Ul9TVEFUUworICAgICAgICAgICAgLCBtX21heFNpemUoc2l6ZSkKKyNlbmRpZgogICAgICAgICB7
CisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgICAgIG1fbWF4Q2FwYWNpdHkgPSBtX2J1
ZmZlci5jYXBhY2l0eSgpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAoYmVnaW4oKSkKICAgICAg
ICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShiZWdpbigpLCBlbmQoKSk7CiAg
ICAgICAgIH0KIAogICAgICAgICB+VmVjdG9yKCkKICAgICAgICAgeworI2lmIERVTVBfVkVDVE9S
X1NUQVRTCisgICAgICAgICAgICBWZWN0b3JTdGF0czo6cmVjb3JkVmVjdG9yU2l6ZShtX21heENh
cGFjaXR5LCBtX21heFNpemUsIHNpemVvZihWYWx1ZVR5cGUpKTsKKyNlbmRpZgogICAgICAgICAg
ICAgaWYgKG1fc2l6ZSkKICAgICAgICAgICAgICAgICBzaHJpbmsoMCk7CiAgICAgICAgIH0KQEAg
LTU5OSw3ICs2MjMsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIFZlY3RvcihzaXplX3Qg
c2l6ZSwgY29uc3QgVCYgdmFsKQogICAgICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAgICAg
ICAgICwgbV9idWZmZXIoc2l6ZSkKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICAgICAg
LCBtX21heFNpemUoc2l6ZSkKKyNlbmRpZgogICAgICAgICB7CisjaWYgRFVNUF9WRUNUT1JfU1RB
VFMKKyAgICAgICAgICAgIG1fbWF4Q2FwYWNpdHkgPSBtX2J1ZmZlci5jYXBhY2l0eSgpOworI2Vu
ZGlmCiAgICAgICAgICAgICBpZiAoYmVnaW4oKSkKICAgICAgICAgICAgICAgICBUeXBlT3BlcmF0
aW9uczo6dW5pbml0aWFsaXplZEZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7CiAgICAgICAgIH0K
QEAgLTY1MSw2ICs2ODEsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAKICAgICAgICAgc2l6ZV90IG1f
c2l6ZTsKICAgICAgICAgQnVmZmVyIG1fYnVmZmVyOworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisg
ICAgICAgIHNpemVfdCBtX21heENhcGFjaXR5OworICAgICAgICBzaXplX3QgbV9tYXhTaXplOwor
I2VuZGlmCiAgICAgfTsKIAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtNjg0LDYgKzcxOCwxMCBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgOiBtX3NpemUob3RoZXIuc2l6ZSgpKQogICAgICAgICAs
IG1fYnVmZmVyKG90aGVyLmNhcGFjaXR5KCkpCiAgICAgeworI2lmIERVTVBfVkVDVE9SX1NUQVRT
CisgICAgICAgIG1fbWF4Q2FwYWNpdHkgPSBtX2J1ZmZlci5jYXBhY2l0eSgpOworICAgICAgICBt
X21heFNpemUgPSBtX3NpemU7CisjZW5kaWYKICAgICAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAg
ICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3Ro
ZXIuZW5kKCksIGJlZ2luKCkpOwogICAgIH0KQEAgLTcyMyw2ICs3NjEsMTEgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5i
ZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwgZW5kKCkpOwogICAgICAgICBtX3NpemUgPSBv
dGhlci5zaXplKCk7CiAKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICBtX21heENhcGFj
aXR5ID0gbV9idWZmZXIuY2FwYWNpdHkoKTsKKyAgICAgICAgbV9tYXhTaXplID0gbV9zaXplOwor
I2VuZGlmCisKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApAQCAtNzU2LDYgKzc5OSwx
MCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6
ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CiAgICAg
ICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAorI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAg
ICAgIG1fbWF4Q2FwYWNpdHkgPSBtX2J1ZmZlci5jYXBhY2l0eSgpOworICAgICAgICBtX21heFNp
emUgPSBtX3NpemU7CisjZW5kaWYKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApAQCAt
ODA0LDYgKzg1MSwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RkOjpmaWxsKGJlZ2lu
KCksIGVuZCgpLCB2YWwpOwogICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZp
bGwoZW5kKCksIGJlZ2luKCkgKyBuZXdTaXplLCB2YWwpOwogICAgICAgICBtX3NpemUgPSBuZXdT
aXplOworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgbV9tYXhDYXBhY2l0eSA9IG1h
eChtX21heENhcGFjaXR5LCBtX2J1ZmZlci5jYXBhY2l0eSgpKTsKKyAgICAgICAgbV9tYXhTaXpl
ID0gbWF4KG1fbWF4U2l6ZSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTg3Miw2ICs5MjQsMTEgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fc2l6ZSA9IHNp
emU7CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICBtX21heENhcGFjaXR5ID0gbWF4
KG1fbWF4Q2FwYWNpdHksIG1fYnVmZmVyLmNhcGFjaXR5KCkpOworICAgICAgICBtX21heFNpemUg
PSBtYXgobV9tYXhTaXplLCBtX3NpemUpOworI2VuZGlmCiAgICAgfQogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgpAQCAtODkxLDYgKzk0OCwxMSBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6aW5pdGlhbGl6ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOwogICAgICAgICBtX3Np
emUgPSBzaXplOworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgbV9tYXhDYXBhY2l0
eSA9IG1heChtX21heENhcGFjaXR5LCBtX2J1ZmZlci5jYXBhY2l0eSgpKTsKKyAgICAgICAgbV9t
YXhTaXplID0gbWF4KG1fbWF4U2l6ZSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTkwNCw2ICs5NjYs
MTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlmIChiZWdpbigpKQogICAgICAgICAgICAg
VHlwZU9wZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOwogICAgICAg
ICBtX2J1ZmZlci5kZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CisKKyNpZiBEVU1QX1ZFQ1RP
Ul9TVEFUUworICAgICAgICBtX21heENhcGFjaXR5ID0gbWF4KG1fbWF4Q2FwYWNpdHksIG1fYnVm
ZmVyLmNhcGFjaXR5KCkpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTkxOCw2ICs5ODQsMTAgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICAgICAgVHlwZU9wZXJhdGlv
bnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOwogICAgICAgICBtX2J1ZmZlci5k
ZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAg
ICAgICBtX21heENhcGFjaXR5ID0gbWF4KG1fbWF4Q2FwYWNpdHksIG1fYnVmZmVyLmNhcGFjaXR5
KCkpOworI2VuZGlmCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTkyOCw2
ICs5OTgsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFTU0VSVChjYXBhY2l0eSgpID09
IGlubGluZUNhcGFjaXR5KTsKICAgICAgICAgaWYgKGluaXRpYWxDYXBhY2l0eSA+IGlubGluZUNh
cGFjaXR5KQogICAgICAgICAgICAgbV9idWZmZXIuYWxsb2NhdGVCdWZmZXIoaW5pdGlhbENhcGFj
aXR5KTsKKworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIG1fbWF4Q2FwYWNpdHkgPSBt
YXgobV9tYXhDYXBhY2l0eSwgbV9idWZmZXIuY2FwYWNpdHkoKSk7CisjZW5kaWYKICAgICB9CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgpAQCAt
OTcwLDYgKzEwNDQsMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZGF0YVNpemU7ICsraSkKICAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJmRlc3Rb
aV0pIFQoZGF0YVtpXSk7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKKyNpZiBEVU1QX1ZF
Q1RPUl9TVEFUUworICAgICAgICBtX21heENhcGFjaXR5ID0gbWF4KG1fbWF4Q2FwYWNpdHksIG1f
YnVmZmVyLmNhcGFjaXR5KCkpOworICAgICAgICBtX21heFNpemUgPSBtYXgobV9tYXhTaXplLCBt
X3NpemUpOworI2VuZGlmCiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90
IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtOTg4LDYgKzEwNjcsMTEg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YVNp
emU7ICsraSkKICAgICAgICAgICAgIG5ldyAoTm90TnVsbCwgJmRlc3RbaV0pIFQoZGF0YVtpXSk7
CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAg
ICAgICBtX21heENhcGFjaXR5ID0gbWF4KG1fbWF4Q2FwYWNpdHksIG1fYnVmZmVyLmNhcGFjaXR5
KCkpOworICAgICAgICBtX21heFNpemUgPSBtYXgobV9tYXhTaXplLCBtX3NpemUpOworI2VuZGlm
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTk3LDYgKzEwODEsMTAgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewogICAgICAg
ICAgICAgbmV3IChOb3ROdWxsLCBlbmQoKSkgVCh2YWwpOwogICAgICAgICAgICAgKyttX3NpemU7
CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICAgICAgbV9tYXhTaXplID0gbWF4KG1f
bWF4U2l6ZSwgbV9zaXplKTsKKyNlbmRpZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAKQEAgLTEwMTUsNiArMTEwMywxMSBAQCBuYW1lc3BhY2UgV1RGIHsKIAogICAgICAgICBuZXcg
KE5vdE51bGwsIGVuZCgpKSBUKCpwdHIpOwogICAgICAgICArK21fc2l6ZTsKKworI2lmIERVTVBf
VkVDVE9SX1NUQVRTCisgICAgICAgIG1fbWF4Q2FwYWNpdHkgPSBtYXgobV9tYXhDYXBhY2l0eSwg
bV9idWZmZXIuY2FwYWNpdHkoKSk7CisgICAgICAgIG1fbWF4U2l6ZSA9IG1heChtX21heFNpemUs
IG1fc2l6ZSk7CisjZW5kaWYKICAgICB9CiAKICAgICAvLyBUaGlzIHZlcnNpb24gb2YgYXBwZW5k
IHNhdmVzIGEgYnJhbmNoIGluIHRoZSBjYXNlIHdoZXJlIHlvdSBrbm93IHRoYXQgdGhlCkBAIC0x
MDI3LDYgKzExMjAsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNvbnN0IFUqIHB0ciA9
ICZ2YWw7CiAgICAgICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoKnB0cik7CiAgICAgICAgICsr
bV9zaXplOworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgbV9tYXhTaXplID0gbWF4
KG1fbWF4U2l6ZSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8vIFRoaXMgbWV0aG9k
IHNob3VsZCBub3QgYmUgY2FsbGVkIGFwcGVuZCwgYSBiZXR0ZXIgbmFtZSB3b3VsZCBiZSBhcHBl
bmRFbGVtZW50cy4KQEAgLTEwNTUsNiArMTE1MiwxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhU2l6ZTsgKytpKQogICAgICAgICAgICAgbmV3
IChOb3ROdWxsLCAmc3BvdFtpXSkgVChkYXRhW2ldKTsKICAgICAgICAgbV9zaXplID0gbmV3U2l6
ZTsKKworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIG1fbWF4Q2FwYWNpdHkgPSBtYXgo
bV9tYXhDYXBhY2l0eSwgbV9idWZmZXIuY2FwYWNpdHkoKSk7CisgICAgICAgIG1fbWF4U2l6ZSA9
IG1heChtX21heFNpemUsIG1fc2l6ZSk7CisjZW5kaWYKICAgICB9CiAgICAgIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUg
VT4KQEAgLTEwNzEsNiArMTE3MywxMSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhzcG90LCBlbmQoKSwgc3BvdCArIDEpOwogICAgICAg
ICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoKmRhdGEpOwogICAgICAgICArK21fc2l6ZTsKKworI2lm
IERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIG1fbWF4Q2FwYWNpdHkgPSBtYXgobV9tYXhDYXBh
Y2l0eSwgbV9idWZmZXIuY2FwYWNpdHkoKSk7CisgICAgICAgIG1fbWF4U2l6ZSA9IG1heChtX21h
eFNpemUsIG1fc2l6ZSk7CisjZW5kaWYKICAgICB9CiAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBj
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141550</attachid>
            <date>2012-05-11 20:55:25 -0700</date>
            <delta_ts>2012-05-14 21:44:53 -0700</delta_ts>
            <desc>Delta on the previous patch to dump stacks when sparse vectors are destroyed.</desc>
            <filename>print-sparse-vectors.patch</filename>
            <type>text/plain</type>
            <size>1808</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1ZlY3Rvci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuY3BwCmluZGV4IDc4NzY4NTguLjBhMDUwODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYv
d3RmL1ZlY3Rvci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmNwcApAQCAtNTAsMTEg
KzUwLDEzIEBAIHN0YXRpYyBpbnQgZnVsbG5lc3NCdWNrZXQoaW50IHNpemUsIGludCBjYXBhY2l0
eSkKICAgICByZXR1cm4gY2VpbCgxMDAuMCAqICgoZG91YmxlKShzaXplKSAvIGNhcGFjaXR5KSk7
CiB9CiAKKy8qCiBzdGF0aWMgdm9pZCBwcmludEJ1Y2tldHMoaW50IGJ1Y2tldHNbXSwgaW50IG51
bUJ1Y2tldHMpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1CdWNrZXRzOyArK2kpCiAg
ICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJTNkICU4ZFxuIiwgaSwgYnVja2V0c1tpXSk7CiB9Cisq
LwogCiB2b2lkIFZlY3RvclN0YXRzOjpyZWNvcmRWZWN0b3JTaXplKGludCBtYXhDYXBhY2l0eSwg
aW50IG1heFNpemUsIHNpemVfdCB2YWx1ZVNpemUpCiB7CkBAIC02NCw3ICs2Niw2IEBAIHZvaWQg
VmVjdG9yU3RhdHM6OnJlY29yZFZlY3RvclNpemUoaW50IG1heENhcGFjaXR5LCBpbnQgbWF4U2l6
ZSwgc2l6ZV90IHZhbHVlU2l6CiAgICAgY29uc3QgaW50IG51bUZ1bGxuZXNzQnVja2V0cyA9IDEw
MTsKICAgICBzdGF0aWMgaW50IGZ1bGxuZXNzQnVja2V0c1tudW1GdWxsbmVzc0J1Y2tldHNdOwog
ICAgIAotICAgIHN0YXRpYyBpbnQgY2FsbENvdW50OwogCiAgICAgaWYgKG1heENhcGFjaXR5KSB7
CiAgICAgICAgIGF0b21pY0luY3JlbWVudCgmc2l6ZUJ1Y2tldHNbYnVja2V0Rm9yU2l6ZShtYXhT
aXplLCBudW1TaXplQnVja2V0cyldKTsKQEAgLTgzLDYgKzg0LDkgQEAgdm9pZCBWZWN0b3JTdGF0
czo6cmVjb3JkVmVjdG9yU2l6ZShpbnQgbWF4Q2FwYWNpdHksIGludCBtYXhTaXplLCBzaXplX3Qg
dmFsdWVTaXoKICAgICAgICAgfQogICAgIH0KIAorLyoKKyAgICBzdGF0aWMgaW50IGNhbGxDb3Vu
dDsKKwogICAgIGNvbnN0IGludCBwcmludEZyZXF1ZW5jeSA9IDUwMDsKICAgICBpZiAoISgrK2Nh
bGxDb3VudCAlIHByaW50RnJlcXVlbmN5KSkgewogICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlxu
U2l6ZSBGcmVxdWVuY3lcbiIpOwpAQCAtOTQsNiArOTgsMTIgQEAgdm9pZCBWZWN0b3JTdGF0czo6
cmVjb3JkVmVjdG9yU2l6ZShpbnQgbWF4Q2FwYWNpdHksIGludCBtYXhTaXplLCBzaXplX3QgdmFs
dWVTaXoKICAgICAgICAgZnByaW50ZihzdGRvdXQsICJWZWN0b3I6ICUuMmZLQiB1c2VkIG9mICUu
MmZLQiAoJS4yZiUlKVxuIiwgc3RhdGljX2Nhc3Q8ZG91YmxlPih0b3RhbFVzZWQpIC8gMTAyNCwK
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4odG90YWxDYXBhY2l0eSkgLyAxMDI0LCAx
MDAuMCAqIHN0YXRpY19jYXN0PGRvdWJsZT4odG90YWxVc2VkKSAvIHRvdGFsQ2FwYWNpdHkpOwog
ICAgIH0KKyovICAgIAorICAgIC8vIExvZyBmb3IgbW9zdGx5IHVudXNlZCB2ZWN0b3JzCisgICAg
aWYgKG1heENhcGFjaXR5ICYmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1heFNpemUpIC8gbWF4Q2Fw
YWNpdHkgPCAwLjEpKSB7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiTW9zdGx5IGVtcHR5IHZl
Y3RvciAoc2l6ZSAlZCwgY2FwYWNpdHkgJWQsIHZhbHVlIHNpemUgJWx1KTpcbiIsIG1heFNpemUs
IG1heENhcGFjaXR5LCB2YWx1ZVNpemUpOworICAgICAgICBXVEZSZXBvcnRCYWNrdHJhY2UoKTsK
KyAgICB9CiB9CiAKICNlbmRpZiAvLyBEVU1QX1ZFQ1RPUl9TVEFUUwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141851</attachid>
            <date>2012-05-14 21:45:02 -0700</date>
            <delta_ts>2012-05-15 08:45:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86281-20120514214501.patch</filename>
            <type>text/plain</type>
            <size>31782</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQxNzQ4MTQxNThlMzE3YTRkNmYzZjY0
OGJmMDAwNTc2ZDdiNDYwMDIuLjA1ZTIwNTg3NjNhZjA4ZjQxOWVkZjA4ZjU1MzRlOWJhOTU3Yjlk
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTItMDUtMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgNTklIG9mIFZlY3RvciBidWZmZXIgY2FwYWNp
dHkgaXMgdW51c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NjI4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgUGF0Y2ggdG8gYWRkIGxvZ2dpbmcgb2YgVmVjdG9yIHVzYWdlLgorCisgICAg
ICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0hhc2hU
YWJsZS5jcHA6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVTdGF0czo6
cmVjb3JkQ29sbGlzaW9uQXRDb3VudCk6CisgICAgICAgIChXVEY6OmJ1Y2tldEZvcktleUNvdW50
KToKKyAgICAgICAgKFdURjo6cHJpbnRCdWNrZXRzKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxl
U3RhdHM6OnJlY29yZFRhYmxlU2l6ZSk6CisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAg
ICAgICAoSGFzaFRhYmxlU3RhdHMpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6On5IYXNoVGFi
bGUpOgorICAgICAgICAoSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6OjpIYXNoVGFibGUpOgor
ICAgICAgICAoV1RGOjo6OmFkZCk6CisgICAgICAgIChXVEY6Ojo6cmVoYXNoKToKKyAgICAgICAg
KFdURjo6Ojpzd2FwKToKKyAgICAgICAgKiB3dGYvU2l6ZUxpbWl0cy5jcHA6CisgICAgICAgIChX
VEYpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURik6Cisg
ICAgICAgIChXVEY6OmluaXRDUkNUYWJsZSk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVPbmNl
KToKKyAgICAgICAgKFdURjo6dmVjdG9yU3RhdHNNdXRleCk6CisgICAgICAgIChXVEY6OmNyYzY0
KToKKyAgICAgICAgKFBlclZlY3RvckRhdGEpOgorICAgICAgICAoV1RGOjpQZXJWZWN0b3JEYXRh
OjpQZXJWZWN0b3JEYXRhKToKKyAgICAgICAgKFdURjo6dmVjdG9yTGlzdCk6CisgICAgICAgIChX
VEY6OlZlY3RvclN0YXRzOjp2ZWN0b3JDcmVhdGVkKToKKyAgICAgICAgKFdURjo6VmVjdG9yU3Rh
dHM6OnZlY3RvclVwZGF0ZWQpOgorICAgICAgICAoQWxsb2NhdGlvblN0YWNrSW5mbyk6CisgICAg
ICAgIChXVEY6OkFsbG9jYXRpb25TdGFja0luZm86OkFsbG9jYXRpb25TdGFja0luZm8pOgorICAg
ICAgICAoV1RGOjpjb21wYXJlQnlXYXN0ZSk6CisgICAgICAgIChXVEY6OmR1bXBXYXN0ZWZ1bG5l
c3NTdGF0cyk6CisgICAgICAgIChXVEY6OlZlY3RvclN0YXRzOjp2ZWN0b3JEZXN0cm95ZWQpOgor
ICAgICAgICAoV1RGOjpWZWN0b3JTdGF0czo6ZHVtcFZlY3RvclN0YXRzKToKKyAgICAgICAgKiB3
dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEYpOgorICAgICAgICAoVmVjdG9yU3RhdHMpOgorICAg
ICAgICAoV1RGOjpWZWN0b3I6OlZlY3Rvcik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6flZlY3Rv
cik6CisgICAgICAgIChXVEY6Ojo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAg
IChXVEY6Ojo6ZmlsbCk6CisgICAgICAgIChXVEY6Ojo6cmVzaXplKToKKyAgICAgICAgKFdURjo6
Ojpncm93KToKKyAgICAgICAgKFdURjo6OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RG
Ojo6OnRyeVJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ojo6cmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSk6CisgICAgICAgIChXVEY6Ojo6YXBwZW5kKToKKyAgICAgICAgKFdURjo6Ojp0cnlB
cHBlbmQpOgorICAgICAgICAoV1RGOjo6OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6
Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjo6Omluc2VydCk6CisKIDIwMTItMDUt
MTAgIE1pY2hhxYIgUGFrdcWCYSB2ZWwgUnV0a2EgIDxtLnBha3VsYUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbRUZMXSBBZGQgT3duUHRyIHNwZWNpYWxpemF0aW9uIGZvciBFaW5hX0hhc2guCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggMTc5ZGFhY2Y2MzQ1YTUxZjFhZjA0ZWQwMGQ4YzdjZTc4OGU2YjQ2MC4uOWFh
MDM0OWI0ZTk3NWMyZTUyMDg0YTUwNmIxOTQ5YzIxNmI4MjIwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEyLTA1LTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIDU5JSBvZiBWZWN0b3IgYnVmZmVyIGNhcGFjaXR5IGlzIHVudXNlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyODEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpkdW1wU3RhdHNP
YnNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NNYWluKToKKwogMjAxMi0wNS0xMCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFBERiBmaWxlcyB3b24ndCBzY3JvbGwgaW4gU2FmYXJpIHdo
ZW4gdXNpbmcgQWRvYmUgcGx1Zy1pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjU1ZGRkMjUzNzg2ZjRkNzJlMWE0NWFmMTc4NzYxYjMwOWVkMzhhMC4uNDhl
NTg2ZTI1NzMyYzA1MjZlMGJlYTc0M2RhZDQ3YTNlN2MxNjllZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03LDYgKzcsNyBAQAogCW9iamVjdHMgPSB7CiAK
IC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTBGODI1QUJFMTU1RTAxODYwMDgx
MENFOSAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY4MjVBQkQxNTVFMDE4NjAwODEwQ0U5IC8qIFZlY3Rvci5jcHAgKi87IH07CiAJ
CUE4NzZEQkQ4MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8q
IFBsYXRmb3JtLmggKi87IH07CiAJCUE4QTQ3MzdGMTUxQTgyNUIwMDQxMjNGRiAvKiBBbGlnbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3
MjU0MTUxQTgyNUEwMDQxMjNGRiAvKiBBbGlnbm1lbnQuaCAqLzsgfTsKIAkJQThBNDczODAxNTFB
ODI1QjAwNDEyM0ZGIC8qIEFsd2F5c0lubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyNTUxNTFBODI1QTAwNDEyM0ZGIC8qIEFsd2F5c0lu
bGluZS5oICovOyB9OwpAQCAtMjQwLDYgKzI0MSw3IEBACiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTBGODI1
QUJEMTU1RTAxODYwMDgxMENFOSAvKiBWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUQyNDdCNjIxNDY4OUI4NjAwRTc4Qjc2IC8qIGxpYldURi5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJNUQyNDdCNkUxNDY4OUM0NzAwRTc4Qjc2IC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQyNDdCNkYx
NDY4OUM0NzAwRTc4Qjc2IC8qIENvbXBpbGVyVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBDb21waWxlclZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03MDAsNiArNzAyLDcgQEAKIAkJCQlBOEE0NzM1RDE1MUE4MjVCMDA0MTIzRkYgLyogVW51c2Vk
UGFyYW0uaCAqLywKIAkJCQlBOEE0NzM1RTE1MUE4MjVCMDA0MTIzRkYgLyogdXJsICovLAogCQkJ
CUE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi8sCisJCQkJMEY4MjVB
QkQxNTVFMDE4NjAwODEwQ0U5IC8qIFZlY3Rvci5jcHAgKi8sCiAJCQkJQThBNDczNzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1U
YWdzLmggKi8sCkBAIC0xMTY4LDYgKzExNzEsNyBAQAogCQkJCUE4QTQ3NDc3MTUxQTgyNUIwMDQx
MjNGRiAvKiBVUkxFc2NhcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0N0IxNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDg2
MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGODI1QUJFMTU1RTAxODYwMDgxMENFOSAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xMTkzLDYgKzExOTcsNyBAQAogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSA1RDI0
N0I3MzE0Njg5QzQ3MDBFNzhCNzYgLyogV1RGLnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5n
cyA9IHsKIAkJCQlERUJVR19ERUZJTkVTID0gIiQoREVCVUdfREVGSU5FU19kZWJ1ZykiOworCQkJ
CUdDQ19PUFRJTUlaQVRJT05fTEVWRUxfbm9ybWFsID0gMDsKIAkJCX07CiAJCQluYW1lID0gRGVi
dWc7CiAJCX07CkBAIC0xMjAwLDYgKzEyMDUsNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDVEMjQ3QjczMTQ2ODlDNDcw
MEU3OEI3NiAvKiBXVEYueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCUdD
Q19PUFRJTUlaQVRJT05fTEVWRUxfbm9ybWFsID0gMDsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFz
ZTsKIAkJfTsKQEAgLTEyMTQsNiArMTIyMCw3IEBACiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gNUQyNDdCNzMxNDY4OUM0NzAw
RTc4Qjc2IC8qIFdURi54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJR0ND
X09QVElNSVpBVElPTl9MRVZFTF9ub3JtYWwgPSAwOwogCQkJfTsKIAkJCW5hbWUgPSBQcm9kdWN0
aW9uOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5jcHAKaW5kZXggNDkyZGE4NmNlNDIxOGE3N2RiNTJhMTcz
MDBmMjk3MjU1YzIyYTE5NC4uNjU0Y2JlMTljZDllYjNlY2UwMjA5ODBlNGVjZTdiODgxZGU3N2U2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuY3BwCkBAIC0yMCw3ICsyMCw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiRGF0YUxvZy5oIgorI2luY2x1
ZGUgPGFsZ29yaXRobT4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXVEYgewog
CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKQEAgLTMzLDcgKzM1LDcgQEAgaW50IEhhc2hUYWJs
ZVN0YXRzOjpudW1SZWhhc2hlczsKIGludCBIYXNoVGFibGVTdGF0czo6bnVtUmVtb3ZlczsKIGlu
dCBIYXNoVGFibGVTdGF0czo6bnVtUmVpbnNlcnRzOwogCi1zdGF0aWMgSGFzaFRhYmxlU3RhdHMg
bG9nZ2VyOworLy9zdGF0aWMgSGFzaFRhYmxlU3RhdHMgbG9nZ2VyOwogCiBzdGF0aWMgTXV0ZXgm
IGhhc2hUYWJsZVN0YXRzTXV0ZXgoKQogewpAQCAtNTgsNiArNjAsNyBAQCBIYXNoVGFibGVTdGF0
czo6fkhhc2hUYWJsZVN0YXRzKCkKIAogdm9pZCBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlz
aW9uQXRDb3VudChpbnQgY291bnQpCiB7CityZXR1cm47CiAgICAgTXV0ZXhMb2NrZXIgbG9jayho
YXNoVGFibGVTdGF0c011dGV4KCkpOwogICAgIGlmIChjb3VudCA+IG1heENvbGxpc2lvbnMpCiAg
ICAgICAgIG1heENvbGxpc2lvbnMgPSBjb3VudDsKQEAgLTY1LDYgKzY4LDQ1IEBAIHZvaWQgSGFz
aFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQoaW50IGNvdW50KQogICAgIGNvbGxp
c2lvbkdyYXBoW2NvdW50XSsrOwogfQogCitzdGF0aWMgaW50IGJ1Y2tldEZvcktleUNvdW50KGlu
dCBjb3VudCwgaW50IG51bUJ1Y2tldHMpCit7CisgICAgcmV0dXJuIG1pbihjb3VudCwgbnVtQnVj
a2V0cyAtIDEpOworfQorCitzdGF0aWMgdm9pZCBwcmludEJ1Y2tldHMobG9uZyBidWNrZXRzW10s
IGludCBudW1CdWNrZXRzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQnVja2V0czsg
KytpKSB7CisgICAgICAgIGxvbmcgdmFsdWUgPSBidWNrZXRzW2ldOworICAgICAgICBmcHJpbnRm
KHN0ZG91dCwgIiUzZCAlOGxkXG4iLCBpLCB2YWx1ZSk7CisgICAgfQorfQorCit2b2lkIEhhc2hU
YWJsZVN0YXRzOjpyZWNvcmRUYWJsZVNpemUoaW50IG1heFRhYmxlU2l6ZSwgaW50IG1heEtleUNv
dW50LCBzaXplX3QgdmFsdWVTaXplKQoreworLy8gICAgTXV0ZXhMb2NrZXIgbG9jayhoYXNoVGFi
bGVTdGF0c011dGV4KCkpOworCisgICAgc3RhdGljIGxvbmcgbG9uZyB0b3RhbENhcGFjaXR5Owor
ICAgIHN0YXRpYyBsb25nIGxvbmcgdG90YWxVc2VkOworICAgIAorICAgIGNvbnN0IGludCBudW1L
ZXlDb3VudEJ1Y2tldHMgPSA1MDsKKyAgICBzdGF0aWMgbG9uZyBrZXlDb3VudEJ1Y2tldHNbbnVt
S2V5Q291bnRCdWNrZXRzXTsKKyAgICAKKyAgICBzdGF0aWMgaW50IGNhbGxDb3VudDsKKyAgICAK
KyAgICB0b3RhbENhcGFjaXR5ICs9IG1heFRhYmxlU2l6ZSAqIHZhbHVlU2l6ZTsKKyAgICB0b3Rh
bFVzZWQgKz0gbWF4S2V5Q291bnQgKiB2YWx1ZVNpemU7CisgICAgCisvLyAgICBmcHJpbnRmKHN0
ZGVyciwgIkhhc2hUYWJsZSBtYXggc2l6ZT0lZCwgdXNlZCBzaXplPSVkICh0b3RhbCBjYXBhY2l0
eT0lbGxkLCB0b3RhbCB1c2VkPSVsbGQsIHVzYWdlICUuMmYlJSlcbiIsIG1heFRhYmxlU2l6ZSwg
bWF4S2V5Q291bnQsIHRvdGFsQ2FwYWNpdHksIHRvdGFsVXNlZCwgMTAwLjAgKiAoZG91YmxlKXRv
dGFsVXNlZCAvIHRvdGFsQ2FwYWNpdHkpOworCisgICAgKytrZXlDb3VudEJ1Y2tldHNbYnVja2V0
Rm9yS2V5Q291bnQobWF4S2V5Q291bnQsIG51bUtleUNvdW50QnVja2V0cyldOworCisgICAgY29u
c3QgaW50IHByaW50RnJlcXVlbmN5ID0gMTAwOworICAgIGlmICghKCsrY2FsbENvdW50ICUgcHJp
bnRGcmVxdWVuY3kpKSB7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG5TaXplIEZyZXF1ZW5j
eVxuIik7CisgICAgICAgIHByaW50QnVja2V0cyhrZXlDb3VudEJ1Y2tldHMsIG51bUtleUNvdW50
QnVja2V0cyk7CisgICAgfQorfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hU
YWJsZS5oCmluZGV4IDE3MmQ5NWIwYjFiMWI4ZWNiNzBlZmY4MzA3ZGQwMjdhMWFmYTZiNDcuLjBl
MTkxY2MxMjdmZWZlMDM5Mzc1YzAxZmI4ZTkxMjE0NTM0MDA1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBA
IC01OCwxNyArNTgsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEFsbCBvZiB0aGUg
dmFyaWFibGVzIGFyZSBhY2Nlc3NlZCBpbiB+SGFzaFRhYmxlU3RhdHMgd2hlbiB0aGUgc3RhdGlj
IHN0cnVjdCBpcyBkZXN0cm95ZWQuCiAKICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB2YXJpYWJs
ZXMgYXJlIGFsbCBhdG9taWNhbGx5IGluY3JlbWVudGVkIHdoZW4gbW9kaWZpZWQuCi0gICAgICAg
IHN0YXRpYyBpbnQgbnVtQWNjZXNzZXM7Ci0gICAgICAgIHN0YXRpYyBpbnQgbnVtUmVoYXNoZXM7
Ci0gICAgICAgIHN0YXRpYyBpbnQgbnVtUmVtb3ZlczsKLSAgICAgICAgc3RhdGljIGludCBudW1S
ZWluc2VydHM7CisgICAgICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyBpbnQgbnVtQWNjZXNzZXM7
CisgICAgICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyBpbnQgbnVtUmVoYXNoZXM7CisgICAgICAg
IFdURl9FWFBPUlREQVRBIHN0YXRpYyBpbnQgbnVtUmVtb3ZlczsKKyAgICAgICAgV1RGX0VYUE9S
VERBVEEgc3RhdGljIGludCBudW1SZWluc2VydHM7CiAKICAgICAgICAgLy8gVGhlIGZvbGxvd2lu
ZyB2YXJpYWJsZXMgYXJlIG9ubHkgbW9kaWZpZWQgaW4gdGhlIHJlY29yZENvbGxpc2lvbkF0Q291
bnQgbWV0aG9kIHdpdGhpbiBhIG11dGV4LgotICAgICAgICBzdGF0aWMgaW50IG1heENvbGxpc2lv
bnM7Ci0gICAgICAgIHN0YXRpYyBpbnQgbnVtQ29sbGlzaW9uczsKLSAgICAgICAgc3RhdGljIGlu
dCBjb2xsaXNpb25HcmFwaFs0MDk2XTsKKyAgICAgICAgV1RGX0VYUE9SVERBVEEgc3RhdGljIGlu
dCBtYXhDb2xsaXNpb25zOworICAgICAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMgaW50IG51bUNv
bGxpc2lvbnM7CisgICAgICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyBpbnQgY29sbGlzaW9uR3Jh
cGhbNDA5Nl07CiAKLSAgICAgICAgc3RhdGljIHZvaWQgcmVjb3JkQ29sbGlzaW9uQXRDb3VudChp
bnQgY291bnQpOworICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcmVjb3Jk
Q29sbGlzaW9uQXRDb3VudChpbnQgY291bnQpOworICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgcmVjb3JkVGFibGVTaXplKGludCBtYXhUYWJsZVNpemUsIGludCBtYXhLZXlD
b3VudCwgc2l6ZV90IHZhbHVlU2l6ZSk7CiAgICAgfTsKIAogI2VuZGlmCkBAIC0zMjgsNiArMzI5
LDkgQEAgbmFtZXNwYWNlIFdURiB7CiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX1VTRV9BRlRFUl9ERVNU
UlVDVElPTgogICAgICAgICAgICAgbV90YWJsZSA9IChWYWx1ZVR5cGUqKSh1aW50cHRyX3QpMHhi
YmFkYmVlZjsKICNlbmRpZgorI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICBI
YXNoVGFibGVTdGF0czo6cmVjb3JkVGFibGVTaXplKG1fbWF4VGFibGVTaXplLCBtX21heEtleUNv
dW50LCBzaXplb2YoVmFsdWVUeXBlKSk7CisjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIEhh
c2hUYWJsZShjb25zdCBIYXNoVGFibGUmKTsKQEAgLTQ0Myw2ICs0NDcsMTEgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIGludCBtX2tleUNvdW50OwogICAgICAgICBpbnQgbV9kZWxldGVkQ291
bnQ7CiAKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICBpbnQgbV9tYXhUYWJsZVNp
emU7CisgICAgICAgIGludCBtX21heEtleUNvdW50OworI2VuZGlmCisKICNpZiBDSEVDS19IQVNI
VEFCTEVfSVRFUkFUT1JTCiAgICAgcHVibGljOgogICAgICAgICAvLyBBbGwgYWNjZXNzIHRvIG1f
aXRlcmF0b3JzIHNob3VsZCBiZSBndWFyZGVkIHdpdGggbV9tdXRleC4KQEAgLTQ1OSw2ICs0Njgs
MTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICwgbV90YWJsZVNpemVNYXNrKDApCiAgICAg
ICAgICwgbV9rZXlDb3VudCgwKQogICAgICAgICAsIG1fZGVsZXRlZENvdW50KDApCisjaWYgRFVN
UF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgLCBtX21heFRhYmxlU2l6ZSgwKQorICAgICAgICAs
IG1fbWF4S2V5Q291bnQoMCkKKyNlbmRpZgogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMK
ICAgICAgICAgLCBtX2l0ZXJhdG9ycygwKQogICAgICAgICAsIG1fbXV0ZXgoYWRvcHRQdHIobmV3
IE11dGV4KSkKQEAgLTc0Niw3ICs3NTksMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEhh
c2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBrZXksIGV4dHJhKTsKIAogICAgICAgICAr
K21fa2V5Q291bnQ7Ci0gICAgICAgIAorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAg
ICAgaWYgKG1fa2V5Q291bnQgPiBtX21heEtleUNvdW50KQorICAgICAgICAgICAgbV9tYXhLZXlD
b3VudCA9IG1fa2V5Q291bnQ7CisjZW5kaWYKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBtYWtlcyBhbiBleHRyYSBjb3B5IG9uIGV4cGFu
ZC4gUHJvYmFibHkgbm90IHRoYXQgYmFkIHNpbmNlCiAgICAgICAgICAgICAvLyBleHBhbmQgaXMg
cmFyZSwgYnV0IHdvdWxkIGJlIGJldHRlciB0byBoYXZlIGEgdmVyc2lvbiBvZiBleHBhbmQgdGhh
dCBjYW4KQEAgLTk3NCw2ICs5OTEsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICNpZiBEVU1QX0hBU0hU
QUJMRV9TVEFUUwogICAgICAgICBpZiAob2xkVGFibGVTaXplICE9IDApCiAgICAgICAgICAgICBh
dG9taWNJbmNyZW1lbnQoJkhhc2hUYWJsZVN0YXRzOjpudW1SZWhhc2hlcyk7CisKKyAgICAgICAg
aWYgKG5ld1RhYmxlU2l6ZSA+IG1fbWF4VGFibGVTaXplKQorICAgICAgICAgICAgbV9tYXhUYWJs
ZVNpemUgPSBuZXdUYWJsZVNpemU7CiAjZW5kaWYKIAogICAgICAgICBtX3RhYmxlU2l6ZSA9IG5l
d1RhYmxlU2l6ZTsKQEAgLTEwMTIsNiArMTAzMiwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgLCBtX3RhYmxlU2l6ZU1hc2soMCkKICAgICAgICAgLCBtX2tleUNvdW50KDApCiAgICAgICAg
ICwgbV9kZWxldGVkQ291bnQoMCkKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAs
IG1fbWF4VGFibGVTaXplKDApCisgICAgICAgICwgbV9tYXhLZXlDb3VudCgwKQorI2VuZGlmCiAj
aWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwogICAgICAgICAsIG1faXRlcmF0b3JzKDApCiAg
ICAgICAgICwgbV9tdXRleChhZG9wdFB0cihuZXcgTXV0ZXgpKQpAQCAtMTA0OSw2ICsxMDczLDE3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpbnQgdG1wX2RlbGV0ZWRDb3VudCA9IG1fZGVs
ZXRlZENvdW50OwogICAgICAgICBtX2RlbGV0ZWRDb3VudCA9IG90aGVyLm1fZGVsZXRlZENvdW50
OwogICAgICAgICBvdGhlci5tX2RlbGV0ZWRDb3VudCA9IHRtcF9kZWxldGVkQ291bnQ7CisKKyNp
ZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICBpbnQgdG1wX21heFRhYmxlU2l6ZSA9IG1f
bWF4VGFibGVTaXplOworICAgICAgICBtX21heFRhYmxlU2l6ZSA9IG90aGVyLm1fbWF4VGFibGVT
aXplOworICAgICAgICBvdGhlci5tX21heFRhYmxlU2l6ZSA9IHRtcF9tYXhUYWJsZVNpemU7CisK
KyAgICAgICAgaW50IHRtcF9tYXhLZXlDb3VudCA9IG1fbWF4S2V5Q291bnQ7CisgICAgICAgIG1f
bWF4S2V5Q291bnQgPSBvdGhlci5tX21heEtleUNvdW50OworICAgICAgICBvdGhlci5tX21heEtl
eUNvdW50ID0gdG1wX21heEtleUNvdW50OworI2VuZGlmCisKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU2l6ZUxpbWl0cy5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9TaXplTGltaXRzLmNwcAppbmRleCA5NWQ5YzJiMWU5MDhkY2E5MjM0ZmU0MDlmNWY1NTE3NWFh
ZTM2MjA2Li5lNjUzZDhlMTEzYTkyNDM0M2FkZWE5ODMxMzJmZmM0NjkzZDJjMzUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TaXplTGltaXRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9T
aXplTGltaXRzLmNwcApAQCAtNjAsNiArNjAsNyBAQCBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFz
c1JlZlB0cjxSZWZDb3VudGVkPGludD4gPikgPT0gc2l6ZW9mKGludCopLCBQYXNzUmVmUHRyXwog
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlZkNvdW50ZWQ8aW50PikgPT0gc2l6ZW9mKFNhbWVTaXpl
QXNSZWZDb3VudGVkKSwgUmVmQ291bnRlZF9zaG91bGRfc3RheV9zbWFsbCk7CiBDT01QSUxFX0FT
U0VSVChzaXplb2YoUmVmQ291bnRlZEN1c3RvbUFsbG9jYXRlZDxpbnQ+KSA9PSBzaXplb2YoU2Ft
ZVNpemVBc1JlZkNvdW50ZWQpLCBSZWZDb3VudGVkQ3VzdG9tQWxsb2NhdGVkX3Nob3VsZF9zdGF5
X3NtYWxsKTsKIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWZQdHI8UmVmQ291bnRlZDxpbnQ+ID4p
ID09IHNpemVvZihpbnQqKSwgUmVmUHRyX3Nob3VsZF9zdGF5X3NtYWxsKTsKKyNpZm5kZWYgRFVN
UF9WRUNUT1JfU1RBVFMKIENPTVBJTEVfQVNTRVJUKHNpemVvZihWZWN0b3I8aW50PikgPT0gMyAq
IHNpemVvZihpbnQqKSwgVmVjdG9yX3Nob3VsZF9zdGF5X3NtYWxsKTsKLQorI2VuZGlmCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuY3BwIGIvU291cmNlL1dURi93dGYvVmVj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xNTEyOWJkZDQwOTU0ZmViYmVhM2I0MzIwNzU4YmIyZTBkMDlm
NzdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmNwcApAQCAtMCww
ICsxLDMxNCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdG9taWNz
LmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
bWF0aC5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworbmFtZXNwYWNlIFdURiB7CisKKyNpZiBE
VU1QX1ZFQ1RPUl9TVEFUUworCisjZGVmaW5lIFBPTFk2NFJFViAgICAgMHg5NUFDOTMyOUFDNEJD
OUI1CisjZGVmaW5lIElOSVRJQUxDUkMgICAgMHhGRkZGRkZGRkZGRkZGRkZGCisKK3N0YXRpYyBN
dXRleCogc011dGV4Oworc3RhdGljIHVfaW50NjRfdCBDUkNUYWJsZVsyNTZdOworCitzdGF0aWMg
dm9pZCBpbml0Q1JDVGFibGUoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKysp
CisgICAgeworICAgICAgICB1X2ludDY0X3QgcGFydCA9IGk7CisgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgODsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocGFydCAmIDEpCisg
ICAgICAgICAgICAgICAgcGFydCA9IChwYXJ0ID4+IDEpIF4gUE9MWTY0UkVWOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHBhcnQgPj49IDE7CisgICAgICAgIH0KKyAgICAgICAg
Q1JDVGFibGVbaV0gPSBwYXJ0OworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9u
Y2UoKQoreworICAgIHNNdXRleCA9IG5ldyBNdXRleDsKKyAgICBpbml0Q1JDVGFibGUoKTsKK30K
KworI2lmIE9TKERBUldJTikKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBpbml0aWFsaXplT25jZUtl
eSA9IFBUSFJFQURfT05DRV9JTklUOworI2VuZGlmCisKK3N0YXRpYyBNdXRleCYgdmVjdG9yU3Rh
dHNNdXRleCgpCit7CisjaWYgT1MoREFSV0lOKQorICAgIHB0aHJlYWRfb25jZSgmaW5pdGlhbGl6
ZU9uY2VLZXksIGluaXRpYWxpemVPbmNlKTsKKyNlbmRpZgorICAgIHJldHVybiAqc011dGV4Owor
fQorCisvKgorc3RhdGljIGludCBidWNrZXRGb3JTaXplKGludCBjb3VudCwgaW50IG51bUJ1Y2tl
dHMpCit7CisgICAgcmV0dXJuIG1pbihjb3VudCwgbnVtQnVja2V0cyAtIDEpOworfQorCitzdGF0
aWMgaW50IGZ1bGxuZXNzQnVja2V0KGludCBzaXplLCBpbnQgY2FwYWNpdHkpCit7CisgICAgaWYg
KCFjYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoc2l6ZSA8PSBjYXBh
Y2l0eSk7CisgICAgcmV0dXJuIGNlaWwoMTAwLjAgKiAoKGRvdWJsZSkoc2l6ZSkgLyBjYXBhY2l0
eSkpOworfQorKi8KKy8qCitzdGF0aWMgdm9pZCBwcmludEJ1Y2tldHMoaW50IGJ1Y2tldHNbXSwg
aW50IG51bUJ1Y2tldHMpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1CdWNrZXRzOyAr
K2kpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJTNkICU4ZFxuIiwgaSwgYnVja2V0c1tpXSk7
Cit9CisqLworCisKKworLy8gUG9vciBtYW4ncyBoYXNoIGZvciBzdGFjayBhZGRyZXNzZXMuCitz
dGF0aWMgdV9pbnQ2NF90IGNyYzY0KGNoYXIgKnNlcSwgdW5zaWduZWQgaW50IGxnX3NlcSkKK3sK
KyAgICB1X2ludDY0X3QgY3JjID0gSU5JVElBTENSQzsKKworICAgIHdoaWxlIChsZ19zZXEtLSA+
IDApCisJCWNyYyA9IENSQ1RhYmxlWyhjcmMgXiAqc2VxKyspICYgMHhmZl0gXiAoY3JjID4+IDgp
OworCQorICAgIHJldHVybiBjcmM7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgZnJhbWVzVG9TaG93
ID0gNTsKK3N0YXRpYyBjb25zdCBpbnQgZnJhbWVzVG9Ta2lwID0gMjsKKworc3RydWN0IFBlclZl
Y3RvckRhdGEgeworICAgIHZvaWQqIG1fY3JlYXRpb25TdGFja1NhbXBsZXNbZnJhbWVzVG9TaG93
ICsgZnJhbWVzVG9Ta2lwXTsKKyAgICBpbnQgbV9jcmVhdGlvblN0YWNrRnJhbWVDb3VudCA9IGZy
YW1lc1RvU2hvdyArIGZyYW1lc1RvU2tpcDsKKworICAgIHVfaW50NjRfdCBtX3N0YWNrSGFzaDsK
KyAgICAKKyAgICBpbnQgbV9jdXJyU2l6ZTsKKyAgICBpbnQgbV9jdXJyQ2FwYWNpdHk7CisgICAg
CisgICAgaW50IG1fbWF4U2l6ZTsKKyAgICBpbnQgbV9tYXhDYXBhY2l0eTsKKworICAgIHNpemVf
dCBtX3ZhbHVlU2l6ZTsKKyAgICBkb3VibGUgbV9jcmVhdGlvblRpbWU7CisgICAgCisgICAgUGVy
VmVjdG9yRGF0YSgpCisgICAgICAgIDogbV9jdXJyU2l6ZSgwKQorICAgICAgICAsIG1fY3VyckNh
cGFjaXR5KDApCisgICAgICAgICwgbV9tYXhTaXplKDApCisgICAgICAgICwgbV9tYXhDYXBhY2l0
eSgwKQorICAgICAgICAsIG1fdmFsdWVTaXplKDApCisgICAgICAgICwgbV9jcmVhdGlvblRpbWUo
MCkKKyAgICB7CisgICAgfQorfTsKKwordHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBQZXJWZWN0b3JE
YXRhPiBWZWN0b3JIYXNoOworCitzdGF0aWMgVmVjdG9ySGFzaCYgdmVjdG9yTGlzdCgpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3JIYXNoLCB2ZWN0b3JMaXN0LCAoKSk7CisgICAg
cmV0dXJuIHZlY3Rvckxpc3Q7Cit9CisKK3ZvaWQgVmVjdG9yU3RhdHM6OnZlY3RvckNyZWF0ZWQo
dm9pZCogdmVjdG9yLCBzaXplX3QgdmFsdWVTaXplLCBpbnQgY2FwYWNpdHksIGludCBzaXplKQor
eworICAgIEFTU0VSVChzaXplIDw9IGNhcGFjaXR5KTsKKworICAgIE11dGV4TG9ja2VyIGxvY2so
dmVjdG9yU3RhdHNNdXRleCgpKTsKKworICAgIFBlclZlY3RvckRhdGEgY3VyclZlY3RvckRhdGE7
CisgICAgY3VyclZlY3RvckRhdGEubV92YWx1ZVNpemUgPSB2YWx1ZVNpemU7CisgICAgY3VyclZl
Y3RvckRhdGEubV9jdXJyU2l6ZSA9IHNpemU7OworICAgIGN1cnJWZWN0b3JEYXRhLm1fY3VyckNh
cGFjaXR5ID0gY2FwYWNpdHk7CisgICAgY3VyclZlY3RvckRhdGEubV9tYXhTaXplID0gc2l6ZTsK
KyAgICBjdXJyVmVjdG9yRGF0YS5tX21heENhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgY3VyclZl
Y3RvckRhdGEubV9jcmVhdGlvblRpbWUgPSBjdXJyZW50VGltZSgpOworCisgICAgV1RGR2V0QmFj
a3RyYWNlKGN1cnJWZWN0b3JEYXRhLm1fY3JlYXRpb25TdGFja1NhbXBsZXMsICZjdXJyVmVjdG9y
RGF0YS5tX2NyZWF0aW9uU3RhY2tGcmFtZUNvdW50KTsKKworICAgIGN1cnJWZWN0b3JEYXRhLm1f
c3RhY2tIYXNoID0gY3JjNjQoKGNoYXIqKWN1cnJWZWN0b3JEYXRhLm1fY3JlYXRpb25TdGFja1Nh
bXBsZXMsIGN1cnJWZWN0b3JEYXRhLm1fY3JlYXRpb25TdGFja0ZyYW1lQ291bnQgKiBzaXplb2Yo
dm9pZCopKTsKKyAgICBBU1NFUlQoY3VyclZlY3RvckRhdGEubV9zdGFja0hhc2gpOworICAgIAor
CisgICAgVmVjdG9ySGFzaCYgdmVjdG9yRGF0YSA9IHZlY3Rvckxpc3QoKTsKKyAgICB2ZWN0b3JE
YXRhLmFkZCh2ZWN0b3IsIGN1cnJWZWN0b3JEYXRhKTsKK30KKwordm9pZCBWZWN0b3JTdGF0czo6
dmVjdG9yVXBkYXRlZCh2b2lkKiB2ZWN0b3IsIGludCBjYXBhY2l0eSwgaW50IHNpemUpCit7Cisg
ICAgQVNTRVJUKHNpemUgPD0gY2FwYWNpdHkpOworICAgIE11dGV4TG9ja2VyIGxvY2sodmVjdG9y
U3RhdHNNdXRleCgpKTsKKworICAgIFZlY3Rvckhhc2gmIHZlY3RvckRhdGEgPSB2ZWN0b3JMaXN0
KCk7CisgICAgVmVjdG9ySGFzaDo6aXRlcmF0b3IgaXQgPSB2ZWN0b3JEYXRhLmZpbmQodmVjdG9y
KTsKKyAgICBpZiAoaXQgIT0gdmVjdG9yRGF0YS5lbmQoKSkgeworICAgICAgICBQZXJWZWN0b3JE
YXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKworICAgICAgICBkYXRhLm1fY3VyclNpemUgPSBzaXpl
OzsKKyAgICAgICAgZGF0YS5tX2N1cnJDYXBhY2l0eSA9IGNhcGFjaXR5OworCisgICAgICAgIGRh
dGEubV9tYXhTaXplID0gbWF4KGRhdGEubV9tYXhTaXplLCBzaXplKTsKKyAgICAgICAgZGF0YS5t
X21heENhcGFjaXR5ID0gbWF4KGRhdGEubV9tYXhDYXBhY2l0eSwgY2FwYWNpdHkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biB2ZWN0b3IgJXBcbiIsIHZl
Y3Rvcik7CisgICAgfQorfQorCitzdHJ1Y3QgQWxsb2NhdGlvblN0YWNrSW5mbyB7CisgICAgUGVy
VmVjdG9yRGF0YSBtX2ZpcnN0VmVjdG9yOyAvLyBVc2VkIHRvIGZldGNoIHRoZSBzdGFjayBmcmFt
ZXMuCisgICAgCisgICAgdW5zaWduZWQgbV9jb3VudDsKKyAgICB1X2ludDY0X3QgbV90b3RhbFNp
emVCeXRlczsgCisgICAgdV9pbnQ2NF90IG1fdG90YWxDYXBhY2l0eUJ5dGVzOworICAgIAorICAg
IEFsbG9jYXRpb25TdGFja0luZm8oKQorICAgICAgICA6IG1fY291bnQoMCkKKyAgICAgICAgLCBt
X3RvdGFsU2l6ZUJ5dGVzKDApCisgICAgICAgICwgbV90b3RhbENhcGFjaXR5Qnl0ZXMoMCkKKyAg
ICB7CisgICAgfQorfTsKKworc3RhdGljIGJvb2wgY29tcGFyZUJ5V2FzdGUoY29uc3QgQWxsb2Nh
dGlvblN0YWNrSW5mbyogZmlyc3QsIGNvbnN0IEFsbG9jYXRpb25TdGFja0luZm8qIHNlY29uZCkK
K3sKKyAgICB1X2ludDY0X3QgZmlyc3RXYXN0ZSA9IGZpcnN0LT5tX3RvdGFsQ2FwYWNpdHlCeXRl
cyAtIGZpcnN0LT5tX3RvdGFsU2l6ZUJ5dGVzOworICAgIHVfaW50NjRfdCBzZWNvbmRXYXN0ZSA9
IHNlY29uZC0+bV90b3RhbENhcGFjaXR5Qnl0ZXMgLSBzZWNvbmQtPm1fdG90YWxTaXplQnl0ZXM7
CisgICAgCisgICAgcmV0dXJuIGZpcnN0V2FzdGUgPCBzZWNvbmRXYXN0ZTsKK30KKworc3RhdGlj
IHZvaWQgZHVtcFdhc3RlZnVsbmVzc1N0YXRzKCkKK3sKKyAgICBIYXNoTWFwPHVfaW50NjRfdCwg
QWxsb2NhdGlvblN0YWNrSW5mbz4gY29tbW9uU3RhY2tzTWFwOworCisgICAgeworICAgICAgICBW
ZWN0b3JIYXNoJiB2ZWN0b3JIYXNoID0gdmVjdG9yTGlzdCgpOworICAgICAgICBNdXRleExvY2tl
ciBsb2NrKHZlY3RvclN0YXRzTXV0ZXgoKSk7CisKKyAgICAgICAgbG9uZyBsb25nIHRvdGFsVXNl
ZEJ5dGVzID0gMDsKKyAgICAgICAgbG9uZyBsb25nIHRvdGFsQ2FwYWNpdHlCeXRlcyA9IDA7Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3JIYXNoOjpjb25zdF9pdGVyYXRvciBlbmQgPSB2ZWN0b3JI
YXNoLmVuZCgpOworICAgICAgICBmb3IgKFZlY3Rvckhhc2g6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
dmVjdG9ySGFzaC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGNvbnN0
IFBlclZlY3RvckRhdGEmIGN1cnJWZWN0b3JEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgCisg
ICAgICAgICAgICB0b3RhbFVzZWRCeXRlcyArPSBjdXJyVmVjdG9yRGF0YS5tX2N1cnJTaXplICog
Y3VyclZlY3RvckRhdGEubV92YWx1ZVNpemU7CisgICAgICAgICAgICB0b3RhbENhcGFjaXR5Qnl0
ZXMgKz0gY3VyclZlY3RvckRhdGEubV9jdXJyQ2FwYWNpdHkgKiBjdXJyVmVjdG9yRGF0YS5tX3Zh
bHVlU2l6ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgIEhhc2hNYXA8dV9pbnQ2NF90LCBB
bGxvY2F0aW9uU3RhY2tJbmZvPjo6aXRlcmF0b3IgY29tbW9uU3RhY2tzSXQgPSBjb21tb25TdGFj
a3NNYXAuZmluZChjdXJyVmVjdG9yRGF0YS5tX3N0YWNrSGFzaCk7CisgICAgICAgICAgICAgaWYg
KGNvbW1vblN0YWNrc0l0ID09IGNvbW1vblN0YWNrc01hcC5lbmQoKSkgeworICAgICAgICAgICAg
ICAgIEFsbG9jYXRpb25TdGFja0luZm8gYWxsb2NhdGlvbkluZm87CisgICAgICAgICAgICAgICAg
YWxsb2NhdGlvbkluZm8ubV9maXJzdFZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAg
ICAgYWxsb2NhdGlvbkluZm8ubV9jb3VudCA9IDE7CisgICAgICAgICAgICAgICAgYWxsb2NhdGlv
bkluZm8ubV90b3RhbFNpemVCeXRlcyA9IGN1cnJWZWN0b3JEYXRhLm1fY3VyclNpemUgKiBjdXJy
VmVjdG9yRGF0YS5tX3ZhbHVlU2l6ZTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uSW5mby5t
X3RvdGFsQ2FwYWNpdHlCeXRlcyA9IGN1cnJWZWN0b3JEYXRhLm1fY3VyckNhcGFjaXR5ICogY3Vy
clZlY3RvckRhdGEubV92YWx1ZVNpemU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY29tbW9uU3RhY2tzTWFwLmFkZChjdXJyVmVjdG9yRGF0YS5tX3N0YWNrSGFzaCwgYWxsb2Nh
dGlvbkluZm8pOworICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQWxsb2Nh
dGlvblN0YWNrSW5mbyYgYWxsb2NhdGlvbkluZm8gPSBjb21tb25TdGFja3NJdC0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFsbG9jYXRpb25JbmZvLm1fY291bnQg
Kz0gMTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uSW5mby5tX3RvdGFsU2l6ZUJ5dGVzICs9
IGN1cnJWZWN0b3JEYXRhLm1fY3VyclNpemUgKiBjdXJyVmVjdG9yRGF0YS5tX3ZhbHVlU2l6ZTsK
KyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uSW5mby5tX3RvdGFsQ2FwYWNpdHlCeXRlcyArPSBj
dXJyVmVjdG9yRGF0YS5tX2N1cnJDYXBhY2l0eSAqIGN1cnJWZWN0b3JEYXRhLm1fdmFsdWVTaXpl
OworICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnByaW50Zihz
dGRvdXQsICJcbiVkIGV4dGFudCB2ZWN0b3JzIHdhc3RpbmcgJS4yZk1CICUuMmYlJSAodXNlZCAl
bGxkIGJ5dGVzLCBjYXBhY2l0eSAlbGxkIGJ5dGVzKTpcbiIsCisgICAgICAgICAgICB2ZWN0b3JI
YXNoLnNpemUoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4odG90YWxDYXBhY2l0
eUJ5dGVzIC0gdG90YWxVc2VkQnl0ZXMpIC8gKDEwMjQgKiAxMDI0KSwKKyAgICAgICAgICAgIDEw
MC4wICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0b3RhbENhcGFjaXR5Qnl0ZXMgLSB0b3RhbFVzZWRC
eXRlcykgLyB0b3RhbENhcGFjaXR5Qnl0ZXMsCisgICAgICAgICAgICB0b3RhbFVzZWRCeXRlcywg
dG90YWxDYXBhY2l0eUJ5dGVzKTsgICAgCisgICAgfQorICAgIAorICAgIFZlY3Rvcjxjb25zdCBB
bGxvY2F0aW9uU3RhY2tJbmZvKj4gYWxsb2NhdGlvbnM7CisgICAgYWxsb2NhdGlvbnMucmVzaXpl
KGNvbW1vblN0YWNrc01hcC5zaXplKCkpOworICAgIAorICAgIEhhc2hNYXA8dV9pbnQ2NF90LCBB
bGxvY2F0aW9uU3RhY2tJbmZvPjo6Y29uc3RfaXRlcmF0b3Igc3RhY2tzRW5kID0gY29tbW9uU3Rh
Y2tzTWFwLmVuZCgpOworICAgIEhhc2hNYXA8dV9pbnQ2NF90LCBBbGxvY2F0aW9uU3RhY2tJbmZv
Pjo6Y29uc3RfaXRlcmF0b3Igc3RhY2tzSXQ7CisgICAgaW50IGk7CisgICAgZm9yIChzdGFja3NJ
dCA9IGNvbW1vblN0YWNrc01hcC5iZWdpbigpLCBpID0gMDsgc3RhY2tzSXQgIT0gc3RhY2tzRW5k
OyArK3N0YWNrc0l0LCArK2kpCisgICAgICAgIGFsbG9jYXRpb25zW2ldID0gJihzdGFja3NJdC0+
c2Vjb25kKTsKKyAgICAKKyAgICBzdGQ6OnNvcnQoYWxsb2NhdGlvbnMuYmVnaW4oKSwgYWxsb2Nh
dGlvbnMuZW5kKCksIGNvbXBhcmVCeVdhc3RlKTsKKyAgICAKKyAgICAvLyBQcmludCB0aGUgZmly
c3QKKyAgICBjb25zdCBBbGxvY2F0aW9uU3RhY2tJbmZvKiBsYXN0ID0gYWxsb2NhdGlvbnNbYWxs
b2NhdGlvbnMuc2l6ZSgpIC0gMV07CisgICAgCisgICAgeworICAgICAgICBNdXRleExvY2tlciBs
b2NrKHZlY3RvclN0YXRzTXV0ZXgoKSk7IC8vIFRyeSB0byBhdm9pZCBpbnRlcmxlYXZlZCBvdXRw
dXQuCisKKyAgICAgICAgaW50IHN0YWNrc1RvUHJpbnQgPSBtaW48aW50PihhbGxvY2F0aW9ucy5z
aXplKCksIDIwKTsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICJcbk1vc3Qgd2FzdGVmdWwgJWQg
c3RhY2tzXG4iLCBzdGFja3NUb1ByaW50KTsKKyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgc3RhY2tzVG9QcmludDsgKytqKSB7CisgICAgICAgICAgICBjb25zdCBBbGxvY2F0
aW9uU3RhY2tJbmZvKiBjdXJyU3RhY2sgPSBhbGxvY2F0aW9uc1thbGxvY2F0aW9ucy5zaXplKCkg
LSBqIC0gMV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJWQg
dmVjdG9ycywgJS4yZktCIHVzZWQgb2YgJS4yZktCLCAlLjJmS0Igd2FzdGVkIGF0OlxuIiwgY3Vy
clN0YWNrLT5tX2NvdW50LAorICAgICAgICAgICAgICAgIChkb3VibGUpY3VyclN0YWNrLT5tX3Rv
dGFsU2l6ZUJ5dGVzIC8gMTAyNCwKKyAgICAgICAgICAgICAgICAoZG91YmxlKWN1cnJTdGFjay0+
bV90b3RhbENhcGFjaXR5Qnl0ZXMgLyAxMDI0LAorICAgICAgICAgICAgICAgIChkb3VibGUpKGN1
cnJTdGFjay0+bV90b3RhbENhcGFjaXR5Qnl0ZXMgLSBsYXN0LT5tX3RvdGFsU2l6ZUJ5dGVzKSAv
IDEwMjQuMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFdURlByaW50QmFja3RyYWNlKCh2
b2lkKiopKGN1cnJTdGFjay0+bV9maXJzdFZlY3Rvci5tX2NyZWF0aW9uU3RhY2tTYW1wbGVzKSAr
IGZyYW1lc1RvU2tpcCwgY3VyclN0YWNrLT5tX2ZpcnN0VmVjdG9yLm1fY3JlYXRpb25TdGFja0Zy
YW1lQ291bnQgLSBmcmFtZXNUb1NraXApOworICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJc
biIpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFZlY3RvclN0YXRzOjp2ZWN0b3JEZXN0
cm95ZWQodm9pZCogdmVjdG9yKQoreworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9jayh2
ZWN0b3JTdGF0c011dGV4KCkpOworCisgICAgICAgIFZlY3Rvckhhc2gmIHZlY3RvckRhdGEgPSB2
ZWN0b3JMaXN0KCk7CisgICAgICAgIFZlY3Rvckhhc2g6Oml0ZXJhdG9yIGl0ID0gdmVjdG9yRGF0
YS5maW5kKHZlY3Rvcik7CisgICAgICAgIGlmIChpdCAhPSB2ZWN0b3JEYXRhLmVuZCgpKSB7Cisg
ICAgICAgICAgICB2ZWN0b3JEYXRhLnJlbW92ZShpdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gdmVjdG9yICVwXG4iLCB2ZWN0b3IpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFZlY3RvclN0YXRzOjpkdW1wVmVjdG9yU3RhdHMo
KQoreworICAgIGR1bXBXYXN0ZWZ1bG5lc3NTdGF0cygpOworfQorCisKKyNlbmRpZiAvLyBEVU1Q
X1ZFQ1RPUl9TVEFUUworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvVmVjdG9yLmggYi9T
b3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAppbmRleCAxOWU2ZmZiOGMxNjQ2YWFkZTRmNWI2NjA1NDg5
YWZiMWM2ZWNhN2I2Li41YmUwMDQyMGRlMjcyMzk3NmU4ODMxNmUzM2YyZTI0ZTZmN2Q4ZTAxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9W
ZWN0b3IuaApAQCAtMzUsOCArMzUsMjAgQEAKICNpbmNsdWRlIDxRRGF0YVN0cmVhbT4KICNlbmRp
ZgogCisjZGVmaW5lIERVTVBfVkVDVE9SX1NUQVRTIDEKKwogbmFtZXNwYWNlIFdURiB7CiAKKyNp
ZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgIHN0cnVjdCBWZWN0b3JTdGF0cyB7CisgICAgICAgIH5W
ZWN0b3JTdGF0cygpOworICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmVj
dG9yQ3JlYXRlZCh2b2lkKiB2ZWN0b3IsIHNpemVfdCB2YWx1ZVNpemUsIGludCBjYXBhY2l0eSwg
aW50IHNpemUpOworICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmVjdG9y
VXBkYXRlZCh2b2lkKiB2ZWN0b3IsIGludCBjYXBhY2l0eSwgaW50IHNpemUpOworICAgICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdmVjdG9yRGVzdHJveWVkKHZvaWQqIHZlY3Rv
cik7CisgICAgICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBkdW1wVmVjdG9yU3Rh
dHMoKTsKKyAgICB9OworI2VuZGlmCisKICAgICB1c2luZyBzdGQ6Om1pbjsKICAgICB1c2luZyBz
dGQ6Om1heDsKIApAQCAtNDk0LDE4ICs1MDYsMjcgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IFZlY3RvcigpIAogICAgICAgICAgICAgOiBtX3NpemUoMCkKICAgICAgICAgeworI2lmIERVTVBf
VkVDVE9SX1NUQVRTCisgICAgICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yQ3JlYXRlZCh0aGlz
LCBzaXplb2YoVmFsdWVUeXBlKSwgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRp
ZgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBleHBsaWNpdCBWZWN0b3Ioc2l6ZV90IHNp
emUpIAogICAgICAgICAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAgICAgICAgICwgbV9idWZmZXIo
c2l6ZSkKICAgICAgICAgeworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgICAgICBWZWN0
b3JTdGF0czo6dmVjdG9yQ3JlYXRlZCh0aGlzLCBzaXplb2YoVmFsdWVUeXBlKSwgbV9idWZmZXIu
Y2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKGJlZ2luKCkpCiAg
ICAgICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OmluaXRpYWxpemUoYmVnaW4oKSwgZW5kKCkp
OwogICAgICAgICB9CiAKICAgICAgICAgflZlY3RvcigpCiAgICAgICAgIHsKKyNpZiBEVU1QX1ZF
Q1RPUl9TVEFUUworICAgICAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvckRlc3Ryb3llZCh0aGlz
KTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKG1fc2l6ZSkKICAgICAgICAgICAgICAgICBzaHJp
bmsoMCk7CiAgICAgICAgIH0KQEAgLTYwMCw2ICs2MjEsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAg
ICAgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAgICAgICAgICAsIG1fYnVmZmVyKHNpemUpCiAg
ICAgICAgIHsKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICAgICAgVmVjdG9yU3RhdHM6
OnZlY3RvckNyZWF0ZWQodGhpcywgc2l6ZW9mKFZhbHVlVHlwZSksIG1fYnVmZmVyLmNhcGFjaXR5
KCksIG1fc2l6ZSk7CisjZW5kaWYKICAgICAgICAgICAgIGlmIChiZWdpbigpKQogICAgICAgICAg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChiZWdpbigpLCBlbmQoKSwg
dmFsKTsKICAgICAgICAgfQpAQCAtNjg0LDYgKzcwOCw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICA6IG1fc2l6ZShvdGhlci5zaXplKCkpCiAgICAgICAgICwgbV9idWZmZXIob3RoZXIuY2Fw
YWNpdHkoKSkKICAgICB7CisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3Rh
dHM6OnZlY3RvckNyZWF0ZWQodGhpcywgc2l6ZW9mKFZhbHVlVHlwZSksIG1fYnVmZmVyLmNhcGFj
aXR5KCksIG1fc2l6ZSk7CisjZW5kaWYKICAgICAgICAgaWYgKGJlZ2luKCkpCiAgICAgICAgICAg
ICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3RoZXIuYmVnaW4oKSwgb3RoZXIu
ZW5kKCksIGJlZ2luKCkpOwogICAgIH0KQEAgLTY5NCw2ICs3MjEsOSBAQCBuYW1lc3BhY2UgV1RG
IHsKICAgICAgICAgOiBtX3NpemUob3RoZXIuc2l6ZSgpKQogICAgICAgICAsIG1fYnVmZmVyKG90
aGVyLmNhcGFjaXR5KCkpCiAgICAgeworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIFZl
Y3RvclN0YXRzOjp2ZWN0b3JDcmVhdGVkKHRoaXMsIHNpemVvZihWYWx1ZVR5cGUpLCBtX2J1ZmZl
ci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgICAgIGlmIChiZWdpbigpKQogICAg
ICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCks
IG90aGVyLmVuZCgpLCBiZWdpbigpKTsKICAgICB9CkBAIC03MjMsNiArNzUzLDEwIEBAIG5hbWVz
cGFjZSBXVEYgewogICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZENvcHkob3Ro
ZXIuYmVnaW4oKSArIHNpemUoKSwgb3RoZXIuZW5kKCksIGVuZCgpKTsKICAgICAgICAgbV9zaXpl
ID0gb3RoZXIuc2l6ZSgpOwogCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9y
U3RhdHM6OnZlY3RvclVwZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsK
KyNlbmRpZgorCiAgICAgICAgIHJldHVybiAqdGhpczsKICAgICB9CiAKQEAgLTc1Niw2ICs3OTAs
OSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6
ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CiAgICAg
ICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAorI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAg
ICAgIFZlY3RvclN0YXRzOjp2ZWN0b3JVcGRhdGVkKHRoaXMsIG1fYnVmZmVyLmNhcGFjaXR5KCks
IG1fc2l6ZSk7CisjZW5kaWYKICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgIH0KIApAQCAtODA0
LDYgKzg0MSwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgc3RkOjpmaWxsKGJlZ2luKCks
IGVuZCgpLCB2YWwpOwogICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwo
ZW5kKCksIGJlZ2luKCkgKyBuZXdTaXplLCB2YWwpOwogICAgICAgICBtX3NpemUgPSBuZXdTaXpl
OworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvclVw
ZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0K
IAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTg3
Miw2ICs5MTMsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIG1fc2l6ZSA9IHNpemU7CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICBWZWN0
b3JTdGF0czo6dmVjdG9yVXBkYXRlZCh0aGlzLCBtX2J1ZmZlci5jYXBhY2l0eSgpLCBtX3NpemUp
OworI2VuZGlmCiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGlu
ZUNhcGFjaXR5PgpAQCAtODkxLDYgKzkzNiwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAg
aWYgKGJlZ2luKCkpCiAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6ZShlbmQo
KSwgYmVnaW4oKSArIHNpemUpOwogICAgICAgICBtX3NpemUgPSBzaXplOworCisjaWYgRFVNUF9W
RUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvclVwZGF0ZWQodGhpcywgbV9i
dWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTkwNCw2ICs5NTMsMTAgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGlmIChiZWdpbigpKQogICAgICAgICAgICAgVHlwZU9w
ZXJhdGlvbnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOwogICAgICAgICBtX2J1
ZmZlci5kZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFU
UworICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yVXBkYXRlZCh0aGlzLCBtX2J1ZmZlci5jYXBh
Y2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTkxOCw2ICs5NzEsMTAgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIEFTU0VSVChiZWdpbigpKTsKICAgICAgICAgVHlwZU9wZXJhdGlv
bnM6Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOwogICAgICAgICBtX2J1ZmZlci5k
ZWFsbG9jYXRlQnVmZmVyKG9sZEJ1ZmZlcik7CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAg
ICAgICBWZWN0b3JTdGF0czo6dmVjdG9yVXBkYXRlZCh0aGlzLCBtX2J1ZmZlci5jYXBhY2l0eSgp
LCBtX3NpemUpOworI2VuZGlmCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAg
LTkyOCw2ICs5ODUsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEFTU0VSVChjYXBhY2l0
eSgpID09IGlubGluZUNhcGFjaXR5KTsKICAgICAgICAgaWYgKGluaXRpYWxDYXBhY2l0eSA+IGlu
bGluZUNhcGFjaXR5KQogICAgICAgICAgICAgbV9idWZmZXIuYWxsb2NhdGVCdWZmZXIoaW5pdGlh
bENhcGFjaXR5KTsKKworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIFZlY3RvclN0YXRz
Ojp2ZWN0b3JVcGRhdGVkKHRoaXMsIG1fYnVmZmVyLmNhcGFjaXR5KCksIG1fc2l6ZSk7CisjZW5k
aWYKICAgICB9CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNh
cGFjaXR5PgpAQCAtOTcwLDYgKzEwMzEsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YVNpemU7ICsraSkKICAgICAgICAgICAgIG5ldyAoTm90
TnVsbCwgJmRlc3RbaV0pIFQoZGF0YVtpXSk7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CisK
KyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yVXBkYXRl
ZCh0aGlzLCBtX2J1ZmZlci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgfQogCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PiB0ZW1wbGF0ZTx0
eXBlbmFtZSBVPgpAQCAtOTg4LDYgKzEwNTMsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGF0YVNpemU7ICsraSkKICAgICAgICAgICAgIG5ldyAo
Tm90TnVsbCwgJmRlc3RbaV0pIFQoZGF0YVtpXSk7CiAgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7
CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yVXBk
YXRlZCh0aGlzLCBtX2J1ZmZlci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtOTk3LDYgKzEwNjYsMTAgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIGlmIChzaXplKCkgIT0gY2FwYWNpdHkoKSkgewogICAgICAgICAgICAgbmV3
IChOb3ROdWxsLCBlbmQoKSkgVCh2YWwpOwogICAgICAgICAgICAgKyttX3NpemU7CisKKyNpZiBE
VU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yVXBkYXRlZCh0aGlz
LCBtX2J1ZmZlci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KIApAQCAtMTAxNSw2ICsxMDg4LDEwIEBAIG5hbWVzcGFjZSBXVEYgewog
CiAgICAgICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoKnB0cik7CiAgICAgICAgICsrbV9zaXpl
OworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvclVw
ZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0K
IAogICAgIC8vIFRoaXMgdmVyc2lvbiBvZiBhcHBlbmQgc2F2ZXMgYSBicmFuY2ggaW4gdGhlIGNh
c2Ugd2hlcmUgeW91IGtub3cgdGhhdCB0aGUKQEAgLTEwMjcsNiArMTEwNCwxMCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgY29uc3QgVSogcHRyID0gJnZhbDsKICAgICAgICAgbmV3IChOb3RO
dWxsLCBlbmQoKSkgVCgqcHRyKTsKICAgICAgICAgKyttX3NpemU7CisKKyNpZiBEVU1QX1ZFQ1RP
Ul9TVEFUUworICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yVXBkYXRlZCh0aGlzLCBtX2J1ZmZl
ci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gVGhpcyBtZXRo
b2Qgc2hvdWxkIG5vdCBiZSBjYWxsZWQgYXBwZW5kLCBhIGJldHRlciBuYW1lIHdvdWxkIGJlIGFw
cGVuZEVsZW1lbnRzLgpAQCAtMTA1NSw2ICsxMTM2LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFTaXplOyArK2kpCiAgICAgICAgICAgICBu
ZXcgKE5vdE51bGwsICZzcG90W2ldKSBUKGRhdGFbaV0pOwogICAgICAgICBtX3NpemUgPSBuZXdT
aXplOworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3Rv
clVwZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAg
IH0KICAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5
PiB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgpAQCAtMTA3MSw2ICsxMTU2LDEwIEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBUeXBlT3BlcmF0aW9uczo6bW92ZU92ZXJsYXBwaW5nKHNwb3QsIGVuZCgp
LCBzcG90ICsgMSk7CiAgICAgICAgIG5ldyAoTm90TnVsbCwgc3BvdCkgVCgqZGF0YSk7CiAgICAg
ICAgICsrbV9zaXplOworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3Rh
dHM6OnZlY3RvclVwZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNl
bmRpZgogICAgIH0KICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVSwgc2l6ZV90IGM+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCmluZGV4IGRkYmJhOWYx
NTBkNzRlZDg3MGVlZDJhYWIxNTFlY2U0MDVhNjIzNWUuLjA0ZDE2OGVhMTk1Mzc2NmUyMjUyZGY2
YzE0MDUzMDdlMTgzMjhlMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
bWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
bWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tCkBAIC02Miw2ICs2MiwxMSBAQCB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyB2b2lkIGR1bXBTdGF0
c09ic2VydmVyQ2FsbGJhY2soQ0ZSdW5Mb29wT2JzZXJ2ZXJSZWYsIENGUnVuTG9vcEFjdGl2aXR5
LCB2b2lkKikKK3sKKyAgICBXVEY6OlZlY3RvclN0YXRzOjpkdW1wVmVjdG9yU3RhdHMoKTsKK30K
KwogaW50IFdlYlByb2Nlc3NNYWluKGNvbnN0IENvbW1hbmRMaW5lJiBjb21tYW5kTGluZSkKIHsK
ICAgICAvLyBSZW1vdmUgdGhlIFdlYlByb2Nlc3Mgc2hpbSBmcm9tIHRoZSBEWUxEX0lOU0VSVF9M
SUJSQVJJRVMgZW52aXJvbm1lbnQgdmFyaWFibGUgc28gYW55IHByb2Nlc3NlcyBzcGF3bmVkIGJ5
CkBAIC0xNjgsNiArMTczLDEwIEBAIGludCBXZWJQcm9jZXNzTWFpbihjb25zdCBDb21tYW5kTGlu
ZSYgY29tbWFuZExpbmUpCiAKICAgICBbcG9vbCBkcmFpbl07CiAKKyAgICBDRlJ1bkxvb3BPYnNl
cnZlckNvbnRleHQgY29udGV4dCA9IHswLCAwLCAwLCAwLCAwfTsKKyAgICBDRlJ1bkxvb3BPYnNl
cnZlclJlZiBkdW1wVmVjdG9yU3RhdHNPYnNlcnZlciA9IENGUnVuTG9vcE9ic2VydmVyQ3JlYXRl
KGtDRkFsbG9jYXRvckRlZmF1bHQsIGtDRlJ1bkxvb3BCZWZvcmVXYWl0aW5nLCBZRVMsIDAsICZk
dW1wU3RhdHNPYnNlcnZlckNhbGxiYWNrLCAmY29udGV4dCk7CisgICAgQ0ZSdW5Mb29wQWRkT2Jz
ZXJ2ZXIoQ0ZSdW5Mb29wR2V0TWFpbigpLCBkdW1wVmVjdG9yU3RhdHNPYnNlcnZlciwga0NGUnVu
TG9vcERlZmF1bHRNb2RlKTsKKwogICAgICAvLyBJbml0aWFsaXplIEFwcEtpdC4KICAgICBbTlNB
cHBsaWNhdGlvbiBzaGFyZWRBcHBsaWNhdGlvbl07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141981</attachid>
            <date>2012-05-15 08:45:41 -0700</date>
            <delta_ts>2012-05-15 08:46:01 -0700</delta_ts>
            <desc>Patch (fixes shrinkToFit)</desc>
            <filename>bug-86281-20120515084540.patch</filename>
            <type>text/plain</type>
            <size>32020</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NzIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDQxNzQ4MTQxNThlMzE3YTRkNmYzZjY0
OGJmMDAwNTc2ZDdiNDYwMDIuLjA1ZTIwNTg3NjNhZjA4ZjQxOWVkZjA4ZjU1MzRlOWJhOTU3Yjlk
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjUgQEAKKzIwMTItMDUtMTQgIFNpbW9uIEZyYXNlciAgPHNpbW9u
LmZyYXNlckBhcHBsZS5jb20+CisKKyAgICAgICAgNTklIG9mIFZlY3RvciBidWZmZXIgY2FwYWNp
dHkgaXMgdW51c2VkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD04NjI4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgUGF0Y2ggdG8gYWRkIGxvZ2dpbmcgb2YgVmVjdG9yIHVzYWdlLgorCisgICAg
ICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL0hhc2hU
YWJsZS5jcHA6CisgICAgICAgIChXVEYpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGVTdGF0czo6
cmVjb3JkQ29sbGlzaW9uQXRDb3VudCk6CisgICAgICAgIChXVEY6OmJ1Y2tldEZvcktleUNvdW50
KToKKyAgICAgICAgKFdURjo6cHJpbnRCdWNrZXRzKToKKyAgICAgICAgKFdURjo6SGFzaFRhYmxl
U3RhdHM6OnJlY29yZFRhYmxlU2l6ZSk6CisgICAgICAgICogd3RmL0hhc2hUYWJsZS5oOgorICAg
ICAgICAoSGFzaFRhYmxlU3RhdHMpOgorICAgICAgICAoV1RGOjpIYXNoVGFibGU6On5IYXNoVGFi
bGUpOgorICAgICAgICAoSGFzaFRhYmxlKToKKyAgICAgICAgKFdURjo6OjpIYXNoVGFibGUpOgor
ICAgICAgICAoV1RGOjo6OmFkZCk6CisgICAgICAgIChXVEY6Ojo6cmVoYXNoKToKKyAgICAgICAg
KFdURjo6Ojpzd2FwKToKKyAgICAgICAgKiB3dGYvU2l6ZUxpbWl0cy5jcHA6CisgICAgICAgIChX
VEYpOgorICAgICAgICAqIHd0Zi9WZWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURik6Cisg
ICAgICAgIChXVEY6OmluaXRDUkNUYWJsZSk6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVPbmNl
KToKKyAgICAgICAgKFdURjo6dmVjdG9yU3RhdHNNdXRleCk6CisgICAgICAgIChXVEY6OmNyYzY0
KToKKyAgICAgICAgKFBlclZlY3RvckRhdGEpOgorICAgICAgICAoV1RGOjpQZXJWZWN0b3JEYXRh
OjpQZXJWZWN0b3JEYXRhKToKKyAgICAgICAgKFdURjo6dmVjdG9yTGlzdCk6CisgICAgICAgIChX
VEY6OlZlY3RvclN0YXRzOjp2ZWN0b3JDcmVhdGVkKToKKyAgICAgICAgKFdURjo6VmVjdG9yU3Rh
dHM6OnZlY3RvclVwZGF0ZWQpOgorICAgICAgICAoQWxsb2NhdGlvblN0YWNrSW5mbyk6CisgICAg
ICAgIChXVEY6OkFsbG9jYXRpb25TdGFja0luZm86OkFsbG9jYXRpb25TdGFja0luZm8pOgorICAg
ICAgICAoV1RGOjpjb21wYXJlQnlXYXN0ZSk6CisgICAgICAgIChXVEY6OmR1bXBXYXN0ZWZ1bG5l
c3NTdGF0cyk6CisgICAgICAgIChXVEY6OlZlY3RvclN0YXRzOjp2ZWN0b3JEZXN0cm95ZWQpOgor
ICAgICAgICAoV1RGOjpWZWN0b3JTdGF0czo6ZHVtcFZlY3RvclN0YXRzKToKKyAgICAgICAgKiB3
dGYvVmVjdG9yLmg6CisgICAgICAgIChXVEYpOgorICAgICAgICAoVmVjdG9yU3RhdHMpOgorICAg
ICAgICAoV1RGOjpWZWN0b3I6OlZlY3Rvcik6CisgICAgICAgIChXVEY6OlZlY3Rvcjo6flZlY3Rv
cik6CisgICAgICAgIChXVEY6Ojo6VmVjdG9yKToKKyAgICAgICAgKFdURjo6PSk6CisgICAgICAg
IChXVEY6Ojo6ZmlsbCk6CisgICAgICAgIChXVEY6Ojo6cmVzaXplKToKKyAgICAgICAgKFdURjo6
Ojpncm93KToKKyAgICAgICAgKFdURjo6OjpyZXNlcnZlQ2FwYWNpdHkpOgorICAgICAgICAoV1RG
Ojo6OnRyeVJlc2VydmVDYXBhY2l0eSk6CisgICAgICAgIChXVEY6Ojo6cmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSk6CisgICAgICAgIChXVEY6Ojo6YXBwZW5kKToKKyAgICAgICAgKFdURjo6Ojp0cnlB
cHBlbmQpOgorICAgICAgICAoV1RGOjo6OmFwcGVuZFNsb3dDYXNlKToKKyAgICAgICAgKFdURjo6
Ojp1bmNoZWNrZWRBcHBlbmQpOgorICAgICAgICAoV1RGOjo6Omluc2VydCk6CisKIDIwMTItMDUt
MTAgIE1pY2hhxYIgUGFrdcWCYSB2ZWwgUnV0a2EgIDxtLnBha3VsYUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbRUZMXSBBZGQgT3duUHRyIHNwZWNpYWxpemF0aW9uIGZvciBFaW5hX0hhc2guCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggMTc5ZGFhY2Y2MzQ1YTUxZjFhZjA0ZWQwMGQ4YzdjZTc4OGU2YjQ2MC4uOWFh
MDM0OWI0ZTk3NWMyZTUyMDg0YTUwNmIxOTQ5YzIxNmI4MjIwNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDEyLTA1LTE0ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUu
Y29tPgorCisgICAgICAgIDU5JSBvZiBWZWN0b3IgYnVmZmVyIGNhcGFjaXR5IGlzIHVudXNlZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYyODEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvbWFjL1dlYlByb2Nlc3NNYWluTWFjLm1tOgorICAgICAgICAoV2ViS2l0OjpkdW1wU3RhdHNP
YnNlcnZlckNhbGxiYWNrKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlByb2Nlc3NNYWluKToKKwogMjAxMi0wNS0xMCAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFBERiBmaWxlcyB3b24ndCBzY3JvbGwgaW4gU2FmYXJpIHdo
ZW4gdXNpbmcgQWRvYmUgcGx1Zy1pbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKaW5kZXggYjU1ZGRkMjUzNzg2ZjRkNzJlMWE0NWFmMTc4NzYxYjMwOWVkMzhhMC4uNDhl
NTg2ZTI1NzMyYzA1MjZlMGJlYTc0M2RhZDQ3YTNlN2MxNjllZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03LDYgKzcsNyBAQAogCW9iamVjdHMgPSB7CiAK
IC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTBGODI1QUJFMTU1RTAxODYwMDgx
MENFOSAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY4MjVBQkQxNTVFMDE4NjAwODEwQ0U5IC8qIFZlY3Rvci5jcHAgKi87IH07CiAJ
CUE4NzZEQkQ4MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1IC8q
IFBsYXRmb3JtLmggKi87IH07CiAJCUE4QTQ3MzdGMTUxQTgyNUIwMDQxMjNGRiAvKiBBbGlnbm1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3
MjU0MTUxQTgyNUEwMDQxMjNGRiAvKiBBbGlnbm1lbnQuaCAqLzsgfTsKIAkJQThBNDczODAxNTFB
ODI1QjAwNDEyM0ZGIC8qIEFsd2F5c0lubGluZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDcyNTUxNTFBODI1QTAwNDEyM0ZGIC8qIEFsd2F5c0lu
bGluZS5oICovOyB9OwpAQCAtMjQwLDYgKzI0MSw3IEBACiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNl
Y3Rpb24gKi8KIAogLyogQmVnaW4gUEJYRmlsZVJlZmVyZW5jZSBzZWN0aW9uICovCisJCTBGODI1
QUJEMTU1RTAxODYwMDgxMENFOSAvKiBWZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NUQyNDdCNjIxNDY4OUI4NjAwRTc4Qjc2IC8qIGxpYldURi5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9
IDA7IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJNUQyNDdCNkUxNDY4OUM0NzAwRTc4Qjc2IC8qIEJhc2UueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gQmFzZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUQyNDdCNkYx
NDY4OUM0NzAwRTc4Qjc2IC8qIENvbXBpbGVyVmVyc2lvbi54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGgg
PSBDb21waWxlclZlcnNpb24ueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03MDAsNiArNzAyLDcgQEAKIAkJCQlBOEE0NzM1RDE1MUE4MjVCMDA0MTIzRkYgLyogVW51c2Vk
UGFyYW0uaCAqLywKIAkJCQlBOEE0NzM1RTE1MUE4MjVCMDA0MTIzRkYgLyogdXJsICovLAogCQkJ
CUE4QTQ3MzZGMTUxQTgyNUIwMDQxMjNGRiAvKiBWYWx1ZUNoZWNrLmggKi8sCisJCQkJMEY4MjVB
QkQxNTVFMDE4NjAwODEwQ0U5IC8qIFZlY3Rvci5jcHAgKi8sCiAJCQkJQThBNDczNzAxNTFBODI1
QjAwNDEyM0ZGIC8qIFZlY3Rvci5oICovLAogCQkJCUE4QTQ3MzcxMTUxQTgyNUIwMDQxMjNGRiAv
KiBWZWN0b3JUcmFpdHMuaCAqLywKIAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1U
YWdzLmggKi8sCkBAIC0xMTY4LDYgKzExNzEsNyBAQAogCQkJCUE4QTQ3NDc3MTUxQTgyNUIwMDQx
MjNGRiAvKiBVUkxFc2NhcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0N0IxNTFBODI1
QjAwNDEyM0ZGIC8qIFVSTFNlZ21lbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDg2
MTUxQTgyNUIwMDQxMjNGRiAvKiBXVEZUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGODI1QUJFMTU1RTAxODYwMDgxMENFOSAvKiBWZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0xMTkzLDYgKzExOTcsNyBAQAogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSA1RDI0
N0I3MzE0Njg5QzQ3MDBFNzhCNzYgLyogV1RGLnhjY29uZmlnICovOwogCQkJYnVpbGRTZXR0aW5n
cyA9IHsKIAkJCQlERUJVR19ERUZJTkVTID0gIiQoREVCVUdfREVGSU5FU19kZWJ1ZykiOworCQkJ
CUdDQ19PUFRJTUlaQVRJT05fTEVWRUxfbm9ybWFsID0gMDsKIAkJCX07CiAJCQluYW1lID0gRGVi
dWc7CiAJCX07CkBAIC0xMjAwLDYgKzEyMDUsNyBAQAogCQkJaXNhID0gWENCdWlsZENvbmZpZ3Vy
YXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IDVEMjQ3QjczMTQ2ODlDNDcw
MEU3OEI3NiAvKiBXVEYueGNjb25maWcgKi87CiAJCQlidWlsZFNldHRpbmdzID0geworCQkJCUdD
Q19PUFRJTUlaQVRJT05fTEVWRUxfbm9ybWFsID0gMDsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFz
ZTsKIAkJfTsKQEAgLTEyMTQsNiArMTIyMCw3IEBACiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gNUQyNDdCNzMxNDY4OUM0NzAw
RTc4Qjc2IC8qIFdURi54Y2NvbmZpZyAqLzsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJR0ND
X09QVElNSVpBVElPTl9MRVZFTF9ub3JtYWwgPSAwOwogCQkJfTsKIAkJCW5hbWUgPSBQcm9kdWN0
aW9uOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmNwcCBiL1Nv
dXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5jcHAKaW5kZXggNDkyZGE4NmNlNDIxOGE3N2RiNTJhMTcz
MDBmMjk3MjU1YzIyYTE5NC4uNjU0Y2JlMTljZDllYjNlY2UwMjA5ODBlNGVjZTdiODgxZGU3N2U2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvSGFzaFRhYmxlLmNwcAorKysgYi9Tb3VyY2Uv
V1RGL3d0Zi9IYXNoVGFibGUuY3BwCkBAIC0yMCw3ICsyMCw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiRGF0YUxvZy5oIgorI2luY2x1
ZGUgPGFsZ29yaXRobT4KIAordXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXVEYgewog
CiAjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKQEAgLTMzLDcgKzM1LDcgQEAgaW50IEhhc2hUYWJs
ZVN0YXRzOjpudW1SZWhhc2hlczsKIGludCBIYXNoVGFibGVTdGF0czo6bnVtUmVtb3ZlczsKIGlu
dCBIYXNoVGFibGVTdGF0czo6bnVtUmVpbnNlcnRzOwogCi1zdGF0aWMgSGFzaFRhYmxlU3RhdHMg
bG9nZ2VyOworLy9zdGF0aWMgSGFzaFRhYmxlU3RhdHMgbG9nZ2VyOwogCiBzdGF0aWMgTXV0ZXgm
IGhhc2hUYWJsZVN0YXRzTXV0ZXgoKQogewpAQCAtNTgsNiArNjAsNyBAQCBIYXNoVGFibGVTdGF0
czo6fkhhc2hUYWJsZVN0YXRzKCkKIAogdm9pZCBIYXNoVGFibGVTdGF0czo6cmVjb3JkQ29sbGlz
aW9uQXRDb3VudChpbnQgY291bnQpCiB7CityZXR1cm47CiAgICAgTXV0ZXhMb2NrZXIgbG9jayho
YXNoVGFibGVTdGF0c011dGV4KCkpOwogICAgIGlmIChjb3VudCA+IG1heENvbGxpc2lvbnMpCiAg
ICAgICAgIG1heENvbGxpc2lvbnMgPSBjb3VudDsKQEAgLTY1LDYgKzY4LDQ1IEBAIHZvaWQgSGFz
aFRhYmxlU3RhdHM6OnJlY29yZENvbGxpc2lvbkF0Q291bnQoaW50IGNvdW50KQogICAgIGNvbGxp
c2lvbkdyYXBoW2NvdW50XSsrOwogfQogCitzdGF0aWMgaW50IGJ1Y2tldEZvcktleUNvdW50KGlu
dCBjb3VudCwgaW50IG51bUJ1Y2tldHMpCit7CisgICAgcmV0dXJuIG1pbihjb3VudCwgbnVtQnVj
a2V0cyAtIDEpOworfQorCitzdGF0aWMgdm9pZCBwcmludEJ1Y2tldHMobG9uZyBidWNrZXRzW10s
IGludCBudW1CdWNrZXRzKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQnVja2V0czsg
KytpKSB7CisgICAgICAgIGxvbmcgdmFsdWUgPSBidWNrZXRzW2ldOworICAgICAgICBmcHJpbnRm
KHN0ZG91dCwgIiUzZCAlOGxkXG4iLCBpLCB2YWx1ZSk7CisgICAgfQorfQorCit2b2lkIEhhc2hU
YWJsZVN0YXRzOjpyZWNvcmRUYWJsZVNpemUoaW50IG1heFRhYmxlU2l6ZSwgaW50IG1heEtleUNv
dW50LCBzaXplX3QgdmFsdWVTaXplKQoreworLy8gICAgTXV0ZXhMb2NrZXIgbG9jayhoYXNoVGFi
bGVTdGF0c011dGV4KCkpOworCisgICAgc3RhdGljIGxvbmcgbG9uZyB0b3RhbENhcGFjaXR5Owor
ICAgIHN0YXRpYyBsb25nIGxvbmcgdG90YWxVc2VkOworICAgIAorICAgIGNvbnN0IGludCBudW1L
ZXlDb3VudEJ1Y2tldHMgPSA1MDsKKyAgICBzdGF0aWMgbG9uZyBrZXlDb3VudEJ1Y2tldHNbbnVt
S2V5Q291bnRCdWNrZXRzXTsKKyAgICAKKyAgICBzdGF0aWMgaW50IGNhbGxDb3VudDsKKyAgICAK
KyAgICB0b3RhbENhcGFjaXR5ICs9IG1heFRhYmxlU2l6ZSAqIHZhbHVlU2l6ZTsKKyAgICB0b3Rh
bFVzZWQgKz0gbWF4S2V5Q291bnQgKiB2YWx1ZVNpemU7CisgICAgCisvLyAgICBmcHJpbnRmKHN0
ZGVyciwgIkhhc2hUYWJsZSBtYXggc2l6ZT0lZCwgdXNlZCBzaXplPSVkICh0b3RhbCBjYXBhY2l0
eT0lbGxkLCB0b3RhbCB1c2VkPSVsbGQsIHVzYWdlICUuMmYlJSlcbiIsIG1heFRhYmxlU2l6ZSwg
bWF4S2V5Q291bnQsIHRvdGFsQ2FwYWNpdHksIHRvdGFsVXNlZCwgMTAwLjAgKiAoZG91YmxlKXRv
dGFsVXNlZCAvIHRvdGFsQ2FwYWNpdHkpOworCisgICAgKytrZXlDb3VudEJ1Y2tldHNbYnVja2V0
Rm9yS2V5Q291bnQobWF4S2V5Q291bnQsIG51bUtleUNvdW50QnVja2V0cyldOworCisgICAgY29u
c3QgaW50IHByaW50RnJlcXVlbmN5ID0gMTAwOworICAgIGlmICghKCsrY2FsbENvdW50ICUgcHJp
bnRGcmVxdWVuY3kpKSB7CisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiXG5TaXplIEZyZXF1ZW5j
eVxuIik7CisgICAgICAgIHByaW50QnVja2V0cyhrZXlDb3VudEJ1Y2tldHMsIG51bUtleUNvdW50
QnVja2V0cyk7CisgICAgfQorfQorCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RGCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9IYXNoVGFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL0hhc2hU
YWJsZS5oCmluZGV4IDE3MmQ5NWIwYjFiMWI4ZWNiNzBlZmY4MzA3ZGQwMjdhMWFmYTZiNDcuLjBl
MTkxY2MxMjdmZWZlMDM5Mzc1YzAxZmI4ZTkxMjE0NTM0MDA1MGEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XVEYvd3RmL0hhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL0hhc2hUYWJsZS5oCkBA
IC01OCwxNyArNTgsMTggQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIC8vIEFsbCBvZiB0aGUg
dmFyaWFibGVzIGFyZSBhY2Nlc3NlZCBpbiB+SGFzaFRhYmxlU3RhdHMgd2hlbiB0aGUgc3RhdGlj
IHN0cnVjdCBpcyBkZXN0cm95ZWQuCiAKICAgICAgICAgLy8gVGhlIGZvbGxvd2luZyB2YXJpYWJs
ZXMgYXJlIGFsbCBhdG9taWNhbGx5IGluY3JlbWVudGVkIHdoZW4gbW9kaWZpZWQuCi0gICAgICAg
IHN0YXRpYyBpbnQgbnVtQWNjZXNzZXM7Ci0gICAgICAgIHN0YXRpYyBpbnQgbnVtUmVoYXNoZXM7
Ci0gICAgICAgIHN0YXRpYyBpbnQgbnVtUmVtb3ZlczsKLSAgICAgICAgc3RhdGljIGludCBudW1S
ZWluc2VydHM7CisgICAgICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyBpbnQgbnVtQWNjZXNzZXM7
CisgICAgICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyBpbnQgbnVtUmVoYXNoZXM7CisgICAgICAg
IFdURl9FWFBPUlREQVRBIHN0YXRpYyBpbnQgbnVtUmVtb3ZlczsKKyAgICAgICAgV1RGX0VYUE9S
VERBVEEgc3RhdGljIGludCBudW1SZWluc2VydHM7CiAKICAgICAgICAgLy8gVGhlIGZvbGxvd2lu
ZyB2YXJpYWJsZXMgYXJlIG9ubHkgbW9kaWZpZWQgaW4gdGhlIHJlY29yZENvbGxpc2lvbkF0Q291
bnQgbWV0aG9kIHdpdGhpbiBhIG11dGV4LgotICAgICAgICBzdGF0aWMgaW50IG1heENvbGxpc2lv
bnM7Ci0gICAgICAgIHN0YXRpYyBpbnQgbnVtQ29sbGlzaW9uczsKLSAgICAgICAgc3RhdGljIGlu
dCBjb2xsaXNpb25HcmFwaFs0MDk2XTsKKyAgICAgICAgV1RGX0VYUE9SVERBVEEgc3RhdGljIGlu
dCBtYXhDb2xsaXNpb25zOworICAgICAgICBXVEZfRVhQT1JUREFUQSBzdGF0aWMgaW50IG51bUNv
bGxpc2lvbnM7CisgICAgICAgIFdURl9FWFBPUlREQVRBIHN0YXRpYyBpbnQgY29sbGlzaW9uR3Jh
cGhbNDA5Nl07CiAKLSAgICAgICAgc3RhdGljIHZvaWQgcmVjb3JkQ29sbGlzaW9uQXRDb3VudChp
bnQgY291bnQpOworICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgcmVjb3Jk
Q29sbGlzaW9uQXRDb3VudChpbnQgY291bnQpOworICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIHZvaWQgcmVjb3JkVGFibGVTaXplKGludCBtYXhUYWJsZVNpemUsIGludCBtYXhLZXlD
b3VudCwgc2l6ZV90IHZhbHVlU2l6ZSk7CiAgICAgfTsKIAogI2VuZGlmCkBAIC0zMjgsNiArMzI5
LDkgQEAgbmFtZXNwYWNlIFdURiB7CiAjaWYgQ0hFQ0tfSEFTSFRBQkxFX1VTRV9BRlRFUl9ERVNU
UlVDVElPTgogICAgICAgICAgICAgbV90YWJsZSA9IChWYWx1ZVR5cGUqKSh1aW50cHRyX3QpMHhi
YmFkYmVlZjsKICNlbmRpZgorI2lmIERVTVBfSEFTSFRBQkxFX1NUQVRTCisgICAgICAgICAgICBI
YXNoVGFibGVTdGF0czo6cmVjb3JkVGFibGVTaXplKG1fbWF4VGFibGVTaXplLCBtX21heEtleUNv
dW50LCBzaXplb2YoVmFsdWVUeXBlKSk7CisjZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIEhh
c2hUYWJsZShjb25zdCBIYXNoVGFibGUmKTsKQEAgLTQ0Myw2ICs0NDcsMTEgQEAgbmFtZXNwYWNl
IFdURiB7CiAgICAgICAgIGludCBtX2tleUNvdW50OwogICAgICAgICBpbnQgbV9kZWxldGVkQ291
bnQ7CiAKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICBpbnQgbV9tYXhUYWJsZVNp
emU7CisgICAgICAgIGludCBtX21heEtleUNvdW50OworI2VuZGlmCisKICNpZiBDSEVDS19IQVNI
VEFCTEVfSVRFUkFUT1JTCiAgICAgcHVibGljOgogICAgICAgICAvLyBBbGwgYWNjZXNzIHRvIG1f
aXRlcmF0b3JzIHNob3VsZCBiZSBndWFyZGVkIHdpdGggbV9tdXRleC4KQEAgLTQ1OSw2ICs0Njgs
MTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICwgbV90YWJsZVNpemVNYXNrKDApCiAgICAg
ICAgICwgbV9rZXlDb3VudCgwKQogICAgICAgICAsIG1fZGVsZXRlZENvdW50KDApCisjaWYgRFVN
UF9IQVNIVEFCTEVfU1RBVFMKKyAgICAgICAgLCBtX21heFRhYmxlU2l6ZSgwKQorICAgICAgICAs
IG1fbWF4S2V5Q291bnQoMCkKKyNlbmRpZgogI2lmIENIRUNLX0hBU0hUQUJMRV9JVEVSQVRPUlMK
ICAgICAgICAgLCBtX2l0ZXJhdG9ycygwKQogICAgICAgICAsIG1fbXV0ZXgoYWRvcHRQdHIobmV3
IE11dGV4KSkKQEAgLTc0Niw3ICs3NTksMTEgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIEhh
c2hUcmFuc2xhdG9yOjp0cmFuc2xhdGUoKmVudHJ5LCBrZXksIGV4dHJhKTsKIAogICAgICAgICAr
K21fa2V5Q291bnQ7Ci0gICAgICAgIAorCisjaWYgRFVNUF9IQVNIVEFCTEVfU1RBVFMKKyAgICAg
ICAgaWYgKG1fa2V5Q291bnQgPiBtX21heEtleUNvdW50KQorICAgICAgICAgICAgbV9tYXhLZXlD
b3VudCA9IG1fa2V5Q291bnQ7CisjZW5kaWYKICAgICAgICAgaWYgKHNob3VsZEV4cGFuZCgpKSB7
CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBtYWtlcyBhbiBleHRyYSBjb3B5IG9uIGV4cGFu
ZC4gUHJvYmFibHkgbm90IHRoYXQgYmFkIHNpbmNlCiAgICAgICAgICAgICAvLyBleHBhbmQgaXMg
cmFyZSwgYnV0IHdvdWxkIGJlIGJldHRlciB0byBoYXZlIGEgdmVyc2lvbiBvZiBleHBhbmQgdGhh
dCBjYW4KQEAgLTk3NCw2ICs5OTEsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICNpZiBEVU1QX0hBU0hU
QUJMRV9TVEFUUwogICAgICAgICBpZiAob2xkVGFibGVTaXplICE9IDApCiAgICAgICAgICAgICBh
dG9taWNJbmNyZW1lbnQoJkhhc2hUYWJsZVN0YXRzOjpudW1SZWhhc2hlcyk7CisKKyAgICAgICAg
aWYgKG5ld1RhYmxlU2l6ZSA+IG1fbWF4VGFibGVTaXplKQorICAgICAgICAgICAgbV9tYXhUYWJs
ZVNpemUgPSBuZXdUYWJsZVNpemU7CiAjZW5kaWYKIAogICAgICAgICBtX3RhYmxlU2l6ZSA9IG5l
d1RhYmxlU2l6ZTsKQEAgLTEwMTIsNiArMTAzMiwxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAg
ICAgLCBtX3RhYmxlU2l6ZU1hc2soMCkKICAgICAgICAgLCBtX2tleUNvdW50KDApCiAgICAgICAg
ICwgbV9kZWxldGVkQ291bnQoMCkKKyNpZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICAs
IG1fbWF4VGFibGVTaXplKDApCisgICAgICAgICwgbV9tYXhLZXlDb3VudCgwKQorI2VuZGlmCiAj
aWYgQ0hFQ0tfSEFTSFRBQkxFX0lURVJBVE9SUwogICAgICAgICAsIG1faXRlcmF0b3JzKDApCiAg
ICAgICAgICwgbV9tdXRleChhZG9wdFB0cihuZXcgTXV0ZXgpKQpAQCAtMTA0OSw2ICsxMDczLDE3
IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpbnQgdG1wX2RlbGV0ZWRDb3VudCA9IG1fZGVs
ZXRlZENvdW50OwogICAgICAgICBtX2RlbGV0ZWRDb3VudCA9IG90aGVyLm1fZGVsZXRlZENvdW50
OwogICAgICAgICBvdGhlci5tX2RlbGV0ZWRDb3VudCA9IHRtcF9kZWxldGVkQ291bnQ7CisKKyNp
ZiBEVU1QX0hBU0hUQUJMRV9TVEFUUworICAgICAgICBpbnQgdG1wX21heFRhYmxlU2l6ZSA9IG1f
bWF4VGFibGVTaXplOworICAgICAgICBtX21heFRhYmxlU2l6ZSA9IG90aGVyLm1fbWF4VGFibGVT
aXplOworICAgICAgICBvdGhlci5tX21heFRhYmxlU2l6ZSA9IHRtcF9tYXhUYWJsZVNpemU7CisK
KyAgICAgICAgaW50IHRtcF9tYXhLZXlDb3VudCA9IG1fbWF4S2V5Q291bnQ7CisgICAgICAgIG1f
bWF4S2V5Q291bnQgPSBvdGhlci5tX21heEtleUNvdW50OworICAgICAgICBvdGhlci5tX21heEtl
eUNvdW50ID0gdG1wX21heEtleUNvdW50OworI2VuZGlmCisKICAgICB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlLCB0eXBlbmFtZSBFeHRyYWN0b3IsIHR5cGVu
YW1lIEhhc2hGdW5jdGlvbnMsIHR5cGVuYW1lIFRyYWl0cywgdHlwZW5hbWUgS2V5VHJhaXRzPgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvU2l6ZUxpbWl0cy5jcHAgYi9Tb3VyY2UvV1RGL3d0
Zi9TaXplTGltaXRzLmNwcAppbmRleCA5NWQ5YzJiMWU5MDhkY2E5MjM0ZmU0MDlmNWY1NTE3NWFh
ZTM2MjA2Li5lNjUzZDhlMTEzYTkyNDM0M2FkZWE5ODMxMzJmZmM0NjkzZDJjMzUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9TaXplTGltaXRzLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9T
aXplTGltaXRzLmNwcApAQCAtNjAsNiArNjAsNyBAQCBDT01QSUxFX0FTU0VSVChzaXplb2YoUGFz
c1JlZlB0cjxSZWZDb3VudGVkPGludD4gPikgPT0gc2l6ZW9mKGludCopLCBQYXNzUmVmUHRyXwog
Q09NUElMRV9BU1NFUlQoc2l6ZW9mKFJlZkNvdW50ZWQ8aW50PikgPT0gc2l6ZW9mKFNhbWVTaXpl
QXNSZWZDb3VudGVkKSwgUmVmQ291bnRlZF9zaG91bGRfc3RheV9zbWFsbCk7CiBDT01QSUxFX0FT
U0VSVChzaXplb2YoUmVmQ291bnRlZEN1c3RvbUFsbG9jYXRlZDxpbnQ+KSA9PSBzaXplb2YoU2Ft
ZVNpemVBc1JlZkNvdW50ZWQpLCBSZWZDb3VudGVkQ3VzdG9tQWxsb2NhdGVkX3Nob3VsZF9zdGF5
X3NtYWxsKTsKIENPTVBJTEVfQVNTRVJUKHNpemVvZihSZWZQdHI8UmVmQ291bnRlZDxpbnQ+ID4p
ID09IHNpemVvZihpbnQqKSwgUmVmUHRyX3Nob3VsZF9zdGF5X3NtYWxsKTsKKyNpZm5kZWYgRFVN
UF9WRUNUT1JfU1RBVFMKIENPTVBJTEVfQVNTRVJUKHNpemVvZihWZWN0b3I8aW50PikgPT0gMyAq
IHNpemVvZihpbnQqKSwgVmVjdG9yX3Nob3VsZF9zdGF5X3NtYWxsKTsKLQorI2VuZGlmCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9WZWN0b3IuY3BwIGIvU291cmNlL1dURi93dGYvVmVj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kYzE2N2IxM2U0ZWE5MWIxNDNkNWIzZWI2ZmE3MjcwZTNiYTE3
MTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmNwcApAQCAtMCww
ICsxLDMxMSBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBdG9taWNz
LmgiCisjaW5jbHVkZSAiVmVjdG9yLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8
bWF0aC5oPgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworbmFtZXNwYWNlIFdURiB7CisKKyNpZiBE
VU1QX1ZFQ1RPUl9TVEFUUworCisjZGVmaW5lIFBPTFk2NFJFViAgICAgMHg5NUFDOTMyOUFDNEJD
OUI1CisjZGVmaW5lIElOSVRJQUxDUkMgICAgMHhGRkZGRkZGRkZGRkZGRkZGCisKK3N0YXRpYyBN
dXRleCogc011dGV4Oworc3RhdGljIHVfaW50NjRfdCBDUkNUYWJsZVsyNTZdOworCitzdGF0aWMg
dm9pZCBpbml0Q1JDVGFibGUoKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU2OyBpKysp
CisgICAgeworICAgICAgICB1X2ludDY0X3QgcGFydCA9IGk7CisgICAgICAgIGZvciAoaW50IGog
PSAwOyBqIDwgODsgaisrKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocGFydCAmIDEpCisg
ICAgICAgICAgICAgICAgcGFydCA9IChwYXJ0ID4+IDEpIF4gUE9MWTY0UkVWOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHBhcnQgPj49IDE7CisgICAgICAgIH0KKyAgICAgICAg
Q1JDVGFibGVbaV0gPSBwYXJ0OworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9u
Y2UoKQoreworICAgIHNNdXRleCA9IG5ldyBNdXRleDsKKyAgICBpbml0Q1JDVGFibGUoKTsKK30K
KworI2lmIE9TKERBUldJTikKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCBpbml0aWFsaXplT25jZUtl
eSA9IFBUSFJFQURfT05DRV9JTklUOworI2VuZGlmCisKK3N0YXRpYyBNdXRleCYgdmVjdG9yU3Rh
dHNNdXRleCgpCit7CisjaWYgT1MoREFSV0lOKQorICAgIHB0aHJlYWRfb25jZSgmaW5pdGlhbGl6
ZU9uY2VLZXksIGluaXRpYWxpemVPbmNlKTsKKyNlbmRpZgorICAgIHJldHVybiAqc011dGV4Owor
fQorCisvKgorc3RhdGljIGludCBidWNrZXRGb3JTaXplKGludCBjb3VudCwgaW50IG51bUJ1Y2tl
dHMpCit7CisgICAgcmV0dXJuIG1pbihjb3VudCwgbnVtQnVja2V0cyAtIDEpOworfQorCitzdGF0
aWMgaW50IGZ1bGxuZXNzQnVja2V0KGludCBzaXplLCBpbnQgY2FwYWNpdHkpCit7CisgICAgaWYg
KCFjYXBhY2l0eSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBBU1NFUlQoc2l6ZSA8PSBjYXBh
Y2l0eSk7CisgICAgcmV0dXJuIGNlaWwoMTAwLjAgKiAoKGRvdWJsZSkoc2l6ZSkgLyBjYXBhY2l0
eSkpOworfQorKi8KKy8qCitzdGF0aWMgdm9pZCBwcmludEJ1Y2tldHMoaW50IGJ1Y2tldHNbXSwg
aW50IG51bUJ1Y2tldHMpCit7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1CdWNrZXRzOyAr
K2kpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiJTNkICU4ZFxuIiwgaSwgYnVja2V0c1tpXSk7
Cit9CisqLworCisKKworLy8gUG9vciBtYW4ncyBoYXNoIGZvciBzdGFjayBhZGRyZXNzZXMuCitz
dGF0aWMgdV9pbnQ2NF90IGNyYzY0KGNoYXIgKnNlcSwgdW5zaWduZWQgaW50IGxnX3NlcSkKK3sK
KyAgICB1X2ludDY0X3QgY3JjID0gSU5JVElBTENSQzsKKworICAgIHdoaWxlIChsZ19zZXEtLSA+
IDApCisJCWNyYyA9IENSQ1RhYmxlWyhjcmMgXiAqc2VxKyspICYgMHhmZl0gXiAoY3JjID4+IDgp
OworCQorICAgIHJldHVybiBjcmM7Cit9CisKK3N0YXRpYyBjb25zdCBpbnQgZnJhbWVzVG9TaG93
ID0gNTsKK3N0YXRpYyBjb25zdCBpbnQgZnJhbWVzVG9Ta2lwID0gMjsKKworc3RydWN0IFBlclZl
Y3RvckRhdGEgeworICAgIHZvaWQqIG1fY3JlYXRpb25TdGFja1NhbXBsZXNbZnJhbWVzVG9TaG93
ICsgZnJhbWVzVG9Ta2lwXTsKKyAgICBpbnQgbV9jcmVhdGlvblN0YWNrRnJhbWVDb3VudCA9IGZy
YW1lc1RvU2hvdyArIGZyYW1lc1RvU2tpcDsKKworICAgIHVfaW50NjRfdCBtX3N0YWNrSGFzaDsK
KyAgICAKKyAgICBpbnQgbV9jdXJyU2l6ZTsKKyAgICBpbnQgbV9jdXJyQ2FwYWNpdHk7CisgICAg
CisgICAgaW50IG1fbWF4U2l6ZTsKKyAgICBpbnQgbV9tYXhDYXBhY2l0eTsKKworICAgIHNpemVf
dCBtX3ZhbHVlU2l6ZTsKKyAgICBkb3VibGUgbV9jcmVhdGlvblRpbWU7CisgICAgCisgICAgUGVy
VmVjdG9yRGF0YSgpCisgICAgICAgIDogbV9jdXJyU2l6ZSgwKQorICAgICAgICAsIG1fY3VyckNh
cGFjaXR5KDApCisgICAgICAgICwgbV9tYXhTaXplKDApCisgICAgICAgICwgbV9tYXhDYXBhY2l0
eSgwKQorICAgICAgICAsIG1fdmFsdWVTaXplKDApCisgICAgICAgICwgbV9jcmVhdGlvblRpbWUo
MCkKKyAgICB7CisgICAgfQorfTsKKwordHlwZWRlZiBIYXNoTWFwPHZvaWQqLCBQZXJWZWN0b3JE
YXRhPiBWZWN0b3JIYXNoOworCitzdGF0aWMgVmVjdG9ySGFzaCYgdmVjdG9yTGlzdCgpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3JIYXNoLCB2ZWN0b3JMaXN0LCAoKSk7CisgICAg
cmV0dXJuIHZlY3Rvckxpc3Q7Cit9CisKK3ZvaWQgVmVjdG9yU3RhdHM6OnZlY3RvckNyZWF0ZWQo
dm9pZCogdmVjdG9yLCBzaXplX3QgdmFsdWVTaXplLCBpbnQgY2FwYWNpdHksIGludCBzaXplKQor
eworICAgIEFTU0VSVChzaXplIDw9IGNhcGFjaXR5KTsKKworICAgIE11dGV4TG9ja2VyIGxvY2so
dmVjdG9yU3RhdHNNdXRleCgpKTsKKworICAgIFBlclZlY3RvckRhdGEgY3VyclZlY3RvckRhdGE7
CisgICAgY3VyclZlY3RvckRhdGEubV92YWx1ZVNpemUgPSB2YWx1ZVNpemU7CisgICAgY3VyclZl
Y3RvckRhdGEubV9jdXJyU2l6ZSA9IHNpemU7OworICAgIGN1cnJWZWN0b3JEYXRhLm1fY3VyckNh
cGFjaXR5ID0gY2FwYWNpdHk7CisgICAgY3VyclZlY3RvckRhdGEubV9tYXhTaXplID0gc2l6ZTsK
KyAgICBjdXJyVmVjdG9yRGF0YS5tX21heENhcGFjaXR5ID0gY2FwYWNpdHk7CisgICAgY3VyclZl
Y3RvckRhdGEubV9jcmVhdGlvblRpbWUgPSBjdXJyZW50VGltZSgpOworCisgICAgV1RGR2V0QmFj
a3RyYWNlKGN1cnJWZWN0b3JEYXRhLm1fY3JlYXRpb25TdGFja1NhbXBsZXMsICZjdXJyVmVjdG9y
RGF0YS5tX2NyZWF0aW9uU3RhY2tGcmFtZUNvdW50KTsKKworICAgIGN1cnJWZWN0b3JEYXRhLm1f
c3RhY2tIYXNoID0gY3JjNjQoKGNoYXIqKWN1cnJWZWN0b3JEYXRhLm1fY3JlYXRpb25TdGFja1Nh
bXBsZXMsIGN1cnJWZWN0b3JEYXRhLm1fY3JlYXRpb25TdGFja0ZyYW1lQ291bnQgKiBzaXplb2Yo
dm9pZCopKTsKKyAgICBBU1NFUlQoY3VyclZlY3RvckRhdGEubV9zdGFja0hhc2gpOworICAgIAor
CisgICAgVmVjdG9ySGFzaCYgdmVjdG9yRGF0YSA9IHZlY3Rvckxpc3QoKTsKKyAgICB2ZWN0b3JE
YXRhLmFkZCh2ZWN0b3IsIGN1cnJWZWN0b3JEYXRhKTsKK30KKwordm9pZCBWZWN0b3JTdGF0czo6
dmVjdG9yVXBkYXRlZCh2b2lkKiB2ZWN0b3IsIGludCBjYXBhY2l0eSwgaW50IHNpemUpCit7Cisg
ICAgQVNTRVJUKHNpemUgPD0gY2FwYWNpdHkpOworICAgIE11dGV4TG9ja2VyIGxvY2sodmVjdG9y
U3RhdHNNdXRleCgpKTsKKworICAgIFZlY3Rvckhhc2gmIHZlY3RvckRhdGEgPSB2ZWN0b3JMaXN0
KCk7CisgICAgVmVjdG9ySGFzaDo6aXRlcmF0b3IgaXQgPSB2ZWN0b3JEYXRhLmZpbmQodmVjdG9y
KTsKKyAgICBpZiAoaXQgIT0gdmVjdG9yRGF0YS5lbmQoKSkgeworICAgICAgICBQZXJWZWN0b3JE
YXRhJiBkYXRhID0gaXQtPnNlY29uZDsKKworICAgICAgICBkYXRhLm1fY3VyclNpemUgPSBzaXpl
OzsKKyAgICAgICAgZGF0YS5tX2N1cnJDYXBhY2l0eSA9IGNhcGFjaXR5OworCisgICAgICAgIGRh
dGEubV9tYXhTaXplID0gbWF4KGRhdGEubV9tYXhTaXplLCBzaXplKTsKKyAgICAgICAgZGF0YS5t
X21heENhcGFjaXR5ID0gbWF4KGRhdGEubV9tYXhDYXBhY2l0eSwgY2FwYWNpdHkpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biB2ZWN0b3IgJXBcbiIsIHZl
Y3Rvcik7CisgICAgfQorfQorCitzdHJ1Y3QgQWxsb2NhdGlvblN0YWNrSW5mbyB7CisgICAgUGVy
VmVjdG9yRGF0YSBtX2ZpcnN0VmVjdG9yOyAvLyBVc2VkIHRvIGZldGNoIHRoZSBzdGFjayBmcmFt
ZXMuCisgICAgCisgICAgdW5zaWduZWQgbV9jb3VudDsKKyAgICB1X2ludDY0X3QgbV90b3RhbFNp
emVCeXRlczsgCisgICAgdV9pbnQ2NF90IG1fdG90YWxDYXBhY2l0eUJ5dGVzOworICAgIAorICAg
IEFsbG9jYXRpb25TdGFja0luZm8oKQorICAgICAgICA6IG1fY291bnQoMCkKKyAgICAgICAgLCBt
X3RvdGFsU2l6ZUJ5dGVzKDApCisgICAgICAgICwgbV90b3RhbENhcGFjaXR5Qnl0ZXMoMCkKKyAg
ICB7CisgICAgfQorfTsKKworc3RhdGljIGJvb2wgY29tcGFyZUJ5V2FzdGUoY29uc3QgQWxsb2Nh
dGlvblN0YWNrSW5mbyogZmlyc3QsIGNvbnN0IEFsbG9jYXRpb25TdGFja0luZm8qIHNlY29uZCkK
K3sKKyAgICB1X2ludDY0X3QgZmlyc3RXYXN0ZSA9IGZpcnN0LT5tX3RvdGFsQ2FwYWNpdHlCeXRl
cyAtIGZpcnN0LT5tX3RvdGFsU2l6ZUJ5dGVzOworICAgIHVfaW50NjRfdCBzZWNvbmRXYXN0ZSA9
IHNlY29uZC0+bV90b3RhbENhcGFjaXR5Qnl0ZXMgLSBzZWNvbmQtPm1fdG90YWxTaXplQnl0ZXM7
CisgICAgCisgICAgcmV0dXJuIGZpcnN0V2FzdGUgPCBzZWNvbmRXYXN0ZTsKK30KKworc3RhdGlj
IHZvaWQgZHVtcFdhc3RlZnVsbmVzc1N0YXRzKCkKK3sKKyAgICBIYXNoTWFwPHVfaW50NjRfdCwg
QWxsb2NhdGlvblN0YWNrSW5mbz4gY29tbW9uU3RhY2tzTWFwOworCisgICAgeworICAgICAgICBW
ZWN0b3JIYXNoJiB2ZWN0b3JIYXNoID0gdmVjdG9yTGlzdCgpOworICAgICAgICBNdXRleExvY2tl
ciBsb2NrKHZlY3RvclN0YXRzTXV0ZXgoKSk7CisKKyAgICAgICAgbG9uZyBsb25nIHRvdGFsVXNl
ZEJ5dGVzID0gMDsKKyAgICAgICAgbG9uZyBsb25nIHRvdGFsQ2FwYWNpdHlCeXRlcyA9IDA7Cisg
ICAgICAgIAorICAgICAgICBWZWN0b3JIYXNoOjpjb25zdF9pdGVyYXRvciBlbmQgPSB2ZWN0b3JI
YXNoLmVuZCgpOworICAgICAgICBmb3IgKFZlY3Rvckhhc2g6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
dmVjdG9ySGFzaC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGNvbnN0
IFBlclZlY3RvckRhdGEmIGN1cnJWZWN0b3JEYXRhID0gaXQtPnNlY29uZDsKKyAgICAgICAgCisg
ICAgICAgICAgICB0b3RhbFVzZWRCeXRlcyArPSBjdXJyVmVjdG9yRGF0YS5tX2N1cnJTaXplICog
Y3VyclZlY3RvckRhdGEubV92YWx1ZVNpemU7CisgICAgICAgICAgICB0b3RhbENhcGFjaXR5Qnl0
ZXMgKz0gY3VyclZlY3RvckRhdGEubV9jdXJyQ2FwYWNpdHkgKiBjdXJyVmVjdG9yRGF0YS5tX3Zh
bHVlU2l6ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgIEhhc2hNYXA8dV9pbnQ2NF90LCBB
bGxvY2F0aW9uU3RhY2tJbmZvPjo6aXRlcmF0b3IgY29tbW9uU3RhY2tzSXQgPSBjb21tb25TdGFj
a3NNYXAuZmluZChjdXJyVmVjdG9yRGF0YS5tX3N0YWNrSGFzaCk7CisgICAgICAgICAgICAgaWYg
KGNvbW1vblN0YWNrc0l0ID09IGNvbW1vblN0YWNrc01hcC5lbmQoKSkgeworICAgICAgICAgICAg
ICAgIEFsbG9jYXRpb25TdGFja0luZm8gYWxsb2NhdGlvbkluZm87CisgICAgICAgICAgICAgICAg
YWxsb2NhdGlvbkluZm8ubV9maXJzdFZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgICAgICAgICAg
ICAgYWxsb2NhdGlvbkluZm8ubV9jb3VudCA9IDE7CisgICAgICAgICAgICAgICAgYWxsb2NhdGlv
bkluZm8ubV90b3RhbFNpemVCeXRlcyA9IGN1cnJWZWN0b3JEYXRhLm1fY3VyclNpemUgKiBjdXJy
VmVjdG9yRGF0YS5tX3ZhbHVlU2l6ZTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uSW5mby5t
X3RvdGFsQ2FwYWNpdHlCeXRlcyA9IGN1cnJWZWN0b3JEYXRhLm1fY3VyckNhcGFjaXR5ICogY3Vy
clZlY3RvckRhdGEubV92YWx1ZVNpemU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgY29tbW9uU3RhY2tzTWFwLmFkZChjdXJyVmVjdG9yRGF0YS5tX3N0YWNrSGFzaCwgYWxsb2Nh
dGlvbkluZm8pOworICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQWxsb2Nh
dGlvblN0YWNrSW5mbyYgYWxsb2NhdGlvbkluZm8gPSBjb21tb25TdGFja3NJdC0+c2Vjb25kOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGFsbG9jYXRpb25JbmZvLm1fY291bnQg
Kz0gMTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uSW5mby5tX3RvdGFsU2l6ZUJ5dGVzICs9
IGN1cnJWZWN0b3JEYXRhLm1fY3VyclNpemUgKiBjdXJyVmVjdG9yRGF0YS5tX3ZhbHVlU2l6ZTsK
KyAgICAgICAgICAgICAgICBhbGxvY2F0aW9uSW5mby5tX3RvdGFsQ2FwYWNpdHlCeXRlcyArPSBj
dXJyVmVjdG9yRGF0YS5tX2N1cnJDYXBhY2l0eSAqIGN1cnJWZWN0b3JEYXRhLm1fdmFsdWVTaXpl
OworICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnByaW50Zihz
dGRvdXQsICJcbiVkIGV4dGFudCB2ZWN0b3JzIHdhc3RpbmcgJS4yZk1CICUuMmYlJSAodXNlZCAl
bGxkIGJ5dGVzLCBjYXBhY2l0eSAlbGxkIGJ5dGVzKTpcbiIsCisgICAgICAgICAgICB2ZWN0b3JI
YXNoLnNpemUoKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGRvdWJsZT4odG90YWxDYXBhY2l0
eUJ5dGVzIC0gdG90YWxVc2VkQnl0ZXMpIC8gKDEwMjQgKiAxMDI0KSwKKyAgICAgICAgICAgIDEw
MC4wICogc3RhdGljX2Nhc3Q8ZG91YmxlPih0b3RhbENhcGFjaXR5Qnl0ZXMgLSB0b3RhbFVzZWRC
eXRlcykgLyB0b3RhbENhcGFjaXR5Qnl0ZXMsCisgICAgICAgICAgICB0b3RhbFVzZWRCeXRlcywg
dG90YWxDYXBhY2l0eUJ5dGVzKTsgICAgCisgICAgfQorICAgIAorICAgIFZlY3Rvcjxjb25zdCBB
bGxvY2F0aW9uU3RhY2tJbmZvKj4gYWxsb2NhdGlvbnM7CisgICAgYWxsb2NhdGlvbnMucmVzaXpl
KGNvbW1vblN0YWNrc01hcC5zaXplKCkpOworICAgIAorICAgIEhhc2hNYXA8dV9pbnQ2NF90LCBB
bGxvY2F0aW9uU3RhY2tJbmZvPjo6Y29uc3RfaXRlcmF0b3Igc3RhY2tzRW5kID0gY29tbW9uU3Rh
Y2tzTWFwLmVuZCgpOworICAgIEhhc2hNYXA8dV9pbnQ2NF90LCBBbGxvY2F0aW9uU3RhY2tJbmZv
Pjo6Y29uc3RfaXRlcmF0b3Igc3RhY2tzSXQ7CisgICAgaW50IGk7CisgICAgZm9yIChzdGFja3NJ
dCA9IGNvbW1vblN0YWNrc01hcC5iZWdpbigpLCBpID0gMDsgc3RhY2tzSXQgIT0gc3RhY2tzRW5k
OyArK3N0YWNrc0l0LCArK2kpCisgICAgICAgIGFsbG9jYXRpb25zW2ldID0gJihzdGFja3NJdC0+
c2Vjb25kKTsKKyAgICAKKyAgICBzdGQ6OnNvcnQoYWxsb2NhdGlvbnMuYmVnaW4oKSwgYWxsb2Nh
dGlvbnMuZW5kKCksIGNvbXBhcmVCeVdhc3RlKTsKKyAgICAKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2sodmVjdG9yU3RhdHNNdXRleCgpKTsgLy8gVHJ5IHRvIGF2b2lkIGludGVybGVh
dmVkIG91dHB1dC4KKworICAgICAgICBpbnQgc3RhY2tzVG9QcmludCA9IG1pbjxpbnQ+KGFsbG9j
YXRpb25zLnNpemUoKSwgMjApOworICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlxuTW9zdCB3YXN0
ZWZ1bCAlZCBzdGFja3NcbiIsIHN0YWNrc1RvUHJpbnQpOworICAgICAgICAKKyAgICAgICAgZm9y
IChpbnQgaiA9IDA7IGogPCBzdGFja3NUb1ByaW50OyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0
IEFsbG9jYXRpb25TdGFja0luZm8qIGN1cnJTdGFjayA9IGFsbG9jYXRpb25zW2FsbG9jYXRpb25z
LnNpemUoKSAtIGogLSAxXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnByaW50ZihzdGRv
dXQsICIlZCB2ZWN0b3JzLCAlLjJmS0IgdXNlZCBvZiAlLjJmS0IsICUuMmZLQiB3YXN0ZWQgYXQ6
XG4iLCBjdXJyU3RhY2stPm1fY291bnQsCisgICAgICAgICAgICAgICAgKGRvdWJsZSljdXJyU3Rh
Y2stPm1fdG90YWxTaXplQnl0ZXMgLyAxMDI0LAorICAgICAgICAgICAgICAgIChkb3VibGUpY3Vy
clN0YWNrLT5tX3RvdGFsQ2FwYWNpdHlCeXRlcyAvIDEwMjQsCisgICAgICAgICAgICAgICAgKGRv
dWJsZSkoY3VyclN0YWNrLT5tX3RvdGFsQ2FwYWNpdHlCeXRlcyAtIGN1cnJTdGFjay0+bV90b3Rh
bFNpemVCeXRlcykgLyAxMDI0LjApOworICAgICAgICAgICAgCisgICAgICAgICAgICBXVEZQcmlu
dEJhY2t0cmFjZSgodm9pZCoqKShjdXJyU3RhY2stPm1fZmlyc3RWZWN0b3IubV9jcmVhdGlvblN0
YWNrU2FtcGxlcykgKyBmcmFtZXNUb1NraXAsIGN1cnJTdGFjay0+bV9maXJzdFZlY3Rvci5tX2Ny
ZWF0aW9uU3RhY2tGcmFtZUNvdW50IC0gZnJhbWVzVG9Ta2lwKTsKKyAgICAgICAgICAgIGZwcmlu
dGYoc3Rkb3V0LCAiXG4iKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBWZWN0b3JTdGF0
czo6dmVjdG9yRGVzdHJveWVkKHZvaWQqIHZlY3RvcikKK3sKKyAgICB7CisgICAgICAgIE11dGV4
TG9ja2VyIGxvY2sodmVjdG9yU3RhdHNNdXRleCgpKTsKKworICAgICAgICBWZWN0b3JIYXNoJiB2
ZWN0b3JEYXRhID0gdmVjdG9yTGlzdCgpOworICAgICAgICBWZWN0b3JIYXNoOjppdGVyYXRvciBp
dCA9IHZlY3RvckRhdGEuZmluZCh2ZWN0b3IpOworICAgICAgICBpZiAoaXQgIT0gdmVjdG9yRGF0
YS5lbmQoKSkgeworICAgICAgICAgICAgdmVjdG9yRGF0YS5yZW1vdmUoaXQpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHZlY3RvciAlcFxu
IiwgdmVjdG9yKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBWZWN0b3JTdGF0czo6ZHVt
cFZlY3RvclN0YXRzKCkKK3sKKyAgICBkdW1wV2FzdGVmdWxuZXNzU3RhdHMoKTsKK30KKworCisj
ZW5kaWYgLy8gRFVNUF9WRUNUT1JfU1RBVFMKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1ZlY3Rvci5oIGIvU291cmNlL1dURi93dGYvVmVjdG9yLmgKaW5kZXggMTllNmZmYjhjMTY0NmFh
ZGU0ZjViNjYwNTQ4OWFmYjFjNmVjYTdiNi4uYjYwMmIzNjczZjEyNzJlNGMzMzI0MGFhYzFkMTcw
OGRmNzMxMzE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvVmVjdG9yLmgKKysrIGIvU291
cmNlL1dURi93dGYvVmVjdG9yLmgKQEAgLTM1LDggKzM1LDIwIEBACiAjaW5jbHVkZSA8UURhdGFT
dHJlYW0+CiAjZW5kaWYKIAorI2RlZmluZSBEVU1QX1ZFQ1RPUl9TVEFUUyAxCisKIG5hbWVzcGFj
ZSBXVEYgewogCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICBzdHJ1Y3QgVmVjdG9yU3RhdHMg
eworICAgICAgICB+VmVjdG9yU3RhdHMoKTsKKyAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyB2b2lkIHZlY3RvckNyZWF0ZWQodm9pZCogdmVjdG9yLCBzaXplX3QgdmFsdWVTaXplLCBp
bnQgY2FwYWNpdHksIGludCBzaXplKTsKKyAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHZlY3RvclVwZGF0ZWQodm9pZCogdmVjdG9yLCBpbnQgY2FwYWNpdHksIGludCBzaXpl
KTsKKyAgICAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHZlY3RvckRlc3Ryb3ll
ZCh2b2lkKiB2ZWN0b3IpOworICAgICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQg
ZHVtcFZlY3RvclN0YXRzKCk7CisgICAgfTsKKyNlbmRpZgorCiAgICAgdXNpbmcgc3RkOjptaW47
CiAgICAgdXNpbmcgc3RkOjptYXg7CiAKQEAgLTQ5NCwxOCArNTA2LDI3IEBAIG5hbWVzcGFjZSBX
VEYgewogICAgICAgICBWZWN0b3IoKSAKICAgICAgICAgICAgIDogbV9zaXplKDApCiAgICAgICAg
IHsKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3Rv
ckNyZWF0ZWQodGhpcywgc2l6ZW9mKFZhbHVlVHlwZSksIG1fYnVmZmVyLmNhcGFjaXR5KCksIG1f
c2l6ZSk7CisjZW5kaWYKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZXhwbGljaXQgVmVj
dG9yKHNpemVfdCBzaXplKSAKICAgICAgICAgICAgIDogbV9zaXplKHNpemUpCiAgICAgICAgICAg
ICAsIG1fYnVmZmVyKHNpemUpCiAgICAgICAgIHsKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAg
ICAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvckNyZWF0ZWQodGhpcywgc2l6ZW9mKFZhbHVlVHlw
ZSksIG1fYnVmZmVyLmNhcGFjaXR5KCksIG1fc2l6ZSk7CisjZW5kaWYKICAgICAgICAgICAgIGlm
IChiZWdpbigpKQogICAgICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjppbml0aWFsaXplKGJl
Z2luKCksIGVuZCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIH5WZWN0b3IoKQogICAgICAgICB7
CisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgICAgIFZlY3RvclN0YXRzOjp2ZWN0b3JE
ZXN0cm95ZWQodGhpcyk7CisjZW5kaWYKICAgICAgICAgICAgIGlmIChtX3NpemUpCiAgICAgICAg
ICAgICAgICAgc2hyaW5rKDApOwogICAgICAgICB9CkBAIC02MDAsNiArNjIxLDkgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgICAgICA6IG1fc2l6ZShzaXplKQogICAgICAgICAgICAgLCBtX2J1
ZmZlcihzaXplKQogICAgICAgICB7CisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgICAg
IFZlY3RvclN0YXRzOjp2ZWN0b3JDcmVhdGVkKHRoaXMsIHNpemVvZihWYWx1ZVR5cGUpLCBtX2J1
ZmZlci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgICAgICAgICBpZiAoYmVnaW4o
KSkKICAgICAgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZpbGwoYmVn
aW4oKSwgZW5kKCksIHZhbCk7CiAgICAgICAgIH0KQEAgLTY4NCw2ICs3MDgsOSBAQCBuYW1lc3Bh
Y2UgV1RGIHsKICAgICAgICAgOiBtX3NpemUob3RoZXIuc2l6ZSgpKQogICAgICAgICAsIG1fYnVm
ZmVyKG90aGVyLmNhcGFjaXR5KCkpCiAgICAgeworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAg
ICAgIFZlY3RvclN0YXRzOjp2ZWN0b3JDcmVhdGVkKHRoaXMsIHNpemVvZihWYWx1ZVR5cGUpLCBt
X2J1ZmZlci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgICAgIGlmIChiZWdpbigp
KQogICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJl
Z2luKCksIG90aGVyLmVuZCgpLCBiZWdpbigpKTsKICAgICB9CkBAIC02OTQsNiArNzIxLDkgQEAg
bmFtZXNwYWNlIFdURiB7CiAgICAgICAgIDogbV9zaXplKG90aGVyLnNpemUoKSkKICAgICAgICAg
LCBtX2J1ZmZlcihvdGhlci5jYXBhY2l0eSgpKQogICAgIHsKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFU
UworICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yQ3JlYXRlZCh0aGlzLCBzaXplb2YoVmFsdWVU
eXBlKSwgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgICAgICBpZiAo
YmVnaW4oKSkKICAgICAgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShv
dGhlci5iZWdpbigpLCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CiAgICAgfQpAQCAtNzIzLDYgKzc1
MywxMCBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlh
bGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCksIG90aGVyLmVuZCgpLCBlbmQoKSk7CiAg
ICAgICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKIAorI2lmIERVTVBfVkVDVE9SX1NUQVRTCisg
ICAgICAgIFZlY3RvclN0YXRzOjp2ZWN0b3JVcGRhdGVkKHRoaXMsIG1fYnVmZmVyLmNhcGFjaXR5
KCksIG1fc2l6ZSk7CisjZW5kaWYKKwogICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgfQogCkBA
IC03NTYsNiArNzkwLDkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIFR5cGVPcGVyYXRpb25z
Ojp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBvdGhlci5lbmQoKSwg
ZW5kKCkpOwogICAgICAgICBtX3NpemUgPSBvdGhlci5zaXplKCk7CiAKKyNpZiBEVU1QX1ZFQ1RP
Ul9TVEFUUworICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yVXBkYXRlZCh0aGlzLCBtX2J1ZmZl
ci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgICAgIHJldHVybiAqdGhpczsKICAg
ICB9CiAKQEAgLTgwNCw2ICs4NDEsMTAgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHN0ZDo6
ZmlsbChiZWdpbigpLCBlbmQoKSwgdmFsKTsKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6OnVuaW5p
dGlhbGl6ZWRGaWxsKGVuZCgpLCBiZWdpbigpICsgbmV3U2l6ZSwgdmFsKTsKICAgICAgICAgbV9z
aXplID0gbmV3U2l6ZTsKKworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIFZlY3RvclN0
YXRzOjp2ZWN0b3JVcGRhdGVkKHRoaXMsIG1fYnVmZmVyLmNhcGFjaXR5KCksIG1fc2l6ZSk7Cisj
ZW5kaWYKICAgICB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2Fw
YWNpdHk+CkBAIC04NzIsNiArOTEzLDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB9CiAg
ICAgICAgIAogICAgICAgICBtX3NpemUgPSBzaXplOworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMK
KyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvclVwZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNp
dHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTg5MSw2ICs5MzYsMTAgQEAgbmFtZXNwYWNlIFdU
RiB7CiAgICAgICAgIGlmIChiZWdpbigpKQogICAgICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Omlu
aXRpYWxpemUoZW5kKCksIGJlZ2luKCkgKyBzaXplKTsKICAgICAgICAgbV9zaXplID0gc2l6ZTsK
KworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIFZlY3RvclN0YXRzOjp2ZWN0b3JVcGRh
dGVkKHRoaXMsIG1fYnVmZmVyLmNhcGFjaXR5KCksIG1fc2l6ZSk7CisjZW5kaWYKICAgICB9CiAK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CkBAIC05MDQs
NiArOTUzLDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoYmVnaW4oKSkKICAgICAg
ICAgICAgIFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsK
ICAgICAgICAgbV9idWZmZXIuZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOworCisjaWYgRFVN
UF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvclVwZGF0ZWQodGhpcywg
bV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0KICAgICAKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CkBAIC05MTgsNiArOTcx
LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBBU1NFUlQoYmVnaW4oKSk7CiAgICAgICAg
IFR5cGVPcGVyYXRpb25zOjptb3ZlKG9sZEJ1ZmZlciwgb2xkRW5kLCBiZWdpbigpKTsKICAgICAg
ICAgbV9idWZmZXIuZGVhbGxvY2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOworCisjaWYgRFVNUF9WRUNU
T1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvclVwZGF0ZWQodGhpcywgbV9idWZm
ZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgCkBAIC05MjgsNiArOTg1LDEwIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICBB
U1NFUlQoY2FwYWNpdHkoKSA9PSBpbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIGlmIChpbml0aWFs
Q2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0eSkKICAgICAgICAgICAgIG1fYnVmZmVyLmFsbG9jYXRl
QnVmZmVyKGluaXRpYWxDYXBhY2l0eSk7CisKKyNpZiBEVU1QX1ZFQ1RPUl9TVEFUUworICAgICAg
ICBWZWN0b3JTdGF0czo6dmVjdG9yVXBkYXRlZCh0aGlzLCBtX2J1ZmZlci5jYXBhY2l0eSgpLCBt
X3NpemUpOworI2VuZGlmCiAgICAgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNp
emVfdCBpbmxpbmVDYXBhY2l0eT4KQEAgLTk0OSw2ICsxMDEwLDEwIEBAIG5hbWVzcGFjZSBXVEYg
ewogCiAgICAgICAgIG1fYnVmZmVyLmRlYWxsb2NhdGVCdWZmZXIob2xkQnVmZmVyKTsKICAgICAg
ICAgbV9idWZmZXIucmVzdG9yZUlubGluZUJ1ZmZlcklmTmVlZGVkKCk7CisKKyNpZiBEVU1QX1ZF
Q1RPUl9TVEFUUworICAgICAgICBWZWN0b3JTdGF0czo6dmVjdG9yVXBkYXRlZCh0aGlzLCBtX2J1
ZmZlci5jYXBhY2l0eSgpLCBtX3NpemUpOworI2VuZGlmCiAgICAgfQogCiAgICAgLy8gVGVtcGxh
dGl6aW5nIHRoZXNlIGlzIGJldHRlciB0aGFuIGp1c3QgbGV0dGluZyB0aGUgY29udmVyc2lvbiBo
YXBwZW4gaW1wbGljaXRseSwKQEAgLTk3MCw2ICsxMDM1LDEwIEBAIG5hbWVzcGFjZSBXVEYgewog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFTaXplOyArK2kpCiAgICAgICAgICAg
ICBuZXcgKE5vdE51bGwsICZkZXN0W2ldKSBUKGRhdGFbaV0pOwogICAgICAgICBtX3NpemUgPSBu
ZXdTaXplOworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZl
Y3RvclVwZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgog
ICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4g
dGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTk4OCw2ICsxMDU3LDEwIEBAIG5hbWVzcGFjZSBXVEYg
ewogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGRhdGFTaXplOyArK2kpCiAgICAgICAg
ICAgICBuZXcgKE5vdE51bGwsICZkZXN0W2ldKSBUKGRhdGFbaV0pOwogICAgICAgICBtX3NpemUg
PSBuZXdTaXplOworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6
OnZlY3RvclVwZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRp
ZgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTk5Nyw2ICsxMDcwLDEwIEBAIG5h
bWVzcGFjZSBXVEYgewogICAgICAgICBpZiAoc2l6ZSgpICE9IGNhcGFjaXR5KCkpIHsKICAgICAg
ICAgICAgIG5ldyAoTm90TnVsbCwgZW5kKCkpIFQodmFsKTsKICAgICAgICAgICAgICsrbV9zaXpl
OworCisjaWYgRFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvclVw
ZGF0ZWQodGhpcywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTEwMTUsNiArMTA5MiwxMCBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIAogICAgICAgICBuZXcgKE5vdE51bGwsIGVuZCgpKSBUKCpwdHIpOwogICAgICAg
ICArK21fc2l6ZTsKKworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIFZlY3RvclN0YXRz
Ojp2ZWN0b3JVcGRhdGVkKHRoaXMsIG1fYnVmZmVyLmNhcGFjaXR5KCksIG1fc2l6ZSk7CisjZW5k
aWYKICAgICB9CiAKICAgICAvLyBUaGlzIHZlcnNpb24gb2YgYXBwZW5kIHNhdmVzIGEgYnJhbmNo
IGluIHRoZSBjYXNlIHdoZXJlIHlvdSBrbm93IHRoYXQgdGhlCkBAIC0xMDI3LDYgKzExMDgsMTAg
QEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIGNvbnN0IFUqIHB0ciA9ICZ2YWw7CiAgICAgICAg
IG5ldyAoTm90TnVsbCwgZW5kKCkpIFQoKnB0cik7CiAgICAgICAgICsrbV9zaXplOworCisjaWYg
RFVNUF9WRUNUT1JfU1RBVFMKKyAgICAgICAgVmVjdG9yU3RhdHM6OnZlY3RvclVwZGF0ZWQodGhp
cywgbV9idWZmZXIuY2FwYWNpdHkoKSwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0KIAogICAgIC8v
IFRoaXMgbWV0aG9kIHNob3VsZCBub3QgYmUgY2FsbGVkIGFwcGVuZCwgYSBiZXR0ZXIgbmFtZSB3
b3VsZCBiZSBhcHBlbmRFbGVtZW50cy4KQEAgLTEwNTUsNiArMTE0MCwxMCBAQCBuYW1lc3BhY2Ug
V1RGIHsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkYXRhU2l6ZTsgKytpKQogICAg
ICAgICAgICAgbmV3IChOb3ROdWxsLCAmc3BvdFtpXSkgVChkYXRhW2ldKTsKICAgICAgICAgbV9z
aXplID0gbmV3U2l6ZTsKKworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAgIFZlY3RvclN0
YXRzOjp2ZWN0b3JVcGRhdGVkKHRoaXMsIG1fYnVmZmVyLmNhcGFjaXR5KCksIG1fc2l6ZSk7Cisj
ZW5kaWYKICAgICB9CiAgICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4gdGVtcGxhdGU8dHlwZW5hbWUgVT4KQEAgLTEwNzEsNiArMTE2MCwxMCBAQCBu
YW1lc3BhY2UgV1RGIHsKICAgICAgICAgVHlwZU9wZXJhdGlvbnM6Om1vdmVPdmVybGFwcGluZyhz
cG90LCBlbmQoKSwgc3BvdCArIDEpOwogICAgICAgICBuZXcgKE5vdE51bGwsIHNwb3QpIFQoKmRh
dGEpOwogICAgICAgICArK21fc2l6ZTsKKworI2lmIERVTVBfVkVDVE9SX1NUQVRTCisgICAgICAg
IFZlY3RvclN0YXRzOjp2ZWN0b3JVcGRhdGVkKHRoaXMsIG1fYnVmZmVyLmNhcGFjaXR5KCksIG1f
c2l6ZSk7CisjZW5kaWYKICAgICB9CiAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXpl
X3QgaW5saW5lQ2FwYWNpdHk+IHRlbXBsYXRlPHR5cGVuYW1lIFUsIHNpemVfdCBjPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9tYWMvV2ViUHJvY2Vzc01haW5NYWMubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQppbmRl
eCBkZGJiYTlmMTUwZDc0ZWQ4NzBlZWQyYWFiMTUxZWNlNDA1YTYyMzVlLi4wNGQxNjhlYTE5NTM3
NjZlMjI1MmRmNmMxNDA1MzA3ZTE4MzI4ZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL21hYy9XZWJQcm9jZXNzTWFpbk1hYy5tbQpAQCAtNjIsNiArNjIsMTEgQEAgdXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitzdGF0aWMgdm9p
ZCBkdW1wU3RhdHNPYnNlcnZlckNhbGxiYWNrKENGUnVuTG9vcE9ic2VydmVyUmVmLCBDRlJ1bkxv
b3BBY3Rpdml0eSwgdm9pZCopCit7CisgICAgV1RGOjpWZWN0b3JTdGF0czo6ZHVtcFZlY3RvclN0
YXRzKCk7Cit9CisKIGludCBXZWJQcm9jZXNzTWFpbihjb25zdCBDb21tYW5kTGluZSYgY29tbWFu
ZExpbmUpCiB7CiAgICAgLy8gUmVtb3ZlIHRoZSBXZWJQcm9jZXNzIHNoaW0gZnJvbSB0aGUgRFlM
RF9JTlNFUlRfTElCUkFSSUVTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIGFueSBwcm9jZXNzZXMg
c3Bhd25lZCBieQpAQCAtMTY4LDYgKzE3MywxMCBAQCBpbnQgV2ViUHJvY2Vzc01haW4oY29uc3Qg
Q29tbWFuZExpbmUmIGNvbW1hbmRMaW5lKQogCiAgICAgW3Bvb2wgZHJhaW5dOwogCisgICAgQ0ZS
dW5Mb29wT2JzZXJ2ZXJDb250ZXh0IGNvbnRleHQgPSB7MCwgMCwgMCwgMCwgMH07CisgICAgQ0ZS
dW5Mb29wT2JzZXJ2ZXJSZWYgZHVtcFZlY3RvclN0YXRzT2JzZXJ2ZXIgPSBDRlJ1bkxvb3BPYnNl
cnZlckNyZWF0ZShrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBrQ0ZSdW5Mb29wQmVmb3JlV2FpdGluZywg
WUVTLCAwLCAmZHVtcFN0YXRzT2JzZXJ2ZXJDYWxsYmFjaywgJmNvbnRleHQpOworICAgIENGUnVu
TG9vcEFkZE9ic2VydmVyKENGUnVuTG9vcEdldE1haW4oKSwgZHVtcFZlY3RvclN0YXRzT2JzZXJ2
ZXIsIGtDRlJ1bkxvb3BEZWZhdWx0TW9kZSk7CisKICAgICAgLy8gSW5pdGlhbGl6ZSBBcHBLaXQu
CiAgICAgW05TQXBwbGljYXRpb24gc2hhcmVkQXBwbGljYXRpb25dOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>