<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.kde.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.6"
          urlbase="https://bugs.kde.org/"
          
          maintainer="sysadmin@kde.org"
>

    <bug>
          <bug_id>105039</bug_id>
          
          <creation_ts>2005-05-03 18:50:26 +0000</creation_ts>
          <short_desc>long run-times probably due to memory manager</short_desc>
          <delta_ts>2016-01-09 09:50:18 +0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>6</classification_id>
          <classification>Developer tools</classification>
          <product>valgrind</product>
          <component>memcheck</component>
          <version>2.4</version>
          <rep_platform>Compiled Sources</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>NOR</priority>
          <bug_severity>major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="pete moceyunas">moce</reporter>
          <assigned_to name="Julian Seward">jseward</assigned_to>
          <cc>liezielimbo92</cc>
          
          <cf_commitlink></cf_commitlink>
          <cf_versionfixedin></cf_versionfixedin>
          <cf_sentryurl></cf_sentryurl>
          <votes>0</votes>

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>339345</commentid>
    <comment_count>0</comment_count>
    <who name="pete moceyunas">moce</who>
    <bug_when>2005-05-03 18:50:26 +0000</bug_when>
    <thetext>The included test example shows a significant slow down when using valgrind. The
example executes a series of malloc() and free() calls and nothing much else, so
it is likely the memory allocator has some nonlinear behavior.

The mm.log file was generated by a real application - the real application logs
the malloc() and free calls to this file. The program mm_play will read the
logfile file and play-back the malloc() and free calls to mimic the actual
applications sequence, and amount of memory allocated.

There are 2 experiments:
1. Run the playback with skipping the malloc() and free() calls but executing
everything else (reading the file and looping)
2. Run the playback and actually calling malloc() and free()

Here are the results:
Experiment	Version	CPU	Valgrind CPU	Ratio
#1	        v2.0.0	0.86	22.98	        26.7
#1	        v2.4.0	0.86	21.95	        25.5
#2	        v2.0.0	4.91	4348	        885.5
#2	        v2.4.0	4.1	20048	        4889.8

The first experiment shows the overhead of the non-malloc/free part of the play
back program. The second experiment results show that malloc/free contribute a
significant portion of the run-time during the play-back.

The experiments using valgrind v2.4.0 were run on a machine with Redhat Linux
7.3, kernel 2.4.18-27.7.xsmp, dual processor 2.791mhz machine with 3.78gig ram.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339363</commentid>
    <comment_count>1</comment_count>
      <attachid>10885</attachid>
    <who name="pete moceyunas">moce</who>
    <bug_when>2005-05-03 19:52:10 +0000</bug_when>
    <thetext>Created attachment 10885
Tar file contain results and test program

Make.out.v2* - results running mm_play using valgrind v200 and v240
mm_play.c - playback program
Makefile - Make file that builds mm_play and reproduce results</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339366</commentid>
    <comment_count>2</comment_count>
    <who name="pete moceyunas">moce</who>
    <bug_when>2005-05-03 20:00:29 +0000</bug_when>
    <thetext>Bugzilla won&apos;t let me attach the mm.log (playback) file because it is too large - Compressed it is 14meg. I will email it to you upon request.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339446</commentid>
    <comment_count>3</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2005-05-04 04:18:11 +0000</bug_when>
    <thetext>&gt; Experiment	Version	CPU	Valgrind CPU	Ratio
&gt; #1	        v2.0.0	0.86	22.98	        26.7
&gt; #1	        v2.4.0	0.86	21.95	        25.5
&gt; #2	        v2.0.0	4.91	4348	        885.5
&gt; #2	        v2.4.0	4.1	20048	        4889.8


Can you explain this table?  What do the columns mean?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>339461</commentid>
    <comment_count>4</comment_count>
    <who name="pete moceyunas">moce</who>
    <bug_when>2005-05-04 07:44:38 +0000</bug_when>
    <thetext>Column #1: The experiment that was run. 
    Experiment #1 runs the mmplay option with the -n option. In the Makefile this is target &quot;mmplay-it-malloc-disabled&quot;. This experiments is used to show the overhead of the mmplay to simply read the file and execute everything except the actual malloc() and free() calls.
    Experiment #2 runs mm_play without -n, and malloc&apos;s and free&apos;s are actually called. In the Makefile this is target mmplay-it

Column#2: Version of valgrind used
Column#3: Cpu time in seconds running mmplay without valgrind
Column#4: Cpu time in seconds running mmplay with valgrind
Column#5: Ratio of column #4/#3

Here&apos;s the table with better formating (I hope):
                     
Experiment Version    CPU    ValgrindCPU   ValgrindCPU/CPU
#1         v2.0.0     0.86         23            26.7
#1         v2.4.0     0.86         22            25.5
#2         v2.0.0     4.91       4348           885.5
#2         v2.4.0     4.1        20048          4889.8 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340680</commentid>
    <comment_count>5</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2005-05-09 19:34:08 +0000</bug_when>
    <thetext>I&apos;ve had a look at this, I think I understand what&apos;s going on.  Basically, we&apos;re
getting hammered by paging slowdowns when Valgrind+client are larger than the memory size.  It&apos;s not the memory allocator&apos;s fault.

I had a test program that does a lot of mallocs and frees.  Once the amount of memory allocated with malloc exceeded about 400MB, performance dropped precipitously as the page fault rate jumped.  This makes sense as my machine has 1GB of RAM, Memcheck more than doubles the client&apos;s memory usage due to the V bits, and then Valgrind needs some more for normal operation.

I tried Nulgrind on the same test -- no problem, it was very fast.  Same was true for Addrcheck.  So both of those corroborate the story.

The best way to address this would be to implement a compressed representation of V bits in memory, as we&apos;ve discussed previously, as this would reduce the
memory footprint significantly, resulting in much-reduced paging.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340905</commentid>
    <comment_count>6</comment_count>
    <who name="pete moceyunas">moce</who>
    <bug_when>2005-05-10 17:51:33 +0000</bug_when>
    <thetext>I think in the mm_play test case there is something else going on. My machine has 4gig RAM and the process seemed to hold steady around 1.8gig (reported by top), and I don&apos;t believe it to be paging. Further, running -tool=addrcheck takes a significant time (20K seconds) and its size is only 490meg. 

Running valgrind on mm_play with -tool=none does run fast, it only takes 18 seconds.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340964</commentid>
    <comment_count>7</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2005-05-10 20:51:28 +0000</bug_when>
    <thetext>Hmm, I just realised the --tool=none case is misleading, because in that 
case Valgrind uses the native malloc/free.

I won&apos;t have time to look at this any time soon;  perhaps you could do 
some more digging, Pete?  You could try pulling Valgrind&apos;s allocator out 
into a user-space program and experiment with it.  That should tell us 
whether Valgrind&apos;s allocator has some inherently bad behaviour, or whether 
it&apos;s something about the interaction with shadow memory in 
Memcheck/Addrcheck that is the problem.  I would guess that the allocator 
itself is not the problem, since it seems to be paging that is causing the 
slowdown (as opposed to eg. slow algorithms in the allocator) but I could 
be wrong.

If you check out the Subversion repository, the allocator is in 
coregrind/m_mallocfree.c.  You&apos;ll need to write some scaffolding code to 
use it in a user-space program, but it shouldn&apos;t be hard.  Any results you 
can report about this would be much appreciated.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342711</commentid>
    <comment_count>8</comment_count>
      <attachid>11067</attachid>
    <who name="Julian Seward">jseward</who>
    <bug_when>2005-05-17 04:03:00 +0000</bug_when>
    <thetext>Created attachment 11067
Simple test program for stressing memcheck&apos;s malloc/free implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342712</commentid>
    <comment_count>9</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2005-05-17 04:05:22 +0000</bug_when>
    <thetext>I did some snooping around the 3.0 line.  I did discover that
memcheck behaves poorly when there are a huge number of
blocks simultaneously live -- I tested with 500k and 1 million.
See the attached program.  NLIVE controls the number of simultaneously
live blocks.  NITERS controls the total amount of work (# mallocs
and frees).  Interestingly, as you jack up NLIVE through 500k, 1M, 
etc, the speed of the program basically halves each time, despite
the total amount of malloc/free work staying the same.

I traced this to the hashtable in coregrind/vg_hashtable.c (2.4.0)
or m_hashtable (3.0 line).  Changing the #define of VG_N_CHAINS
from 4999 to 80021 (also a prime number) reduces the run time of
the program when NLIVE is 1M from 315 seconds to 125 seconds.

I would be interested to hear if this fixes the problem for you.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342727</commentid>
    <comment_count>10</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2005-05-17 05:26:45 +0000</bug_when>
    <thetext>Hmm, interesting.  Well found.  I see you&apos;ve increased the size of that 
hashtable type;  a better fix would be to replace it with an expanding 
table that uses linear probing rather than separate chaining.  Being able 
to specify an initial size would be useful too, for different situations.

However, I wonder if this is the whole story, since I found that Addrcheck 
didn&apos;t suffer nearly as badly as Memcheck in some cases, and it shares the 
same hashtable structure.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342750</commentid>
    <comment_count>11</comment_count>
    <who name="Jeremy Fitzhardinge">jeremy</who>
    <bug_when>2005-05-17 09:09:06 +0000</bug_when>
    <thetext>I was thinking about replacing the hashtable with a skiplist in mem/addrcheck.  Partly because it scales better, but also because it seems to be a better match for how that structure is used.  It is already sorted, and it allows non-exact matches, which would simplify the leakcheck phase.  Currently the leakcheck code has to create a sorted array from the hashtable in order to be able to scan memory in address order and to be able to find inner pointers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343012</commentid>
    <comment_count>12</comment_count>
    <who name="pete moceyunas">moce</who>
    <bug_when>2005-05-18 01:25:55 +0000</bug_when>
    <thetext>The run-time of mm_play() is not significantly improved when I rebuilt valgrind with #define VG_N_CHAINS 500009. The runtime of addrcheck was 20608 seconds. It is possible that there are still significant collisions in the table - but it will require some modifications to track the chain lengths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343017</commentid>
    <comment_count>13</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2005-05-18 01:40:17 +0000</bug_when>
    <thetext>Bummer.

How hard would it be for you to produce a test example that 
doesn&apos;t require a machine with 3.7GB of memory to run?
I&apos;d like to help but the most memory I have is 768M.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343023</commentid>
    <comment_count>14</comment_count>
    <who name="pete moceyunas">moce</who>
    <bug_when>2005-05-18 01:48:49 +0000</bug_when>
    <thetext>Julian Seward wrote:

[bugs.kde.org quoted mail]
If you run the addrcheck tool it only takes ~500meg and takes just as long.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343409</commentid>
    <comment_count>15</comment_count>
    <who name="pete moceyunas">moce</who>
    <bug_when>2005-05-19 09:10:31 +0000</bug_when>
    <thetext>I managed to build and profile a version of mm_play that calls the malloc/free/realloc api&apos;s defined in vg_malloc2.c. The profile revealed that most of the time was spent searching for a large enough block on a given freelist. mm_play has a lot of 8 byte and 16 byte allocations and I bet that there were a lot of one or the other at the beginning of the list. If you change the bins for the memory such that 8 byte (payload size) and 16 byte chunks go into their own individual bins, then the huge run-time goes away. With the change the test case that took 20,000+ seconds runs in 148 seconds. If you add in a larger hash table size of 500009 then it brings it down to 132seconds.
The changes to vg_malloc2.c were:

#define VG_N_MALLOC_LISTS     18

