<?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>45060</bug_id>
          
          <creation_ts>2010-09-01 13:46:31 -0700</creation_ts>
          <short_desc>Add unit tests for red-black tree and (POD) arena</short_desc>
          <delta_ts>2010-09-05 21:45: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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>45059</dependson>
          <blocked>44729</blocked>
    
    <blocked>45161</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>272984</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-01 13:46:31 -0700</bug_when>
    <thetext>The red-black tree being integrated in https://bugs.webkit.org/show_bug.cgi?id=45059 needs unit tests integrated as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273025</commentid>
    <comment_count>1</comment_count>
      <attachid>66273</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-01 14:34:43 -0700</bug_when>
    <thetext>Created attachment 66273
Patch

Patch incorporating unit tests for PODRedBlackTree. They&apos;re currently being incorporated under the Chromium port only because it&apos;s this port which has a unit test framework (gtest) available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273061</commentid>
    <comment_count>2</comment_count>
      <attachid>66288</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-01 15:21:48 -0700</bug_when>
    <thetext>Created attachment 66288
Revised patch

Changed EXPECT_TRUE to ASSERT_TRUE in InsertionAndDeletionTest to abort execution upon first failure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273158</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-01 19:11:31 -0700</bug_when>
    <thetext>Attachment 66288 did not build on chromium:
Build output: http://queues.webkit.org/results/3933043</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273165</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-01 19:21:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Attachment 66288 [details] did not build on chromium:
&gt; Build output: http://queues.webkit.org/results/3933043

That&apos;s expected, since this can&apos;t land before https://bugs.webkit.org/show_bug.cgi?id=45059 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273741</commentid>
    <comment_count>5</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 19:19:06 -0700</bug_when>
    <thetext>Changing synopsis to indicate that tests for both PODRedBlackTree and PODArena will be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273752</commentid>
    <comment_count>6</comment_count>
      <attachid>66460</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 19:36:35 -0700</bug_when>
    <thetext>Created attachment 66460
Revised patch

Added tests for PODArena, and revised PODRedBlackTreeTests for updated tree API in bug 45059.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273753</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-02 19:37:31 -0700</bug_when>
    <thetext>Attachment 66460 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/tests/PODArenaTest.cpp:57:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/tests/PODArenaTest.cpp:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/tests/PODArenaTest.cpp:65:  Consider using ASSERT_GE instead of ASSERT_TRUE(a &gt;= b)  [readability/check] [2]
WebKit/chromium/tests/PODArenaTest.cpp:70:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/tests/PODArenaTest.cpp:71:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebKit/chromium/tests/PODArenaTest.cpp:74:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/tests/PODArenaTest.cpp:107:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/tests/PODArenaTest.cpp:116:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebKit/chromium/tests/PODArenaTest.cpp:122:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/tests/PODArenaTest.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 10 in 6 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273762</commentid>
    <comment_count>8</comment_count>
      <attachid>66464</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-02 19:58:13 -0700</bug_when>
    <thetext>Created attachment 66464
Revised patch

Fixed style errors in last patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273995</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-03 10:03:19 -0700</bug_when>
    <thetext>Can we please leave this POD prefix off of most of these class names? I don’t think the POD prefix adds anything in almsot every case.

The classes in WTF such as HashMap also have limitations for what objects they work with, but trying to encode those limitations into the class names seems awkward and unpleasant. Unless we have imminent plans to have a second red-black tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273996</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-03 10:04:08 -0700</bug_when>
    <thetext>Chromium-only unit tests seem wrong. We’ve added quite a few unit tests cross-platform by making them triggerable from DumpRenderTree.

It’s not a good direction for the WebKit project to add major new functionality with tests only on a single platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274010</commentid>
    <comment_count>11</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 10:15:28 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Can we please leave this POD prefix off of most of these class names? I don’t think the POD prefix adds anything in almsot every case.
&gt; 
&gt; The classes in WTF such as HashMap also have limitations for what objects they work with, but trying to encode those limitations into the class names seems awkward and unpleasant. Unless we have imminent plans to have a second red-black tree.

Darin, I will do my best to eliminate the restrictions on these classes and then remove the POD prefix -- after I have checkpointed the code. Right now I&apos;ve landed two of the three classes and none of the using code, and to keep my bookkeeping sane I do not want to rename them until I&apos;ve gotten an initial version of the code checked in, which hopefully should be within a week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274013</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 10:18:16 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Chromium-only unit tests seem wrong. We’ve added quite a few unit tests cross-platform by making them triggerable from DumpRenderTree.
&gt; 
&gt; It’s not a good direction for the WebKit project to add major new functionality with tests only on a single platform.

Could you point me to an example of a unit test that is hooked up in DRT and how it is invoked? I would definitely like to make these tests run on all ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274184</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-03 14:37:24 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Darin, I will do my best to eliminate the restrictions on these classes and then remove the POD prefix

That’s nice to hear. But I think you’re missing my point. Even with the restrictions, the POD prefix is not helpful.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274201</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 14:58:04 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #11)
&gt; &gt; Darin, I will do my best to eliminate the restrictions on these classes and then remove the POD prefix
&gt; 
&gt; That’s nice to hear. But I think you’re missing my point. Even with the restrictions, the POD prefix is not helpful.

I understand your point. I am not prepared to rename these classes until I&apos;ve checkpointed an initial version of this code so I can use svn and do-webcore-rename to do the work. I&apos;d appreciate your help reviewing these patches modulo the naming convention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274217</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-03 15:21:33 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I&apos;d appreciate your help reviewing these patches modulo the naming convention.

I can’t review these classes at all. I don’t understand the big picture. It seems like there is a lot of already working code that you want to get into WebKit as quickly as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274224</commentid>
    <comment_count>16</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-03 15:45:37 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; I&apos;d appreciate your help reviewing these patches modulo the naming convention.
&gt; 
&gt; I can’t review these classes at all. I don’t understand the big picture. It seems like there is a lot of already working code that you want to get into WebKit as quickly as possible.

Hi Darin, yes... Ken is working to contribute his GPU based path renderer, which we discussed with cmarrin, hyatt, smfr, and others in person about a week ago.  These are preliminary patches.  The code will live in graphics/gpu/.

The plan is for Ken to land his code as a check point and then make incremental improvements.

There has been a healthy debate about naming conventions.  We have chosen a naming convention that has issues (the POD prefix), and we are committed to fixing that.  It is easier to rename using the tools in WebKit (that depend on code already being committed), so please bear with us as we take these incremental steps.

The unit test issue is another example.  In the Chromium port we have a well established way of writing unit tests using the Gtest framework.  WebCore seems to lack a good way to unit test basic data structures, but we&apos;d like to find a way to share these unit tests with all ports so that this code will be sure to run properly on all ports.  The existing layout test framework does not seem to be a good fit, or at least it is not obvious how to make it fit.  Regardless, it is useful to check point these unit tests since they are already written and of value to Ken (who is developing this code).  We will figure out how best to make these tests available more universally.  We are taking an incremental path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274241</commentid>
    <comment_count>17</comment_count>
      <attachid>66464</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-03 16:06:54 -0700</bug_when>
    <thetext>Comment on attachment 66464
Revised patch

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

&gt; WebKit/chromium/tests/PODArenaTest.cpp:32
&gt; +// Tests for the PODArena.
nit: I&apos;d nuke this comment since it is redundant with the file name.

&gt; WebKit/chromium/tests/PODArenaTest.cpp:82
&gt; +protected:
nit: looks like this constructor can just be in the private section

&gt; WebKit/chromium/tests/PODArenaTest.cpp:115
&gt; +    for (int i = 0; i &lt; 10000; ++i)
this choice of 10000 seems to depend on the value of DefaultChunkSize.
maybe you should parameterize this using that value?  this test could
fail if DefaultChunkSize were increased significantly.

&gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:44
&gt; +using namespace TreeTestHelpers;
instead of a namespace, I think a class with static methods would be 
better.  it is just uncommon in webkit to use a namespace like this.

&gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:147
&gt; +    tree.add(5113);
is there something special about the choice of numbers here?
maybe a comment would be good if so?  elsewhere, you use
smaller numbers :)

&gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:168
&gt; +        int val = nextRandom(maximumValue);
nit: spell out &quot;value&quot;

&gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:176
&gt; +        int idx = nextRandom(treeSize);
nit: spell out &quot;index&quot; and &quot;value&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274260</commentid>
    <comment_count>18</comment_count>
      <attachid>66565</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 16:49:55 -0700</bug_when>
    <thetext>Created attachment 66565
Revised patch

Addressed most review feedback; made TrackedAllocator constructor private, added FIXME about DefaultChunkSize, added comment about origin of values in one regression test, and avoided abbreviations in variable names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274264</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 16:59:28 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 66464 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=66464&amp;action=prettypatch
&gt; 
&gt; &gt; WebKit/chromium/tests/PODArenaTest.cpp:32
&gt; &gt; +// Tests for the PODArena.
&gt; nit: I&apos;d nuke this comment since it is redundant with the file name.

Done.

&gt; &gt; WebKit/chromium/tests/PODArenaTest.cpp:82
&gt; &gt; +protected:
&gt; nit: looks like this constructor can just be in the private section

Done.

&gt; &gt; WebKit/chromium/tests/PODArenaTest.cpp:115
&gt; &gt; +    for (int i = 0; i &lt; 10000; ++i)
&gt; this choice of 10000 seems to depend on the value of DefaultChunkSize.
&gt; maybe you should parameterize this using that value?  this test could
&gt; fail if DefaultChunkSize were increased significantly.

Right now DefaultChunkSize is private, and making this test a friend is really ugly due to gtest&apos;s name mangling. I added a FIXME. I hope this will be sufficient for now.

&gt; &gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:44
&gt; &gt; +using namespace TreeTestHelpers;
&gt; instead of a namespace, I think a class with static methods would be 
&gt; better.  it is just uncommon in webkit to use a namespace like this.

The std namespace is used in many places in WebKit. The ability to use the TreeTestHelpers namespace rather than prefixing every method call with the class name really cleans up the code, and I&apos;m using this technique elsewhere in forthcoming patches. I&apos;d really rather leave this as is.

&gt; &gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:147
&gt; &gt; +    tree.add(5113);
&gt; is there something special about the choice of numbers here?
&gt; maybe a comment would be good if so?  elsewhere, you use
&gt; smaller numbers :)

Added a comment.

&gt; &gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:168
&gt; &gt; +        int val = nextRandom(maximumValue);
&gt; nit: spell out &quot;value&quot;

Done.