and modifying the function:

static
UInt pszB_to_listNo ( SizeT pszB )
{
   assert(0 == pszB % VG_MIN_MALLOC_SZB);
   pszB /= VG_MIN_MALLOC_SZB;
   if (pszB == 0)   return 0;
   if (pszB == 1)   return 1;
   if (pszB == 2)   return 2;
   if (pszB &lt;= 3)   return 3;
   if (pszB &lt;= 4)   return 4;
   if (pszB &lt;= 5)   return 5;
   if (pszB &lt;= 6)   return 6;
   if (pszB &lt;= 7)   return 7;
   if (pszB &lt;= 8)   return 8;
   if (pszB &lt;= 9)   return 9;
   if (pszB &lt;= 10)  return 10;
   if (pszB &lt;= 11)  return 11;
   if (pszB &lt;= 12)  return 12;
   if (pszB &lt;= 16)  return 13;
   if (pszB &lt;= 32)  return 14;
   if (pszB &lt;= 64)  return 15;
   if (pszB &lt;= 128) return 16;
   return 17;
}

Of course this even with my patch, this bin strategy will have similar problems if a program chooses one of the larger bins and there are lots and lots of allocations of one or more types.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343476</commentid>
    <comment_count>16</comment_count>
    <who name="Julian Seward">jseward</who>
    <bug_when>2005-05-19 12:42:11 +0000</bug_when>
    <thetext>&gt; On Thursday 19 May 2005 08:10, pete moceyunas wrote:
&gt; If you change the bins for the memory such that 8 byte (payload size) and
&gt; 16 byte chunks go into their own individual bins, then the huge run-time
&gt; goes away.


Yowza!  It&apos;s not just with your program either.  The same change
reduces the startup/exit time for Qt designer on my old P3 from 564 to
418 seconds.  That run does about 3.9 million mallocs and the same
number of frees.  Well spotted -- thanks.  I&apos;ll commit this on the
3.0 line and I guess it should go in 2.4 just in case.

&gt; Of course this even with my patch, this bin strategy will have similar
&gt; problems if a program chooses one of the larger bins and there are lots and
&gt; lots of allocations of one or more types.


That&apos;s true.  But a program doing large allocs/frees would
spend proportionally more time doing useful work with the  
allocated areas and so the problem would be less acute.

J
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343510</commentid>
    <comment_count>17</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2005-05-19 14:59:39 +0000</bug_when>
    <thetext>Wow!  Great work, Pete, thanks for tracking this down.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343531</commentid>
    <comment_count>18</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2005-05-19 15:57:02 +0000</bug_when>
    <thetext>I&apos;m closing this since it&apos;s now fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>369687</commentid>
    <comment_count>19</comment_count>
    <who name="Nicholas Nethercote">njn</who>
    <bug_when>2005-08-30 03:10:38 +0000</bug_when>
    <thetext>Pete, can you email me the mm.log file, or put it on a website somewhere?  I want to test how an AVL tree compares against the current hash table for holding heap block information.  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1568379</commentid>
    <comment_count>20</comment_count>
    <who name="Zel Limbo">liezielimbo92</who>
    <bug_when>2016-01-09 09:50:18 +0000</bug_when>
    <thetext>*** Removed by KDE Sysadmin - Contained Commercial Advertising ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10885</attachid>
            <date>2005-05-03 19:52:10 +0000</date>
            <delta_ts>2005-05-03 19:52:10 +0000</delta_ts>
            <desc>Tar file contain results and test program</desc>
            <filename>mm_play.tar</filename>
            <type>text/plain</type>
            <size>30720</size>
            <attacher name="pete moceyunas">moce</attacher>
            
              <data encoding="base64">TWFrZS5vdXQudjIwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAyMzY1