&gt; &gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:176
&gt; &gt; +        int idx = nextRandom(treeSize);
&gt; nit: spell out &quot;index&quot; and &quot;value&quot;

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274272</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-03 17:04:46 -0700</bug_when>
    <thetext>(In reply to comment #19)
...
&gt; &gt; &gt; WebKit/chromium/tests/PODArenaTest.cpp:115
&gt; &gt; &gt; +    for (int i = 0; i &lt; 10000; ++i)
&gt; &gt; this choice of 10000 seems to depend on the value of DefaultChunkSize.
&gt; &gt; maybe you should parameterize this using that value?  this test could
&gt; &gt; fail if DefaultChunkSize were increased significantly.
&gt; 
&gt; Right now DefaultChunkSize is private, and making this test a friend is really ugly due to gtest&apos;s name mangling. I added a FIXME. I hope this will be sufficient for now.

I was proposing that you make that public so it could be used here.
A FIXME is fine, but please consider making the change now since it
would be pretty trivial.


&gt; &gt; &gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:44
&gt; &gt; &gt; +using namespace TreeTestHelpers;
&gt; &gt; instead of a namespace, I think a class with static methods would be 
&gt; &gt; better.  it is just uncommon in webkit to use a namespace like this.
&gt; 
&gt; The std namespace is used in many places in WebKit. The ability to use the TreeTestHelpers namespace rather than prefixing every method call with the class name really cleans up the code, and I&apos;m using this technique elsewhere in forthcoming patches. I&apos;d really rather leave this as is.

This is quite different from the std:: namespace.  The problem I had
when reading this code is that it wasn&apos;t obvious where some of these
functions are defined, so I had to go &quot;grepping&quot; for them, which led
me to the namespace.  That is not a problem for very commonly used
classes and functions like what you find in the WTF namespace.

Anyways, I don&apos;t feel strongly enough about this.  It was just something
I observed that might not be obvious when one already has all of this
code loaded in one&apos;s head.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274275</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 17:09:28 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; ...
&gt; &gt; &gt; &gt; WebKit/chromium/tests/PODArenaTest.cpp:115
&gt; &gt; &gt; &gt; +    for (int i = 0; i &lt; 10000; ++i)
&gt; &gt; &gt; this choice of 10000 seems to depend on the value of DefaultChunkSize.
&gt; &gt; &gt; maybe you should parameterize this using that value?  this test could
&gt; &gt; &gt; fail if DefaultChunkSize were increased significantly.
&gt; &gt; 
&gt; &gt; Right now DefaultChunkSize is private, and making this test a friend is really ugly due to gtest&apos;s name mangling. I added a FIXME. I hope this will be sufficient for now.
&gt; 
&gt; I was proposing that you make that public so it could be used here.
&gt; A FIXME is fine, but please consider making the change now since it
&gt; would be pretty trivial.

OK, I&apos;ll make it public and update the tests. Revised patch coming.

&gt; &gt; &gt; &gt; WebKit/chromium/tests/PODRedBlackTreeTest.cpp:44
&gt; &gt; &gt; &gt; +using namespace TreeTestHelpers;
&gt; &gt; &gt; instead of a namespace, I think a class with static methods would be 
&gt; &gt; &gt; better.  it is just uncommon in webkit to use a namespace like this.
&gt; &gt; 
&gt; &gt; The std namespace is used in many places in WebKit. The ability to use the TreeTestHelpers namespace rather than prefixing every method call with the class name really cleans up the code, and I&apos;m using this technique elsewhere in forthcoming patches. I&apos;d really rather leave this as is.
&gt; 
&gt; This is quite different from the std:: namespace.  The problem I had
&gt; when reading this code is that it wasn&apos;t obvious where some of these
&gt; functions are defined, so I had to go &quot;grepping&quot; for them, which led
&gt; me to the namespace.  That is not a problem for very commonly used
&gt; classes and functions like what you find in the WTF namespace.
&gt; 
&gt; Anyways, I don&apos;t feel strongly enough about this.  It was just something
&gt; I observed that might not be obvious when one already has all of this
&gt; code loaded in one&apos;s head.

I see your point. I could add explicit using directives for each of the imported functions so it would be more obvious. I&apos;d really like to keep it as a namespace though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274277</commentid>
    <comment_count>22</comment_count>
      <attachid>66567</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-03 17:14:46 -0700</bug_when>
    <thetext>Created attachment 66567
Revised patch

Made DefaultChunkSize public in arena and use it in unit test rather than magic constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274417</commentid>
    <comment_count>23</comment_count>
      <attachid>66567</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-09-04 20:29:34 -0700</bug_when>
    <thetext>Comment on attachment 66567
Revised patch

The explicit &apos;using TestTreeHelpers::nextRandom&apos; and so on would be nice assuming
that works for functions?

R=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274467</commentid>
    <comment_count>24</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-05 20:53:29 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (From update of attachment 66567 [details])
&gt; The explicit &apos;using TestTreeHelpers::nextRandom&apos; and so on would be nice assuming
&gt; that works for functions?

It does; see &quot;using std::max&quot; elsewhere in the source tree, for example. Changed in version to be committed; also fixed incorrect license at top of these files and the other recently checked in ones.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274474</commentid>
    <comment_count>25</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-09-05 21:45:57 -0700</bug_when>
    <thetext>Committed r66808: &lt;http://trac.webkit.org/changeset/66808&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66273</attachid>
            <date>2010-09-01 14:34:43 -0700</date>
            <delta_ts>2010-09-01 15:21:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>red-black-tree-tests.patch</filename>
            <type>text/plain</type>
            <size>13514</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjY2MTcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDktMDEgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciByZWQtYmxhY2sgdHJlZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUwNjAKKwor
ICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogdGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMv
VHJlZVRlc3RIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlVGVzdEhl
bHBlcnM6OmdlbmVyYXRlU2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlVGVzdEhlbHBlcnM6
OmluaXRSYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVRlc3RIZWxwZXJzOjpuZXh0UmFu
ZG9tKToKKyAgICAgICAgKiB0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaDogQWRkZWQuCisKIDIwMTAt
MDgtMzEgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA2NjYxMikKKysrIFdl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC03NTIsOCArNzUyLDEx
IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9SdW5BbGxUZXN0cy5jcHAnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgJ3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAn
dGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAndGVz
dHMvVHJlZVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAg
ICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgIFsnT1M9
PSJ3aW4iJywgewpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRl
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9QT0RSZWRCbGFja1Ry
ZWVUZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9QT0RSZWRC
bGFja1RyZWVUZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGVzdHMg
Zm9yIHRoZSByZWQtYmxhY2sgdHJlZSBjbGFzcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiUE9EUmVkQmxhY2tUcmVlLmgiCisKKyNpbmNsdWRlICJUcmVlVGVzdEhlbHBlcnMu
aCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzOwor
CitURVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3RTaW5nbGVFbGVtZW50SW5zZXJ0aW9uKQor
eworICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5pbnNlcnQoNSk7Cisg
ICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUo
dHJlZS5jb250YWlucyg1KSk7Cit9CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdE11
bHRpcGxlRWxlbWVudEluc2VydGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVl
OworICAgIHRyZWUuaW5zZXJ0KDQpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlh
bnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNCkpOworICAgIHRyZWUuaW5z
ZXJ0KDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVY
UEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworICAgIHRyZWUuaW5zZXJ0KDUpOworICAgIEFT
U0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUu
Y29udGFpbnMoNSkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNCkpOworICAgIEVY
UEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworfQorCitURVNUKFBPRFJlZEJsYWNrVHJlZVRl
c3QsIFRlc3REdXBsaWNhdGVFbGVtZW50SW5zZXJ0aW9uKQoreworICAgIFBPRFJlZEJsYWNrVHJl
ZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5j
aGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJUX1RSVUUo
dHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJU
X1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDMsIHRyZWUubnVt
RWxlbWVudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7Cit9CisKK1RF
U1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdFNpbmdsZUVsZW1lbnRJbnNlcnRpb25BbmREZWxl
dGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVlOworICAgIHRyZWUuaW5zZXJ0
KDUpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVD
VF9UUlVFKHRyZWUuY29udGFpbnMoNSkpOworICAgIHRyZWUucmVtb3ZlKDUpOworICAgIEFTU0VS
VF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9GQUxTRSh0cmVlLmNv
bnRhaW5zKDUpKTsKK30KKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0TXVsdGlwbGVF
bGVtZW50SW5zZXJ0aW9uQW5kRGVsZXRpb24pCit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4g
dHJlZTsKKyAgICB0cmVlLmluc2VydCg0KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52
YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAgICB0cmVl
Lmluc2VydCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLmluc2VydCg1KTsKKyAg
ICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0
cmVlLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLnJlbW92ZSg0KTsKKyAg
ICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0
cmVlLmNvbnRhaW5zKDMpKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJlZS5jb250YWlucyg0KSk7Cisg
ICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucyg1KSk7CisgICAgdHJlZS5yZW1vdmUoNSk7Cisg
ICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUo
dHJlZS5jb250YWlucygzKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUuY29udGFpbnMoNCkpOwor
ICAgIEVYUEVDVF9GQUxTRSh0cmVlLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfRVEoMSwgdHJl
ZS5udW1FbGVtZW50cygpKTsKK30KKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0RHVw
bGljYXRlRWxlbWVudEluc2VydGlvbkFuZERlbGV0aW9uKQoreworICAgIFBPRFJlZEJsYWNrVHJl
ZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5j
aGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJUX1RSVUUo
dHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJU
X1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDMsIHRyZWUubnVt
RWxlbWVudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7CisgICAgdHJl
ZS5yZW1vdmUoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7Cisg
ICAgdHJlZS5yZW1vdmUoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMo
KSk7CisgICAgRVhQRUNUX0VRKDEsIHRyZWUubnVtRWxlbWVudHMoKSk7CisgICAgRVhQRUNUX1RS
VUUodHJlZS5jb250YWlucygzKSk7CisgICAgdHJlZS5yZW1vdmUoMyk7CisgICAgQVNTRVJUX1RS
VUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDAsIHRyZWUubnVtRWxl
bWVudHMoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUuY29udGFpbnMoMykpOworfQorCitURVNU
KFBPRFJlZEJsYWNrVHJlZVRlc3QsIEZhaWxpbmdJbnNlcnRpb25SZWdyZXNzaW9uVGVzdDEpCit7
CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsKKyAgICB0cmVlLmluc2VydCg1MTEzKTsK
KyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICB0cmVlLmluc2Vy
dCg0NTE3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICB0
cmVlLmluc2VydCgzMzczKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygp
KTsKKyAgICB0cmVlLmluc2VydCg5MzA3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52
YXJpYW50cygpKTsKKyAgICB0cmVlLmluc2VydCg3MDc3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVl
LmNoZWNrSW52YXJpYW50cygpKTsKK30KKworbmFtZXNwYWNlIHsKK3ZvaWQgSW5zZXJ0aW9uQW5k
RGVsZXRpb25UZXN0KGNvbnN0IGludDMyX3Qgc2VlZCwgY29uc3QgaW50IHRyZWVTaXplKQorewor
ICAgIGluaXRSYW5kb20oc2VlZCk7CisgICAgY29uc3QgaW50IG1heGltdW1WYWx1ZSA9IHRyZWVT
aXplOworICAgIC8vIEJ1aWxkIHRoZSB0cmVlLgorICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRy
ZWU7CisgICAgVmVjdG9yPGludD4gdmFsdWVzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJl
ZVNpemU7IGkrKykgeworICAgICAgICBpbnQgdmFsID0gbmV4dFJhbmRvbShtYXhpbXVtVmFsdWUp
OworICAgICAgICB0cmVlLmluc2VydCh2YWwpOworICAgICAgICBFWFBFQ1RfVFJVRSh0cmVlLmNo
ZWNrSW52YXJpYW50cygpKSA8PCAiVGVzdCBmYWlsZWQgZm9yIHNlZWQgIiA8PCBzZWVkOworICAg
ICAgICB2YWx1ZXMuYXBwZW5kKHZhbCk7CisgICAgfQorICAgIC8vIENodXJuIHRoZSB0cmVlJ3Mg
Y29udGVudHMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmVlU2l6ZTsgaSsrKSB7CisgICAg
ICAgIC8vIFBpY2sgYSByYW5kb20gdmFsdWUgdG8gcmVtb3ZlLgorICAgICAgICBpbnQgaWR4ID0g
bmV4dFJhbmRvbSh0cmVlU2l6ZSk7CisgICAgICAgIGludCB2YWwgPSB2YWx1ZXNbaWR4XTsKKyAg
ICAgICAgLy8gUmVtb3ZlIHRoaXMgdmFsdWUuCisgICAgICAgIHRyZWUucmVtb3ZlKHZhbCk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxl
ZCBmb3Igc2VlZCAiIDw8IHNlZWQ7CisgICAgICAgIC8vIFJlcGxhY2UgaXQgd2l0aCBhIG5ldyBv
bmUuCisgICAgICAgIHZhbCA9IG5leHRSYW5kb20obWF4aW11bVZhbHVlKTsKKyAgICAgICAgdmFs
dWVzW2lkeF0gPSB2YWw7CisgICAgICAgIHRyZWUuaW5zZXJ0KHZhbCk7CisgICAgICAgIEVYUEVD
VF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxlZCBmb3Igc2VlZCAi
IDw8IHNlZWQ7CisgICAgfQorfQorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoUE9E
UmVkQmxhY2tUcmVlVGVzdCwgUmFuZG9tRGVsZXRpb25BbmRJbnNlcnRpb25SZWdyZXNzaW9uVGVz
dDEpCit7CisgICAgSW5zZXJ0aW9uQW5kRGVsZXRpb25UZXN0KDEyMzExLCAxMDApOworfQorCitU
RVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3RSYW5kb21EZWxldGlvbkFuZEluc2VydGlvbikK
K3sKKyAgICBJbnNlcnRpb25BbmREZWxldGlvblRlc3QoZ2VuZXJhdGVTZWVkKCksIDEwMCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9U
cmVlVGVzdEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9U
cmVlVGVzdEhlbHBlcnMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RyZWVUZXN0SGVscGVycy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVHJlZVRlc3RIZWxwZXJzLmgiCisKKyNpbmNsdWRl
IDxjc3RkbGliPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzIHsKKworaW50MzJfdCBnZW5lcmF0ZVNl
ZWQoKQoreworICAgIC8vIEEgc2VlZCBvZiAxIGhhcyB0aGUgc3BlY2lhbCBiZWhhdmlvciBvZiBy
ZXNldHRpbmcgdGhlIHJhbmRvbQorICAgIC8vIG51bWJlciBnZW5lcmF0b3IuIEFzc3VtZSB0aGF0
IGlmIHdlIGNhbGwgdGhpcyByb3V0aW5lIHRoYXQgd2UKKyAgICAvLyBkb24ndCB3YW50IHRoaXMg
YmVoYXZpb3IuCisgICAgaW50MzJfdCBzZWVkOworICAgIGRvIHsKKyAgICAgICAgc2VlZCA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KGN1cnJlbnRUaW1lKCkpOworICAgIH0gd2hpbGUgKHNlZWQgPD0g
MSk7CisgICAgcmV0dXJuIHNlZWQ7Cit9CisKK3ZvaWQgaW5pdFJhbmRvbShjb25zdCBpbnQzMl90
IHNlZWQpCit7CisgICAgc3JhbmQoc2VlZCk7Cit9CisKK2ludDMyX3QgbmV4dFJhbmRvbShjb25z
dCBpbnQzMl90IG1heGltdW1WYWx1ZSkKK3sKKyAgICAvLyByYW5kX3IgaXMgbm90IGF2YWlsYWJs
ZSBvbiBXaW5kb3dzCisgICAgcmV0dXJuIHJhbmQoKSAlIG1heGltdW1WYWx1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIFNpbXBsZSBwc2V1ZG9yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBoZWxw
ZXIgZnVuY3Rpb25zLCB1c2VkIGJ5IHRoZQorLy8gcmVkLWJsYWNrIGFuZCBpbnRlcnZhbCB0cmVl
IHRlc3RzLgorLy8KKy8vIFRoZXNlIGFyZSAqKm5vdCoqIHRocmVhZCBzYWZlIQorCisjaWZuZGVm
IFRyZWVUZXN0SGVscGVyc19oCisjZGVmaW5lIFRyZWVUZXN0SGVscGVyc19oCisKKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFRyZWVUZXN0SGVs
cGVycyB7CisKKy8vIEdlbmVyYXRlcyBhIHNlZWQgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIGluaXRS
YW5kb20oKS4KK2ludDMyX3QgZ2VuZXJhdGVTZWVkKCk7CisKKy8vIEluaXRpYWxpemVzIHRoZSBw
c2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0aCBhIHNwZWNpZmljIHNlZWQuCit2b2lk
IGluaXRSYW5kb20oY29uc3QgaW50MzJfdCBzZWVkKTsKKworLy8gUHJvZHVjZXMgdGhlIG5leHQg
cHNldWRvLXJhbmRvbSBudW1iZXIgaW4gdGhlIHNlcXVlbmNlLCBpbiB0aGUKKy8vIHJhbmdlIGZy
b20gWzAuLm1heGltdW1WYWx1ZSkuIE5lZ2F0aXZlIG51bWJlcnMgYXJlIG5vdCBhbGxvd2VkIGFu
ZCB3aWxsCisvLyBwcm9kdWNlIHVuZGVmaW5lZCByZXN1bHRzLgoraW50MzJfdCBuZXh0UmFuZG9t
KGNvbnN0IGludDMyX3QgbWF4aW11bVZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgVHJlZVRlc3RI
ZWxwZXJzCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUcmVlVGVzdEhlbHBl
cnNfaAo=
</data>
<flag name="commit-queue"
          id="55242"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66288</attachid>
            <date>2010-09-01 15:21:48 -0700</date>
            <delta_ts>2010-09-02 19:36:35 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>red-black-tree-tests.patch</filename>
            <type>text/plain</type>
            <size>13514</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjY2MTcpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDktMDEgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciByZWQtYmxhY2sgdHJlZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUwNjAKKwor
ICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogdGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVz
dC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMv
VHJlZVRlc3RIZWxwZXJzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlVGVzdEhl
bHBlcnM6OmdlbmVyYXRlU2VlZCk6CisgICAgICAgIChXZWJDb3JlOjpUcmVlVGVzdEhlbHBlcnM6
OmluaXRSYW5kb20pOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVRlc3RIZWxwZXJzOjpuZXh0UmFu
ZG9tKToKKyAgICAgICAgKiB0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaDogQWRkZWQuCisKIDIwMTAt
MDgtMzEgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2FtIFdlaW5pZy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA2NjYxMikKKysrIFdl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC03NTIsOCArNzUyLDEx
IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvSURCS2V5UGF0aFRlc3QuY3BwJywK
ICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LZXlib2FyZFRlc3QuY3BwJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICd0ZXN0cy9LVVJMVGVzdC5jcHAnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICd0ZXN0cy9SdW5BbGxUZXN0cy5jcHAnLAogICAgICAgICAgICAgICAgICAgICAg
ICAgJ3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAn
dGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAndGVz
dHMvVHJlZVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAg
ICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgIFsnT1M9
PSJ3aW4iJywgewpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRl
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9QT0RSZWRCbGFja1Ry
ZWVUZXN0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9QT0RSZWRC
bGFja1RyZWVUZXN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGVzdHMg
Zm9yIHRoZSByZWQtYmxhY2sgdHJlZSBjbGFzcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiUE9EUmVkQmxhY2tUcmVlLmgiCisKKyNpbmNsdWRlICJUcmVlVGVzdEhlbHBlcnMu
aCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzOwor
CitURVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3RTaW5nbGVFbGVtZW50SW5zZXJ0aW9uKQor
eworICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5pbnNlcnQoNSk7Cisg
ICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUo
dHJlZS5jb250YWlucyg1KSk7Cit9CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdE11
bHRpcGxlRWxlbWVudEluc2VydGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVl
OworICAgIHRyZWUuaW5zZXJ0KDQpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlh
bnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNCkpOworICAgIHRyZWUuaW5z
ZXJ0KDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVY
UEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworICAgIHRyZWUuaW5zZXJ0KDUpOworICAgIEFT
U0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUu
Y29udGFpbnMoNSkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNCkpOworICAgIEVY
UEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworfQorCitURVNUKFBPRFJlZEJsYWNrVHJlZVRl
c3QsIFRlc3REdXBsaWNhdGVFbGVtZW50SW5zZXJ0aW9uKQoreworICAgIFBPRFJlZEJsYWNrVHJl
ZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5j
aGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJUX1RSVUUo
dHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJU
X1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDMsIHRyZWUubnVt
RWxlbWVudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7Cit9CisKK1RF
U1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdFNpbmdsZUVsZW1lbnRJbnNlcnRpb25BbmREZWxl
dGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVlOworICAgIHRyZWUuaW5zZXJ0
KDUpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVD
VF9UUlVFKHRyZWUuY29udGFpbnMoNSkpOworICAgIHRyZWUucmVtb3ZlKDUpOworICAgIEFTU0VS
VF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9GQUxTRSh0cmVlLmNv
bnRhaW5zKDUpKTsKK30KKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0TXVsdGlwbGVF
bGVtZW50SW5zZXJ0aW9uQW5kRGVsZXRpb24pCit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4g
dHJlZTsKKyAgICB0cmVlLmluc2VydCg0KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52
YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAgICB0cmVl
Lmluc2VydCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLmluc2VydCg1KTsKKyAg
ICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0
cmVlLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAg
ICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLnJlbW92ZSg0KTsKKyAg
ICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0
cmVlLmNvbnRhaW5zKDMpKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJlZS5jb250YWlucyg0KSk7Cisg
ICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucyg1KSk7CisgICAgdHJlZS5yZW1vdmUoNSk7Cisg
ICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUo
dHJlZS5jb250YWlucygzKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUuY29udGFpbnMoNCkpOwor
ICAgIEVYUEVDVF9GQUxTRSh0cmVlLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfRVEoMSwgdHJl
ZS5udW1FbGVtZW50cygpKTsKK30KKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0RHVw
bGljYXRlRWxlbWVudEluc2VydGlvbkFuZERlbGV0aW9uKQoreworICAgIFBPRFJlZEJsYWNrVHJl
ZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5j
aGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJUX1RSVUUo
dHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5pbnNlcnQoMyk7CisgICAgQVNTRVJU
X1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDMsIHRyZWUubnVt
RWxlbWVudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7CisgICAgdHJl
ZS5yZW1vdmUoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7Cisg
ICAgdHJlZS5yZW1vdmUoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMo
KSk7CisgICAgRVhQRUNUX0VRKDEsIHRyZWUubnVtRWxlbWVudHMoKSk7CisgICAgRVhQRUNUX1RS
VUUodHJlZS5jb250YWlucygzKSk7CisgICAgdHJlZS5yZW1vdmUoMyk7CisgICAgQVNTRVJUX1RS
VUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDAsIHRyZWUubnVtRWxl
bWVudHMoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUuY29udGFpbnMoMykpOworfQorCitURVNU
KFBPRFJlZEJsYWNrVHJlZVRlc3QsIEZhaWxpbmdJbnNlcnRpb25SZWdyZXNzaW9uVGVzdDEpCit7
CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsKKyAgICB0cmVlLmluc2VydCg1MTEzKTsK
KyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICB0cmVlLmluc2Vy
dCg0NTE3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICB0
cmVlLmluc2VydCgzMzczKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygp
KTsKKyAgICB0cmVlLmluc2VydCg5MzA3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52
YXJpYW50cygpKTsKKyAgICB0cmVlLmluc2VydCg3MDc3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVl
LmNoZWNrSW52YXJpYW50cygpKTsKK30KKworbmFtZXNwYWNlIHsKK3ZvaWQgSW5zZXJ0aW9uQW5k
RGVsZXRpb25UZXN0KGNvbnN0IGludDMyX3Qgc2VlZCwgY29uc3QgaW50IHRyZWVTaXplKQorewor
ICAgIGluaXRSYW5kb20oc2VlZCk7CisgICAgY29uc3QgaW50IG1heGltdW1WYWx1ZSA9IHRyZWVT
aXplOworICAgIC8vIEJ1aWxkIHRoZSB0cmVlLgorICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRy
ZWU7CisgICAgVmVjdG9yPGludD4gdmFsdWVzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJl
ZVNpemU7IGkrKykgeworICAgICAgICBpbnQgdmFsID0gbmV4dFJhbmRvbShtYXhpbXVtVmFsdWUp
OworICAgICAgICB0cmVlLmluc2VydCh2YWwpOworICAgICAgICBBU1NFUlRfVFJVRSh0cmVlLmNo
ZWNrSW52YXJpYW50cygpKSA8PCAiVGVzdCBmYWlsZWQgZm9yIHNlZWQgIiA8PCBzZWVkOworICAg
ICAgICB2YWx1ZXMuYXBwZW5kKHZhbCk7CisgICAgfQorICAgIC8vIENodXJuIHRoZSB0cmVlJ3Mg
Y29udGVudHMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmVlU2l6ZTsgaSsrKSB7CisgICAg
ICAgIC8vIFBpY2sgYSByYW5kb20gdmFsdWUgdG8gcmVtb3ZlLgorICAgICAgICBpbnQgaWR4ID0g
bmV4dFJhbmRvbSh0cmVlU2l6ZSk7CisgICAgICAgIGludCB2YWwgPSB2YWx1ZXNbaWR4XTsKKyAg
ICAgICAgLy8gUmVtb3ZlIHRoaXMgdmFsdWUuCisgICAgICAgIHRyZWUucmVtb3ZlKHZhbCk7Cisg
ICAgICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxl
ZCBmb3Igc2VlZCAiIDw8IHNlZWQ7CisgICAgICAgIC8vIFJlcGxhY2UgaXQgd2l0aCBhIG5ldyBv
bmUuCisgICAgICAgIHZhbCA9IG5leHRSYW5kb20obWF4aW11bVZhbHVlKTsKKyAgICAgICAgdmFs
dWVzW2lkeF0gPSB2YWw7CisgICAgICAgIHRyZWUuaW5zZXJ0KHZhbCk7CisgICAgICAgIEFTU0VS
VF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxlZCBmb3Igc2VlZCAi
IDw8IHNlZWQ7CisgICAgfQorfQorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoUE9E
UmVkQmxhY2tUcmVlVGVzdCwgUmFuZG9tRGVsZXRpb25BbmRJbnNlcnRpb25SZWdyZXNzaW9uVGVz
dDEpCit7CisgICAgSW5zZXJ0aW9uQW5kRGVsZXRpb25UZXN0KDEyMzExLCAxMDApOworfQorCitU
RVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3RSYW5kb21EZWxldGlvbkFuZEluc2VydGlvbikK
K3sKKyAgICBJbnNlcnRpb25BbmREZWxldGlvblRlc3QoZ2VuZXJhdGVTZWVkKCksIDEwMCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9U
cmVlVGVzdEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9U
cmVlVGVzdEhlbHBlcnMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1RyZWVUZXN0SGVscGVycy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVHJlZVRlc3RIZWxwZXJzLmgiCisKKyNpbmNsdWRl
IDxjc3RkbGliPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CituYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzIHsKKworaW50MzJfdCBnZW5lcmF0ZVNl
ZWQoKQoreworICAgIC8vIEEgc2VlZCBvZiAxIGhhcyB0aGUgc3BlY2lhbCBiZWhhdmlvciBvZiBy
ZXNldHRpbmcgdGhlIHJhbmRvbQorICAgIC8vIG51bWJlciBnZW5lcmF0b3IuIEFzc3VtZSB0aGF0
IGlmIHdlIGNhbGwgdGhpcyByb3V0aW5lIHRoYXQgd2UKKyAgICAvLyBkb24ndCB3YW50IHRoaXMg
YmVoYXZpb3IuCisgICAgaW50MzJfdCBzZWVkOworICAgIGRvIHsKKyAgICAgICAgc2VlZCA9IHN0
YXRpY19jYXN0PGludDMyX3Q+KGN1cnJlbnRUaW1lKCkpOworICAgIH0gd2hpbGUgKHNlZWQgPD0g
MSk7CisgICAgcmV0dXJuIHNlZWQ7Cit9CisKK3ZvaWQgaW5pdFJhbmRvbShjb25zdCBpbnQzMl90
IHNlZWQpCit7CisgICAgc3JhbmQoc2VlZCk7Cit9CisKK2ludDMyX3QgbmV4dFJhbmRvbShjb25z
dCBpbnQzMl90IG1heGltdW1WYWx1ZSkKK3sKKyAgICAvLyByYW5kX3IgaXMgbm90IGF2YWlsYWJs
ZSBvbiBXaW5kb3dzCisgICAgcmV0dXJuIHJhbmQoKSAlIG1heGltdW1WYWx1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oCShyZXZpc2lvbiAwKQorKysg
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKy8vIFNpbXBsZSBwc2V1ZG9yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBoZWxw
ZXIgZnVuY3Rpb25zLCB1c2VkIGJ5IHRoZQorLy8gcmVkLWJsYWNrIGFuZCBpbnRlcnZhbCB0cmVl
IHRlc3RzLgorLy8KKy8vIFRoZXNlIGFyZSAqKm5vdCoqIHRocmVhZCBzYWZlIQorCisjaWZuZGVm
IFRyZWVUZXN0SGVscGVyc19oCisjZGVmaW5lIFRyZWVUZXN0SGVscGVyc19oCisKKyNpbmNsdWRl
IDxzdGRpbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFRyZWVUZXN0SGVs
cGVycyB7CisKKy8vIEdlbmVyYXRlcyBhIHNlZWQgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIGluaXRS
YW5kb20oKS4KK2ludDMyX3QgZ2VuZXJhdGVTZWVkKCk7CisKKy8vIEluaXRpYWxpemVzIHRoZSBw
c2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0aCBhIHNwZWNpZmljIHNlZWQuCit2b2lk
IGluaXRSYW5kb20oY29uc3QgaW50MzJfdCBzZWVkKTsKKworLy8gUHJvZHVjZXMgdGhlIG5leHQg
cHNldWRvLXJhbmRvbSBudW1iZXIgaW4gdGhlIHNlcXVlbmNlLCBpbiB0aGUKKy8vIHJhbmdlIGZy
b20gWzAuLm1heGltdW1WYWx1ZSkuIE5lZ2F0aXZlIG51bWJlcnMgYXJlIG5vdCBhbGxvd2VkIGFu
ZCB3aWxsCisvLyBwcm9kdWNlIHVuZGVmaW5lZCByZXN1bHRzLgoraW50MzJfdCBuZXh0UmFuZG9t
KGNvbnN0IGludDMyX3QgbWF4aW11bVZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgVHJlZVRlc3RI
ZWxwZXJzCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUcmVlVGVzdEhlbHBl
cnNfaAo=
</data>
<flag name="commit-queue"
          id="55261"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66460</attachid>
            <date>2010-09-02 19:36:35 -0700</date>
            <delta_ts>2010-09-02 19:58:13 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>red-black-tree-and-arena-tests.patch</filename>
            <type>text/plain</type>
            <size>18465</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjY3MDYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDktMDIgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciByZWQtYmxhY2sgdHJlZSBh
bmQgKFBPRCkgYXJlbmEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ1MDYwCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL1BP
REFyZW5hVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVzdENsYXNzMTo6VGVz
dENsYXNzMjo6VGVzdENsYXNzMik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAg
ICAqIHRlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1RyZWVUZXN0SGVscGVycy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VHJlZVRlc3RIZWxwZXJzOjpnZW5lcmF0ZVNlZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVRlc3RIZWxwZXJzOjppbml0UmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVUZXN0SGVscGVyczo6bmV4dFJhbmRvbSk6CisgICAgICAgICogdGVzdHMvVHJlZVRl
c3RIZWxwZXJzLmg6IEFkZGVkLgorCiAyMDEwLTA5LTAyICBLZW50IFRhbXVyYSAgPHRrZW50QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNjY3MDYpCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDggKzczOCwxMiBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAn
dGVzdHMvS1VSTFRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9QT0RB
cmVuYVRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9QT0RSZWRCbGFj
a1RyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvUnVuQWxsVGVz
dHMuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5j
cHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAn
LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oJywKICAg
ICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBb
CiAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS90ZXN0cy9QT0RBcmVuYVRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS90ZXN0cy9QT0RBcmVuYVRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ1IEBA
CisvKgorICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIFRlc3RzIGZvciB0aGUgUE9EQXJlbmEuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlBPREFyZW5hLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIHsKKworLy8gQW4gYWxsb2NhdG9yIGZvciB0aGUgUE9EQXJlbmEgd2hpY2gg
dHJhY2tzIHRoZSByZWdpb25zIHdoaWNoIGhhdmUKKy8vIGJlZW4gYWxsb2NhdGVkLgorY2xhc3Mg
VHJhY2tlZEFsbG9jYXRvciA6IHB1YmxpYyBQT0RBcmVuYTo6RmFzdE1hbGxvY0FsbG9jYXRvciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhY2tlZEFsbG9jYXRvcj4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhY2tlZEFsbG9jYXRvcik7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkgeworICAg
ICAgICB2b2lkKiByZXN1bHQgPSBQT0RBcmVuYTo6RmFzdE1hbGxvY0FsbG9jYXRvcjo6YWxsb2Nh
dGUoc2l6ZSk7CisgICAgICAgIG1fYWxsb2NhdGVkUmVnaW9ucy5hcHBlbmQocmVzdWx0KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJlZSh2b2lk
KiBwdHIpIHsKKyAgICAgICAgc2l6ZV90IHNsb3QgPSBtX2FsbG9jYXRlZFJlZ2lvbnMuZmluZChw
dHIpOworICAgICAgICBBU1NFUlRfVFJVRShzbG90ID49IDApOworICAgICAgICBtX2FsbG9jYXRl
ZFJlZ2lvbnMucmVtb3ZlKHNsb3QpOworICAgICAgICBQT0RBcmVuYTo6RmFzdE1hbGxvY0FsbG9j
YXRvcjo6ZnJlZShwdHIpOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsKKyAg
ICAgICAgcmV0dXJuIG51bVJlZ2lvbnMoKSA9PSAwOworICAgIH0KKworICAgIGludCBudW1SZWdp
b25zKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbV9hbGxvY2F0ZWRSZWdpb25zLnNpemUoKTsK
KyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBUcmFja2VkQWxsb2NhdG9yKCkgeyB9CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPHZvaWQqPiBtX2FsbG9jYXRlZFJlZ2lvbnM7Cit9OworCisvLyBBIGNv
dXBsZSBvZiBzaW1wbGUgc3RydWN0cyB0byBhbGxvY2F0ZS4KK3N0cnVjdCBUZXN0Q2xhc3MxIHsK
KyAgICBUZXN0Q2xhc3MxKCkKKyAgICAgICAgOiB4KDApLCB5KDApLCB6KDApLCB3KDEpIHsgfQor
CisgICAgZmxvYXQgeCwgeSwgeiwgdzsKK307CisKK3N0cnVjdCBUZXN0Q2xhc3MyIHsKKyAgICBU
ZXN0Q2xhc3MyKCkKKyAgICAgICAgOiBhKDEpLCBiKDIpLCBjKDMpLCBkKDQpIHsgfQorCisgICAg
ZmxvYXQgYSwgYiwgYywgZDsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitjbGFz
cyBQT0RBcmVuYVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Cit9OworCisvLyBNYWtlIHN1
cmUgdGhlIGFyZW5hIGNhbiBzdWNjZXNzZnVsbHkgYWxsb2NhdGUgZnJvbSBtb3JlIHRoYW4gb25l
CisvLyByZWdpb24uCitURVNUX0YoUE9EQXJlbmFUZXN0LCBDYW5BbGxvY2F0ZUZyb21Nb3JlVGhh
bk9uZVJlZ2lvbikgeworICAgIFJlZlB0cjxUcmFja2VkQWxsb2NhdG9yPiBhbGxvY2F0b3IgPSBU
cmFja2VkQWxsb2NhdG9yOjpjcmVhdGUoKTsKKyAgICBSZWZQdHI8UE9EQXJlbmE+IGFyZW5hID0g
UE9EQXJlbmE6OmNyZWF0ZShhbGxvY2F0b3IpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkKKyAgICAgICAgYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFRlc3RDbGFzczE+KCk7Cisg
ICAgRVhQRUNUX0dUKGFsbG9jYXRvci0+bnVtUmVnaW9ucygpLCAxKTsKK30KKworLy8gTWFrZSBz
dXJlIHRoZSBhcmVuYSBmcmVlcyBhbGwgYWxsb2NhdGVkIHJlZ2lvbnMgZHVyaW5nIGRlc3RydWN0
aW9uLgorVEVTVF9GKFBPREFyZW5hVGVzdCwgRnJlZXNBbGxBbGxvY2F0ZWRSZWdpb25zKSB7Cisg
ICAgUmVmUHRyPFRyYWNrZWRBbGxvY2F0b3I+IGFsbG9jYXRvciA9IFRyYWNrZWRBbGxvY2F0b3I6
OmNyZWF0ZSgpOworICAgIHsKKyAgICAgICAgUmVmUHRyPFBPREFyZW5hPiBhcmVuYSA9IFBPREFy
ZW5hOjpjcmVhdGUoYWxsb2NhdG9yKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAzOyBp
KyspIHsKKyAgICAgICAgICAgIGFyZW5hLT5hbGxvY2F0ZU9iamVjdDxUZXN0Q2xhc3MxPigpOwor
ICAgICAgICB9CisgICAgICAgIEVYUEVDVF9HVChhbGxvY2F0b3ItPm51bVJlZ2lvbnMoKSwgMCk7
CisgICAgfQorICAgIEVYUEVDVF9UUlVFKGFsbG9jYXRvci0+aXNFbXB0eSgpKTsKK30KKworLy8g
TWFrZSBzdXJlIHRoZSBhcmVuYSBydW5zIGNvbnN0cnVjdG9ycyBvZiB0aGUgb2JqZWN0cyBhbGxv
Y2F0ZWQgd2l0aGluLgorVEVTVF9GKFBPREFyZW5hVGVzdCwgUnVuc0NvbnN0cnVjdG9ycykgewor
ICAgIFJlZlB0cjxQT0RBcmVuYT4gYXJlbmEgPSBQT0RBcmVuYTo6Y3JlYXRlKCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCAxMDAwMDsgaSsrKSB7CisgICAgICAgIFRlc3RDbGFzczEqIHRjMSA9
IGFyZW5hLT5hbGxvY2F0ZU9iamVjdDxUZXN0Q2xhc3MxPigpOworICAgICAgICBFWFBFQ1RfRVEo
MCwgdGMxLT54KTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHRjMS0+eSk7CisgICAgICAgIEVYUEVD
VF9FUSgwLCB0YzEtPnopOworICAgICAgICBFWFBFQ1RfRVEoMSwgdGMxLT53KTsKKyAgICAgICAg
VGVzdENsYXNzMiogdGMyID0gYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFRlc3RDbGFzczI+KCk7Cisg
ICAgICAgIEVYUEVDVF9FUSgxLCB0YzItPmEpOworICAgICAgICBFWFBFQ1RfRVEoMiwgdGMyLT5i
KTsKKyAgICAgICAgRVhQRUNUX0VRKDMsIHRjMi0+Yyk7CisgICAgICAgIEVYUEVDVF9FUSg0LCB0
YzItPmQpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS90ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcAkocmV2aXNpb24gMCkK
KysrIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwyMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCwgR29vZ2xlIElu
Yy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gVGVzdHMgZm9yIHRoZSByZWQtYmxhY2sgdHJlZSBj
bGFzcy4KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiUE9EUmVkQmxhY2tUcmVl
LmgiCisKKyNpbmNsdWRlICJUcmVlVGVzdEhlbHBlcnMuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzOworCitURVNUKFBPRFJlZEJsYWNrVHJlZVRl
c3QsIFRlc3RTaW5nbGVFbGVtZW50SW5zZXJ0aW9uKQoreworICAgIFBPRFJlZEJsYWNrVHJlZTxp
bnQ+IHRyZWU7CisgICAgdHJlZS5hZGQoNSk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0lu
dmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucyg1KSk7Cit9CisKK1RF
U1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdE11bHRpcGxlRWxlbWVudEluc2VydGlvbikKK3sK
KyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVlOworICAgIHRyZWUuYWRkKDQpOworICAgIEFT
U0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUu
Y29udGFpbnMoNCkpOworICAgIHRyZWUuYWRkKDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hl
Y2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworICAg
IHRyZWUuYWRkKDUpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOwor
ICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNSkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUu
Y29udGFpbnMoNCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworfQorCitU
RVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3REdXBsaWNhdGVFbGVtZW50SW5zZXJ0aW9uKQor
eworICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5hZGQoMyk7CisgICAg
QVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoMyk7Cisg
ICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoMyk7
CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VR
KDMsIHRyZWUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKK30K
KworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0U2luZ2xlRWxlbWVudEluc2VydGlvbkFu
ZERlbGV0aW9uKQoreworICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5h
ZGQoNSk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQ
RUNUX1RSVUUodHJlZS5jb250YWlucyg1KSk7CisgICAgdHJlZS5yZW1vdmUoNSk7CisgICAgQVNT
RVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUu
Y29udGFpbnMoNSkpOworfQorCitURVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3RNdWx0aXBs
ZUVsZW1lbnRJbnNlcnRpb25BbmREZWxldGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50
PiB0cmVlOworICAgIHRyZWUuYWRkKDQpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZh
cmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNCkpOworICAgIHRyZWUu
YWRkKDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVY
UEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworICAgIHRyZWUuYWRkKDUpOworICAgIEFTU0VS
VF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29u
dGFpbnMoNSkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNCkpOworICAgIEVYUEVD
VF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworICAgIHRyZWUucmVtb3ZlKDQpOworICAgIEFTU0VS
VF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29u
dGFpbnMoMykpOworICAgIEVYUEVDVF9GQUxTRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAgICBFWFBF
Q1RfVFJVRSh0cmVlLmNvbnRhaW5zKDUpKTsKKyAgICB0cmVlLnJlbW92ZSg1KTsKKyAgICBBU1NF
UlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNv
bnRhaW5zKDMpKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJlZS5jb250YWlucyg0KSk7CisgICAgRVhQ
RUNUX0ZBTFNFKHRyZWUuY29udGFpbnMoNSkpOworICAgIEVYUEVDVF9FUSgxLCB0cmVlLnNpemUo
KSk7Cit9CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdER1cGxpY2F0ZUVsZW1lbnRJ
bnNlcnRpb25BbmREZWxldGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVlOwor
ICAgIHRyZWUuYWRkKDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkp
OworICAgIHRyZWUuYWRkKDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRz
KCkpOworICAgIHRyZWUuYWRkKDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlh
bnRzKCkpOworICAgIEVYUEVDVF9FUSgzLCB0cmVlLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUo
dHJlZS5jb250YWlucygzKSk7CisgICAgdHJlZS5yZW1vdmUoMyk7CisgICAgQVNTRVJUX1RSVUUo
dHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5yZW1vdmUoMyk7CisgICAgQVNTRVJU
X1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDEsIHRyZWUuc2l6
ZSgpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLnJlbW92
ZSgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBF
Q1RfRVEoMCwgdHJlZS5zaXplKCkpOworICAgIEVYUEVDVF9GQUxTRSh0cmVlLmNvbnRhaW5zKDMp
KTsKK30KKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBGYWlsaW5nSW5zZXJ0aW9uUmVncmVz
c2lvblRlc3QxKQoreworICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5h
ZGQoNTExMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAg
dHJlZS5hZGQoNDUxNyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7
CisgICAgdHJlZS5hZGQoMzM3Myk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFu
dHMoKSk7CisgICAgdHJlZS5hZGQoOTMwNyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0lu
dmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoNzA3Nyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5j
aGVja0ludmFyaWFudHMoKSk7Cit9CisKK25hbWVzcGFjZSB7Cit2b2lkIEluc2VydGlvbkFuZERl
bGV0aW9uVGVzdChjb25zdCBpbnQzMl90IHNlZWQsIGNvbnN0IGludCB0cmVlU2l6ZSkKK3sKKyAg
ICBpbml0UmFuZG9tKHNlZWQpOworICAgIGNvbnN0IGludCBtYXhpbXVtVmFsdWUgPSB0cmVlU2l6
ZTsKKyAgICAvLyBCdWlsZCB0aGUgdHJlZS4KKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVl
OworICAgIFZlY3RvcjxpbnQ+IHZhbHVlczsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRyZWVT
aXplOyBpKyspIHsKKyAgICAgICAgaW50IHZhbCA9IG5leHRSYW5kb20obWF4aW11bVZhbHVlKTsK
KyAgICAgICAgdHJlZS5hZGQodmFsKTsKKyAgICAgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0lu
dmFyaWFudHMoKSkgPDwgIlRlc3QgZmFpbGVkIGZvciBzZWVkICIgPDwgc2VlZDsKKyAgICAgICAg
dmFsdWVzLmFwcGVuZCh2YWwpOworICAgIH0KKyAgICAvLyBDaHVybiB0aGUgdHJlZSdzIGNvbnRl
bnRzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJlZVNpemU7IGkrKykgeworICAgICAgICAv
LyBQaWNrIGEgcmFuZG9tIHZhbHVlIHRvIHJlbW92ZS4KKyAgICAgICAgaW50IGlkeCA9IG5leHRS
YW5kb20odHJlZVNpemUpOworICAgICAgICBpbnQgdmFsID0gdmFsdWVzW2lkeF07CisgICAgICAg
IC8vIFJlbW92ZSB0aGlzIHZhbHVlLgorICAgICAgICB0cmVlLnJlbW92ZSh2YWwpOworICAgICAg
ICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKSA8PCAiVGVzdCBmYWlsZWQgZm9y
IHNlZWQgIiA8PCBzZWVkOworICAgICAgICAvLyBSZXBsYWNlIGl0IHdpdGggYSBuZXcgb25lLgor
ICAgICAgICB2YWwgPSBuZXh0UmFuZG9tKG1heGltdW1WYWx1ZSk7CisgICAgICAgIHZhbHVlc1tp
ZHhdID0gdmFsOworICAgICAgICB0cmVlLmFkZCh2YWwpOworICAgICAgICBBU1NFUlRfVFJVRSh0
cmVlLmNoZWNrSW52YXJpYW50cygpKSA8PCAiVGVzdCBmYWlsZWQgZm9yIHNlZWQgIiA8PCBzZWVk
OworICAgIH0KK30KK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitURVNUKFBPRFJlZEJsYWNr
VHJlZVRlc3QsIFJhbmRvbURlbGV0aW9uQW5kSW5zZXJ0aW9uUmVncmVzc2lvblRlc3QxKQorewor
ICAgIEluc2VydGlvbkFuZERlbGV0aW9uVGVzdCgxMjMxMSwgMTAwKTsKK30KKworVEVTVChQT0RS
ZWRCbGFja1RyZWVUZXN0LCBUZXN0UmFuZG9tRGVsZXRpb25BbmRJbnNlcnRpb24pCit7CisgICAg
SW5zZXJ0aW9uQW5kRGVsZXRpb25UZXN0KGdlbmVyYXRlU2VlZCgpLCAxMDApOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RI
ZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RI
ZWxwZXJzLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlVGVz
dEhlbHBlcnMuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IDIwMTAsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgIlRyZWVUZXN0SGVscGVycy5oIgorCisjaW5jbHVkZSA8Y3N0ZGxp
Yj4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
bmFtZXNwYWNlIFRyZWVUZXN0SGVscGVycyB7CisKK2ludDMyX3QgZ2VuZXJhdGVTZWVkKCkKK3sK
KyAgICAvLyBBIHNlZWQgb2YgMSBoYXMgdGhlIHNwZWNpYWwgYmVoYXZpb3Igb2YgcmVzZXR0aW5n
IHRoZSByYW5kb20KKyAgICAvLyBudW1iZXIgZ2VuZXJhdG9yLiBBc3N1bWUgdGhhdCBpZiB3ZSBj
YWxsIHRoaXMgcm91dGluZSB0aGF0IHdlCisgICAgLy8gZG9uJ3Qgd2FudCB0aGlzIGJlaGF2aW9y
LgorICAgIGludDMyX3Qgc2VlZDsKKyAgICBkbyB7CisgICAgICAgIHNlZWQgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihjdXJyZW50VGltZSgpKTsKKyAgICB9IHdoaWxlIChzZWVkIDw9IDEpOworICAg
IHJldHVybiBzZWVkOworfQorCit2b2lkIGluaXRSYW5kb20oY29uc3QgaW50MzJfdCBzZWVkKQor
eworICAgIHNyYW5kKHNlZWQpOworfQorCitpbnQzMl90IG5leHRSYW5kb20oY29uc3QgaW50MzJf
dCBtYXhpbXVtVmFsdWUpCit7CisgICAgLy8gcmFuZF9yIGlzIG5vdCBhdmFpbGFibGUgb24gV2lu
ZG93cworICAgIHJldHVybiByYW5kKCkgJSBtYXhpbXVtVmFsdWU7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFRyZWVUZXN0SGVscGVycworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9j
aHJvbWl1bS90ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9j
aHJvbWl1bS90ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisvLyBTaW1wbGUgcHNldWRvcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaGVscGVyIGZ1bmN0
aW9ucywgdXNlZCBieSB0aGUKKy8vIHJlZC1ibGFjayBhbmQgaW50ZXJ2YWwgdHJlZSB0ZXN0cy4K
Ky8vCisvLyBUaGVzZSBhcmUgKipub3QqKiB0aHJlYWQgc2FmZSEKKworI2lmbmRlZiBUcmVlVGVz
dEhlbHBlcnNfaAorI2RlZmluZSBUcmVlVGVzdEhlbHBlcnNfaAorCisjaW5jbHVkZSA8c3RkaW50
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBUcmVlVGVzdEhlbHBlcnMgewor
CisvLyBHZW5lcmF0ZXMgYSBzZWVkIHZhbHVlIHRvIGJlIHBhc3NlZCB0byBpbml0UmFuZG9tKCku
CitpbnQzMl90IGdlbmVyYXRlU2VlZCgpOworCisvLyBJbml0aWFsaXplcyB0aGUgcHNldWRvLXJh
bmRvbSBudW1iZXIgZ2VuZXJhdG9yIHdpdGggYSBzcGVjaWZpYyBzZWVkLgordm9pZCBpbml0UmFu
ZG9tKGNvbnN0IGludDMyX3Qgc2VlZCk7CisKKy8vIFByb2R1Y2VzIHRoZSBuZXh0IHBzZXVkby1y
YW5kb20gbnVtYmVyIGluIHRoZSBzZXF1ZW5jZSwgaW4gdGhlCisvLyByYW5nZSBmcm9tIFswLi5t
YXhpbXVtVmFsdWUpLiBOZWdhdGl2ZSBudW1iZXJzIGFyZSBub3QgYWxsb3dlZCBhbmQgd2lsbAor
Ly8gcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0cy4KK2ludDMyX3QgbmV4dFJhbmRvbShjb25zdCBp
bnQzMl90IG1heGltdW1WYWx1ZSk7CisKK30gLy8gbmFtZXNwYWNlIFRyZWVUZXN0SGVscGVycwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVHJlZVRlc3RIZWxwZXJzX2gK
</data>
<flag name="commit-queue"
          id="55489"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66464</attachid>
            <date>2010-09-02 19:58:13 -0700</date>
            <delta_ts>2010-09-03 16:49:55 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>red-black-tree-and-arena-tests.patch</filename>
            <type>text/plain</type>
            <size>18467</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjY3MDYpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDktMDIgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciByZWQtYmxhY2sgdHJlZSBh
bmQgKFBPRCkgYXJlbmEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ1MDYwCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL1BP
REFyZW5hVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVzdENsYXNzMTo6VGVz
dENsYXNzMjo6VGVzdENsYXNzMik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAg
ICAqIHRlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1RyZWVUZXN0SGVscGVycy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VHJlZVRlc3RIZWxwZXJzOjpnZW5lcmF0ZVNlZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVRlc3RIZWxwZXJzOjppbml0UmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVUZXN0SGVscGVyczo6bmV4dFJhbmRvbSk6CisgICAgICAgICogdGVzdHMvVHJlZVRl
c3RIZWxwZXJzLmg6IEFkZGVkLgorCiAyMDEwLTA5LTAyICBLZW50IFRhbXVyYSAgPHRrZW50QGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCkluZGV4
OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNjY3MDYpCisrKyBXZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDggKzczOCwxMiBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAn
dGVzdHMvS1VSTFRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9QT0RB
cmVuYVRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9QT0RSZWRCbGFj
a1RyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvUnVuQWxsVGVz
dHMuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5j
cHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAn
LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oJywKICAg
ICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBb
CiAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKSW5kZXg6IFdlYktpdC9j
aHJvbWl1bS90ZXN0cy9QT0RBcmVuYVRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS90ZXN0cy9QT0RBcmVuYVRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUxIEBA
CisvKgorICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
Ky8vIFRlc3RzIGZvciB0aGUgUE9EQXJlbmEuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlBPREFyZW5hLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Z3Rl
c3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworbmFtZXNwYWNlIHsKKworLy8gQW4gYWxsb2NhdG9yIGZvciB0aGUgUE9EQXJlbmEgd2hpY2gg
dHJhY2tzIHRoZSByZWdpb25zIHdoaWNoIGhhdmUKKy8vIGJlZW4gYWxsb2NhdGVkLgorY2xhc3Mg
VHJhY2tlZEFsbG9jYXRvciA6IHB1YmxpYyBQT0RBcmVuYTo6RmFzdE1hbGxvY0FsbG9jYXRvciB7
CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VHJhY2tlZEFsbG9jYXRvcj4gY3JlYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVHJhY2tlZEFsbG9jYXRvcik7
CisgICAgfQorCisgICAgdmlydHVhbCB2b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkKKyAgICB7
CisgICAgICAgIHZvaWQqIHJlc3VsdCA9IFBPREFyZW5hOjpGYXN0TWFsbG9jQWxsb2NhdG9yOjph
bGxvY2F0ZShzaXplKTsKKyAgICAgICAgbV9hbGxvY2F0ZWRSZWdpb25zLmFwcGVuZChyZXN1bHQp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmcmVl
KHZvaWQqIHB0cikKKyAgICB7CisgICAgICAgIHNpemVfdCBzbG90ID0gbV9hbGxvY2F0ZWRSZWdp
b25zLmZpbmQocHRyKTsKKyAgICAgICAgQVNTRVJUX0dFKHNsb3QsIDApOworICAgICAgICBtX2Fs
bG9jYXRlZFJlZ2lvbnMucmVtb3ZlKHNsb3QpOworICAgICAgICBQT0RBcmVuYTo6RmFzdE1hbGxv
Y0FsbG9jYXRvcjo6ZnJlZShwdHIpOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gIW51bVJlZ2lvbnMoKTsKKyAgICB9CisKKyAgICBpbnQg
bnVtUmVnaW9ucygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9hbGxvY2F0ZWRSZWdp
b25zLnNpemUoKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBUcmFja2VkQWxsb2NhdG9yKCkg
eyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHZvaWQqPiBtX2FsbG9jYXRlZFJlZ2lvbnM7Cit9
OworCisvLyBBIGNvdXBsZSBvZiBzaW1wbGUgc3RydWN0cyB0byBhbGxvY2F0ZS4KK3N0cnVjdCBU
ZXN0Q2xhc3MxIHsKKyAgICBUZXN0Q2xhc3MxKCkKKyAgICAgICAgOiB4KDApLCB5KDApLCB6KDAp
LCB3KDEpIHsgfQorCisgICAgZmxvYXQgeCwgeSwgeiwgdzsKK307CisKK3N0cnVjdCBUZXN0Q2xh
c3MyIHsKKyAgICBUZXN0Q2xhc3MyKCkKKyAgICAgICAgOiBhKDEpLCBiKDIpLCBjKDMpLCBkKDQp
IHsgfQorCisgICAgZmxvYXQgYSwgYiwgYywgZDsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCitjbGFzcyBQT0RBcmVuYVRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7Cit9Owor
CisvLyBNYWtlIHN1cmUgdGhlIGFyZW5hIGNhbiBzdWNjZXNzZnVsbHkgYWxsb2NhdGUgZnJvbSBt
b3JlIHRoYW4gb25lCisvLyByZWdpb24uCitURVNUX0YoUE9EQXJlbmFUZXN0LCBDYW5BbGxvY2F0
ZUZyb21Nb3JlVGhhbk9uZVJlZ2lvbikKK3sKKyAgICBSZWZQdHI8VHJhY2tlZEFsbG9jYXRvcj4g
YWxsb2NhdG9yID0gVHJhY2tlZEFsbG9jYXRvcjo6Y3JlYXRlKCk7CisgICAgUmVmUHRyPFBPREFy
ZW5hPiBhcmVuYSA9IFBPREFyZW5hOjpjcmVhdGUoYWxsb2NhdG9yKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAgIGFyZW5hLT5hbGxvY2F0ZU9iamVjdDxUZXN0
Q2xhc3MxPigpOworICAgIEVYUEVDVF9HVChhbGxvY2F0b3ItPm51bVJlZ2lvbnMoKSwgMSk7Cit9
CisKKy8vIE1ha2Ugc3VyZSB0aGUgYXJlbmEgZnJlZXMgYWxsIGFsbG9jYXRlZCByZWdpb25zIGR1
cmluZyBkZXN0cnVjdGlvbi4KK1RFU1RfRihQT0RBcmVuYVRlc3QsIEZyZWVzQWxsQWxsb2NhdGVk
UmVnaW9ucykKK3sKKyAgICBSZWZQdHI8VHJhY2tlZEFsbG9jYXRvcj4gYWxsb2NhdG9yID0gVHJh
Y2tlZEFsbG9jYXRvcjo6Y3JlYXRlKCk7CisgICAgeworICAgICAgICBSZWZQdHI8UE9EQXJlbmE+
IGFyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZShhbGxvY2F0b3IpOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDM7IGkrKykKKyAgICAgICAgICAgIGFyZW5hLT5hbGxvY2F0ZU9iamVjdDxUZXN0
Q2xhc3MxPigpOworICAgICAgICBFWFBFQ1RfR1QoYWxsb2NhdG9yLT5udW1SZWdpb25zKCksIDAp
OworICAgIH0KKyAgICBFWFBFQ1RfVFJVRShhbGxvY2F0b3ItPmlzRW1wdHkoKSk7Cit9CisKKy8v
IE1ha2Ugc3VyZSB0aGUgYXJlbmEgcnVucyBjb25zdHJ1Y3RvcnMgb2YgdGhlIG9iamVjdHMgYWxs
b2NhdGVkIHdpdGhpbi4KK1RFU1RfRihQT0RBcmVuYVRlc3QsIFJ1bnNDb25zdHJ1Y3RvcnMpCit7
CisgICAgUmVmUHRyPFBPREFyZW5hPiBhcmVuYSA9IFBPREFyZW5hOjpjcmVhdGUoKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKyAgICAgICAgVGVzdENsYXNzMSogdGMx
ID0gYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFRlc3RDbGFzczE+KCk7CisgICAgICAgIEVYUEVDVF9F
USgwLCB0YzEtPngpOworICAgICAgICBFWFBFQ1RfRVEoMCwgdGMxLT55KTsKKyAgICAgICAgRVhQ
RUNUX0VRKDAsIHRjMS0+eik7CisgICAgICAgIEVYUEVDVF9FUSgxLCB0YzEtPncpOworICAgICAg
ICBUZXN0Q2xhc3MyKiB0YzIgPSBhcmVuYS0+YWxsb2NhdGVPYmplY3Q8VGVzdENsYXNzMj4oKTsK
KyAgICAgICAgRVhQRUNUX0VRKDEsIHRjMi0+YSk7CisgICAgICAgIEVYUEVDVF9FUSgyLCB0YzIt
PmIpOworICAgICAgICBFWFBFQ1RfRVEoMywgdGMyLT5jKTsKKyAgICAgICAgRVhQRUNUX0VRKDQs
IHRjMi0+ZCk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vdGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLCBHb29nbGUg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvLyBUZXN0cyBmb3IgdGhlIHJlZC1ibGFjayB0cmVl
IGNsYXNzLgorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQT0RSZWRCbGFja1Ry
ZWUuaCIKKworI2luY2x1ZGUgIlRyZWVUZXN0SGVscGVycy5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0
ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBUcmVlVGVzdEhlbHBlcnM7CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVl
VGVzdCwgVGVzdFNpbmdsZUVsZW1lbnRJbnNlcnRpb24pCit7CisgICAgUE9EUmVkQmxhY2tUcmVl
PGludD4gdHJlZTsKKyAgICB0cmVlLmFkZCg1KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNr
SW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDUpKTsKK30KKwor
VEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0TXVsdGlwbGVFbGVtZW50SW5zZXJ0aW9uKQor
eworICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRyZWU7CisgICAgdHJlZS5hZGQoNCk7CisgICAg
QVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJl
ZS5jb250YWlucyg0KSk7CisgICAgdHJlZS5hZGQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5j
aGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7Cisg
ICAgdHJlZS5hZGQoNSk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7
CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucyg1KSk7CisgICAgRVhQRUNUX1RSVUUodHJl
ZS5jb250YWlucyg0KSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7Cit9CisK
K1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdER1cGxpY2F0ZUVsZW1lbnRJbnNlcnRpb24p
Cit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsKKyAgICB0cmVlLmFkZCgzKTsKKyAg
ICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICB0cmVlLmFkZCgzKTsK
KyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICB0cmVlLmFkZCgz
KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1Rf
RVEoMywgdHJlZS5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOwor
fQorCitURVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3RTaW5nbGVFbGVtZW50SW5zZXJ0aW9u
QW5kRGVsZXRpb24pCit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsKKyAgICB0cmVl
LmFkZCg1KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBF
WFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDUpKTsKKyAgICB0cmVlLnJlbW92ZSg1KTsKKyAgICBB
U1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJl
ZS5jb250YWlucyg1KSk7Cit9CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdE11bHRp
cGxlRWxlbWVudEluc2VydGlvbkFuZERlbGV0aW9uKQoreworICAgIFBPRFJlZEJsYWNrVHJlZTxp
bnQ+IHRyZWU7CisgICAgdHJlZS5hZGQoNCk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0lu
dmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucyg0KSk7CisgICAgdHJl
ZS5hZGQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAg
RVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7CisgICAgdHJlZS5hZGQoNSk7CisgICAgQVNT
RVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5j
b250YWlucyg1KSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucyg0KSk7CisgICAgRVhQ
RUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7CisgICAgdHJlZS5yZW1vdmUoNCk7CisgICAgQVNT
RVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5j
b250YWlucygzKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUuY29udGFpbnMoNCkpOworICAgIEVY
UEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNSkpOworICAgIHRyZWUucmVtb3ZlKDUpOworICAgIEFT
U0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUu
Y29udGFpbnMoMykpOworICAgIEVYUEVDVF9GQUxTRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAgICBF
WFBFQ1RfRkFMU0UodHJlZS5jb250YWlucyg1KSk7CisgICAgRVhQRUNUX0VRKDEsIHRyZWUuc2l6
ZSgpKTsKK30KKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0RHVwbGljYXRlRWxlbWVu
dEluc2VydGlvbkFuZERlbGV0aW9uKQoreworICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRyZWU7
CisgICAgdHJlZS5hZGQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMo
KSk7CisgICAgdHJlZS5hZGQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFu
dHMoKSk7CisgICAgdHJlZS5hZGQoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFy
aWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDMsIHRyZWUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfVFJV
RSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLnJlbW92ZSgzKTsKKyAgICBBU1NFUlRfVFJV
RSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICB0cmVlLnJlbW92ZSgzKTsKKyAgICBBU1NF
UlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfRVEoMSwgdHJlZS5z
aXplKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoMykpOworICAgIHRyZWUucmVt
b3ZlKDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVY
UEVDVF9FUSgwLCB0cmVlLnNpemUoKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUuY29udGFpbnMo
MykpOworfQorCitURVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIEZhaWxpbmdJbnNlcnRpb25SZWdy
ZXNzaW9uVGVzdDEpCit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsKKyAgICB0cmVl
LmFkZCg1MTEzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAg
ICB0cmVlLmFkZCg0NTE3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygp
KTsKKyAgICB0cmVlLmFkZCgzMzczKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJp
YW50cygpKTsKKyAgICB0cmVlLmFkZCg5MzA3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNr
SW52YXJpYW50cygpKTsKKyAgICB0cmVlLmFkZCg3MDc3KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVl
LmNoZWNrSW52YXJpYW50cygpKTsKK30KKworbmFtZXNwYWNlIHsKK3ZvaWQgSW5zZXJ0aW9uQW5k
RGVsZXRpb25UZXN0KGNvbnN0IGludDMyX3Qgc2VlZCwgY29uc3QgaW50IHRyZWVTaXplKQorewor
ICAgIGluaXRSYW5kb20oc2VlZCk7CisgICAgY29uc3QgaW50IG1heGltdW1WYWx1ZSA9IHRyZWVT
aXplOworICAgIC8vIEJ1aWxkIHRoZSB0cmVlLgorICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRy
ZWU7CisgICAgVmVjdG9yPGludD4gdmFsdWVzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJl
ZVNpemU7IGkrKykgeworICAgICAgICBpbnQgdmFsID0gbmV4dFJhbmRvbShtYXhpbXVtVmFsdWUp
OworICAgICAgICB0cmVlLmFkZCh2YWwpOworICAgICAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNr
SW52YXJpYW50cygpKSA8PCAiVGVzdCBmYWlsZWQgZm9yIHNlZWQgIiA8PCBzZWVkOworICAgICAg
ICB2YWx1ZXMuYXBwZW5kKHZhbCk7CisgICAgfQorICAgIC8vIENodXJuIHRoZSB0cmVlJ3MgY29u
dGVudHMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0cmVlU2l6ZTsgaSsrKSB7CisgICAgICAg
IC8vIFBpY2sgYSByYW5kb20gdmFsdWUgdG8gcmVtb3ZlLgorICAgICAgICBpbnQgaWR4ID0gbmV4
dFJhbmRvbSh0cmVlU2l6ZSk7CisgICAgICAgIGludCB2YWwgPSB2YWx1ZXNbaWR4XTsKKyAgICAg
ICAgLy8gUmVtb3ZlIHRoaXMgdmFsdWUuCisgICAgICAgIHRyZWUucmVtb3ZlKHZhbCk7CisgICAg
ICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxlZCBm
b3Igc2VlZCAiIDw8IHNlZWQ7CisgICAgICAgIC8vIFJlcGxhY2UgaXQgd2l0aCBhIG5ldyBvbmUu
CisgICAgICAgIHZhbCA9IG5leHRSYW5kb20obWF4aW11bVZhbHVlKTsKKyAgICAgICAgdmFsdWVz
W2lkeF0gPSB2YWw7CisgICAgICAgIHRyZWUuYWRkKHZhbCk7CisgICAgICAgIEFTU0VSVF9UUlVF
KHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxlZCBmb3Igc2VlZCAiIDw8IHNl
ZWQ7CisgICAgfQorfQorfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1QoUE9EUmVkQmxh
Y2tUcmVlVGVzdCwgUmFuZG9tRGVsZXRpb25BbmRJbnNlcnRpb25SZWdyZXNzaW9uVGVzdDEpCit7
CisgICAgSW5zZXJ0aW9uQW5kRGVsZXRpb25UZXN0KDEyMzExLCAxMDApOworfQorCitURVNUKFBP
RFJlZEJsYWNrVHJlZVRlc3QsIFRlc3RSYW5kb21EZWxldGlvbkFuZEluc2VydGlvbikKK3sKKyAg
ICBJbnNlcnRpb25BbmREZWxldGlvblRlc3QoZ2VuZXJhdGVTZWVkKCksIDEwMCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlVGVz
dEhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlVGVz
dEhlbHBlcnMuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVU
ZXN0SGVscGVycy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiVHJlZVRlc3RIZWxwZXJzLmgiCisKKyNpbmNsdWRlIDxjc3Rk
bGliPgorI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzIHsKKworaW50MzJfdCBnZW5lcmF0ZVNlZWQoKQor
eworICAgIC8vIEEgc2VlZCBvZiAxIGhhcyB0aGUgc3BlY2lhbCBiZWhhdmlvciBvZiByZXNldHRp
bmcgdGhlIHJhbmRvbQorICAgIC8vIG51bWJlciBnZW5lcmF0b3IuIEFzc3VtZSB0aGF0IGlmIHdl
IGNhbGwgdGhpcyByb3V0aW5lIHRoYXQgd2UKKyAgICAvLyBkb24ndCB3YW50IHRoaXMgYmVoYXZp
b3IuCisgICAgaW50MzJfdCBzZWVkOworICAgIGRvIHsKKyAgICAgICAgc2VlZCA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KGN1cnJlbnRUaW1lKCkpOworICAgIH0gd2hpbGUgKHNlZWQgPD0gMSk7Cisg
ICAgcmV0dXJuIHNlZWQ7Cit9CisKK3ZvaWQgaW5pdFJhbmRvbShjb25zdCBpbnQzMl90IHNlZWQp
Cit7CisgICAgc3JhbmQoc2VlZCk7Cit9CisKK2ludDMyX3QgbmV4dFJhbmRvbShjb25zdCBpbnQz
Ml90IG1heGltdW1WYWx1ZSkKK3sKKyAgICAvLyByYW5kX3IgaXMgbm90IGF2YWlsYWJsZSBvbiBX
aW5kb3dzCisgICAgcmV0dXJuIHJhbmQoKSAlIG1heGltdW1WYWx1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgVHJlZVRlc3RIZWxwZXJzCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RIZWxwZXJzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKy8vIFNpbXBsZSBwc2V1ZG9yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBoZWxwZXIgZnVu
Y3Rpb25zLCB1c2VkIGJ5IHRoZQorLy8gcmVkLWJsYWNrIGFuZCBpbnRlcnZhbCB0cmVlIHRlc3Rz
LgorLy8KKy8vIFRoZXNlIGFyZSAqKm5vdCoqIHRocmVhZCBzYWZlIQorCisjaWZuZGVmIFRyZWVU
ZXN0SGVscGVyc19oCisjZGVmaW5lIFRyZWVUZXN0SGVscGVyc19oCisKKyNpbmNsdWRlIDxzdGRp
bnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFRyZWVUZXN0SGVscGVycyB7
CisKKy8vIEdlbmVyYXRlcyBhIHNlZWQgdmFsdWUgdG8gYmUgcGFzc2VkIHRvIGluaXRSYW5kb20o
KS4KK2ludDMyX3QgZ2VuZXJhdGVTZWVkKCk7CisKKy8vIEluaXRpYWxpemVzIHRoZSBwc2V1ZG8t
cmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0aCBhIHNwZWNpZmljIHNlZWQuCit2b2lkIGluaXRS
YW5kb20oY29uc3QgaW50MzJfdCBzZWVkKTsKKworLy8gUHJvZHVjZXMgdGhlIG5leHQgcHNldWRv
LXJhbmRvbSBudW1iZXIgaW4gdGhlIHNlcXVlbmNlLCBpbiB0aGUKKy8vIHJhbmdlIGZyb20gWzAu
Lm1heGltdW1WYWx1ZSkuIE5lZ2F0aXZlIG51bWJlcnMgYXJlIG5vdCBhbGxvd2VkIGFuZCB3aWxs
CisvLyBwcm9kdWNlIHVuZGVmaW5lZCByZXN1bHRzLgoraW50MzJfdCBuZXh0UmFuZG9tKGNvbnN0
IGludDMyX3QgbWF4aW11bVZhbHVlKTsKKworfSAvLyBuYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJz
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUcmVlVGVzdEhlbHBlcnNfaAo=
</data>
<flag name="review"
          id="55494"
          type_id="1"
          status="-"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="55495"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66565</attachid>
            <date>2010-09-03 16:49:55 -0700</date>
            <delta_ts>2010-09-03 17:14:46 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>red-black-tree-and-arena-tests.patch</filename>
            <type>text/plain</type>
            <size>18724</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjY3NzgpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDktMDMgIEtlbm5l
dGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciByZWQtYmxhY2sgdHJlZSBh
bmQgKFBPRCkgYXJlbmEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ1MDYwCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHRlc3RzL1BP
REFyZW5hVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6VGVzdENsYXNzMTo6VGVz
dENsYXNzMjo6VGVzdENsYXNzMik6CisgICAgICAgIChXZWJDb3JlOjpURVNUX0YpOgorICAgICAg
ICAqIHRlc3RzL1BPRFJlZEJsYWNrVHJlZVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRFU1QpOgorICAgICAgICAqIHRlc3RzL1RyZWVUZXN0SGVscGVycy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6VHJlZVRlc3RIZWxwZXJzOjpnZW5lcmF0ZVNlZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6VHJlZVRlc3RIZWxwZXJzOjppbml0UmFuZG9tKToKKyAgICAgICAgKFdlYkNv
cmU6OlRyZWVUZXN0SGVscGVyczo6bmV4dFJhbmRvbSk6CisgICAgICAgICogdGVzdHMvVHJlZVRl
c3RIZWxwZXJzLmg6IEFkZGVkLgorCiAyMDEwLTA5LTAyICBWYW5nZWxpcyBLb2trZXZpcyAgPHZh
bmdlbGlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIu
CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAkocmV2aXNpb24gNjY3MDYpCisrKyBXZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtNzM4LDggKzczOCwxMiBAQAogICAgICAgICAg
ICAgICAgICAgICAgICAgJ3Rlc3RzL0lEQktleVBhdGhUZXN0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAndGVzdHMvS2V5Ym9hcmRUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvS1VSTFRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0
cy9QT0RBcmVuYVRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9QT0RS
ZWRCbGFja1RyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvUnVu
QWxsVGVzdHMuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRh
VGVzdC5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVy
cy5jcHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5o
JywKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgJ2NvbmRpdGlv
bnMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS90ZXN0cy9QT0RBcmVuYVRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS90ZXN0cy9QT0RBcmVuYVRlc3QuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1BPREFyZW5hVGVzdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBPREFyZW5hLmgiCisKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsKKworLy8gQW4g
YWxsb2NhdG9yIGZvciB0aGUgUE9EQXJlbmEgd2hpY2ggdHJhY2tzIHRoZSByZWdpb25zIHdoaWNo
IGhhdmUKKy8vIGJlZW4gYWxsb2NhdGVkLgorY2xhc3MgVHJhY2tlZEFsbG9jYXRvciA6IHB1Ymxp
YyBQT0RBcmVuYTo6RmFzdE1hbGxvY0FsbG9jYXRvciB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VHJhY2tlZEFsbG9jYXRvcj4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgVHJhY2tlZEFsbG9jYXRvcik7CisgICAgfQorCisgICAgdmlydHVhbCB2
b2lkKiBhbGxvY2F0ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIHZvaWQqIHJlc3VsdCA9
IFBPREFyZW5hOjpGYXN0TWFsbG9jQWxsb2NhdG9yOjphbGxvY2F0ZShzaXplKTsKKyAgICAgICAg
bV9hbGxvY2F0ZWRSZWdpb25zLmFwcGVuZChyZXN1bHQpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBmcmVlKHZvaWQqIHB0cikKKyAgICB7CisgICAg
ICAgIHNpemVfdCBzbG90ID0gbV9hbGxvY2F0ZWRSZWdpb25zLmZpbmQocHRyKTsKKyAgICAgICAg
QVNTRVJUX0dFKHNsb3QsIDApOworICAgICAgICBtX2FsbG9jYXRlZFJlZ2lvbnMucmVtb3ZlKHNs
b3QpOworICAgICAgICBQT0RBcmVuYTo6RmFzdE1hbGxvY0FsbG9jYXRvcjo6ZnJlZShwdHIpOwor
ICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
IW51bVJlZ2lvbnMoKTsKKyAgICB9CisKKyAgICBpbnQgbnVtUmVnaW9ucygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9hbGxvY2F0ZWRSZWdpb25zLnNpemUoKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgVHJhY2tlZEFsbG9jYXRvcigpIHsgfQorICAgIFZlY3Rvcjx2b2lkKj4gbV9h
bGxvY2F0ZWRSZWdpb25zOworfTsKKworLy8gQSBjb3VwbGUgb2Ygc2ltcGxlIHN0cnVjdHMgdG8g
YWxsb2NhdGUuCitzdHJ1Y3QgVGVzdENsYXNzMSB7CisgICAgVGVzdENsYXNzMSgpCisgICAgICAg
IDogeCgwKSwgeSgwKSwgeigwKSwgdygxKSB7IH0KKworICAgIGZsb2F0IHgsIHksIHosIHc7Cit9
OworCitzdHJ1Y3QgVGVzdENsYXNzMiB7CisgICAgVGVzdENsYXNzMigpCisgICAgICAgIDogYSgx
KSwgYigyKSwgYygzKSwgZCg0KSB7IH0KKworICAgIGZsb2F0IGEsIGIsIGMsIGQ7Cit9OworCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworY2xhc3MgUE9EQXJlbmFUZXN0IDogcHVibGljIHRl
c3Rpbmc6OlRlc3QgeworfTsKKworLy8gTWFrZSBzdXJlIHRoZSBhcmVuYSBjYW4gc3VjY2Vzc2Z1
bGx5IGFsbG9jYXRlIGZyb20gbW9yZSB0aGFuIG9uZQorLy8gcmVnaW9uLgorVEVTVF9GKFBPREFy
ZW5hVGVzdCwgQ2FuQWxsb2NhdGVGcm9tTW9yZVRoYW5PbmVSZWdpb24pCit7CisgICAgUmVmUHRy
PFRyYWNrZWRBbGxvY2F0b3I+IGFsbG9jYXRvciA9IFRyYWNrZWRBbGxvY2F0b3I6OmNyZWF0ZSgp
OworICAgIFJlZlB0cjxQT0RBcmVuYT4gYXJlbmEgPSBQT0RBcmVuYTo6Y3JlYXRlKGFsbG9jYXRv
cik7CisgICAgLy8gRklYTUU6IHRoaXMgdmFsdWUgZGVwZW5kcyBvbiBQT0RBcmVuYTo6RGVmYXVs
dENodW5rU2l6ZS4gRWl0aGVyCisgICAgLy8gbWFrZSB0aGlzIGNsYXNzIGEgZnJpZW5kICh1Z2x5
KSBvciBwcm92aWRlIGEgcHVibGljIHdheSB0bworICAgIC8vIGFjY2VzcyBpdC4KKyAgICBpbnQg
bnVtSXRlcmF0aW9ucyA9IDEwMDAwMDsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUl0ZXJh
dGlvbnM7ICsraSkKKyAgICAgICAgYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFRlc3RDbGFzczE+KCk7
CisgICAgRVhQRUNUX0dUKGFsbG9jYXRvci0+bnVtUmVnaW9ucygpLCAxKTsKK30KKworLy8gTWFr
ZSBzdXJlIHRoZSBhcmVuYSBmcmVlcyBhbGwgYWxsb2NhdGVkIHJlZ2lvbnMgZHVyaW5nIGRlc3Ry
dWN0aW9uLgorVEVTVF9GKFBPREFyZW5hVGVzdCwgRnJlZXNBbGxBbGxvY2F0ZWRSZWdpb25zKQor
eworICAgIFJlZlB0cjxUcmFja2VkQWxsb2NhdG9yPiBhbGxvY2F0b3IgPSBUcmFja2VkQWxsb2Nh
dG9yOjpjcmVhdGUoKTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxQT0RBcmVuYT4gYXJlbmEgPSBQ
T0RBcmVuYTo6Y3JlYXRlKGFsbG9jYXRvcik7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
MzsgaSsrKQorICAgICAgICAgICAgYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFRlc3RDbGFzczE+KCk7
CisgICAgICAgIEVYUEVDVF9HVChhbGxvY2F0b3ItPm51bVJlZ2lvbnMoKSwgMCk7CisgICAgfQor
ICAgIEVYUEVDVF9UUlVFKGFsbG9jYXRvci0+aXNFbXB0eSgpKTsKK30KKworLy8gTWFrZSBzdXJl
IHRoZSBhcmVuYSBydW5zIGNvbnN0cnVjdG9ycyBvZiB0aGUgb2JqZWN0cyBhbGxvY2F0ZWQgd2l0
aGluLgorVEVTVF9GKFBPREFyZW5hVGVzdCwgUnVuc0NvbnN0cnVjdG9ycykKK3sKKyAgICBSZWZQ
dHI8UE9EQXJlbmE+IGFyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZSgpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBUZXN0Q2xhc3MxKiB0YzEgPSBhcmVuYS0+
YWxsb2NhdGVPYmplY3Q8VGVzdENsYXNzMT4oKTsKKyAgICAgICAgRVhQRUNUX0VRKDAsIHRjMS0+
eCk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB0YzEtPnkpOworICAgICAgICBFWFBFQ1RfRVEoMCwg
dGMxLT56KTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIHRjMS0+dyk7CisgICAgICAgIFRlc3RDbGFz
czIqIHRjMiA9IGFyZW5hLT5hbGxvY2F0ZU9iamVjdDxUZXN0Q2xhc3MyPigpOworICAgICAgICBF
WFBFQ1RfRVEoMSwgdGMyLT5hKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIHRjMi0+Yik7CisgICAg
ICAgIEVYUEVDVF9FUSgzLCB0YzItPmMpOworICAgICAgICBFWFBFQ1RfRVEoNCwgdGMyLT5kKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1
bS90ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hy
b21pdW0vdGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJL
aXQvY2hyb21pdW0vdGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJbmMuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKy8vIFRlc3RzIGZvciB0aGUgcmVkLWJsYWNrIHRyZWUgY2xhc3MuCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBPRFJlZEJsYWNrVHJlZS5oIgorCisj
aW5jbHVkZSAiVHJlZVRlc3RIZWxwZXJzLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFt
ZXNwYWNlIFRyZWVUZXN0SGVscGVyczsKKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0
U2luZ2xlRWxlbWVudEluc2VydGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVl
OworICAgIHRyZWUuYWRkKDUpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRz
KCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNSkpOworfQorCitURVNUKFBPRFJl
ZEJsYWNrVHJlZVRlc3QsIFRlc3RNdWx0aXBsZUVsZW1lbnRJbnNlcnRpb24pCit7CisgICAgUE9E
UmVkQmxhY2tUcmVlPGludD4gdHJlZTsKKyAgICB0cmVlLmFkZCg0KTsKKyAgICBBU1NFUlRfVFJV
RSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5z
KDQpKTsKKyAgICB0cmVlLmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJp
YW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLmFk
ZCg1KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBF
Q1RfVFJVRSh0cmVlLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5z
KDQpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKK30KKworVEVTVChQT0RS
ZWRCbGFja1RyZWVUZXN0LCBUZXN0RHVwbGljYXRlRWxlbWVudEluc2VydGlvbikKK3sKKyAgICBQ
T0RSZWRCbGFja1RyZWU8aW50PiB0cmVlOworICAgIHRyZWUuYWRkKDMpOworICAgIEFTU0VSVF9U
UlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIHRyZWUuYWRkKDMpOworICAgIEFTU0VS
VF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIHRyZWUuYWRkKDMpOworICAgIEFT
U0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9FUSgzLCB0cmVl
LnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7Cit9CisKK1RFU1Qo
UE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdFNpbmdsZUVsZW1lbnRJbnNlcnRpb25BbmREZWxldGlv
bikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVlOworICAgIHRyZWUuYWRkKDUpOwor
ICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVF
KHRyZWUuY29udGFpbnMoNSkpOworICAgIHRyZWUucmVtb3ZlKDUpOworICAgIEFTU0VSVF9UUlVF
KHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9GQUxTRSh0cmVlLmNvbnRhaW5z
KDUpKTsKK30KKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0TXVsdGlwbGVFbGVtZW50
SW5zZXJ0aW9uQW5kRGVsZXRpb24pCit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsK
KyAgICB0cmVlLmFkZCg0KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygp
KTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAgICB0cmVlLmFkZCgzKTsK
KyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJV
RSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLmFkZCg1KTsKKyAgICBBU1NFUlRfVFJVRSh0
cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDUp
KTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAgICBFWFBFQ1RfVFJVRSh0
cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLnJlbW92ZSg0KTsKKyAgICBBU1NFUlRfVFJVRSh0
cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMp
KTsKKyAgICBFWFBFQ1RfRkFMU0UodHJlZS5jb250YWlucyg0KSk7CisgICAgRVhQRUNUX1RSVUUo
dHJlZS5jb250YWlucyg1KSk7CisgICAgdHJlZS5yZW1vdmUoNSk7CisgICAgQVNTRVJUX1RSVUUo
dHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygz
KSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUuY29udGFpbnMoNCkpOworICAgIEVYUEVDVF9GQUxT
RSh0cmVlLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfRVEoMSwgdHJlZS5zaXplKCkpOworfQor
CitURVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3REdXBsaWNhdGVFbGVtZW50SW5zZXJ0aW9u
QW5kRGVsZXRpb24pCit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsKKyAgICB0cmVl
LmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICB0
cmVlLmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAg
ICB0cmVlLmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsK
KyAgICBFWFBFQ1RfRVEoMywgdHJlZS5zaXplKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29u
dGFpbnMoMykpOworICAgIHRyZWUucmVtb3ZlKDMpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hl
Y2tJbnZhcmlhbnRzKCkpOworICAgIHRyZWUucmVtb3ZlKDMpOworICAgIEFTU0VSVF9UUlVFKHRy
ZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9FUSgxLCB0cmVlLnNpemUoKSk7Cisg
ICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7CisgICAgdHJlZS5yZW1vdmUoMyk7Cisg
ICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX0VRKDAs
IHRyZWUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJlZS5jb250YWlucygzKSk7Cit9CisK
K1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgRmFpbGluZ0luc2VydGlvblJlZ3Jlc3Npb25UZXN0
MSkKK3sKKyAgICAvLyBUaGVzZSBudW1iZXJzIGNhbWUgZnJvbSBhIHByZXZpb3VzbHktZmFpbGlu
ZyByYW5kb21pemVkIHRlc3QgcnVuLgorICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+IHRyZWU7Cisg
ICAgdHJlZS5hZGQoNTExMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMo
KSk7CisgICAgdHJlZS5hZGQoNDUxNyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFy
aWFudHMoKSk7CisgICAgdHJlZS5hZGQoMzM3Myk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVj
a0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoOTMwNyk7CisgICAgQVNTRVJUX1RSVUUodHJl
ZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoNzA3Nyk7CisgICAgQVNTRVJUX1RS
VUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7Cit9CisKK25hbWVzcGFjZSB7Cit2b2lkIEluc2Vy
dGlvbkFuZERlbGV0aW9uVGVzdChjb25zdCBpbnQzMl90IHNlZWQsIGNvbnN0IGludCB0cmVlU2l6
ZSkKK3sKKyAgICBpbml0UmFuZG9tKHNlZWQpOworICAgIGNvbnN0IGludCBtYXhpbXVtVmFsdWUg
PSB0cmVlU2l6ZTsKKyAgICAvLyBCdWlsZCB0aGUgdHJlZS4KKyAgICBQT0RSZWRCbGFja1RyZWU8
aW50PiB0cmVlOworICAgIFZlY3RvcjxpbnQ+IHZhbHVlczsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHRyZWVTaXplOyBpKyspIHsKKyAgICAgICAgaW50IHZhbHVlID0gbmV4dFJhbmRvbShtYXhp
bXVtVmFsdWUpOworICAgICAgICB0cmVlLmFkZCh2YWx1ZSk7CisgICAgICAgIEFTU0VSVF9UUlVF
KHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxlZCBmb3Igc2VlZCAiIDw8IHNl
ZWQ7CisgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOworICAgIH0KKyAgICAvLyBDaHVybiB0
aGUgdHJlZSdzIGNvbnRlbnRzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJlZVNpemU7IGkr
KykgeworICAgICAgICAvLyBQaWNrIGEgcmFuZG9tIHZhbHVlIHRvIHJlbW92ZS4KKyAgICAgICAg
aW50IGluZGV4ID0gbmV4dFJhbmRvbSh0cmVlU2l6ZSk7CisgICAgICAgIGludCB2YWx1ZSA9IHZh
bHVlc1tpbmRleF07CisgICAgICAgIC8vIFJlbW92ZSB0aGlzIHZhbHVlLgorICAgICAgICB0cmVl
LnJlbW92ZSh2YWx1ZSk7CisgICAgICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRz
KCkpIDw8ICJUZXN0IGZhaWxlZCBmb3Igc2VlZCAiIDw8IHNlZWQ7CisgICAgICAgIC8vIFJlcGxh
Y2UgaXQgd2l0aCBhIG5ldyBvbmUuCisgICAgICAgIHZhbHVlID0gbmV4dFJhbmRvbShtYXhpbXVt
VmFsdWUpOworICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7CisgICAgICAgIHRyZWUuYWRk
KHZhbHVlKTsKKyAgICAgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSkgPDwg
IlRlc3QgZmFpbGVkIGZvciBzZWVkICIgPDwgc2VlZDsKKyAgICB9Cit9Cit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBSYW5kb21EZWxldGlvbkFu
ZEluc2VydGlvblJlZ3Jlc3Npb25UZXN0MSkKK3sKKyAgICBJbnNlcnRpb25BbmREZWxldGlvblRl
c3QoMTIzMTEsIDEwMCk7Cit9CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdFJhbmRv
bURlbGV0aW9uQW5kSW5zZXJ0aW9uKQoreworICAgIEluc2VydGlvbkFuZERlbGV0aW9uVGVzdChn
ZW5lcmF0ZVNlZWQoKSwgMTAwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUcmVlVGVz
dEhlbHBlcnMuaCIKKworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8d3RmL0N1cnJlbnRU
aW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBUcmVlVGVzdEhlbHBlcnMg
eworCitpbnQzMl90IGdlbmVyYXRlU2VlZCgpCit7CisgICAgLy8gQSBzZWVkIG9mIDEgaGFzIHRo
ZSBzcGVjaWFsIGJlaGF2aW9yIG9mIHJlc2V0dGluZyB0aGUgcmFuZG9tCisgICAgLy8gbnVtYmVy
IGdlbmVyYXRvci4gQXNzdW1lIHRoYXQgaWYgd2UgY2FsbCB0aGlzIHJvdXRpbmUgdGhhdCB3ZQor
ICAgIC8vIGRvbid0IHdhbnQgdGhpcyBiZWhhdmlvci4KKyAgICBpbnQzMl90IHNlZWQ7CisgICAg
ZG8geworICAgICAgICBzZWVkID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY3VycmVudFRpbWUoKSk7
CisgICAgfSB3aGlsZSAoc2VlZCA8PSAxKTsKKyAgICByZXR1cm4gc2VlZDsKK30KKwordm9pZCBp
bml0UmFuZG9tKGNvbnN0IGludDMyX3Qgc2VlZCkKK3sKKyAgICBzcmFuZChzZWVkKTsKK30KKwor
aW50MzJfdCBuZXh0UmFuZG9tKGNvbnN0IGludDMyX3QgbWF4aW11bVZhbHVlKQoreworICAgIC8v
IHJhbmRfciBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKKyAgICByZXR1cm4gcmFuZCgpICUg
bWF4aW11bVZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBUcmVlVGVzdEhlbHBlcnMKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlVGVzdEhl
bHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RIZWxw
ZXJzLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RIZWxw
ZXJzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAx
MCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gU2ltcGxlIHBzZXVkb3JhbmRv
bSBudW1iZXIgZ2VuZXJhdG9yIGhlbHBlciBmdW5jdGlvbnMsIHVzZWQgYnkgdGhlCisvLyByZWQt
YmxhY2sgYW5kIGludGVydmFsIHRyZWUgdGVzdHMuCisvLworLy8gVGhlc2UgYXJlICoqbm90Kiog
dGhyZWFkIHNhZmUhCisKKyNpZm5kZWYgVHJlZVRlc3RIZWxwZXJzX2gKKyNkZWZpbmUgVHJlZVRl
c3RIZWxwZXJzX2gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CituYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzIHsKKworLy8gR2VuZXJhdGVzIGEgc2VlZCB2YWx1
ZSB0byBiZSBwYXNzZWQgdG8gaW5pdFJhbmRvbSgpLgoraW50MzJfdCBnZW5lcmF0ZVNlZWQoKTsK
KworLy8gSW5pdGlhbGl6ZXMgdGhlIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRo
IGEgc3BlY2lmaWMgc2VlZC4KK3ZvaWQgaW5pdFJhbmRvbShjb25zdCBpbnQzMl90IHNlZWQpOwor
CisvLyBQcm9kdWNlcyB0aGUgbmV4dCBwc2V1ZG8tcmFuZG9tIG51bWJlciBpbiB0aGUgc2VxdWVu
Y2UsIGluIHRoZQorLy8gcmFuZ2UgZnJvbSBbMC4ubWF4aW11bVZhbHVlKS4gTmVnYXRpdmUgbnVt
YmVycyBhcmUgbm90IGFsbG93ZWQgYW5kIHdpbGwKKy8vIHByb2R1Y2UgdW5kZWZpbmVkIHJlc3Vs
dHMuCitpbnQzMl90IG5leHRSYW5kb20oY29uc3QgaW50MzJfdCBtYXhpbXVtVmFsdWUpOworCit9
IC8vIG5hbWVzcGFjZSBUcmVlVGVzdEhlbHBlcnMKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFRyZWVUZXN0SGVscGVyc19oCg==
</data>
<flag name="commit-queue"
          id="55612"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66567</attachid>
            <date>2010-09-03 17:14:46 -0700</date>
            <delta_ts>2010-09-04 20:29:34 -0700</delta_ts>
            <desc>Revised patch</desc>
            <filename>red-black-tree-and-arena-tests.patch</filename>
            <type>text/plain</type>
            <size>20101</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2Njc3OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTIgQEAKKzIwMTAtMDktMDMgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFk
ZCB1bml0IHRlc3RzIGZvciByZWQtYmxhY2sgdHJlZSBhbmQgKFBPRCkgYXJlbmEKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MDYwCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9EQXJlbmEuaDogTWFkZSBEZWZhdWx0Q2h1bmtTaXpl
IHB1YmxpYyBzbyB1bml0IHRlc3RzIGNhbiBhY2Nlc3MgaXQuCisKIDIwMTAtMDktMDIgIFZhbmdl
bGlzIEtva2tldmlzICA8dmFuZ2VsaXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1BP
REFyZW5hLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9E
QXJlbmEuaAkocmV2aXNpb24gNjY3MDYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9QT0RBcmVuYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsNiArMTEzLDEyIEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPihwdHIpOwogICAgIH0KIAorICAgIC8vIFRo
ZSBpbml0aWFsIHNpemUgb2YgYWxsb2NhdGVkIGNodW5rczsgaW5jcmVhc2VzIGFzIG5lY2Vzc2Fy
eSB0bworICAgIC8vIHNhdGlzZnkgbGFyZ2UgYWxsb2NhdGlvbnMuIE1haW5seSBwdWJsaWMgZm9y
IHVuaXQgdGVzdHMuCisgICAgZW51bSB7CisgICAgICAgIERlZmF1bHRDaHVua1NpemUgPSAxNjM4
NAorICAgIH07CisKIHByb3RlY3RlZDoKICAgICB+UE9EQXJlbmEoKSB7IH0KICAgICBmcmllbmQg
Y2xhc3MgV1RGOjpSZWZDb3VudGVkPFBPREFyZW5hPjsKQEAgLTEyOCwxMCArMTM0LDYgQEAgcHJp
dmF0ZToKICAgICAgICAgLCBtX2N1cnJlbnQoMCkKICAgICAgICAgLCBtX2N1cnJlbnRDaHVua1Np
emUoRGVmYXVsdENodW5rU2l6ZSkgeyB9CiAKLSAgICBlbnVtIHsKLSAgICAgICAgRGVmYXVsdENo
dW5rU2l6ZSA9IDE2Mzg0Ci0gICAgfTsKLQogICAgIC8vIFJldHVybnMgdGhlIGFsaWdubWVudCBy
ZXF1aXJlbWVudCBmb3IgY2xhc3NlcyBhbmQgc3RydWN0cyBvbiB0aGUKICAgICAvLyBjdXJyZW50
IHBsYXRmb3JtLgogICAgIHRlbXBsYXRlIDxjbGFzcyBUPiBzdGF0aWMgc2l6ZV90IG1pbkFsaWdu
bWVudCgpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDY2Nzc4KQorKysgV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDEwLTA5LTAz
ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdW5pdCB0ZXN0cyBmb3IgcmVkLWJsYWNr
IHRyZWUgYW5kIChQT0QpIGFyZW5hCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NTA2MAorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiB0
ZXN0cy9QT0RBcmVuYVRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRlc3RDbGFz
czE6OlRlc3RDbGFzczI6OlRlc3RDbGFzczIpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVF9GKToK
KyAgICAgICAgKiB0ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpURVNUKToKKyAgICAgICAgKiB0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRyZWVUZXN0SGVscGVyczo6Z2VuZXJhdGVTZWVkKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyZWVUZXN0SGVscGVyczo6aW5pdFJhbmRvbSk6CisgICAgICAg
IChXZWJDb3JlOjpUcmVlVGVzdEhlbHBlcnM6Om5leHRSYW5kb20pOgorICAgICAgICAqIHRlc3Rz
L1RyZWVUZXN0SGVscGVycy5oOiBBZGRlZC4KKwogMjAxMC0wOS0wMiAgVmFuZ2VsaXMgS29ra2V2
aXMgIDx2YW5nZWxpc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4g
RmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDY2NzA2KQorKysgV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAJKHdvcmtpbmcgY29weSkKQEAgLTczOCw4ICs3MzgsMTIgQEAKICAg
ICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9JREJLZXlQYXRoVGVzdC5jcHAnLAogICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0tleWJvYXJkVGVzdC5jcHAnLAogICAgICAgICAgICAg
ICAgICAgICAgICAgJ3Rlc3RzL0tVUkxUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAndGVzdHMvUE9EQXJlbmFUZXN0LmNwcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAndGVz
dHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ3Rl
c3RzL1J1bkFsbFRlc3RzLmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvVGls
aW5nRGF0YVRlc3QuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVz
dEhlbHBlcnMuY3BwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhl
bHBlcnMuaCcsCiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICdj
b25kaXRpb25zJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgWydPUz09IndpbiInLCB7Cklu
ZGV4OiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvUE9EQXJlbmFUZXN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vdGVzdHMvUE9EQXJlbmFUZXN0LmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9QT0RBcmVuYVRlc3QuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLCBHb29nbGUgSW5jLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJQT0RBcmVuYS5o
IgorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7CisK
Ky8vIEFuIGFsbG9jYXRvciBmb3IgdGhlIFBPREFyZW5hIHdoaWNoIHRyYWNrcyB0aGUgcmVnaW9u
cyB3aGljaCBoYXZlCisvLyBiZWVuIGFsbG9jYXRlZC4KK2NsYXNzIFRyYWNrZWRBbGxvY2F0b3Ig
OiBwdWJsaWMgUE9EQXJlbmE6OkZhc3RNYWxsb2NBbGxvY2F0b3IgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFRyYWNrZWRBbGxvY2F0b3I+IGNyZWF0ZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRyYWNrZWRBbGxvY2F0b3IpOworICAgIH0KKworICAgIHZp
cnR1YWwgdm9pZCogYWxsb2NhdGUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICB2b2lkKiBy
ZXN1bHQgPSBQT0RBcmVuYTo6RmFzdE1hbGxvY0FsbG9jYXRvcjo6YWxsb2NhdGUoc2l6ZSk7Cisg
ICAgICAgIG1fYWxsb2NhdGVkUmVnaW9ucy5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZnJlZSh2b2lkKiBwdHIpCisgICAg
eworICAgICAgICBzaXplX3Qgc2xvdCA9IG1fYWxsb2NhdGVkUmVnaW9ucy5maW5kKHB0cik7Cisg
ICAgICAgIEFTU0VSVF9HRShzbG90LCAwKTsKKyAgICAgICAgbV9hbGxvY2F0ZWRSZWdpb25zLnJl
bW92ZShzbG90KTsKKyAgICAgICAgUE9EQXJlbmE6OkZhc3RNYWxsb2NBbGxvY2F0b3I6OmZyZWUo
cHRyKTsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICFudW1SZWdpb25zKCk7CisgICAgfQorCisgICAgaW50IG51bVJlZ2lvbnMoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYWxsb2NhdGVkUmVnaW9ucy5zaXplKCk7CisgICAg
fQorCitwcml2YXRlOgorICAgIFRyYWNrZWRBbGxvY2F0b3IoKSB7IH0KKyAgICBWZWN0b3I8dm9p
ZCo+IG1fYWxsb2NhdGVkUmVnaW9uczsKK307CisKKy8vIEEgY291cGxlIG9mIHNpbXBsZSBzdHJ1
Y3RzIHRvIGFsbG9jYXRlLgorc3RydWN0IFRlc3RDbGFzczEgeworICAgIFRlc3RDbGFzczEoKQor
ICAgICAgICA6IHgoMCksIHkoMCksIHooMCksIHcoMSkgeyB9CisKKyAgICBmbG9hdCB4LCB5LCB6
LCB3OworfTsKKworc3RydWN0IFRlc3RDbGFzczIgeworICAgIFRlc3RDbGFzczIoKQorICAgICAg
ICA6IGEoMSksIGIoMiksIGMoMyksIGQoNCkgeyB9CisKKyAgICBmbG9hdCBhLCBiLCBjLCBkOwor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2NsYXNzIFBPREFyZW5hVGVzdCA6IHB1
YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK307CisKKy8vIE1ha2Ugc3VyZSB0aGUgYXJlbmEgY2FuIHN1
Y2Nlc3NmdWxseSBhbGxvY2F0ZSBmcm9tIG1vcmUgdGhhbiBvbmUKKy8vIHJlZ2lvbi4KK1RFU1Rf
RihQT0RBcmVuYVRlc3QsIENhbkFsbG9jYXRlRnJvbU1vcmVUaGFuT25lUmVnaW9uKQoreworICAg
IFJlZlB0cjxUcmFja2VkQWxsb2NhdG9yPiBhbGxvY2F0b3IgPSBUcmFja2VkQWxsb2NhdG9yOjpj
cmVhdGUoKTsKKyAgICBSZWZQdHI8UE9EQXJlbmE+IGFyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZShh
bGxvY2F0b3IpOworICAgIGludCBudW1JdGVyYXRpb25zID0gMTAgKiBQT0RBcmVuYTo6RGVmYXVs
dENodW5rU2l6ZSAvIHNpemVvZihUZXN0Q2xhc3MxKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IG51bUl0ZXJhdGlvbnM7ICsraSkKKyAgICAgICAgYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFRlc3RD
bGFzczE+KCk7CisgICAgRVhQRUNUX0dUKGFsbG9jYXRvci0+bnVtUmVnaW9ucygpLCAxKTsKK30K
KworLy8gTWFrZSBzdXJlIHRoZSBhcmVuYSBmcmVlcyBhbGwgYWxsb2NhdGVkIHJlZ2lvbnMgZHVy
aW5nIGRlc3RydWN0aW9uLgorVEVTVF9GKFBPREFyZW5hVGVzdCwgRnJlZXNBbGxBbGxvY2F0ZWRS
ZWdpb25zKQoreworICAgIFJlZlB0cjxUcmFja2VkQWxsb2NhdG9yPiBhbGxvY2F0b3IgPSBUcmFj
a2VkQWxsb2NhdG9yOjpjcmVhdGUoKTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxQT0RBcmVuYT4g
YXJlbmEgPSBQT0RBcmVuYTo6Y3JlYXRlKGFsbG9jYXRvcik7CisgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMzsgaSsrKQorICAgICAgICAgICAgYXJlbmEtPmFsbG9jYXRlT2JqZWN0PFRlc3RD
bGFzczE+KCk7CisgICAgICAgIEVYUEVDVF9HVChhbGxvY2F0b3ItPm51bVJlZ2lvbnMoKSwgMCk7
CisgICAgfQorICAgIEVYUEVDVF9UUlVFKGFsbG9jYXRvci0+aXNFbXB0eSgpKTsKK30KKworLy8g
TWFrZSBzdXJlIHRoZSBhcmVuYSBydW5zIGNvbnN0cnVjdG9ycyBvZiB0aGUgb2JqZWN0cyBhbGxv
Y2F0ZWQgd2l0aGluLgorVEVTVF9GKFBPREFyZW5hVGVzdCwgUnVuc0NvbnN0cnVjdG9ycykKK3sK
KyAgICBSZWZQdHI8UE9EQXJlbmE+IGFyZW5hID0gUE9EQXJlbmE6OmNyZWF0ZSgpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgeworICAgICAgICBUZXN0Q2xhc3MxKiB0YzEg
PSBhcmVuYS0+YWxsb2NhdGVPYmplY3Q8VGVzdENsYXNzMT4oKTsKKyAgICAgICAgRVhQRUNUX0VR
KDAsIHRjMS0+eCk7CisgICAgICAgIEVYUEVDVF9FUSgwLCB0YzEtPnkpOworICAgICAgICBFWFBF
Q1RfRVEoMCwgdGMxLT56KTsKKyAgICAgICAgRVhQRUNUX0VRKDEsIHRjMS0+dyk7CisgICAgICAg
IFRlc3RDbGFzczIqIHRjMiA9IGFyZW5hLT5hbGxvY2F0ZU9iamVjdDxUZXN0Q2xhc3MyPigpOwor
ICAgICAgICBFWFBFQ1RfRVEoMSwgdGMyLT5hKTsKKyAgICAgICAgRVhQRUNUX0VRKDIsIHRjMi0+
Yik7CisgICAgICAgIEVYUEVDVF9FUSgzLCB0YzItPmMpOworICAgICAgICBFWFBFQ1RfRVEoNCwg
dGMyLT5kKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktp
dC9jaHJvbWl1bS90ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJLaXQvY2hyb21pdW0vdGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQvY2hyb21pdW0vdGVzdHMvUE9EUmVkQmxhY2tUcmVlVGVzdC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjAxIEBACisvKgorICogQ29weXJpZ2h0IDIwMTAsIEdvb2dsZSBJ
bmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIFRlc3RzIGZvciB0aGUgcmVkLWJsYWNrIHRyZWUg
Y2xhc3MuCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlBPRFJlZEJsYWNrVHJl
ZS5oIgorCisjaW5jbHVkZSAiVHJlZVRlc3RIZWxwZXJzLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rl
c3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dXNpbmcgbmFtZXNwYWNlIFRyZWVUZXN0SGVscGVyczsKKworVEVTVChQT0RSZWRCbGFja1RyZWVU
ZXN0LCBUZXN0U2luZ2xlRWxlbWVudEluc2VydGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8
aW50PiB0cmVlOworICAgIHRyZWUuYWRkKDUpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJ
bnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNSkpOworfQorCitU
RVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3RNdWx0aXBsZUVsZW1lbnRJbnNlcnRpb24pCit7
CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsKKyAgICB0cmVlLmFkZCg0KTsKKyAgICBB
U1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVl
LmNvbnRhaW5zKDQpKTsKKyAgICB0cmVlLmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNo
ZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAg
ICB0cmVlLmFkZCg1KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsK
KyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVl
LmNvbnRhaW5zKDQpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKK30KKwor
VEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0RHVwbGljYXRlRWxlbWVudEluc2VydGlvbikK
K3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVlOworICAgIHRyZWUuYWRkKDMpOworICAg
IEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIHRyZWUuYWRkKDMpOwor
ICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIHRyZWUuYWRkKDMp
OworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9F
USgzLCB0cmVlLnNpemUoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7Cit9
CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgVGVzdFNpbmdsZUVsZW1lbnRJbnNlcnRpb25B
bmREZWxldGlvbikKK3sKKyAgICBQT0RSZWRCbGFja1RyZWU8aW50PiB0cmVlOworICAgIHRyZWUu
YWRkKDUpOworICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVY
UEVDVF9UUlVFKHRyZWUuY29udGFpbnMoNSkpOworICAgIHRyZWUucmVtb3ZlKDUpOworICAgIEFT
U0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9GQUxTRSh0cmVl
LmNvbnRhaW5zKDUpKTsKK30KKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBUZXN0TXVsdGlw
bGVFbGVtZW50SW5zZXJ0aW9uQW5kRGVsZXRpb24pCit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGlu
dD4gdHJlZTsKKyAgICB0cmVlLmFkZCg0KTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52
YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAgICB0cmVl
LmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBF
WFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLmFkZCg1KTsKKyAgICBBU1NF
UlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNv
bnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNvbnRhaW5zKDQpKTsKKyAgICBFWFBF
Q1RfVFJVRSh0cmVlLmNvbnRhaW5zKDMpKTsKKyAgICB0cmVlLnJlbW92ZSg0KTsKKyAgICBBU1NF
UlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygpKTsKKyAgICBFWFBFQ1RfVFJVRSh0cmVlLmNv
bnRhaW5zKDMpKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJlZS5jb250YWlucyg0KSk7CisgICAgRVhQ
RUNUX1RSVUUodHJlZS5jb250YWlucyg1KSk7CisgICAgdHJlZS5yZW1vdmUoNSk7CisgICAgQVNT
RVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5j
b250YWlucygzKSk7CisgICAgRVhQRUNUX0ZBTFNFKHRyZWUuY29udGFpbnMoNCkpOworICAgIEVY
UEVDVF9GQUxTRSh0cmVlLmNvbnRhaW5zKDUpKTsKKyAgICBFWFBFQ1RfRVEoMSwgdHJlZS5zaXpl
KCkpOworfQorCitURVNUKFBPRFJlZEJsYWNrVHJlZVRlc3QsIFRlc3REdXBsaWNhdGVFbGVtZW50
SW5zZXJ0aW9uQW5kRGVsZXRpb24pCit7CisgICAgUE9EUmVkQmxhY2tUcmVlPGludD4gdHJlZTsK
KyAgICB0cmVlLmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50cygp
KTsKKyAgICB0cmVlLmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJpYW50
cygpKTsKKyAgICB0cmVlLmFkZCgzKTsKKyAgICBBU1NFUlRfVFJVRSh0cmVlLmNoZWNrSW52YXJp
YW50cygpKTsKKyAgICBFWFBFQ1RfRVEoMywgdHJlZS5zaXplKCkpOworICAgIEVYUEVDVF9UUlVF
KHRyZWUuY29udGFpbnMoMykpOworICAgIHRyZWUucmVtb3ZlKDMpOworICAgIEFTU0VSVF9UUlVF
KHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIHRyZWUucmVtb3ZlKDMpOworICAgIEFTU0VS
VF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpOworICAgIEVYUEVDVF9FUSgxLCB0cmVlLnNp
emUoKSk7CisgICAgRVhQRUNUX1RSVUUodHJlZS5jb250YWlucygzKSk7CisgICAgdHJlZS5yZW1v
dmUoMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgRVhQ
RUNUX0VRKDAsIHRyZWUuc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRkFMU0UodHJlZS5jb250YWlucygz
KSk7Cit9CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwgRmFpbGluZ0luc2VydGlvblJlZ3Jl
c3Npb25UZXN0MSkKK3sKKyAgICAvLyBUaGVzZSBudW1iZXJzIGNhbWUgZnJvbSBhIHByZXZpb3Vz
bHktZmFpbGluZyByYW5kb21pemVkIHRlc3QgcnVuLgorICAgIFBPRFJlZEJsYWNrVHJlZTxpbnQ+
IHRyZWU7CisgICAgdHJlZS5hZGQoNTExMyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0lu
dmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoNDUxNyk7CisgICAgQVNTRVJUX1RSVUUodHJlZS5j
aGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoMzM3Myk7CisgICAgQVNTRVJUX1RSVUUo
dHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoOTMwNyk7CisgICAgQVNTRVJU
X1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7CisgICAgdHJlZS5hZGQoNzA3Nyk7CisgICAg
QVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFudHMoKSk7Cit9CisKK25hbWVzcGFjZSB7Cit2
b2lkIEluc2VydGlvbkFuZERlbGV0aW9uVGVzdChjb25zdCBpbnQzMl90IHNlZWQsIGNvbnN0IGlu
dCB0cmVlU2l6ZSkKK3sKKyAgICBpbml0UmFuZG9tKHNlZWQpOworICAgIGNvbnN0IGludCBtYXhp
bXVtVmFsdWUgPSB0cmVlU2l6ZTsKKyAgICAvLyBCdWlsZCB0aGUgdHJlZS4KKyAgICBQT0RSZWRC
bGFja1RyZWU8aW50PiB0cmVlOworICAgIFZlY3RvcjxpbnQ+IHZhbHVlczsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHRyZWVTaXplOyBpKyspIHsKKyAgICAgICAgaW50IHZhbHVlID0gbmV4dFJh
bmRvbShtYXhpbXVtVmFsdWUpOworICAgICAgICB0cmVlLmFkZCh2YWx1ZSk7CisgICAgICAgIEFT
U0VSVF9UUlVFKHRyZWUuY2hlY2tJbnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxlZCBmb3Igc2Vl
ZCAiIDw8IHNlZWQ7CisgICAgICAgIHZhbHVlcy5hcHBlbmQodmFsdWUpOworICAgIH0KKyAgICAv
LyBDaHVybiB0aGUgdHJlZSdzIGNvbnRlbnRzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHJl
ZVNpemU7IGkrKykgeworICAgICAgICAvLyBQaWNrIGEgcmFuZG9tIHZhbHVlIHRvIHJlbW92ZS4K
KyAgICAgICAgaW50IGluZGV4ID0gbmV4dFJhbmRvbSh0cmVlU2l6ZSk7CisgICAgICAgIGludCB2
YWx1ZSA9IHZhbHVlc1tpbmRleF07CisgICAgICAgIC8vIFJlbW92ZSB0aGlzIHZhbHVlLgorICAg
ICAgICB0cmVlLnJlbW92ZSh2YWx1ZSk7CisgICAgICAgIEFTU0VSVF9UUlVFKHRyZWUuY2hlY2tJ
bnZhcmlhbnRzKCkpIDw8ICJUZXN0IGZhaWxlZCBmb3Igc2VlZCAiIDw8IHNlZWQ7CisgICAgICAg
IC8vIFJlcGxhY2UgaXQgd2l0aCBhIG5ldyBvbmUuCisgICAgICAgIHZhbHVlID0gbmV4dFJhbmRv
bShtYXhpbXVtVmFsdWUpOworICAgICAgICB2YWx1ZXNbaW5kZXhdID0gdmFsdWU7CisgICAgICAg
IHRyZWUuYWRkKHZhbHVlKTsKKyAgICAgICAgQVNTRVJUX1RSVUUodHJlZS5jaGVja0ludmFyaWFu
dHMoKSkgPDwgIlRlc3QgZmFpbGVkIGZvciBzZWVkICIgPDwgc2VlZDsKKyAgICB9Cit9Cit9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKKworVEVTVChQT0RSZWRCbGFja1RyZWVUZXN0LCBSYW5kb21E
ZWxldGlvbkFuZEluc2VydGlvblJlZ3Jlc3Npb25UZXN0MSkKK3sKKyAgICBJbnNlcnRpb25BbmRE
ZWxldGlvblRlc3QoMTIzMTEsIDEwMCk7Cit9CisKK1RFU1QoUE9EUmVkQmxhY2tUcmVlVGVzdCwg
VGVzdFJhbmRvbURlbGV0aW9uQW5kSW5zZXJ0aW9uKQoreworICAgIEluc2VydGlvbkFuZERlbGV0
aW9uVGVzdChnZW5lcmF0ZVNlZWQoKSwgMTAwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDEwLCBHb29nbGUg
SW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJUcmVlVGVzdEhlbHBlcnMuaCIKKworI2luY2x1ZGUgPGNzdGRsaWI+CisjaW5jbHVkZSA8d3Rm
L0N1cnJlbnRUaW1lLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBUcmVlVGVz
dEhlbHBlcnMgeworCitpbnQzMl90IGdlbmVyYXRlU2VlZCgpCit7CisgICAgLy8gQSBzZWVkIG9m
IDEgaGFzIHRoZSBzcGVjaWFsIGJlaGF2aW9yIG9mIHJlc2V0dGluZyB0aGUgcmFuZG9tCisgICAg
Ly8gbnVtYmVyIGdlbmVyYXRvci4gQXNzdW1lIHRoYXQgaWYgd2UgY2FsbCB0aGlzIHJvdXRpbmUg
dGhhdCB3ZQorICAgIC8vIGRvbid0IHdhbnQgdGhpcyBiZWhhdmlvci4KKyAgICBpbnQzMl90IHNl
ZWQ7CisgICAgZG8geworICAgICAgICBzZWVkID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oY3VycmVu
dFRpbWUoKSk7CisgICAgfSB3aGlsZSAoc2VlZCA8PSAxKTsKKyAgICByZXR1cm4gc2VlZDsKK30K
Kwordm9pZCBpbml0UmFuZG9tKGNvbnN0IGludDMyX3Qgc2VlZCkKK3sKKyAgICBzcmFuZChzZWVk
KTsKK30KKworaW50MzJfdCBuZXh0UmFuZG9tKGNvbnN0IGludDMyX3QgbWF4aW11bVZhbHVlKQor
eworICAgIC8vIHJhbmRfciBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKKyAgICByZXR1cm4g
cmFuZCgpICUgbWF4aW11bVZhbHVlOworfQorCit9IC8vIG5hbWVzcGFjZSBUcmVlVGVzdEhlbHBl
cnMKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS90ZXN0cy9U
cmVlVGVzdEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJl
ZVRlc3RIZWxwZXJzLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJl
ZVRlc3RIZWxwZXJzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgMjAxMCwgR29vZ2xlIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8gU2ltcGxlIHBz
ZXVkb3JhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGhlbHBlciBmdW5jdGlvbnMsIHVzZWQgYnkgdGhl
CisvLyByZWQtYmxhY2sgYW5kIGludGVydmFsIHRyZWUgdGVzdHMuCisvLworLy8gVGhlc2UgYXJl
ICoqbm90KiogdGhyZWFkIHNhZmUhCisKKyNpZm5kZWYgVHJlZVRlc3RIZWxwZXJzX2gKKyNkZWZp
bmUgVHJlZVRlc3RIZWxwZXJzX2gKKworI2luY2x1ZGUgPHN0ZGludC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CituYW1lc3BhY2UgVHJlZVRlc3RIZWxwZXJzIHsKKworLy8gR2VuZXJhdGVzIGEg
c2VlZCB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gaW5pdFJhbmRvbSgpLgoraW50MzJfdCBnZW5lcmF0
ZVNlZWQoKTsKKworLy8gSW5pdGlhbGl6ZXMgdGhlIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVy
YXRvciB3aXRoIGEgc3BlY2lmaWMgc2VlZC4KK3ZvaWQgaW5pdFJhbmRvbShjb25zdCBpbnQzMl90
IHNlZWQpOworCisvLyBQcm9kdWNlcyB0aGUgbmV4dCBwc2V1ZG8tcmFuZG9tIG51bWJlciBpbiB0
aGUgc2VxdWVuY2UsIGluIHRoZQorLy8gcmFuZ2UgZnJvbSBbMC4ubWF4aW11bVZhbHVlKS4gTmVn
YXRpdmUgbnVtYmVycyBhcmUgbm90IGFsbG93ZWQgYW5kIHdpbGwKKy8vIHByb2R1Y2UgdW5kZWZp
bmVkIHJlc3VsdHMuCitpbnQzMl90IG5leHRSYW5kb20oY29uc3QgaW50MzJfdCBtYXhpbXVtVmFs
dWUpOworCit9IC8vIG5hbWVzcGFjZSBUcmVlVGVzdEhlbHBlcnMKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFRyZWVUZXN0SGVscGVyc19oCg==
</data>
<flag name="review"
          id="55614"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="55615"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>