NQAwMDAwMTQ0ADAwMDAwMDExMjA3ADEwMjM1NzI0MTM3ADAxMjAzMgAgMAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAG1vY2UAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAdXNlcnMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB2
YWxncmluZCAtLXZlcnNpb24KdmFsZ3JpbmQtMi4wLjAKbWFrZTogW21tcGxheS1pdC1tYWxsb2Mt
ZGlzYWJsZWRdIEVycm9yIDEgKGlnbm9yZWQpCnpjYXQgbW0ubG9nLmd6IHwgdGltZSAuL21tcGxh
eSAtbiAtCi1uIGVuYWJsZWQ6IG5vIG1lbW9yeSBhbGxvY2F0aW9ucyB3aWxsIGJlIGRvbmUuCi0K
dHJhY2UgcmVwcmVzZW50cyBtYXhpbXVtIG9mIDExMTc4NTIgYWN0aXZlIG9iamVjdHMKdHJhY2Ug
cmVwcmVzZW50cyBtYXhpbXVtIG9mIDAgYWN0aXZlIGdyb3VwcwouLi4uCm1hbGxvYyAgICAgICAg
ICAgICAgICAgIDk3NTc1NzAKZnJlZSAgICAgICAgICAgICAgICAgICAgOTc1NzU3MApyZWFsbG9j
ICAgICAgICAgICAgICAgICAgMjA3NTQzCnRyaXZpYWwgcmVhbGxvYyAgICAgICAgICAgICAgIDAK
ZXZlbnRzICAgICAgICAgICAgICAgICAxOTcyMjY4MwpmaW5hbCBmcmVlICAgICAgICAgICAgICAg
ICAgICAwClRvdGFsIGV2ZW50cyAgICAgICAgICAgMTk3MjI2ODMKbWF4X2FkZHJbMF0gPSAweDAw
MDAwMDAwCm1pbl9hZGRyWzBdID0gMHhmZmZmZmZmZgptYXhfYWRkclsxXSA9IDB4MDAwMDAwMDAK
bWluX2FkZHJbMV0gPSAweGZmZmZmZmZmCkFjdHVhbCAobWF4LW1pbikgICAgICAgICAgPSAzMS42
IE1pQgpQZXJmZWN0IDEtYnl0ZSBhbGlnbm1lbnQgID0gMzEuNiBNaUIgKDAuMCUpClBlcmZlY3Qg
NC1ieXRlIGFsaWdubWVudCAgPSAzMS43IE1pQiAoLTAuMyUpClBlcmZlY3QgOC1ieXRlIGFsaWdu
bWVudCAgPSAzMy4wIE1pQiAoLTQuNCUpCjAuODZ1c2VyIDAuMDhzeXN0ZW0gMDowMi4yMGVsYXBz
ZWQgNDMlQ1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpawowaW5wdXRzKzBvdXRw
dXRzICgxMDRtYWpvcisyMTk4bWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKemNhdCBtbS5sb2cuZ3og
fCB0aW1lIHZhbGdyaW5kIC4vbW1wbGF5IC1uIC0KPT00Nzk4PT0gTWVtY2hlY2ssIGEuay5hLiBW
YWxncmluZCwgYSBtZW1vcnkgZXJyb3IgZGV0ZWN0b3IgZm9yIHg4Ni1saW51eC4KPT00Nzk4PT0g
Q29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIGFuZCBHTlUgR1BMJ2QsIGJ5IEp1bGlhbiBTZXdhcmQu
Cj09NDc5OD09IFVzaW5nIHZhbGdyaW5kLTIuMC4wLCBhIHByb2dyYW0gc3VwZXJ2aXNpb24gZnJh
bWV3b3JrIGZvciB4ODYtbGludXguCj09NDc5OD09IENvcHlyaWdodCAoQykgMjAwMC0yMDAzLCBh
bmQgR05VIEdQTCdkLCBieSBKdWxpYW4gU2V3YXJkLgo9PTQ3OTg9PSBFc3RpbWF0ZWQgQ1BVIGNs
b2NrIHJhdGUgaXMgMjc5MyBNSHoKPT00Nzk4PT0gRm9yIG1vcmUgZGV0YWlscywgcmVydW4gd2l0
aDogLXYKPT00Nzk4PT0gCi1uIGVuYWJsZWQ6IG5vIG1lbW9yeSBhbGxvY2F0aW9ucyB3aWxsIGJl
IGRvbmUuCi0KdHJhY2UgcmVwcmVzZW50cyBtYXhpbXVtIG9mIDExMTc4NTIgYWN0aXZlIG9iamVj
dHMKdHJhY2UgcmVwcmVzZW50cyBtYXhpbXVtIG9mIDAgYWN0aXZlIGdyb3VwcwouLi4uCm1hbGxv
YyAgICAgICAgICAgICAgICAgIDk3NTc1NzAKZnJlZSAgICAgICAgICAgICAgICAgICAgOTc1NzU3
MApyZWFsbG9jICAgICAgICAgICAgICAgICAgMjA3NTQzCnRyaXZpYWwgcmVhbGxvYyAgICAgICAg
ICAgICAgIDAKZXZlbnRzICAgICAgICAgICAgICAgICAxOTcyMjY4MwpmaW5hbCBmcmVlICAgICAg
ICAgICAgICAgICAgICAwClRvdGFsIGV2ZW50cyAgICAgICAgICAgMTk3MjI2ODMKbWF4X2FkZHJb
MF0gPSAweDAwMDAwMDAwCm1pbl9hZGRyWzBdID0gMHhmZmZmZmZmZgptYXhfYWRkclsxXSA9IDB4
MDAwMDAwMDAKbWluX2FkZHJbMV0gPSAweGZmZmZmZmZmCkFjdHVhbCAobWF4LW1pbikgICAgICAg
ICAgPSAzMS42IE1pQgpQZXJmZWN0IDEtYnl0ZSBhbGlnbm1lbnQgID0gMzEuNiBNaUIgKDAuMCUp
ClBlcmZlY3QgNC1ieXRlIGFsaWdubWVudCAgPSAzMS43IE1pQiAoLTAuMyUpClBlcmZlY3QgOC1i
eXRlIGFsaWdubWVudCAgPSAzMy4wIE1pQiAoLTQuNCUpCj09NDc5OD09IAo9PTQ3OTg9PSBFUlJP
UiBTVU1NQVJZOiAwIGVycm9ycyBmcm9tIDAgY29udGV4dHMgKHN1cHByZXNzZWQ6IDAgZnJvbSAw
KQo9PTQ3OTg9PSBtYWxsb2MvZnJlZTogaW4gdXNlIGF0IGV4aXQ6IDAgYnl0ZXMgaW4gMCBibG9j
a3MuCj09NDc5OD09IG1hbGxvYy9mcmVlOiAxIGFsbG9jcywgMSBmcmVlcywgMjQgYnl0ZXMgYWxs
b2NhdGVkLgo9PTQ3OTg9PSBGb3IgY291bnRzIG9mIGRldGVjdGVkIGVycm9ycywgcmVydW4gd2l0
aDogLXYKPT00Nzk4PT0gTm8gbWFsbG9jJ2QgYmxvY2tzIC0tIG5vIGxlYWtzIGFyZSBwb3NzaWJs
ZS4KMjIuOTh1c2VyIDAuMjNzeXN0ZW0gMDoyNS4zN2VsYXBzZWQgOTElQ1BVICgwYXZndGV4dCsw
YXZnZGF0YSAwbWF4cmVzaWRlbnQpawowaW5wdXRzKzBvdXRwdXRzICgxNTY3bWFqb3IrOTIwMm1p
bm9yKXBhZ2VmYXVsdHMgMHN3YXBzCnZhbGdyaW5kIC0tdmVyc2lvbgp2YWxncmluZC0yLjAuMApt
YWtlOiBbbW1wbGF5LWl0XSBFcnJvciAxIChpZ25vcmVkKQp6Y2F0IG1tLmxvZy5neiB8IHRpbWUg
Li9tbXBsYXkgLQotCnRyYWNlIHJlcHJlc2VudHMgbWF4aW11bSBvZiAxMTE3ODUyIGFjdGl2ZSBv
YmplY3RzCnRyYWNlIHJlcHJlc2VudHMgbWF4aW11bSBvZiAwIGFjdGl2ZSBncm91cHMKLi4uLgpt
YWxsb2MgICAgICAgICAgICAgICAgICA5NzU3NTcwCmZyZWUgICAgICAgICAgICAgICAgICAgIDk3
NTc1NzAKcmVhbGxvYyAgICAgICAgICAgICAgICAgIDIwNzU0Mwp0cml2aWFsIHJlYWxsb2MgICAg
ICAgICAgIDc5OTg2CmV2ZW50cyAgICAgICAgICAgICAgICAgMTk3MjI2ODMKZmluYWwgZnJlZSAg
ICAgICAgICAgICAgICAgICAgMApUb3RhbCBldmVudHMgICAgICAgICAgIDE5NzIyNjgzCm1heF9h
ZGRyWzBdID0gMHgwYjZlMTlkNAptaW5fYWRkclswXSA9IDB4MDhmOGRiMTgKbWF4X2FkZHJbMV0g
PSAweDAwMDAwMDAwCm1pbl9hZGRyWzFdID0gMHhmZmZmZmZmZgpBY3R1YWwgKG1heC1taW4pICAg
ICAgICAgID0gMzkuMyBNaUIKUGVyZmVjdCAxLWJ5dGUgYWxpZ25tZW50ICA9IDMxLjYgTWlCICgx
OS42JSkKUGVyZmVjdCA0LWJ5dGUgYWxpZ25tZW50ICA9IDMxLjcgTWlCICgxOS40JSkKUGVyZmVj
dCA4LWJ5dGUgYWxpZ25tZW50ICA9IDMzLjAgTWlCICgxNi4xJSkKNC45MXVzZXIgMC4xOHN5c3Rl
bSAwOjA2LjE0ZWxhcHNlZCA4MyVDUFUgKDBhdmd0ZXh0KzBhdmdkYXRhIDBtYXhyZXNpZGVudClr
CjBpbnB1dHMrMG91dHB1dHMgKDEwNW1ham9yKzEyNjcybWlub3IpcGFnZWZhdWx0cyAwc3dhcHMK
emNhdCBtbS5sb2cuZ3ogfCB0aW1lIHZhbGdyaW5kIC4vbW1wbGF5IC0KPT00OTgwPT0gTWVtY2hl
Y2ssIGEuay5hLiBWYWxncmluZCwgYSBtZW1vcnkgZXJyb3IgZGV0ZWN0b3IgZm9yIHg4Ni1saW51
eC4KPT00OTgwPT0gQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMsIGFuZCBHTlUgR1BMJ2QsIGJ5IEp1
bGlhbiBTZXdhcmQuCj09NDk4MD09IFVzaW5nIHZhbGdyaW5kLTIuMC4wLCBhIHByb2dyYW0gc3Vw
ZXJ2aXNpb24gZnJhbWV3b3JrIGZvciB4ODYtbGludXguCj09NDk4MD09IENvcHlyaWdodCAoQykg
MjAwMC0yMDAzLCBhbmQgR05VIEdQTCdkLCBieSBKdWxpYW4gU2V3YXJkLgo9PTQ5ODA9PSBFc3Rp
bWF0ZWQgQ1BVIGNsb2NrIHJhdGUgaXMgMjgwNyBNSHoKPT00OTgwPT0gRm9yIG1vcmUgZGV0YWls
cywgcmVydW4gd2l0aDogLXYKPT00OTgwPT0gCi0KdHJhY2UgcmVwcmVzZW50cyBtYXhpbXVtIG9m
IDExMTc4NTIgYWN0aXZlIG9iamVjdHMKdHJhY2UgcmVwcmVzZW50cyBtYXhpbXVtIG9mIDAgYWN0
aXZlIGdyb3VwcwouLi4uCm1hbGxvYyAgICAgICAgICAgICAgICAgIDk3NTc1NzAKZnJlZSAgICAg
ICAgICAgICAgICAgICAgOTc1NzU3MApyZWFsbG9jICAgICAgICAgICAgICAgICAgMjA3NTQzCnRy
aXZpYWwgcmVhbGxvYyAgICAgICAgICAgIDg0NTIKZXZlbnRzICAgICAgICAgICAgICAgICAxOTcy
MjY4MwpmaW5hbCBmcmVlICAgICAgICAgICAgICAgICAgICAwClRvdGFsIGV2ZW50cyAgICAgICAg
ICAgMTk3MjI2ODMKbWF4X2FkZHJbMF0gPSAweDUwYjgzZmRjCm1pbl9hZGRyWzBdID0gMHg0MWQx
ZTA3YwptYXhfYWRkclsxXSA9IDB4MDAwMDAwMDAKbWluX2FkZHJbMV0gPSAweGZmZmZmZmZmCkFj
dHVhbCAobWF4LW1pbikgICAgICAgICAgPSAyMzguNCBNaUIKUGVyZmVjdCAxLWJ5dGUgYWxpZ25t
ZW50ICA9IDMxLjYgTWlCICg4Ni43JSkKUGVyZmVjdCA0LWJ5dGUgYWxpZ25tZW50ICA9IDMxLjcg
TWlCICg4Ni43JSkKUGVyZmVjdCA4LWJ5dGUgYWxpZ25tZW50ICA9IDMzLjAgTWlCICg4Ni4yJSkK
PT00OTgwPT0gCj09NDk4MD09IEVSUk9SIFNVTU1BUlk6IDAgZXJyb3JzIGZyb20gMCBjb250ZXh0
cyAoc3VwcHJlc3NlZDogMCBmcm9tIDApCj09NDk4MD09IG1hbGxvYy9mcmVlOiBpbiB1c2UgYXQg
ZXhpdDogMCBieXRlcyBpbiAwIGJsb2Nrcy4KPT00OTgwPT0gbWFsbG9jL2ZyZWU6IDk5NjUxMTQg
YWxsb2NzLCA5OTY1MTE0IGZyZWVzLCAxNzY0NTMxMzIgYnl0ZXMgYWxsb2NhdGVkLgo9PTQ5ODA9
PSBGb3IgY291bnRzIG9mIGRldGVjdGVkIGVycm9ycywgcmVydW4gd2l0aDogLXYKPT00OTgwPT0g
Tm8gbWFsbG9jJ2QgYmxvY2tzIC0tIG5vIGxlYWtzIGFyZSBwb3NzaWJsZS4KNDM0OC4yOXVzZXIg
MjEuMThzeXN0ZW0gMToxNDowOWVsYXBzZWQgOTglQ1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4
cmVzaWRlbnQpawowaW5wdXRzKzBvdXRwdXRzICgxNTY3bWFqb3IrNjkyNDJtaW5vcilwYWdlZmF1
bHRzIDBzd2FwcwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE1ha2Uub3V0LnYy
NDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMjM2NTUAMDAwMDE0NAAw
MDAwMDAxMDc0MwAxMDIzNTYxNzc2MQAwMTIwNDYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABtb2NlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHVzZXJzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmFsZ3JpbmQgLS12
ZXJzaW9uCnZhbGdyaW5kLTIuNC4wCnpjYXQgbW0ubG9nLmd6IHwgdGltZSAuL21tcGxheSAtbiAt
Ci1uIGVuYWJsZWQ6IG5vIG1lbW9yeSBhbGxvY2F0aW9ucyB3aWxsIGJlIGRvbmUuCi0KdHJhY2Ug
cmVwcmVzZW50cyBtYXhpbXVtIG9mIDExMTc4NTIgYWN0aXZlIG9iamVjdHMKdHJhY2UgcmVwcmVz
ZW50cyBtYXhpbXVtIG9mIDAgYWN0aXZlIGdyb3VwcwouLi4uCm1hbGxvYyAgICAgICAgICAgICAg
ICAgIDk3NTc1NzAKZnJlZSAgICAgICAgICAgICAgICAgICAgOTc1NzU3MApyZWFsbG9jICAgICAg
ICAgICAgICAgICAgMjA3NTQzCnRyaXZpYWwgcmVhbGxvYyAgICAgICAgICAgICAgIDAKZXZlbnRz
ICAgICAgICAgICAgICAgICAxOTcyMjY4MwpmaW5hbCBmcmVlICAgICAgICAgICAgICAgICAgICAw
ClRvdGFsIGV2ZW50cyAgICAgICAgICAgMTk3MjI2ODMKbWF4X2FkZHJbMF0gPSAweDAwMDAwMDAw
Cm1pbl9hZGRyWzBdID0gMHhmZmZmZmZmZgptYXhfYWRkclsxXSA9IDB4MDAwMDAwMDAKbWluX2Fk
ZHJbMV0gPSAweGZmZmZmZmZmCkFjdHVhbCAobWF4LW1pbikgICAgICAgICAgPSAzMS42IE1pQgpQ
ZXJmZWN0IDEtYnl0ZSBhbGlnbm1lbnQgID0gMzEuNiBNaUIgKDAuMCUpClBlcmZlY3QgNC1ieXRl
IGFsaWdubWVudCAgPSAzMS43IE1pQiAoLTAuMyUpClBlcmZlY3QgOC1ieXRlIGFsaWdubWVudCAg
PSAzMy4wIE1pQiAoLTQuNCUpCjAuODZ1c2VyIDAuMDVzeXN0ZW0gMDowMS45NmVsYXBzZWQgNDYl
Q1BVICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpawowaW5wdXRzKzBvdXRwdXRzICgx
MDRtYWpvcisyMTk4bWlub3IpcGFnZWZhdWx0cyAwc3dhcHMKemNhdCBtbS5sb2cuZ3ogfCB0aW1l
IHZhbGdyaW5kIC4vbW1wbGF5IC1uIC0KPT0yMjk5Nj09IE1lbWNoZWNrLCBhIG1lbW9yeSBlcnJv
ciBkZXRlY3RvciBmb3IgeDg2LWxpbnV4Lgo9PTIyOTk2PT0gQ29weXJpZ2h0IChDKSAyMDAyLTIw
MDUsIGFuZCBHTlUgR1BMJ2QsIGJ5IEp1bGlhbiBTZXdhcmQgZXQgYWwuCj09MjI5OTY9PSBVc2lu
ZyB2YWxncmluZC0yLjQuMCwgYSBwcm9ncmFtIHN1cGVydmlzaW9uIGZyYW1ld29yayBmb3IgeDg2
LWxpbnV4Lgo9PTIyOTk2PT0gQ29weXJpZ2h0IChDKSAyMDAwLTIwMDUsIGFuZCBHTlUgR1BMJ2Qs
IGJ5IEp1bGlhbiBTZXdhcmQgZXQgYWwuCj09MjI5OTY9PSBGb3IgbW9yZSBkZXRhaWxzLCByZXJ1
biB3aXRoOiAtdgo9PTIyOTk2PT0gCi1uIGVuYWJsZWQ6IG5vIG1lbW9yeSBhbGxvY2F0aW9ucyB3
aWxsIGJlIGRvbmUuCi0KdHJhY2UgcmVwcmVzZW50cyBtYXhpbXVtIG9mIDExMTc4NTIgYWN0aXZl
IG9iamVjdHMKdHJhY2UgcmVwcmVzZW50cyBtYXhpbXVtIG9mIDAgYWN0aXZlIGdyb3VwcwouLi4u
Cm1hbGxvYyAgICAgICAgICAgICAgICAgIDk3NTc1NzAKZnJlZSAgICAgICAgICAgICAgICAgICAg
OTc1NzU3MApyZWFsbG9jICAgICAgICAgICAgICAgICAgMjA3NTQzCnRyaXZpYWwgcmVhbGxvYyAg
ICAgICAgICAgICAgIDAKZXZlbnRzICAgICAgICAgICAgICAgICAxOTcyMjY4MwpmaW5hbCBmcmVl
ICAgICAgICAgICAgICAgICAgICAwClRvdGFsIGV2ZW50cyAgICAgICAgICAgMTk3MjI2ODMKbWF4
X2FkZHJbMF0gPSAweDAwMDAwMDAwCm1pbl9hZGRyWzBdID0gMHhmZmZmZmZmZgptYXhfYWRkclsx
XSA9IDB4MDAwMDAwMDAKbWluX2FkZHJbMV0gPSAweGZmZmZmZmZmCkFjdHVhbCAobWF4LW1pbikg
ICAgICAgICAgPSAzMS42IE1pQgpQZXJmZWN0IDEtYnl0ZSBhbGlnbm1lbnQgID0gMzEuNiBNaUIg
KDAuMCUpClBlcmZlY3QgNC1ieXRlIGFsaWdubWVudCAgPSAzMS43IE1pQiAoLTAuMyUpClBlcmZl
Y3QgOC1ieXRlIGFsaWdubWVudCAgPSAzMy4wIE1pQiAoLTQuNCUpCj09MjI5OTY9PSAKPT0yMjk5
Nj09IEVSUk9SIFNVTU1BUlk6IDAgZXJyb3JzIGZyb20gMCBjb250ZXh0cyAoc3VwcHJlc3NlZDog
MjIgZnJvbSAxKQo9PTIyOTk2PT0gbWFsbG9jL2ZyZWU6IGluIHVzZSBhdCBleGl0OiAwIGJ5dGVz
IGluIDAgYmxvY2tzLgo9PTIyOTk2PT0gbWFsbG9jL2ZyZWU6IDEgYWxsb2NzLCAxIGZyZWVzLCAy
NCBieXRlcyBhbGxvY2F0ZWQuCj09MjI5OTY9PSBGb3IgY291bnRzIG9mIGRldGVjdGVkIGVycm9y
cywgcmVydW4gd2l0aDogLXYKPT0yMjk5Nj09IE5vIG1hbGxvYydkIGJsb2NrcyAtLSBubyBsZWFr
cyBhcmUgcG9zc2libGUuCjIxLjk1dXNlciAwLjI5c3lzdGVtIDA6MjMuODNlbGFwc2VkIDkzJUNQ
VSAoMGF2Z3RleHQrMGF2Z2RhdGEgMG1heHJlc2lkZW50KWsKMGlucHV0cyswb3V0cHV0cyAoMTQ0
Nm1ham9yKzY3MDRtaW5vcilwYWdlZmF1bHRzIDBzd2Fwcwp2YWxncmluZCAtLXZlcnNpb24KdmFs
Z3JpbmQtMi40LjAKemNhdCBtbS5sb2cuZ3ogfCB0aW1lIC4vbW1wbGF5IC0KLQp0cmFjZSByZXBy
ZXNlbnRzIG1heGltdW0gb2YgMTExNzg1MiBhY3RpdmUgb2JqZWN0cwp0cmFjZSByZXByZXNlbnRz
IG1heGltdW0gb2YgMCBhY3RpdmUgZ3JvdXBzCi4uLi4KbWFsbG9jICAgICAgICAgICAgICAgICAg
OTc1NzU3MApmcmVlICAgICAgICAgICAgICAgICAgICA5NzU3NTcwCnJlYWxsb2MgICAgICAgICAg
ICAgICAgICAyMDc1NDMKdHJpdmlhbCByZWFsbG9jICAgICAgICAgICA3OTk4NgpldmVudHMgICAg
ICAgICAgICAgICAgIDE5NzIyNjgzCmZpbmFsIGZyZWUgICAgICAgICAgICAgICAgICAgIDAKVG90
YWwgZXZlbnRzICAgICAgICAgICAxOTcyMjY4MwptYXhfYWRkclswXSA9IDB4MGI2ZTE5ZDQKbWlu
X2FkZHJbMF0gPSAweDA4ZjhkYjE4Cm1heF9hZGRyWzFdID0gMHgwMDAwMDAwMAptaW5fYWRkclsx
XSA9IDB4ZmZmZmZmZmYKQWN0dWFsIChtYXgtbWluKSAgICAgICAgICA9IDM5LjMgTWlCClBlcmZl
Y3QgMS1ieXRlIGFsaWdubWVudCAgPSAzMS42IE1pQiAoMTkuNiUpClBlcmZlY3QgNC1ieXRlIGFs
aWdubWVudCAgPSAzMS43IE1pQiAoMTkuNCUpClBlcmZlY3QgOC1ieXRlIGFsaWdubWVudCAgPSAz
My4wIE1pQiAoMTYuMSUpCjQuMTB1c2VyIDAuMTNzeXN0ZW0gMDowNS4yNWVsYXBzZWQgODAlQ1BV
ICgwYXZndGV4dCswYXZnZGF0YSAwbWF4cmVzaWRlbnQpawowaW5wdXRzKzBvdXRwdXRzICgxMDVt
YWpvcisxMjY3M21pbm9yKXBhZ2VmYXVsdHMgMHN3YXBzCnpjYXQgbW0ubG9nLmd6IHwgdGltZSB2
YWxncmluZCAuL21tcGxheSAtCj09MjMwNTY9PSBNZW1jaGVjaywgYSBtZW1vcnkgZXJyb3IgZGV0
ZWN0b3IgZm9yIHg4Ni1saW51eC4KPT0yMzA1Nj09IENvcHlyaWdodCAoQykgMjAwMi0yMDA1LCBh
bmQgR05VIEdQTCdkLCBieSBKdWxpYW4gU2V3YXJkIGV0IGFsLgo9PTIzMDU2PT0gVXNpbmcgdmFs
Z3JpbmQtMi40LjAsIGEgcHJvZ3JhbSBzdXBlcnZpc2lvbiBmcmFtZXdvcmsgZm9yIHg4Ni1saW51
eC4KPT0yMzA1Nj09IENvcHlyaWdodCAoQykgMjAwMC0yMDA1LCBhbmQgR05VIEdQTCdkLCBieSBK
dWxpYW4gU2V3YXJkIGV0IGFsLgo9PTIzMDU2PT0gRm9yIG1vcmUgZGV0YWlscywgcmVydW4gd2l0
aDogLXYKPT0yMzA1Nj09IAotCnRyYWNlIHJlcHJlc2VudHMgbWF4aW11bSBvZiAxMTE3ODUyIGFj
dGl2ZSBvYmplY3RzCnRyYWNlIHJlcHJlc2VudHMgbWF4aW11bSBvZiAwIGFjdGl2ZSBncm91cHMK
Li4uLgptYWxsb2MgICAgICAgICAgICAgICAgICA5NzU3NTcwCmZyZWUgICAgICAgICAgICAgICAg
ICAgIDk3NTc1NzAKcmVhbGxvYyAgICAgICAgICAgICAgICAgIDIwNzU0Mwp0cml2aWFsIHJlYWxs
b2MgICAgICAgICAgICA4NDUyCmV2ZW50cyAgICAgICAgICAgICAgICAgMTk3MjI2ODMKZmluYWwg
ZnJlZSAgICAgICAgICAgICAgICAgICAgMApUb3RhbCBldmVudHMgICAgICAgICAgIDE5NzIyNjgz
Cm1heF9hZGRyWzBdID0gMHgyMTNjOTExMAptaW5fYWRkclswXSA9IDB4MWI5MzIwODAKbWF4X2Fk
ZHJbMV0gPSAweDAwMDAwMDAwCm1pbl9hZGRyWzFdID0gMHhmZmZmZmZmZgpBY3R1YWwgKG1heC1t
aW4pICAgICAgICAgID0gOTAuNiBNaUIKUGVyZmVjdCAxLWJ5dGUgYWxpZ25tZW50ICA9IDMxLjYg
TWlCICg2NS4xJSkKUGVyZmVjdCA0LWJ5dGUgYWxpZ25tZW50ICA9IDMxLjcgTWlCICg2NS4wJSkK
UGVyZmVjdCA4LWJ5dGUgYWxpZ25tZW50ICA9IDMzLjAgTWlCICg2My42JSkKPT0yMzA1Nj09IAo9
PTIzMDU2PT0gRVJST1IgU1VNTUFSWTogMCBlcnJvcnMgZnJvbSAwIGNvbnRleHRzIChzdXBwcmVz
c2VkOiAyMiBmcm9tIDEpCj09MjMwNTY9PSBtYWxsb2MvZnJlZTogaW4gdXNlIGF0IGV4aXQ6IDAg
Ynl0ZXMgaW4gMCBibG9ja3MuCj09MjMwNTY9PSBtYWxsb2MvZnJlZTogOTk2NTExNCBhbGxvY3Ms
IDk5NjUxMTQgZnJlZXMsIDE3NjQ1MzEzMiBieXRlcyBhbGxvY2F0ZWQuCj09MjMwNTY9PSBGb3Ig
Y291bnRzIG9mIGRldGVjdGVkIGVycm9ycywgcmVydW4gd2l0aDogLXYKPT0yMzA1Nj09IE5vIG1h
bGxvYydkIGJsb2NrcyAtLSBubyBsZWFrcyBhcmUgcG9zc2libGUuCjIwMDQ3Ljc1dXNlciAyOS4z
NXN5c3RlbSA1OjM2OjIyZWxhcHNlZCA5OSVDUFUgKDBhdmd0ZXh0KzBhdmdkYXRhIDBtYXhyZXNp
ZGVudClrCjBpbnB1dHMrMG91dHB1dHMgKDE0NDZtYWpvcis2OTc4MW1pbm9yKXBhZ2VmYXVsdHMg
MHN3YXBzCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATWFrZWZpbGUAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAxMDA2NDQAMDAyMzY1NQAwMDAwMTQ0ADAwMDAwMDAwNTIz
ADEwMjM1NzEzMzMzADAxMTM3MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAB1c3RhciAgAG1vY2UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXNlcnMAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABydW46IG1tcGxheS1pdC1tYWxsb2Mt
ZGlzYWJsZWQgbW1wbGF5LWl0CgptbXBsYXktaXQtbWFsbG9jLWRpc2FibGVkOgoJLXZhbGdyaW5k
IC0tdmVyc2lvbgoJemNhdCBtbS5sb2cuZ3ogfCB0aW1lIC4vbW1wbGF5IC1uIC0KCXpjYXQgbW0u
bG9nLmd6IHwgdGltZSB2YWxncmluZCAuL21tcGxheSAtbiAtCm1tcGxheS1pdDoKCS12YWxncmlu
ZCAtLXZlcnNpb24KCXpjYXQgbW0ubG9nLmd6IHwgdGltZSAuL21tcGxheSAtCgl6Y2F0IG1tLmxv
Zy5neiB8IHRpbWUgdmFsZ3JpbmQgLi9tbXBsYXkgLQoKbW1wbGF5OiBtbV9wbGF5LmMKCWdjYyAt
byBtbXBsYXkgLVdhbGwgLVcgLU8yIG1tX3BsYXkuYwoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG1tX3BsYXkuYwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAwMTAwNjQ0ADAwMjM2NTUAMDAwMDE0NAAwMDAwMDAzNzI2NgAx
MDIzNTU0NzE1MQAwMTE1NTQAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAdXN0YXIgIABtb2NlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzZXJzAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
ICAgIChjKSAxOTk3IC0gMjAwNSBSaWNoYXJkIFJ1ZGVsbC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3Rk
bGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgojaW5jbHVkZSA8
dW5pc3RkLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiNp
bmNsdWRlIDxmY250bC5oPgoKI2RlZmluZSBFVkVOVF9BTExPQyAgICAgMAojZGVmaW5lIEVWRU5U
X0ZSRUUgICAgICAxCiNkZWZpbmUgRVZFTlRfUkVBTExPQyAgIDIKI2RlZmluZSBFVkVOVF9HQUxM
T0MgICAgMwojZGVmaW5lIEVWRU5UX0dGUkVFICAgICA0CiNkZWZpbmUgRVZFTlRfR0NVUlJFTlQg
IDUKI2RlZmluZSBFVkVOVF9WRlJFRSAgICAgNgojZGVmaW5lIEVWRU5UX0VORCAgICAgICA3Cgoj
ZGVmaW5lIFVUSUxfTUFYKGEsIGIpICAgICAgICAgICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCgov
KiB0aGlzIGlzIGdyb3NzLCBidXQgaXQgYXZvaWRzIGRvaW5nIGEgbWFsbG9jKCkgaW4gdGhlIHRl
c3QgcHJvZ3JhbSAqLwojZGVmaW5lIE1BWF9PQkpFQ1QgCTIwMDAwMDAKc3RhdGljIHZvaWQgKmFs
bG9jX2FycmF5W01BWF9PQkpFQ1RdOwpzdGF0aWMgc2l6ZV90IHNpemVfYXJyYXlbTUFYX09CSkVD
VF07CgovKiBzZWxmLWNoZWNrIGludGVydmFsIGZvciB0aGUgLXMgZmxhZyAqLwojZGVmaW5lIFNF
TEZfQ0hFQ0sJMTYzODQKCi8qIHByaW50IGEgZG90IGludGVydmFsICovCiNkZWZpbmUgRE9UX0lO
VEVSVkFMCSgxIDw8IDIyKQoKLyogbWF4aW11bSBudW1iZXIgb2YgYmlucyBmb3IgdGhlIGhpc3Rv
Z3JhbSAqLwojZGVmaW5lIE1BWF9CSU4JCTY0CgovKiBhbGlnbiBhIHZhbHVlICovCiNkZWZpbmUg
QUxJR04oc2l6ZSwgYWxpZ24pCSgoKHNpemUpICsgKGFsaWduKSAtIDEpIC8gKGFsaWduKSAqIChh
bGlnbikpCgwKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIFByaXZhdGUgcmVhZCBidWZmZXIu
CioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCnR5cGVkZWYgc3RydWN0IG1tX3BsYXlfc3RyZWFtX3N0
cnVjdCB7CiAgICB1bnNpZ25lZCBjaGFyICpjdXI7CiAgICB1bnNpZ25lZCBjaGFyICplbmQ7CiAg
ICBpbnQgZmQ7CiAgICBpbnQgZW9mOwogICAgdW5zaWduZWQgY2hhciBidWZmZXJbODE5Ml07Cn0g
bW1fcGxheV9zdHJlYW1fdDsKCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgRmlsbCB0aGUg
YnVmZmVyLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpzdGF0aWMgaW50CmZpbGxfYnVmZmVyKG1t
X3BsYXlfc3RyZWFtX3QgKnN0cmVhbSkKewogICAgaW50IHNpemU7CgogICAgaWYgKHN0cmVhbS0+
ZW9mKSB7CiAgICAgICAgcmV0dXJuIEVPRjsKICAgIH0gZWxzZSB7CglzaXplID0gcmVhZChzdHJl
YW0tPmZkLCBzdHJlYW0tPmJ1ZmZlciwgODE5Mik7CglpZiAoc2l6ZSA8IDApIHsKCSAgICBwZXJy
b3IoIlJlYWQgZXJyb3I6ICIpOwoJICAgIGZwcmludGYoc3RkZXJyLCAiY2FuJ3QgY29udGludWUg
cGFzdCByZWFkIGVycm9yIik7CgkgICAgYWJvcnQoKTsKCX0KCWlmIChzaXplID09IDApIHsKCSAg
ICBzdHJlYW0tPmN1ciA9IDA7CgkgICAgc3RyZWFtLT5lbmQgPSAwOwoJICAgIHN0cmVhbS0+ZW9m
ID0gMTsKCSAgICByZXR1cm4gRU9GOwoJfSBlbHNlIHsKCSAgICBzdHJlYW0tPmN1ciA9IHN0cmVh
bS0+YnVmZmVyOwoJICAgIHN0cmVhbS0+ZW5kID0gc3RyZWFtLT5idWZmZXIgKyBzaXplOwoJICAg
IHJldHVybiAqc3RyZWFtLT5jdXIrKzsKCX0KICAgIH0KfQoKCi8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCiAgICBSZWFkIHRoZSBuZXh0IGJ5dGUuICBTb3J0IG9mIGxpa2UgZ2V0YygpIGJ1dCBmYXN0
ZXIuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCmlubGluZSBzdGF0aWMgaW50CnJlYWRieXRlKG1t
X3BsYXlfc3RyZWFtX3QgKnN0cmVhbSkKewogICAgaWYgKHN0cmVhbS0+Y3VyID49IHN0cmVhbS0+
ZW5kKSB7CglyZXR1cm4gZmlsbF9idWZmZXIoc3RyZWFtKTsKICAgIH0gZWxzZSB7CglyZXR1cm4g
KnN0cmVhbS0+Y3VyKys7CiAgICB9Cn0KDAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgUmVh
ZCBhbiBpbnRlZ2VyIGZyb20gdGhlIGZpbGUuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnN0YXRp
YyBpbnQKZ2V0X2ludChtbV9wbGF5X3N0cmVhbV90ICpzdHJlYW0pCnsKICAgIGludCB2YWw7Cgog
ICAgdmFsID0gcmVhZGJ5dGUoc3RyZWFtKSA8PCAyNDsKICAgIHZhbCB8PSByZWFkYnl0ZShzdHJl
YW0pIDw8IDE2OwogICAgdmFsIHw9IHJlYWRieXRlKHN0cmVhbSkgPDwgODsKICAgIHZhbCB8PSBy
ZWFkYnl0ZShzdHJlYW0pOwogICAgcmV0dXJuIHZhbDsKfQoKCi8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqCiAgICBSZWFkIGEgY29tcHJlc3NlZCBpbnRlZ2VyIGZyb20gdGhlIGZpbGUuCioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCmlubGluZSBzdGF0aWMgdW5zaWduZWQKZ2V0X2NpbnQobW1fcGxheV9z
dHJlYW1fdCAqc3RyZWFtKQp7CiAgICB1bnNpZ25lZCBjLCBzaGlmdCwgdmFsOwoKICAgIHZhbCA9
IDA7CiAgICBzaGlmdCA9IDA7CiAgICBkbyB7CgljID0gcmVhZGJ5dGUoc3RyZWFtKTsKCXZhbCB8
PSAoYyAmIDB4N2YpIDw8IHNoaWZ0OwoJc2hpZnQgKz0gNzsKICAgIH0gd2hpbGUgKGMgJiAweDgw
KTsKICAgIHJldHVybiB2YWw7Cn0KDAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgRmlsbCBh
biBvYmplY3QuCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnN0YXRpYyB2b2lkCmZpbGwodm9pZCAq
b2JqLCBzaXplX3Qgc2l6ZSwgaW50IHRhZykKewogICAgdW5zaWduZWQgY2hhciAqcDsKICAgIHNp
emVfdCBpOwoKICAgIHAgPSBvYmo7CiAgICB0YWcgJj0gMjU1OwogICAgZm9yKGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CiAgICAgICAgcFtpXSA9IHRhZzsKICAgIH0KfQoKCi8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCiAgICBWYWxpZGF0ZSBhbiBvYmplY3QuCioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CnN0YXRpYyB2b2lkCmNoZWNrKHZvaWQgKm9iaiwgc2l6ZV90IHNpemUsIGludCB0YWcpCnsKICAg
IHVuc2lnbmVkIGNoYXIgKnA7CiAgICBzaXplX3QgaTsKCiAgICBwID0gb2JqOwogICAgdGFnICY9
IDI1NTsKICAgIGZvcihpID0gMDsgaSA8IHNpemU7IGkrKykgewoJYXNzZXJ0KHBbaV0gPT0gdGFn
KTsKICAgIH0KfQoMCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCnN0YXRpYyBpbnQKbWFwX3NpemVfdG9fYnVja2V0KGludCAqYmlucywgaW50IG51bV9iaW4s
IHNpemVfdCBzaXplKQp7CiAgICB1bnNpZ25lZCBsbywgaGksIG1pZDsKCiAgICBsbyA9IDA7CiAg
ICBoaSA9IG51bV9iaW4gLSAxOwogICAgd2hpbGUgKGxvICE9IGhpIC0gMSkgewoJbWlkID0gKGxv
ICsgaGkpIC8gMjsKCWlmICgoaW50KSBzaXplIDw9IGJpbnNbbWlkXSkgewoJICAgIGhpID0gbWlk
OwoJfSBlbHNlIHsKCSAgICBsbyA9IG1pZDsKCX0KICAgIH0KICAgIHJldHVybiBoaTsKfQoKCi8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnN0YXRpYyBpbnQK
bWFwX2J1Y2tldF90b19zaXplKGludCAqYmlucywgaW50IG51bV9iaW4sIGludCBiaW4pCnsKICAg
IHJldHVybiBiaW5zW2Jpbl07Cn0KDAovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwpzdGF0aWMgaW50CmxvYWRfYmlucyhpbnQgKmJpbnMpCnsKICAgIGludCBu
dW1fYmluOwogICAgdW5zaWduZWQgc2l6ZTsKCiAgICBudW1fYmluID0gMDsKCiAgICBiaW5zW251
bV9iaW4rK10gPSAwOwogICAgZm9yKHNpemUgPSA4OyBzaXplIDwgNjQ7IHNpemUgKz0gOCkgewoJ
Ymluc1tudW1fYmluKytdID0gc2l6ZTsKICAgIH0KICAgIGZvcihzaXplID0gNjQ7IHNpemUgPCAx
Mjg7IHNpemUgKz0gMTYpIHsKCWJpbnNbbnVtX2JpbisrXSA9IHNpemU7CiAgICB9CiAgICBmb3Io
c2l6ZSA9IDEyODsgc2l6ZSA8IDI1Njsgc2l6ZSArPSAzMikgewoJYmluc1tudW1fYmluKytdID0g
c2l6ZTsKICAgIH0KICAgIGZvcihzaXplID0gMjU2OyBzaXplIDwgNTEyOyBzaXplICs9IDY0KSB7
CgliaW5zW251bV9iaW4rK10gPSBzaXplOwogICAgfQogICAgZm9yKHNpemUgPSA1MTI7IHNpemUg
PCAxMDI0OyBzaXplICs9IDEyOCkgewoJYmluc1tudW1fYmluKytdID0gc2l6ZTsKICAgIH0KICAg
IGZvcihzaXplID0gMTAyNDsgc2l6ZSA8IDQwOTY7IHNpemUgKz0gMTAyNCkgewoJYmluc1tudW1f
YmluKytdID0gc2l6ZTsKICAgIH0KICAgIGZvcihzaXplID0gNDA5Njsgc2l6ZSAhPSAwOyBzaXpl
ICo9IDIpIHsKCWJpbnNbbnVtX2JpbisrXSA9IHNpemU7CiAgICB9CiAgICByZXR1cm4gbnVtX2Jp
bjsKfQoMCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCnN0
YXRpYyB2b2lkCnByaW50X2hpc3QobG9uZyBsb25nICpoaXN0LCBpbnQgKmJpbnMsIGludCBudW1f
YmluKQp7CiAgICBpbnQgbWF4LCBpOwogICAgbG9uZyBsb25nIHNpemUsIHRvdF9oaXN0LCBjdW1t
X2hpc3QsIGN1bW1fbWVtLCB0b3RfbWVtOwoKICAgIC8qIGZpbmQgbGFyZ2VzdCBvY2N1cGllZCBi
aW4gKi8KICAgIGZvcihtYXggPSBNQVhfQklOLTE7IG1heCA+PSAwOyBtYXgtLSkgewoJaWYgKGhp
c3RbbWF4XSAhPSAwKSB7CgkgICAgYnJlYWs7Cgl9CiAgICB9CgogICAgLyogZmluZCBtYXhpbXVt
IGNvdW50cyAqLwogICAgdG90X2hpc3QgPSAwOwogICAgdG90X21lbSA9IDA7CiAgICBmb3IoaSA9
IDA7IGkgPD0gbWF4OyBpKyspIHsKCXNpemUgPSBtYXBfYnVja2V0X3RvX3NpemUoYmlucywgbnVt
X2JpbiwgaSk7Cgl0b3RfaGlzdCArPSBoaXN0W2ldOwoJdG90X21lbSArPSBoaXN0W2ldICogc2l6
ZTsKICAgIH0KCiAgICBwcmludGYoIiUxMXMgJTEycyAgJTdzICU3cyAgJTdzICU3c1xuIiwKCSJz
aXplIiwgIiMgb2JqIiwgIiVvYmoiLCAiY3VtbSIsICIlbWVtIiwgImN1bW0iKTsKCiAgICBjdW1t
X2hpc3QgPSAwOwogICAgY3VtbV9tZW0gPSAwOwogICAgZm9yKGkgPSAwOyBpIDw9IG1heDsgaSsr
KSB7CglzaXplID0gbWFwX2J1Y2tldF90b19zaXplKGJpbnMsIG51bV9iaW4sIGkpOwoJY3VtbV9o
aXN0ICs9IGhpc3RbaV07CgljdW1tX21lbSArPSBoaXN0W2ldICogc2l6ZTsKCXByaW50ZigiJTEy
bGxkICUxMmxsZCAgJTYuMWYlJSAlNi4xZiUlICAlNi4xZiUlICU2LjFmJSVcbiIsCgkgICAgc2l6
ZSwKCSAgICBoaXN0W2ldLAoJICAgIDEwMC4gKiBoaXN0W2ldIC8gdG90X2hpc3QsCgkgICAgMTAw
LiAqIGN1bW1faGlzdCAvIHRvdF9oaXN0LAoJICAgIDEwMC4gKiBoaXN0W2ldICogc2l6ZSAvIHRv
dF9tZW0sCgkgICAgMTAwLiAqIGN1bW1fbWVtIC8gdG90X21lbSk7CiAgICB9Cn0KDAppbnQKbWFp
bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCnsKICAgIG1tX3BsYXlfc3RyZWFtX3Qgc3RyZWFtX3N0
YWNrLCAqc3RyZWFtOwogICAgY2hhciAqZmlsZW5hbWUsICpmaWxlbmFtZXNbMjU2XTsKICAgIHZv
aWQgKmJlZm9yZTsKICAgIGludCBpLCBiLCBudW1fYmluLCBiaW5zW01BWF9CSU5dOwogICAgaW50
IG5vcF9mbGFnLCBjaGVja19mbGFnLCBoaXN0X2ZsYWc7CiAgICBsb25nIGxvbmcgaGlzdFtNQVhf
QklOXSwgaGlzdF9hbGxbTUFYX0JJTl07CiAgICBsb25nIGxvbmcgYWN0aXZlX2hpc3RbTUFYX0JJ
Tl0sIHBlYWtfaGlzdFtNQVhfQklOXTsKICAgIGxvbmcgbG9uZyBudW1fbWFsbG9jLCBudW1fZnJl
ZSwgbnVtX2ZpbmFsX2ZyZWUsIG51bV9yZWFsbG9jOwogICAgbG9uZyBsb25nIG51bV90cml2aWFs
X3JlYWxsb2MsIG51bV9ldmVudCwgdG90YWxfbnVtX2V2ZW50OwogICAgaW50IGZpbGVudW0sIG5m
aWxlLCBmZCwgaW5kZXgsIGJpbiwgY29tbWFuZCwgZG90X2NvdW50OwogICAgaW50IG1heF9hbGxv
Y3MsIG1heF9ncm91cHMsIG1heF9vcmlnOwogICAgdW5zaWduZWQgZXZlbnQ7CiAgICBzaXplX3Qg
Y3VyX21lbTEsIG1heF9tZW0xOwogICAgc2l6ZV90IGN1cl9tZW00LCBtYXhfbWVtNDsKICAgIHNp
emVfdCBjdXJfbWVtOCwgbWF4X21lbTg7CiAgICBzaXplX3QgYmFzZV9tZW0sIHBlYWtfbWVtOwog
ICAgc2l6ZV90IGFkZHIsIG1pbl9hZGRyWzJdLCBtYXhfYWRkclsyXTsKICAgIHNpemVfdCBzaXpl
LCBvbGRfc2l6ZTsKCiAgICBudW1fYmluID0gbG9hZF9iaW5zKGJpbnMpOwoKICAgIGNoZWNrX2Zs
YWcgPSAwOwogICAgaGlzdF9mbGFnID0gMDsKICAgIG5vcF9mbGFnID0gMDsKICAgIG5maWxlID0g
MDsKICAgIGZvcihpID0gMTsgaSA8IGFyZ2M7IGkrKykgewoJaWYgKHN0cmNtcChhcmd2W2ldLCAi
LWMiKSA9PSAwKSB7CgkgICAgY2hlY2tfZmxhZyA9IDE7Cgl9IGVsc2UgaWYgKHN0cmNtcChhcmd2
W2ldLCAiLWgiKSA9PSAwKSB7CgkgICAgaGlzdF9mbGFnID0gMTsKCX0gZWxzZSBpZiAoc3RyY21w
KGFyZ3ZbaV0sICItbiIpID09IDApIHsKCSAgICBub3BfZmxhZyA9IDE7Cgl9IGVsc2UgaWYgKHN0
cmNtcChhcmd2W2ldLCAiLSIpICE9IDAgJiYgYXJndltpXVswXSA9PSAnLScpIHsKCSAgICBnb3Rv
IHVzYWdlOwoJfSBlbHNlIHsKCSAgICBmaWxlbmFtZXNbbmZpbGUrK10gPSBhcmd2W2ldOwoJfQog
ICAgfQogICAgaWYgKG5maWxlID09IDApIHsKICAgICAgICBnb3RvIHVzYWdlOwogICAgfQoKICAg
IC8qIHZlcmlmeSB0aGF0IHRoZSBmaWxlcyBhcmUgcHJlc2VudCAqLwogICAgZm9yKGZpbGVudW0g
PSAwOyBmaWxlbnVtIDwgbmZpbGU7IGZpbGVudW0rKykgewoJZmlsZW5hbWUgPSBmaWxlbmFtZXNb
ZmlsZW51bV07CglpZiAoc3RyY21wKGZpbGVuYW1lLCAiLSIpICE9IDApIHsKCSAgICBmZCA9IG9w
ZW4oZmlsZW5hbWUsIE9fUkRPTkxZLCAwKTsKCSAgICBpZiAoZmQgPCAwKSB7CgkJcGVycm9yKCJv
cGVuIGZhaWxlZDogIik7CgkJZXhpdCgyKTsKCSAgICB9CgkgICAgY2xvc2UoZmQpOwoJfQogICAg
fQoKICAgIGlmIChjaGVja19mbGFnKSB7CiAgICAgICAgcHJpbnRmKCItYyBlbmFibGVkOiBmaWxs
IGFuZCBjaGVjayBvYmplY3RzXG4iKTsKICAgIH0KICAgIGlmIChub3BfZmxhZykgewogICAgICAg
IHByaW50ZigiLW4gZW5hYmxlZDogbm8gbWVtb3J5IGFsbG9jYXRpb25zIHdpbGwgYmUgZG9uZS5c
biIpOwogICAgfQoKICAgIGZvcihpID0gMDsgaSA8IE1BWF9CSU47IGkrKykgewoJaGlzdF9hbGxb
aV0gPSAwOwoJYWN0aXZlX2hpc3RbaV0gPSAwOwoJcGVha19oaXN0W2ldID0gMDsKICAgIH0KICAg
IGN1cl9tZW0xID0gY3VyX21lbTQgPSBjdXJfbWVtOCA9IDA7CiAgICBtYXhfbWVtMSA9IG1heF9t
ZW00ID0gbWF4X21lbTggPSAwOwogICAgcGVha19tZW0gPSAwOwogICAgbWluX2FkZHJbMF0gPSBt
aW5fYWRkclsxXSA9IH4gKHNpemVfdCkgMDsKICAgIG1heF9hZGRyWzBdID0gbWF4X2FkZHJbMV0g
PSAwOwogICAgdG90YWxfbnVtX2V2ZW50ID0gMDsKCiAgICBmb3IoZmlsZW51bSA9IDA7IGZpbGVu
dW0gPCBuZmlsZTsgZmlsZW51bSsrKSB7CglmaWxlbmFtZSA9IGZpbGVuYW1lc1tmaWxlbnVtXTsK
CglzdHJlYW0gPSAmc3RyZWFtX3N0YWNrOwoJbWVtc2V0KHN0cmVhbSwgMCwgc2l6ZW9mKG1tX3Bs
YXlfc3RyZWFtX3QpKTsKCWlmIChzdHJjbXAoZmlsZW5hbWUsICItIikgPT0gMCkgewoJICAgIHN0
cmVhbS0+ZmQgPSBmaWxlbm8oc3RkaW4pOwoJfSBlbHNlIHsKCSAgICBzdHJlYW0tPmZkID0gb3Bl
bihmaWxlbmFtZSwgT19SRE9OTFksIDApOwoJfQoJaWYgKHN0cmVhbS0+ZmQgPCAwKSB7CgkgICAg
ZnByaW50ZihzdGRlcnIsICJDYW4ndCBvcGVuICVzICIsIGZpbGVuYW1lKTsgCgkgICAgcGVycm9y
KCIiKTsKCSAgICBleGl0KDIpOwoJfQoKCW1heF9ncm91cHMgPSBnZXRfaW50KHN0cmVhbSk7Cglt
YXhfYWxsb2NzID0gZ2V0X2ludChzdHJlYW0pOwoJbWF4X29yaWcgPSBnZXRfaW50KHN0cmVhbSk7
CgoJcHJpbnRmKCIlc1xuIiwgZmlsZW5hbWUpOwoJcHJpbnRmKCJ0cmFjZSByZXByZXNlbnRzIG1h
eGltdW0gb2YgJWQgYWN0aXZlIG9iamVjdHNcbiIsIG1heF9hbGxvY3MpOwoJcHJpbnRmKCJ0cmFj
ZSByZXByZXNlbnRzIG1heGltdW0gb2YgJWQgYWN0aXZlIGdyb3Vwc1xuIiwgbWF4X2dyb3Vwcyk7
CgoJaWYgKG1heF9hbGxvY3MgPj0gTUFYX09CSkVDVCkgewoJICAgIHByaW50ZigiTmVlZCB0byBy
ZWNvbXBpbGU7IG9ubHkgaGF2ZSAlZCBvYmplY3RzXG4iLCBNQVhfT0JKRUNUKTsKCSAgICBleGl0
KDEpOwoJfQoKCW51bV9tYWxsb2MgPSAwOwoJbnVtX2ZyZWUgPSAwOwoJbnVtX2ZpbmFsX2ZyZWUg
PSAwOwoJbnVtX3JlYWxsb2MgPSAwOwoJbnVtX3RyaXZpYWxfcmVhbGxvYyA9IDA7CgludW1fZXZl
bnQgPSAwOwoJZG90X2NvdW50ID0gMDsKCglmb3IoaSA9IDA7IGkgPCBtYXhfYWxsb2NzOyBpKysp
IHsKCSAgICBhbGxvY19hcnJheVtpXSA9IDA7CgkgICAgc2l6ZV9hcnJheVtpXSA9IDA7Cgl9Cglm
b3IoaSA9IDA7IGkgPCBNQVhfQklOOyBpKyspIHsKCSAgICBoaXN0W2ldID0gMDsKCX0KCglkbyB7
CgkgICAgZXZlbnQgPSBnZXRfY2ludChzdHJlYW0pOwoJICAgIGJpbiA9IGV2ZW50ID4+IDM7Cgkg
ICAgY29tbWFuZCA9IGV2ZW50ICYgMHg3OwoKCSAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKCSAgICBj
YXNlIEVWRU5UX0FMTE9DOgoJCWFzc2VydChiaW4gPCBtYXhfYWxsb2NzKTsKCQlzaXplID0gKHNp
emVfdCkgZ2V0X2NpbnQoc3RyZWFtKTsKCQlpZiAobWF4X2dyb3VwcyA+IDApIHsKCQkgICAgc2l6
ZSAqPSA0OwoJCX0KCQludW1fbWFsbG9jKys7CgkJaWYgKGhpc3RfZmxhZykgewoJCSAgICBiID0g
bWFwX3NpemVfdG9fYnVja2V0KGJpbnMsIG51bV9iaW4sIHNpemUpOwoJCSAgICBoaXN0W2JdKys7
CgkJICAgIGhpc3RfYWxsW2JdKys7CgkJICAgIGFjdGl2ZV9oaXN0W2JdKys7CgkJfQoJCWlmIChu
b3BfZmxhZykgewoJCSAgICBhZGRyID0gMDsKCQl9IGVsc2UgewoJCSAgICBhc3NlcnQoYWxsb2Nf
YXJyYXlbYmluXSA9PSAwKTsKCQkgICAgYWxsb2NfYXJyYXlbYmluXSA9IG1hbGxvYyhzaXplKTsK
CQkgICAgaWYgKGNoZWNrX2ZsYWcpIHsKCQkJZmlsbChhbGxvY19hcnJheVtiaW5dLCBzaXplLCBi
aW4pOwoJCSAgICB9CgkJICAgIGFkZHIgPSAoc2l6ZV90KSBhbGxvY19hcnJheVtiaW5dICsgc2l6
ZTsKCQl9CgkJb2xkX3NpemUgPSAwOwoJCXNpemVfYXJyYXlbYmluXSA9IHNpemU7CgkJYnJlYWs7
CgoJICAgIGNhc2UgRVZFTlRfUkVBTExPQzoKCQlhc3NlcnQoYmluIDwgbWF4X2FsbG9jcyk7CgkJ
c2l6ZSA9IChzaXplX3QpIGdldF9jaW50KHN0cmVhbSk7CgkJaWYgKG1heF9ncm91cHMgPiAwKSB7
CgkJICAgIHNpemUgKj0gNDsKCQl9CgkJbnVtX3JlYWxsb2MrKzsKCQlpZiAoaGlzdF9mbGFnKSB7
CgkJICAgIGIgPSBtYXBfc2l6ZV90b19idWNrZXQoYmlucywgbnVtX2Jpbiwgc2l6ZSk7CgkJICAg
IGhpc3RbYl0rKzsKCQkgICAgaGlzdF9hbGxbYl0rKzsKCQkgICAgYWN0aXZlX2hpc3RbYl0rKzsK
CQl9CgkJaWYgKG5vcF9mbGFnKSB7CgkJICAgIGFkZHIgPSAwOwoJCX0gZWxzZSB7CgkJICAgIGFz
c2VydChhbGxvY19hcnJheVtiaW5dICE9IDApOwoJCSAgICBpZiAoY2hlY2tfZmxhZykgewoJCQlj
aGVjayhhbGxvY19hcnJheVtiaW5dLCBzaXplX2FycmF5W2Jpbl0sIGJpbik7CgkJICAgIH0KCQkg
ICAgYmVmb3JlID0gYWxsb2NfYXJyYXlbYmluXTsKCQkgICAgYWxsb2NfYXJyYXlbYmluXSA9IHJl
YWxsb2MoYWxsb2NfYXJyYXlbYmluXSwgc2l6ZSk7CgkJICAgIGlmIChhbGxvY19hcnJheVtiaW5d
ID09IGJlZm9yZSkgewoJCQludW1fdHJpdmlhbF9yZWFsbG9jKys7CgkJICAgIH0KCQkgICAgaWYg
KGNoZWNrX2ZsYWcpIHsKCQkJZmlsbChhbGxvY19hcnJheVtiaW5dLCBzaXplLCBiaW4pOwoJCSAg
ICB9CgkJICAgIGFkZHIgPSAoc2l6ZV90KSBhbGxvY19hcnJheVtiaW5dICsgc2l6ZTsKCQl9CgkJ
b2xkX3NpemUgPSBzaXplX2FycmF5W2Jpbl07CgkJc2l6ZV9hcnJheVtiaW5dID0gc2l6ZTsKCQli
cmVhazsKCgkgICAgY2FzZSBFVkVOVF9GUkVFOgoJICAgIGNhc2UgRVZFTlRfVkZSRUU6CgkJbnVt
X2ZyZWUrKzsKCQlpZiAoaGlzdF9mbGFnKSB7CgkJICAgIGIgPSBtYXBfc2l6ZV90b19idWNrZXQo
YmlucywgbnVtX2Jpbiwgc2l6ZV9hcnJheVtiaW5dKTsKCQkgICAgYWN0aXZlX2hpc3RbYl0tLTsK
CQl9CgkJaWYgKCEgbm9wX2ZsYWcpIHsKCQkgICAgYXNzZXJ0KGFsbG9jX2FycmF5W2Jpbl0gIT0g
MCk7CgkJICAgIGlmIChjaGVja19mbGFnKSB7CgkJCWNoZWNrKGFsbG9jX2FycmF5W2Jpbl0sIHNp
emVfYXJyYXlbYmluXSwgYmluKTsKCQkgICAgfQoJCSAgICBmcmVlKGFsbG9jX2FycmF5W2Jpbl0p
OwoJCX0KCQlvbGRfc2l6ZSA9IHNpemVfYXJyYXlbYmluXTsKCQlzaXplID0gMDsKCQlhbGxvY19h
cnJheVtiaW5dID0gMDsKCQlzaXplX2FycmF5W2Jpbl0gPSAwOwoJCWFkZHIgPSAwOwoJCWJyZWFr
OwoKCSAgICBjYXNlIEVWRU5UX0dBTExPQzoKCSAgICAgICAgKHZvaWQpIGdldF9jaW50KHN0cmVh
bSk7CgkgICAgY2FzZSBFVkVOVF9HRlJFRToKCSAgICBjYXNlIEVWRU5UX0dDVVJSRU5UOgoJCWFz
c2VydChiaW4gPCBtYXhfZ3JvdXBzKTsKCQlzaXplID0gMDsKCQlvbGRfc2l6ZSA9IDA7CgkJYWRk
ciA9IDA7CgkJYnJlYWs7CgoJICAgIGNhc2UgRVZFTlRfRU5EOgoJCXNpemUgPSAwOwoJCW9sZF9z
aXplID0gMDsKCQlhZGRyID0gMDsKCQlicmVhazsKCgkgICAgZGVmYXVsdDoKCSAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJiYWQgZXZlbnQgY29kZVxuIik7CgkJYXNzZXJ0KDApOwoJCWJyZWFrOwoJ
ICAgIH0KCgkgICAgaWYgKGNvbW1hbmQgPT0gRVZFTlRfRU5EKSB7CgkgICAgICAgIGJyZWFrOwoJ
ICAgIH0KCgkgICAgLyogdHJhY2sgbWluIGFuZCBtYXggYWRkcmVzc2VzICovCgkgICAgaWYgKGFk
ZHIgIT0gMCkgewoJCWluZGV4ID0gYWRkciA+IDB4ODAwMDAwMDA7CgkJaWYgKGFkZHIgPCBtaW5f
YWRkcltpbmRleF0pIHsKCQkgICAgbWluX2FkZHJbaW5kZXhdID0gYWRkcjsKCQl9CgkJaWYgKGFk
ZHIgPiBtYXhfYWRkcltpbmRleF0pIHsKCQkgICAgbWF4X2FkZHJbaW5kZXhdID0gYWRkcjsKCQl9
CgkgICAgfQoKCSAgICAvKiB0cmFjayBjdXJyZW50ICJpZGVhbCIgYWxsb2NhdG9yICovCgkgICAg
Y3VyX21lbTEgKz0gc2l6ZSAtIG9sZF9zaXplOwoJICAgIGN1cl9tZW00ICs9IEFMSUdOKHNpemUs
IDQpIC0gQUxJR04ob2xkX3NpemUsIDQpOwoJICAgIGN1cl9tZW04ICs9IEFMSUdOKHNpemUsIDgp
IC0gQUxJR04ob2xkX3NpemUsIDgpOwoKCSAgICAvKiB0cmFjayBtYXhpbXVtIHZhbHVlcyBmb3Ig
dGhlICJpZGVhbCIgYWxsb2NhdG9yICovCgkgICAgbWF4X21lbTEgPSBVVElMX01BWChtYXhfbWVt
MSwgY3VyX21lbTEpOwoJICAgIG1heF9tZW00ID0gVVRJTF9NQVgobWF4X21lbTQsIGN1cl9tZW00
KTsKCSAgICBtYXhfbWVtOCA9IFVUSUxfTUFYKG1heF9tZW04LCBjdXJfbWVtOCk7CgoJICAgIC8q
IGdyYWIgdGhlIG9iamVjdCBwcm9maWxlIGF0IHBlYWsgbWVtb3J5ICovCgkgICAgaWYgKGhpc3Rf
ZmxhZykgewoJCWJhc2VfbWVtID0gMDsKCQlpZiAobWF4X2FkZHJbMF0gIT0gMCkgewoJCSAgICBi
YXNlX21lbSArPSBtYXhfYWRkclswXSAtIG1pbl9hZGRyWzBdOwoJCX0KCQlpZiAobWF4X2FkZHJb
MV0gIT0gMCkgewoJCSAgICBiYXNlX21lbSArPSBtYXhfYWRkclsxXSAtIG1pbl9hZGRyWzFdOwoJ
CX0KCQlpZiAoYmFzZV9tZW0gPiBwZWFrX21lbSkgewoJCSAgICBwZWFrX21lbSA9IGJhc2VfbWVt
OwoJCSAgICBmb3IoaSA9IDA7IGkgPCBNQVhfQklOOyBpKyspIHsKCQkJcGVha19oaXN0W2ldID0g
YWN0aXZlX2hpc3RbaV07CgkJICAgIH0KCQl9CgkgICAgfQoKCSAgICBudW1fZXZlbnQrKzsKCSAg
ICB0b3RhbF9udW1fZXZlbnQrKzsKCSAgICBpZiAoZG90X2NvdW50KysgPj0gRE9UX0lOVEVSVkFM
KSB7CgkJZG90X2NvdW50ID0gMDsKCQlwcmludGYoIi4iKTsKCQlmZmx1c2goc3Rkb3V0KTsKCSAg
ICB9Cgl9IHdoaWxlICgxKTsKCgkvKiBmcmVlIGFsbCB0aGUgb2JqZWN0cyAqLwoJZm9yKGJpbiA9
IDA7IGJpbiA8IG1heF9hbGxvY3M7IGJpbisrKSB7CgkgICAgaWYgKGFsbG9jX2FycmF5W2Jpbl0p
IHsKCQludW1fZmluYWxfZnJlZSsrOwoJCWlmIChoaXN0X2ZsYWcpIHsKCQkgICAgYiA9IG1hcF9z
aXplX3RvX2J1Y2tldChiaW5zLCBudW1fYmluLCBzaXplX2FycmF5W2Jpbl0pOwoJCSAgICBhY3Rp
dmVfaGlzdFtiXS0tOwoJCX0KCQlpZiAoISBub3BfZmxhZykgewoJCSAgICBpZiAoY2hlY2tfZmxh
ZykgewoJCQljaGVjayhhbGxvY19hcnJheVtiaW5dLCBzaXplX2FycmF5W2Jpbl0sIGJpbik7CgkJ
ICAgIH0KCQkgICAgZnJlZShhbGxvY19hcnJheVtiaW5dKTsKCQl9CgkJb2xkX3NpemUgPSBzaXpl
X2FycmF5W2Jpbl07CgkJc2l6ZSA9IDA7CgkJYWxsb2NfYXJyYXlbYmluXSA9IDA7CgkJc2l6ZV9h
cnJheVtiaW5dID0gMDsKCQl0b3RhbF9udW1fZXZlbnQrKzsKCgkJY3VyX21lbTEgKz0gc2l6ZSAt
IG9sZF9zaXplOwoJCWN1cl9tZW00ICs9IEFMSUdOKHNpemUsIDQpIC0gQUxJR04ob2xkX3NpemUs
IDQpOwoJCWN1cl9tZW04ICs9IEFMSUdOKHNpemUsIDgpIC0gQUxJR04ob2xkX3NpemUsIDgpOwoJ
ICAgIH0KCX0KCglwcmludGYoIlxuIik7CglwcmludGYoIm1hbGxvYyAgICAgICAgICAlMTVsbGRc
biIsIG51bV9tYWxsb2MpOwoJcHJpbnRmKCJmcmVlICAgICAgICAgICAgJTE1bGxkXG4iLCBudW1f
ZnJlZSk7CglwcmludGYoInJlYWxsb2MgICAgICAgICAlMTVsbGRcbiIsIG51bV9yZWFsbG9jKTsK
CXByaW50ZigidHJpdmlhbCByZWFsbG9jICUxNWxsZFxuIiwgbnVtX3RyaXZpYWxfcmVhbGxvYyk7
CglwcmludGYoImV2ZW50cyAgICAgICAgICAlMTVsbGRcbiIsIG51bV9ldmVudCk7CglwcmludGYo
ImZpbmFsIGZyZWUgICAgICAlMTVsbGRcbiIsIG51bV9maW5hbF9mcmVlKTsKCglpZiAoaGlzdF9m
bGFnKSB7CgkgICAgcHJpbnRmKCJNYWxsb2MvUmVhbGxvYyBzaXplIGhpc3RvZ3JhbVxuIik7Cgkg
ICAgcHJpbnRfaGlzdChoaXN0LCBiaW5zLCBudW1fYmluKTsKCX0KCglpZiAoc3RyZWFtLT5mZCAh
PSBmaWxlbm8oc3RkaW4pKSB7CgkgICAgY2xvc2Uoc3RyZWFtLT5mZCk7Cgl9CiAgICB9CgogICAg
aWYgKG5vcF9mbGFnKSB7CgliYXNlX21lbSA9IG1heF9tZW0xOwogICAgfSBlbHNlIHsKCWJhc2Vf
bWVtID0gMDsKCWlmIChtYXhfYWRkclswXSAhPSAwKSB7CgkgICAgYmFzZV9tZW0gKz0gbWF4X2Fk
ZHJbMF0gLSBtaW5fYWRkclswXTsKCX0KCWlmIChtYXhfYWRkclsxXSAhPSAwKSB7CgkgICAgYmFz
ZV9tZW0gKz0gbWF4X2FkZHJbMV0gLSBtaW5fYWRkclsxXTsKCX0KICAgIH0gCgogICAgcHJpbnRm
KCJUb3RhbCBldmVudHMgICAgJTE1bGxkXG4iLCB0b3RhbF9udW1fZXZlbnQpOwoKICAgIHByaW50
ZigibWF4X2FkZHJbMF0gPSAweCUwOGx4XG4iLCAodW5zaWduZWQgbG9uZykgbWF4X2FkZHJbMF0p
OwogICAgcHJpbnRmKCJtaW5fYWRkclswXSA9IDB4JTA4bHhcbiIsICh1bnNpZ25lZCBsb25nKSBt
aW5fYWRkclswXSk7CiAgICBwcmludGYoIm1heF9hZGRyWzFdID0gMHglMDhseFxuIiwgKHVuc2ln
bmVkIGxvbmcpIG1heF9hZGRyWzFdKTsKICAgIHByaW50ZigibWluX2FkZHJbMV0gPSAweCUwOGx4
XG4iLCAodW5zaWduZWQgbG9uZykgbWluX2FkZHJbMV0pOwoKICAgIHByaW50ZigiQWN0dWFsICht
YXgtbWluKSAgICAgICAgICA9ICUuMWYgTWlCXG4iLAoJYmFzZV9tZW0gLyAxMDI0LiAvIDEwMjQu
KTsKICAgIHByaW50ZigiUGVyZmVjdCAxLWJ5dGUgYWxpZ25tZW50ICA9ICUuMWYgTWlCICglLjFm
JSUpXG4iLAoJbWF4X21lbTEgLyAxMDI0LiAvIDEwMjQuLCAxMDAuIC0gMTAwLiAqIG1heF9tZW0x
IC8gYmFzZV9tZW0pOwogICAgcHJpbnRmKCJQZXJmZWN0IDQtYnl0ZSBhbGlnbm1lbnQgID0gJS4x
ZiBNaUIgKCUuMWYlJSlcbiIsCgltYXhfbWVtNCAvIDEwMjQuIC8gMTAyNC4sIDEwMC4gLSAxMDAu
ICogbWF4X21lbTQgLyBiYXNlX21lbSk7CiAgICBwcmludGYoIlBlcmZlY3QgOC1ieXRlIGFsaWdu
bWVudCAgPSAlLjFmIE1pQiAoJS4xZiUlKVxuIiwKCW1heF9tZW04IC8gMTAyNC4gLyAxMDI0Liwg
MTAwLiAtIDEwMC4gKiBtYXhfbWVtOCAvIGJhc2VfbWVtKTsKCiAgICBpZiAoaGlzdF9mbGFnKSB7
CglwcmludGYoIlxuXG4iKTsKCWlmIChuZmlsZSA+IDEpIHsKCSAgICBwcmludGYoIkN1bXVsYXRp
dmUgaGlzdG9ncmFtIGZvciBhbGwgZmlsZXNcbiIpOwoJICAgIHByaW50X2hpc3QoaGlzdF9hbGws
IGJpbnMsIG51bV9iaW4pOwoJfQoJcHJpbnRmKCJBY3RpdmUgaGlzdG9ncmFtIGF0IHBlYWsgbWVt
b3J5XG4iKTsKCXByaW50X2hpc3QocGVha19oaXN0LCBiaW5zLCBudW1fYmluKTsKICAgIH0KCiAg
ICByZXR1cm4gMDsKCnVzYWdlOgogICAgZnByaW50ZihzdGRlcnIsICJ1c2FnZTogbW1fcGxheSBb
b3B0aW9uc10gZmlsZXMgLi4uXG4iKTsKICAgIGZwcmludGYoc3RkZXJyLCAiICAgIC1jXHRmaWxs
IGFuZCBjaGVjayBvYmplY3RzIChzbG93ZXIpXG4iKTsKICAgIGZwcmludGYoc3RkZXJyLCAiICAg
IC1oXHRwcmludCBvYmplY3Qgc2l6ZSBoaXN0b2dyYW1cbiIpOwogICAgZnByaW50ZihzdGRlcnIs
ICIgICAgLW5cdHJlYWQgZmlsZSBidXQgZG9uJ3QgZG8gYW55IGFsbG9jYXRpb25zXG4iKTsKICAg
IHJldHVybiAyOwp9CgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>11067</attachid>
            <date>2005-05-17 04:03:00 +0000</date>
            <delta_ts>2005-05-17 04:03:00 +0000</delta_ts>
            <desc>Simple test program for stressing memcheck&apos;s malloc/free implementation.</desc>
            <filename>mallocspeed.c</filename>
            <type>text/plain</type>
            <size>540</size>
            <attacher name="Julian Seward">jseward</attacher>
            
              <data encoding="base64">CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CgojZGVmaW5lIE5CWVRFUyAx
NgoKI2RlZmluZSBOTElWRSAxMDAwMDAwCgojZGVmaW5lIE5JVEVSUyAoNSoxMDAwKjEwMDApCgpj
aGFyKiBhcnJbTkxJVkVdOwoKaW50IG1haW4gKCB2b2lkICkKewogICBpbnQgaSwgajsKICAgcHJp
bnRmKCJpbml0aWFsaXNpbmdcbiIpOwogICBmb3IgKGkgPSAwOyBpIDwgTkxJVkU7IGkrKykKICAg
ICAgYXJyW2ldID0gTlVMTDsKCiAgIHByaW50ZigicnVubmluZ1xuIik7CiAgIGogPSAtMTsKICAg
Zm9yIChpID0gMDsgaSA8IE5JVEVSUzsgaSsrKSB7CiAgICAgaisrOwogICAgIGlmIChqID09IE5M
SVZFKSBqID0gMDsKICAgICBpZiAoYXJyW2pdKSAKICAgICAgICBmcmVlKGFycltqXSk7CiAgICAg
YXJyW2pdID0gbWFsbG9jKE5CWVRFUyk7CiAgIH0KCiAgIGZvciAoaSA9IDA7IGkgPCBOTElWRTsg
aSsrKQogICAgICBpZiAoYXJyW2ldKQogICAgICAgICAgZnJlZShhcnJbaV0pOwoKICAgcHJpbnRm
KCJkb25lXG4iKTsKICAgcmV0dXJuIDA7Cn0K
</data>

          </attachment>
      

    </bug>

</bugzilla>