<?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>36251</bug_id>
          
          <creation_ts>2010-03-17 16:30:36 -0700</creation_ts>
          <short_desc>Turn on AUTO_VACUUM for all HTML5 DBs</short_desc>
          <delta_ts>2010-04-27 18:24:51 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dumitru Daniliuc">dumi</reporter>
          <assigned_to name="Dumitru Daniliuc">dumi</assigned_to>
          <cc>abarth</cc>
    
    <cc>beidson</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>levin</cc>
    
    <cc>michaeln</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yuzo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>201031</commentid>
    <comment_count>0</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-17 16:30:36 -0700</bug_when>
    <thetext>It looks like having AUTO_VACUUM on for all databases is the best vacuuming solution we have right now. We should turn AUTO_VACUUM on whenever we open a database.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201036</commentid>
    <comment_count>1</comment_count>
      <attachid>50971</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-17 16:41:16 -0700</bug_when>
    <thetext>Created attachment 50971
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201037</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-17 16:46:25 -0700</bug_when>
    <thetext>Attachment 50971 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/sql/SQLiteDatabase.cpp:376:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Total errors found: 1 in 3 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>201050</commentid>
    <comment_count>3</comment_count>
      <attachid>50974</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-17 17:01:50 -0700</bug_when>
    <thetext>Created attachment 50974
patch

Same patch, fixed indentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201066</commentid>
    <comment_count>4</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-03-17 17:20:31 -0700</bug_when>
    <thetext>AUTO_VACUUM = FULL results in freelist pages being moved to the end of the database file and the database file being truncated after every transaction commits.  This increases the amount of I/O for each transaction, in some cases by a significant amount.  We’ve found that in various places on Mac OS X this results in an unacceptable performance hit when mutating the database, and have moved from using AUTO_VACUUM = FULL to AUTO_VACUUM = INCREMENTAL and incremental vacuums scheduled based on the number of pages in SQLite’s free list.  Is there some reason that an approach similar to this would not be suitable for HTML 5 database storage, or that the “FULL” setting is preferable to this approach?

Running a VACUUM command when opening a database will also result in a substantial amount of I/O, and may take some time to complete.  Is it ok to have the the database thread tied up for that entire time?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201069</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-03-17 17:35:24 -0700</bug_when>
    <thetext>I also noticed that this bug is specifically about HTML 5 databases.  SQLiteDatabase is used for things other than the various HTML 5 database APIs.  It’s also used for the icon database, application cache, and other areas.  It seems wrong to me that a change in our policy for handling of HTML 5 databases would impact the manner in which these other features use SQLite.  Some of those features also open their databases on the main thread (ick, not good!), which makes the idea of performing the very expensive VACUUM operation during open a much more serious concern than if it were limited to situations in which databases were always opened in background threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201070</commentid>
    <comment_count>6</comment_count>
      <attachid>50974</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-03-17 17:35:51 -0700</bug_when>
    <thetext>Comment on attachment 50974
patch

Marking as r- for the reasons mentioned in my latest comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201105</commentid>
    <comment_count>7</comment_count>
      <attachid>50988</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-17 18:25:28 -0700</bug_when>
    <thetext>Created attachment 50988
patch

Changed the patch to turn on AUTO_VACUUM only for HTML5 DBs.

According to sqlite engineers, the overhead of AUTO_VACUUM = FULL should be unnoticeable. Do you have a benchmark or a usage pattern that makes this overhead significant on Mac OS X? I&apos;ll try to run some tests with AUTO_VACUUM = FULL and AUTO_VACUUM = NONE and see what numbers I get. If we have to, we could set AUTO_VACUUM = INCREMENTAL and call PRAGMA incremental_vacuum when freelist_count &gt; N, but I&apos;d rather have sqlite take care of everything for us, if possible.

As far as the VACUUM call goes, I don&apos;t think it&apos;s a problem. According to Richard Hipp, when sqlite opens a database, it sets the AUTO_VACUUM flag to whatever value it had when the DB was last updated. So for new databases, this VACUUM call is pretty much a no-op. And for existing databases, we will run VACUUM at most once per database, to &quot;convert&quot; it from AUTO_VACUUM = NONE to AUTO_VACUUM = FULL. Taking into account that the default quota limit in Safari and Chromium is set to 5MB right now, I don&apos;t expect any user to have databases bigger than a few MB at this time. Running VACUUM on such a database will take a couple of seconds, which I think is an acceptable one-time performance hit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201107</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-17 18:28:15 -0700</bug_when>
    <thetext>Attachment 50988 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/ChangeLog:12:  Line contains tab character.  [whitespace/tab] [5]
WebCore/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 4 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>201135</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2010-03-17 19:24:48 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=50988) [details]
&gt; patch
&gt; 
&gt; Changed the patch to turn on AUTO_VACUUM only for HTML5 DBs.
&gt; 
&gt; According to sqlite engineers, the overhead of AUTO_VACUUM = FULL should be
&gt; unnoticeable. Do you have a benchmark or a usage pattern that makes this
&gt; overhead significant on Mac OS X?

I can’t share any data from specific uses of SQLite, but I just tried a simple experiment on WebKit’s icon database.  I set up copies of it with AUTO_VACUUM set to OFF, FULL and INCREMENTAL.  I then ran simple queries that deleted a percentage of rows from the database.  The performance between OFF and INCREMENTAL was effectively identical.  FULL is slower by between 7 and 30% depending on the average size of the rows that are being deleted. This is an admittedly contrived case.  I didn’t bother to test inserting new rows, but based on the described behavior of AUTO_VACUUM the only case it should affect is data being removed.

&gt; As far as the VACUUM call goes, I don&apos;t think it&apos;s a problem. According to
&gt; Richard Hipp, when sqlite opens a database, it sets the AUTO_VACUUM flag to
&gt; whatever value it had when the DB was last updated. So for new databases, this
&gt; VACUUM call is pretty much a no-op. And for existing databases, we will run
&gt; VACUUM at most once per database, to &quot;convert&quot; it from AUTO_VACUUM = NONE to
&gt; AUTO_VACUUM = FULL. Taking into account that the default quota limit in Safari
&gt; and Chromium is set to 5MB right now, I don&apos;t expect any user to have databases
&gt; bigger than a few MB at this time. Running VACUUM on such a database will take
&gt; a couple of seconds, which I think is an acceptable one-time performance hit.

The first-time conversion hit is the case that I was concerned about.  If this is restricted to HTML 5 Databases and we’re certain that they are only ever opened on background threads then I agree that the work VACUUM does is probably acceptable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202169</commentid>
    <comment_count>10</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-19 21:17:11 -0700</bug_when>
    <thetext>I ran the following simple test:

CREATE TABLE Test (Data Text);
insertString = random string of length 1024
updateString = random string of length 1024
for (i = 0; i &lt; 100; i++) {
  insert insertString i times in the Test table;
  update all insertStrings to updateStrings;
  delete all updateStrings; // this empties the database
}

and measured the total time for all insert transactions, all update transactions and all delete transactions. I ran this test as an HTML5 DB test on Safari/win and Chromium/win, and as a standalone test (using direct calls to sqlite functions) on Linux (the loop ran 500 times instead of 100). Here are the approximate results I got (total_insert_time/total_update_time/total_delete_time, in milliseconds):

Safari, AUTO_VACUUM = NONE: 6900/5600/2300
Safari, AUTO_VACUUM = FULL: 4200/5200/14000
Chromium, AUTO_VACUUM = NONE: 4000/3900/4400
Chromium, AUTO_VACUUM = FULL: 2500/3600/6200
Linux test, AUTO_VACUUM = NONE: 18000/21000/6000
Linux test, AUTO_VACUUM = FULL: 12000/14000/12000

I didn&apos;t have a Mac machine handy to run this test on, but if you&apos;re expecting to see different numbers, I&apos;m sure I can find one.

Looking at these numbers, it seems to me that having AUTO_VACUUM = FULL will add a significant overhead to DELETE operations. However, the inserts (and even updates, to a lesser degree) that follow after a DELETE will be significantly faster. I&apos;m not sure why this is so: at the end of each loop iteration the database is empty, so you&apos;d think that inserting a bunch of data should be fast in both cases. However, these numbers seem to suggest that creating new pages is faster than reusing the existing empty ones.

Now it seems to me that a typical web app will SELECT things from the database most of the time, will INSERT/UPDATE data sometimes, and will DELETE data rarely. Based on this assumption and the numbers I got, I believe we should set AUTO_VACUUM to FULL. That will make sure that our database files are always as small as possible, and, on average, I think we should break even performance-wise.

Mark, what&apos;s your opinion on this? I know the test I ran is not perfect: if you want me to run a different test, let me know and I&apos;ll run it on all 3 platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204911</commentid>
    <comment_count>11</comment_count>
      <attachid>51805</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-26 19:02:10 -0700</bug_when>
    <thetext>Created attachment 51805
patch

Mark, I think this patch is ready for review.

Changes in the latest patch:
1. Fix SQLiteStatement::prepare() to work correctly with sqlite libraries &lt; 3.6.16.
2. Turn on AUTO_VACUUM = 2 for all HTML5 databases.
3. When opening a database, if AUTO_VACUUM != 2, set it to 2 and VACUUM that database. This is a one-time performance hit per database, which should be acceptable.
4. Check the number of free pages at the end of every transaction and force a vacuum only if at least 10% of all pages are free. According to the number posted in my previous comments, calling PRAGMA incremental_vacuum could take a non-negligible amount of time; however, the next few operations on that database should be significantly faster too. In the long run, I believe the overhead of vacuuming the database when needed should be negligible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205641</commentid>
    <comment_count>12</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2010-03-29 13:32:40 -0700</bug_when>
    <thetext>166 int64_t SQLiteDatabase::totalSize()
167 {
168     MutexLocker locker(m_authorizerLock);
169     enableAuthorizer(false);
170     SQLiteStatement statement(*this, &quot;PRAGMA page_count&quot;);
171     int64_t size = statement.getColumnInt64(0) * pageSize();
172 
173     enableAuthorizer(true);
174     return size;
175 }

The pageSize() method also locks m_autorizerLock. Are webcore Mutex&apos;s recursive? It looks like the windows impl may be (by virtue of CRITCIAL_SECTION), but I don&apos;t see the pthread mutex type being set to RECURSIVE anywhere for the pthread impl.

419     switch (autoVacuumMode) {
 420     case 2: // AUTO_VACUUM is set to INCREMENTAL, no need to do anything
 421         return true;
 422     case 1: // AUTO_VACUUM is set to FULL, change it to INCREMENTAL
 423         return executeCommand(&quot;PRAGMA auto_vacuum = 2&quot;);
 424     case 0: // AUTO_VACUUM is set to NONE, set it to INCREMENTAL
 425     default: // AUTO_VACUUM is set to some unknown value, set it to INCREMENTAL
 426         if (!executeCommand(&quot;PRAGMA auto_vacuum = 2&quot;))
 427             return false;
 428         runVacuumCommand();
 429         error = lastError();
 430         return ((error == SQLITE_OK) || (error = SQLITE_BUSY));
 431     }

Some constant definitions for these integer values would be nice and alleviate the need for the comment on each line. Something along the lines of what was done for setSynchronous could work.

    // The SQLite SYNCHRONOUS pragma can be either FULL, NORMAL, or OFF
    // FULL - Any writing calls to the DB block until the data is actually on the disk surface
    // NORMAL - SQLite pauses at some critical moments when writing, but much less than FULL
    // OFF - Calls return immediately after the data has been passed to disk
    enum SynchronousPragma { SyncOff = 0, SyncNormal = 1, SyncFull = 2 };
    void setSynchronous(SynchronousPragma);

 404 bool SQLiteDatabase::turnOnIncrementalAutoVacuum()

Feels awkward to have this method return true in cases where it didn&apos;t set the pragma. Similar pragma setting methods (setSynchronous(), setFullsync(), setMaximumSize()) don&apos;t return a success or error value at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>205764</commentid>
    <comment_count>13</comment_count>
      <attachid>51987</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-03-29 17:36:35 -0700</bug_when>
    <thetext>Created attachment 51987
patch

Addressed Michael&apos;s comments.

I refactored a few SQLiteStatement methods to make sure we don&apos;t try to recursively lock on m_authorizerLock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>210210</commentid>
    <comment_count>14</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-08 08:25:15 -0700</bug_when>
    <thetext>This seems reasonable. I am ready to r+ unless there are any objections from Mark.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212569</commentid>
    <comment_count>15</comment_count>
      <attachid>51987</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-14 14:20:53 -0700</bug_when>
    <thetext>Comment on attachment 51987
patch

ok.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217340</commentid>
    <comment_count>16</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-26 15:59:04 -0700</bug_when>
    <thetext>Landed as r58270.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217363</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-26 16:55:21 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/58270 might have broken SnowLeopard Intel Release (Tests)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>217439</commentid>
    <comment_count>18</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2010-04-26 19:13:15 -0700</bug_when>
    <thetext>Committed r58277: &lt;http://trac.webkit.org/changeset/58277&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218080</commentid>
    <comment_count>19</comment_count>
      <attachid>54482</attachid>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-27 17:29:46 -0700</bug_when>
    <thetext>Created attachment 54482
patch

r58270 + r58274. Chromium&apos;s side fix was landed, so it should be safe to re-land these patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218090</commentid>
    <comment_count>20</comment_count>
      <attachid>54482</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-04-27 17:42:47 -0700</bug_when>
    <thetext>Comment on attachment 54482
patch

This is basically the same patch that dglazkov gave an r+ to, but relanding after a fix to the chromium test_shell was done, so I&apos;m basically re-adding dglazkov&apos;s r+.



&gt; Index: WebCore/storage/SQLTransaction.cpp
&gt; ===================================================================
&gt; --- WebCore/storage/SQLTransaction.cpp	(revision 58335)
&gt; +++ WebCore/storage/SQLTransaction.cpp	(working copy)
&gt; @@ -466,6 +466,9 @@ void SQLTransaction::postflightAndCommit
&gt;          return;
&gt;      }
&gt;  
&gt; +    // The commit was successful, vacuum the database if needed

Consider: The commit was successful, so vacuum the database if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218099</commentid>
    <comment_count>21</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-27 17:53:41 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; Consider: The commit was successful, so vacuum the database if needed.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>218121</commentid>
    <comment_count>22</comment_count>
    <who name="Dumitru Daniliuc">dumi</who>
    <bug_when>2010-04-27 18:24:51 -0700</bug_when>
    <thetext>Re-landed as r58366.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50971</attachid>
            <date>2010-03-17 16:41:16 -0700</date>
            <delta_ts>2010-03-17 17:01:50 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2423</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMtMTcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUdXJuIG9uIEFVVE9fVkFDVVVNIGZvciBhbGwgZGF0YWJhc2VzCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MjUxCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnR1cm5BdXRv
VmFjdXVtT24pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorCiAy
MDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDU2MTI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5IEBAIGJv
b2wgU1FMaXRlRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiAKICAgICBpZiAoIVNRTGl0ZVN0
YXRlbWVudCgqdGhpcywgIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyIpLmV4ZWN1dGVDb21t
YW5kKCkpCiAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBzZXQg
dGVtcF9zdG9yZSB0byBtZW1vcnkiKTsKIAorICAgIGlmICghdHVybkF1dG9WYWN1dW1PbigpKQor
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCB0dXJuIEFVVE9fVkFDVVVNIG9uLiIpOworCiAg
ICAgcmV0dXJuIGlzT3BlbigpOwogfQogCkBAIC0zNjYsNCArMzY5LDIxIEBAIGJvb2wgU1FMaXRl
RGF0YWJhc2U6OmlzQXV0b0NvbW1pdE9uKCkgY28KICAgICByZXR1cm4gc3FsaXRlM19nZXRfYXV0
b2NvbW1pdChtX2RiKTsKIH0KIAorYm9vbCBTUUxpdGVEYXRhYmFzZTo6dHVybkF1dG9WYWN1dW1P
bigpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBhdXRv
X3ZhY3V1bSIpOworICAgIHN3aXRjaCAoc3RhdGVtZW50LmdldENvbHVtbkludCgwKSkgeworICAg
ICAgICBjYXNlIDE6IC8vIEFVVE9fVkFDVVVNIGlzIHNldCB0byBGVUxMLCBubyBuZWVkIHRvIGRv
IGFueXRoaW5nCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSAyOiAvLyBB
VVRPX1ZBQ1VVTSBpcyBzZXQgdG8gSU5DUkVNRU5UQUwsIGNoYW5nZSBpdCB0byBGVUxMCisgICAg
ICAgICAgICByZXR1cm4gZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBhdXRvX3ZhY3V1bSA9IDEiKTsK
KyAgICAgICAgY2FzZSAwOiAvLyBBVVRPX1ZBQ1VVTSBpcyBzZXQgdG8gTk9ORSwgc2V0IGl0IHRv
IEZVTEwKKyAgICAgICAgZGVmYXVsdDogLy8gQVVUT19WQUNVVU0gaXMgc2V0IHRvIHNvbWUgdW5r
bm93biB2YWx1ZSwgc2V0IGl0IHRvIEZVTEwKKyAgICAgICAgICAgIGlmICghZXhlY3V0ZUNvbW1h
bmQoIlBSQUdNQSBhdXRvX3ZhY3V1bSA9IDEiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBydW5WYWN1dW1Db21tYW5kKCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAkocmV2aXNpb24gNTYxMjkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1
LDggQEAgcHJpdmF0ZToKICAgICAKICAgICBpbnQgcGFnZVNpemUoKTsKICAgICAKKyAgICBib29s
IHR1cm5BdXRvVmFjdXVtT24oKTsKKwogICAgIHNxbGl0ZTMqIG1fZGI7CiAgICAgaW50IG1fbGFz
dEVycm9yOwogICAgIGludCBtX3BhZ2VTaXplOwo=
</data>
<flag name="commit-queue"
          id="34158"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50974</attachid>
            <date>2010-03-17 17:01:50 -0700</date>
            <delta_ts>2010-03-17 18:25:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2383</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMtMTcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUdXJuIG9uIEFVVE9fVkFDVVVNIGZvciBhbGwgZGF0YWJhc2VzCisKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM2MjUxCisKKyAgICAgICAgKiBwbGF0
Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0
YWJhc2U6Om9wZW4pOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnR1cm5BdXRv
VmFjdXVtT24pOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oOgorCiAy
MDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9uIDU2MTI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niw2ICs3Niw5IEBAIGJv
b2wgU1FMaXRlRGF0YWJhc2U6Om9wZW4oY29uc3QgU3RyaW5nJiAKICAgICBpZiAoIVNRTGl0ZVN0
YXRlbWVudCgqdGhpcywgIlBSQUdNQSB0ZW1wX3N0b3JlID0gTUVNT1JZOyIpLmV4ZWN1dGVDb21t
YW5kKCkpCiAgICAgICAgIExPR19FUlJPUigiU1FMaXRlIGRhdGFiYXNlIGNvdWxkIG5vdCBzZXQg
dGVtcF9zdG9yZSB0byBtZW1vcnkiKTsKIAorICAgIGlmICghdHVybkF1dG9WYWN1dW1PbigpKQor
ICAgICAgICBMT0dfRVJST1IoIkNvdWxkIG5vdCB0dXJuIEFVVE9fVkFDVVVNIG9uLiIpOworCiAg
ICAgcmV0dXJuIGlzT3BlbigpOwogfQogCkBAIC0zNjYsNCArMzY5LDIxIEBAIGJvb2wgU1FMaXRl
RGF0YWJhc2U6OmlzQXV0b0NvbW1pdE9uKCkgY28KICAgICByZXR1cm4gc3FsaXRlM19nZXRfYXV0
b2NvbW1pdChtX2RiKTsKIH0KIAorYm9vbCBTUUxpdGVEYXRhYmFzZTo6dHVybkF1dG9WYWN1dW1P
bigpCit7CisgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBhdXRv
X3ZhY3V1bSIpOworICAgIHN3aXRjaCAoc3RhdGVtZW50LmdldENvbHVtbkludCgwKSkgeworICAg
IGNhc2UgMTogLy8gQVVUT19WQUNVVU0gaXMgc2V0IHRvIEZVTEwsIG5vIG5lZWQgdG8gZG8gYW55
dGhpbmcKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSAyOiAvLyBBVVRPX1ZBQ1VVTSBp
cyBzZXQgdG8gSU5DUkVNRU5UQUwsIGNoYW5nZSBpdCB0byBGVUxMCisgICAgICAgIHJldHVybiBl
eGVjdXRlQ29tbWFuZCgiUFJBR01BIGF1dG9fdmFjdXVtID0gMSIpOworICAgIGNhc2UgMDogLy8g
QVVUT19WQUNVVU0gaXMgc2V0IHRvIE5PTkUsIHNldCBpdCB0byBGVUxMCisgICAgZGVmYXVsdDog
Ly8gQVVUT19WQUNVVU0gaXMgc2V0IHRvIHNvbWUgdW5rbm93biB2YWx1ZSwgc2V0IGl0IHRvIEZV
TEwKKyAgICAgICAgaWYgKCFleGVjdXRlQ29tbWFuZCgiUFJBR01BIGF1dG9fdmFjdXVtID0gMSIp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBydW5WYWN1dW1Db21tYW5kKCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCShyZXZpc2lvbiA1NjEy
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNSw2ICsxMTUsOCBAQCBwcml2YXRlOgogICAgIAogICAgIGludCBwYWdlU2l6ZSgp
OwogICAgIAorICAgIGJvb2wgdHVybkF1dG9WYWN1dW1PbigpOworCiAgICAgc3FsaXRlMyogbV9k
YjsKICAgICBpbnQgbV9sYXN0RXJyb3I7CiAgICAgaW50IG1fcGFnZVNpemU7Cg==
</data>
<flag name="review"
          id="34161"
          type_id="1"
          status="-"
          setter="mrowe"
    />
    <flag name="commit-queue"
          id="34162"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50988</attachid>
            <date>2010-03-17 18:25:28 -0700</date>
            <delta_ts>2010-03-26 19:02:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>2690</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDMtMTcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUdXJuIG9uIEFVVE9fVkFDVVVNIGZvciBhbGwgZGF0YWJhc2VzLgorCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjI1MQorCisgICAgICAgICogcGxh
dGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlOjp0dXJuQXV0b1ZhY3V1bU9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuaDoKKwkqIHN0b3JhZ2UvRGF0YWJhc2UuY3BwOgorCShXZWJDb3JlOjpEYXRhYmFz
ZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorCiAyMDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxk
aW1pY2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtv
di4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHJldmlzaW9u
IDU2MTI5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNjYsNCArMzY2LDIxIEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OmlzQXV0
b0NvbW1pdE9uKCkgY28KICAgICByZXR1cm4gc3FsaXRlM19nZXRfYXV0b2NvbW1pdChtX2RiKTsK
IH0KIAorYm9vbCBTUUxpdGVEYXRhYmFzZTo6dHVybkF1dG9WYWN1dW1PbigpCit7CisgICAgU1FM
aXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBhdXRvX3ZhY3V1bSIpOworICAg
IHN3aXRjaCAoc3RhdGVtZW50LmdldENvbHVtbkludCgwKSkgeworICAgIGNhc2UgMTogLy8gQVVU
T19WQUNVVU0gaXMgc2V0IHRvIEZVTEwsIG5vIG5lZWQgdG8gZG8gYW55dGhpbmcKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgY2FzZSAyOiAvLyBBVVRPX1ZBQ1VVTSBpcyBzZXQgdG8gSU5DUkVN
RU5UQUwsIGNoYW5nZSBpdCB0byBGVUxMCisgICAgICAgIHJldHVybiBleGVjdXRlQ29tbWFuZCgi
UFJBR01BIGF1dG9fdmFjdXVtID0gMSIpOworICAgIGNhc2UgMDogLy8gQVVUT19WQUNVVU0gaXMg
c2V0IHRvIE5PTkUsIHNldCBpdCB0byBGVUxMCisgICAgZGVmYXVsdDogLy8gQVVUT19WQUNVVU0g
aXMgc2V0IHRvIHNvbWUgdW5rbm93biB2YWx1ZSwgc2V0IGl0IHRvIEZVTEwKKyAgICAgICAgaWYg
KCFleGVjdXRlQ29tbWFuZCgiUFJBR01BIGF1dG9fdmFjdXVtID0gMSIpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBydW5WYWN1dW1Db21tYW5kKCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL3NxbC9TUUxpdGVEYXRhYmFzZS5oCShyZXZpc2lvbiA1NjEyOSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNyw2ICsx
MDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBsb2NrKCk7CiAgICAgdm9pZCB1bmxvY2soKTsKICAg
ICBib29sIGlzQXV0b0NvbW1pdE9uKCkgY29uc3Q7CisgICAgYm9vbCB0dXJuQXV0b1ZhY3V1bU9u
KCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGljIGludCBhdXRob3JpemVyRnVuY3Rpb24odm9pZCos
IGludCwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciop
OwpJbmRleDogV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA1NjEyOSkKKysrIFdlYkNvcmUvc3Rv
cmFnZS9EYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzOSw2ICs1MzksOCBAQCBib29s
IERhdGFiYXNlOjpwZXJmb3JtT3BlbkFuZFZlcmlmeShFeGNlCiAgICAgICAgIGUgPSBJTlZBTElE
X1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBpZiAoIW1fc3Fs
aXRlRGF0YWJhc2UudHVybkF1dG9WYWN1dW1PbigpKQorICAgICAgICBMT0dfRVJST1IoIlVuYWJs
ZSB0byB0dXJuIG9uIEFVVE9fVkFDVVVNLiIpOwogCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRo
b3JpemVyKTsKICAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1
dGhvcml6ZXIpOwo=
</data>
<flag name="commit-queue"
          id="34176"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51805</attachid>
            <date>2010-03-26 19:02:10 -0700</date>
            <delta_ts>2010-03-29 17:36:35 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>0</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64"></data>
<flag name="commit-queue"
          id="35157"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51987</attachid>
            <date>2010-03-29 17:36:35 -0700</date>
            <delta_ts>2010-04-27 17:29:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>10508</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Njc1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjggQEAKKzIwMTAtMDMtMjYgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUdXJuIG9uIEFVVE9fVkFDVVVNID0gSU5DUkVNRU5UQUwgZm9yIGFsbCBIVE1MNSBkYXRhYmFz
ZXMsIGFuZAorICAgICAgICB2YWN1dW0gYWxsIGRhdGFiYXNlcyB3aGVuIHRoZSBudW1iZXIgb2Yg
ZnJlZSBwYWdlcyBpcyBhdCBsZWFzdCAxMCUKKyAgICAgICAgb2YgdGhlIG51bWJlciBvZiB0b3Rh
bCBwYWdlcy4gQWxzbywgYWRkaW5nIGEgZ3VhcmQgYWdhaW5zdCBhIGJ1ZworICAgICAgICB0aGF0
IHdhcyBmaXhlZCBpbiBTcWxpdGUgb25seSBzdGFydGluZyB3aXRoIHZlcnNpb24gMy42LjE2Lgor
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjI1MQor
CisgICAgICAgICogcGxhdGZvcm0vc3FsL1NRTGl0ZURhdGFiYXNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNRTGl0ZURhdGFiYXNlOjp0b3RhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FM
aXRlRGF0YWJhc2U6OnJ1bkluY3JlbWVudGFsVmFjdXVtQ29tbWFuZCk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxpdGVEYXRhYmFzZTo6dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9z
cWwvU1FMaXRlU3RhdGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0YXRlbWVu
dDo6cHJlcGFyZSk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQpOgorICAgICAgICAqIHN0b3Jh
Z2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KToKKwog
MjAxMC0wMy0yOSAgRGF3aXQgQWxlbWF5ZWh1ICA8YWRhd2l0QGtkZS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgU2ltb24gSGF1c21hbm4uCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9T
UUxpdGVEYXRhYmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FM
aXRlRGF0YWJhc2UuY3BwCShyZXZpc2lvbiA1Njc1MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDE0ICsxMDIsMTcgQEAg
dm9pZCBTUUxpdGVEYXRhYmFzZTo6c2V0RnVsbHN5bmMoYm9vbCBmcwogCiBpbnQ2NF90IFNRTGl0
ZURhdGFiYXNlOjptYXhpbXVtU2l6ZSgpCiB7Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXV0
aG9yaXplckxvY2spOwotICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2UpOwotICAgIAotICAgIFNR
TGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgbWF4X3BhZ2VfY291bnQiKTsK
LSAgICBpbnQ2NF90IHNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkgKiBwYWdlU2l6
ZSgpOwotICAgIAotICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7Ci0gICAgcmV0dXJuIHNpemU7
CisgICAgaW50NjRfdCBtYXhQYWdlQ291bnQgPSAwOworCisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CisgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIo
ZmFsc2UpOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01B
IG1heF9wYWdlX2NvdW50Iik7CisgICAgICAgIG1heFBhZ2VDb3VudCA9IHN0YXRlbWVudC5nZXRD
b2x1bW5JbnQ2NCgwKTsKKyAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbWF4UGFnZUNvdW50ICogcGFnZVNpemUoKTsKIH0KIAogdm9pZCBTUUxpdGVE
YXRhYmFzZTo6c2V0TWF4aW11bVNpemUoaW50NjRfdCBzaXplKQpAQCAtMTUzLDE0ICsxNTYsMzMg
QEAgaW50IFNRTGl0ZURhdGFiYXNlOjpwYWdlU2l6ZSgpCiAKIGludDY0X3QgU1FMaXRlRGF0YWJh
c2U6OmZyZWVTcGFjZVNpemUoKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1dGhvcml6
ZXJMb2NrKTsKLSAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKLSAgICAvLyBOb3RlOiBmcmVl
bGlzdF9jb3VudCB3YXMgYWRkZWQgaW4gU1FMaXRlIDMuNC4xLgotICAgIFNRTGl0ZVN0YXRlbWVu
dCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgZnJlZWxpc3RfY291bnQiKTsKLSAgICBpbnQ2NF90
IHNpemUgPSBzdGF0ZW1lbnQuZ2V0Q29sdW1uSW50NjQoMCkgKiBwYWdlU2l6ZSgpOworICAgIGlu
dDY0X3QgZnJlZWxpc3RDb3VudCA9IDA7CiAKLSAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwot
ICAgIHJldHVybiBzaXplOworICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXV0
aG9yaXplckxvY2spOworICAgICAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKKyAgICAgICAg
Ly8gTm90ZTogZnJlZWxpc3RfY291bnQgd2FzIGFkZGVkIGluIFNRTGl0ZSAzLjQuMS4KKyAgICAg
ICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBmcmVlbGlzdF9jb3Vu
dCIpOworICAgICAgICBmcmVlbGlzdENvdW50ID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDAp
OworICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOworICAgIH0KKworICAgIHJldHVybiBm
cmVlbGlzdENvdW50ICogcGFnZVNpemUoKTsKK30KKworaW50NjRfdCBTUUxpdGVEYXRhYmFzZTo6
dG90YWxTaXplKCkKK3sKKyAgICBpbnQ2NF90IHBhZ2VDb3VudCA9IDA7CisKKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1dGhvcml6ZXJMb2NrKTsKKyAgICAgICAgZW5hYmxl
QXV0aG9yaXplcihmYWxzZSk7CisgICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRo
aXMsICJQUkFHTUEgcGFnZV9jb3VudCIpOworICAgICAgICBwYWdlQ291bnQgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CisgICAg
fQorCisgICAgcmV0dXJuIHBhZ2VDb3VudCAqIHBhZ2VTaXplKCk7CiB9CiAKIHZvaWQgU1FMaXRl
RGF0YWJhc2U6OnNldFN5bmNocm9ub3VzKFN5bmNocm9ub3VzUHJhZ21hIHN5bmMpCkBAIC0yMjks
NiArMjUxLDE3IEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnJ1blZhY3V1bUNvbW1hbmQoKQogICAg
ICAgICBMT0coU1FMRGF0YWJhc2UsICJVbmFibGUgdG8gdmFjdXVtIGRhdGFiYXNlIC0gJXMiLCBs
YXN0RXJyb3JNc2coKSk7CiB9CiAKK3ZvaWQgU1FMaXRlRGF0YWJhc2U6OnJ1bkluY3JlbWVudGFs
VmFjdXVtQ29tbWFuZCgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fYXV0aG9yaXplckxv
Y2spOworICAgIGVuYWJsZUF1dGhvcml6ZXIoZmFsc2UpOworCisgICAgaWYgKCFleGVjdXRlQ29t
bWFuZCgiUFJBR01BIGluY3JlbWVudGFsX3ZhY3V1bSIpKQorICAgICAgICBMT0coU1FMRGF0YWJh
c2UsICJVbmFibGUgdG8gcnVuIGluY3JlbWVudGFsIHZhY3V1bSAtICVzIiwgbGFzdEVycm9yTXNn
KCkpOworCisgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKK30KKwogaW50NjRfdCBTUUxpdGVE
YXRhYmFzZTo6bGFzdEluc2VydFJvd0lEKCkKIHsKICAgICBpZiAoIW1fZGIpCkBAIC0zNzksNCAr
NDEyLDM0IEBAIGJvb2wgU1FMaXRlRGF0YWJhc2U6OmlzQXV0b0NvbW1pdE9uKCkgY28KICAgICBy
ZXR1cm4gc3FsaXRlM19nZXRfYXV0b2NvbW1pdChtX2RiKTsKIH0KIAorYm9vbCBTUUxpdGVEYXRh
YmFzZTo6dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKCkKK3sKKyAgICBTUUxpdGVTdGF0ZW1l
bnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIGF1dG9fdmFjdXVtIik7CisgICAgaW50IGF1dG9W
YWN1dW1Nb2RlID0gc3RhdGVtZW50LmdldENvbHVtbkludCgwKTsKKyAgICBpbnQgZXJyb3IgPSBs
YXN0RXJyb3IoKTsKKworICAgIC8vIENoZWNrIGlmIHdlIGdvdCBhbiBlcnJvciB3aGlsZSB0cnlp
bmcgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXV0b192YWN1dW0gZmxhZy4KKyAgICAvLyBJZiB3
ZSBnb3QgYSBTUUxJVEVfQlVTWSBlcnJvciwgdGhlbiB0aGVyZSdzIHByb2JhYmx5IGFub3RoZXIg
dHJhbnNhY3Rpb24gaW4KKyAgICAvLyBwcm9ncmVzcyBvbiB0aGlzIGRhdGFiYXNlLiBJbiB0aGlz
IGNhc2UsIGtlZXAgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlCisgICAgLy8gYXV0b192YWN1dW0g
ZmxhZyBhbmQgdHJ5IHRvIHNldCBpdCB0byBJTkNSRU1FTlRBTCB0aGUgbmV4dCB0aW1lIHdlIG9w
ZW4gdGhpcworICAgIC8vIGRhdGFiYXNlLiBJZiB0aGUgZXJyb3IgaXMgbm90IFNRTElURV9CVVNZ
LCB0aGVuIHdlIHByb2JhYmx5IHJhbiBpbnRvIGEgbW9yZQorICAgIC8vIHNlcmlvdXMgcHJvYmxl
bSBhbmQgc2hvdWxkIHJldHVybiBmYWxzZSAodG8gbG9nIGFuIGVycm9yIG1lc3NhZ2UpLgorICAg
IGlmIChlcnJvciAhPSBTUUxJVEVfUk9XKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKGF1dG9WYWN1dW1Nb2RlKSB7CisgICAgY2FzZSBBdXRvVmFjdXVtSW5jcmVtZW50YWw6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQXV0b1ZhY3V1bUZ1bGw6CisgICAgICAg
IHJldHVybiBleGVjdXRlQ29tbWFuZCgiUFJBR01BIGF1dG9fdmFjdXVtID0gMiIpOworICAgIGNh
c2UgQXV0b1ZhY3V1bU5vbmU6CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKCFleGVjdXRlQ29t
bWFuZCgiUFJBR01BIGF1dG9fdmFjdXVtID0gMiIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBydW5WYWN1dW1Db21tYW5kKCk7CisgICAgICAgIGVycm9yID0gbGFzdEVycm9y
KCk7CisgICAgICAgIHJldHVybiAoZXJyb3IgPT0gU1FMSVRFX09LKTsKKyAgICB9Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJh
c2UuaAkocmV2aXNpb24gNTY3NTEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVEYXRh
YmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKICAgICBib29s
IHRhYmxlRXhpc3RzKGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgY2xlYXJBbGxUYWJsZXMoKTsK
ICAgICB2b2lkIHJ1blZhY3V1bUNvbW1hbmQoKTsKKyAgICB2b2lkIHJ1bkluY3JlbWVudGFsVmFj
dXVtQ29tbWFuZCgpOwogICAgIAogICAgIGJvb2wgdHJhbnNhY3Rpb25JblByb2dyZXNzKCkgY29u
c3QgeyByZXR1cm4gbV90cmFuc2FjdGlvbkluUHJvZ3Jlc3M7IH0KICAgICAKQEAgLTg1LDYgKzg2
LDcgQEAgcHVibGljOgogICAgIAogICAgIC8vIEdldHMgdGhlIG51bWJlciBvZiB1bnVzZWQgYnl0
ZXMgaW4gdGhlIGRhdGFiYXNlIGZpbGUuCiAgICAgaW50NjRfdCBmcmVlU3BhY2VTaXplKCk7Cisg
ICAgaW50NjRfdCB0b3RhbFNpemUoKTsKIAogICAgIC8vIFRoZSBTUUxpdGUgU1lOQ0hST05PVVMg
cHJhZ21hIGNhbiBiZSBlaXRoZXIgRlVMTCwgTk9STUFMLCBvciBPRkYKICAgICAvLyBGVUxMIC0g
QW55IHdyaXRpbmcgY2FsbHMgdG8gdGhlIERCIGJsb2NrIHVudGlsIHRoZSBkYXRhIGlzIGFjdHVh
bGx5IG9uIHRoZSBkaXNrIHN1cmZhY2UKQEAgLTEwOCw2ICsxMTAsMTggQEAgcHVibGljOgogICAg
IHZvaWQgdW5sb2NrKCk7CiAgICAgYm9vbCBpc0F1dG9Db21taXRPbigpIGNvbnN0OwogCisgICAg
Ly8gVGhlIFNRTGl0ZSBBVVRPX1ZBQ1VVTSBwcmFnbWEgY2FuIGJlIGVpdGhlciBOT05FLCBGVUxM
LCBvciBJTkNSRU1FTlRBTC4KKyAgICAvLyBOT05FIC0gU1FMaXRlIGRvZXMgbm90IGRvIGFueSB2
YWN1dW1pbmcKKyAgICAvLyBGVUxMIC0gU1FMaXRlIG1vdmVzIGFsbCBlbXB0eSBwYWdlcyB0byB0
aGUgZW5kIG9mIHRoZSBEQiBmaWxlIGFuZCB0cnVuY2F0ZXMKKyAgICAvLyAgICAgICAgdGhlIGZp
bGUgdG8gcmVtb3ZlIHRob3NlIHBhZ2VzIGFmdGVyIGV2ZXJ5IHRyYW5zYWN0aW9uLiBUaGlzIG9w
dGlvbgorICAgIC8vICAgICAgICByZXF1aXJlcyBTUUxpdGUgdG8gc3RvcmUgYWRkaXRpb25hbCBp
bmZvcm1hdGlvbiBhYm91dCBlYWNoIHBhZ2UgaW4KKyAgICAvLyAgICAgICAgdGhlIGRhdGFiYXNl
IGZpbGUuCisgICAgLy8gSU5DUkVNRU5UQUwgLSBTUUxpdGUgc3RvcmVzIGV4dHJhIGluZm9ybWF0
aW9uIGZvciBlYWNoIHBhZ2UgaW4gdGhlIGRhdGFiYXNlCisgICAgLy8gICAgICAgICAgICAgICBm
aWxlLCBidXQgcmVtb3ZlcyB0aGUgZW1wdHkgcGFnZXMgb25seSB3aGVuIFBSQUdNQSBJTkNSRU1B
TlRBTF9WQUNVVU0KKyAgICAvLyAgICAgICAgICAgICAgIGlzIGNhbGxlZC4KKyAgICBlbnVtIEF1
dG9WYWN1dW1QcmFnbWEgeyBBdXRvVmFjdXVtTm9uZSA9IDAsIEF1dG9WYWN1dW1GdWxsID0gMSwg
QXV0b1ZhY3V1bUluY3JlbWVudGFsID0gMiB9OworICAgIGJvb2wgdHVybk9uSW5jcmVtZW50YWxB
dXRvVmFjdXVtKCk7CisKICAgICAvLyBTZXQgdGhpcyBmbGFnIHRvIGFsbG93IGFjY2VzcyBmcm9t
IG11bHRpcGxlIHRocmVhZHMuICBOb3QgYWxsIG11bHRpLXRocmVhZGVkIGFjY2Vzc2VzIGFyZSBz
YWZlIQogICAgIC8vIFNlZSBodHRwOi8vd3d3LnNxbGl0ZS5vcmcvY3ZzdHJhYy93aWtpP3A9TXVs
dGlUaHJlYWRpbmcgZm9yIG1vcmUgaW5mby4KICNpZm5kZWYgTkRFQlVHCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDU2NzUxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjQsNiArNjQsMTUgQEAgaW50IFNRTGl0ZVN0YXRlbWVudDo6cHJlcGFyZSgpCiAgICAgY29uc3Qg
dm9pZCogdGFpbDsKICAgICBMT0coU1FMRGF0YWJhc2UsICJTUUwgLSBwcmVwYXJlIC0gJXMiLCBt
X3F1ZXJ5LmFzY2lpKCkuZGF0YSgpKTsKICAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3ByZXBhcmUx
Nl92MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgbV9xdWVyeS5jaGFyYWN0ZXJzV2l0aE51
bGxUZXJtaW5hdGlvbigpLCAtMSwgJm1fc3RhdGVtZW50LCAmdGFpbCk7CisKKyAgICAvLyBTdGFy
dGluZyB3aXRoIHZlcnNpb24gMy42LjE2LCBzcWxpdGUgaGFzIGEgcGF0Y2ggKGh0dHA6Ly93d3cu
c3FsaXRlLm9yZy9zcmMvY2kvMjU2ZWMzYzZhZikKKyAgICAvLyB0aGF0IHNob3VsZCBtYWtlIHN1
cmUgc3FsaXRlM19wcmVwYXJlMTZfdjIgZG9lc24ndCByZXR1cm4gYSBTUUxJVEVfU0NIRU1BIGVy
cm9yLgorICAgIC8vIElmIHdlJ3JlIHVzaW5nIGFuIG9sZGVyIHNxbGl0ZSB2ZXJzaW9uLCB0cnkg
dG8gZW11bGF0ZSB0aGUgcGF0Y2guCisgICAgaWYgKGVycm9yID09IFNRTElURV9TQ0hFTUEpIHsK
KyAgICAgIHNxbGl0ZTNfZmluYWxpemUobV9zdGF0ZW1lbnQpOworICAgICAgZXJyb3IgPSBzcWxp
dGUzX3ByZXBhcmUxNl92MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgbV9xdWVyeS5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpLCAtMSwgJm1fc3RhdGVtZW50LCAmdGFpbCk7Cisg
ICAgfQorCiAgICAgaWYgKGVycm9yICE9IFNRTElURV9PSykKICAgICAgICAgTE9HKFNRTERhdGFi
YXNlLCAic3FsaXRlM19wcmVwYXJlMTYgZmFpbGVkICglaSlcbiVzXG4lcyIsIGVycm9yLCBtX3F1
ZXJ5LmFzY2lpKCkuZGF0YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5k
bGUoKSkpOwogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24g
NTY3NTEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NDQsNiArNTQ0LDggQEAgYm9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhj
ZQogICAgICAgICBlID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CisgICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1Zh
Y3V1bSgpKQorICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFs
IGF1dG8tdmFjdXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkp
OwogCiAgICAgQVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKICAgICBtX3NxbGl0ZURhdGFi
YXNlLnNldEF1dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwpAQCAtODA5LDYgKzgxMSwx
NCBAQCBTdHJpbmcgRGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKICAgICByZXR1cm4gbV9maWxl
bmFtZS50aHJlYWRzYWZlQ29weSgpOwogfQogCit2b2lkIERhdGFiYXNlOjppbmNyZW1lbnRhbFZh
Y3V1bUlmTmVlZGVkKCkKK3sKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURh
dGFiYXNlLmZyZWVTcGFjZVNpemUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRl
RGF0YWJhc2UudG90YWxTaXplKCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFj
ZVNpemUpCisgICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1Db21t
YW5kKCk7Cit9CisKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA1Njc1MSkKKysrIFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDggQEAgcHVi
bGljOgogICAgIFNRTFRyYW5zYWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0
OwogICAgIFNRTFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3Io
KSBjb25zdDsKIAorICAgIHZvaWQgaW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOworCiBwcml2
YXRlOgogICAgIERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFN0cmluZyYgbmFtZSwKICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lv
biwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxU
cmFuc2FjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0
aW9uLmNwcAkocmV2aXNpb24gNTY3NTEpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2LDkgQEAgdm9pZCBTUUxUcmFuc2Fj
dGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAg
Ly8gVGhlIGNvbW1pdCB3YXMgc3VjY2Vzc2Z1bCwgdmFjdXVtIHRoZSBkYXRhYmFzZSBpZiBuZWVk
ZWQKKyAgICBtX2RhdGFiYXNlLT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CisKICAgICAv
LyBUaGUgY29tbWl0IHdhcyBzdWNjZXNzZnVsLCBub3RpZnkgdGhlIGRlbGVnYXRlcyBpZiB0aGUg
dHJhbnNhY3Rpb24gbW9kaWZpZWQgdGhpcyBkYXRhYmFzZQogICAgIGlmIChtX21vZGlmaWVkRGF0
YWJhc2UpCiAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENvbW1p
dFRyYW5zYWN0aW9uKHRoaXMpOwo=
</data>
<flag name="review"
          id="35369"
          type_id="1"
          status="+"
          setter="dglazkov"
    />
    <flag name="commit-queue"
          id="35370"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54482</attachid>
            <date>2010-04-27 17:29:46 -0700</date>
            <delta_ts>2010-04-27 17:42:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>15089</size>
            <attacher name="Dumitru Daniliuc">dumi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1ODM0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDQtMjcgIER1bWl0cnUgRGFuaWxpdWMgIDxkdW1pQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUdXJuIG9uIEFVVE9fVkFDVVVNID0gSU5DUkVNRU5UQUwgZm9yIGFsbCBIVE1MNSBkYXRhYmFz
ZXMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODE5
MQorCisgICAgICAgIFZhY3V1bSBhbGwgZGF0YWJhc2VzIHdoZW4gdGhlIG51bWJlciBvZiBmcmVl
IHBhZ2VzIGlzIGF0IGxlYXN0IDEwJQorICAgICAgICBvZiB0aGUgbnVtYmVyIG9mIHRvdGFsIHBh
Z2VzLiBBbHNvLCBhZGQgYSBndWFyZCBhZ2FpbnN0IGEgYnVnIHRoYXQKKyAgICAgICAgd2FzIGZp
eGVkIGluIFNRTGl0ZSBvbmx5IHN0YXJ0aW5nIHdpdGggdmVyc2lvbiAzLjYuMTYuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9zcWwvU1FMaXRlRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1FMaXRlRGF0YWJhc2U6Om1heGltdW1TaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURh
dGFiYXNlOjpmcmVlU3BhY2VTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNl
Ojp0b3RhbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRGF0YWJhc2U6OnJ1bkluY3Jl
bWVudGFsVmFjdXVtQ29tbWFuZCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVEYXRhYmFzZTo6
dHVybk9uSW5jcmVtZW50YWxBdXRvVmFjdXVtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9zcWwvU1FM
aXRlRGF0YWJhc2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZURhdGFiYXNlOjopOgorICAg
ICAgICAqIHBsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMaXRlU3RhdGVtZW50OjpwcmVwYXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZVN0
YXRlbWVudDo6c3RlcCk6CisgICAgICAgICogc3RvcmFnZS9EYXRhYmFzZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkpOgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YWJhc2U6OmluY3JlbWVudGFsVmFjdXVtSWZOZWVkZWQpOgorICAgICAgICAqIHN0
b3JhZ2UvRGF0YWJhc2UuaDoKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0KToK
KwogMjAxMC0wNC0yNyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU4MzE4LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvU1FMaXRlRGF0YWJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3Fs
L1NRTGl0ZURhdGFiYXNlLmNwcAkocmV2aXNpb24gNTgzMzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L3NxbC9TUUxpdGVEYXRhYmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiwxNCArMTAyLDE3
IEBAIHZvaWQgU1FMaXRlRGF0YWJhc2U6OnNldEZ1bGxzeW5jKGJvb2wgZnMKIAogaW50NjRfdCBT
UUxpdGVEYXRhYmFzZTo6bWF4aW11bVNpemUoKQogewotICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2F1dGhvcml6ZXJMb2NrKTsKLSAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKLSAgICAKLSAg
ICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIG1heF9wYWdlX2NvdW50
Iik7Ci0gICAgaW50NjRfdCBzaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApICogcGFn
ZVNpemUoKTsKLSAgICAKLSAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwotICAgIHJldHVybiBz
aXplOworICAgIGludDY0X3QgbWF4UGFnZUNvdW50ID0gMDsKKworICAgIHsKKyAgICAgICAgTXV0
ZXhMb2NrZXIgbG9ja2VyKG1fYXV0aG9yaXplckxvY2spOworICAgICAgICBlbmFibGVBdXRob3Jp
emVyKGZhbHNlKTsKKyAgICAgICAgU1FMaXRlU3RhdGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBS
QUdNQSBtYXhfcGFnZV9jb3VudCIpOworICAgICAgICBtYXhQYWdlQ291bnQgPSBzdGF0ZW1lbnQu
Z2V0Q29sdW1uSW50NjQoMCk7CisgICAgICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7CisgICAg
fQorCisgICAgcmV0dXJuIG1heFBhZ2VDb3VudCAqIHBhZ2VTaXplKCk7CiB9CiAKIHZvaWQgU1FM
aXRlRGF0YWJhc2U6OnNldE1heGltdW1TaXplKGludDY0X3Qgc2l6ZSkKQEAgLTE1MywxNCArMTU2
LDMzIEBAIGludCBTUUxpdGVEYXRhYmFzZTo6cGFnZVNpemUoKQogCiBpbnQ2NF90IFNRTGl0ZURh
dGFiYXNlOjpmcmVlU3BhY2VTaXplKCkKIHsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9hdXRo
b3JpemVyTG9jayk7Ci0gICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7Ci0gICAgLy8gTm90ZTog
ZnJlZWxpc3RfY291bnQgd2FzIGFkZGVkIGluIFNRTGl0ZSAzLjQuMS4KLSAgICBTUUxpdGVTdGF0
ZW1lbnQgc3RhdGVtZW50KCp0aGlzLCAiUFJBR01BIGZyZWVsaXN0X2NvdW50Iik7Ci0gICAgaW50
NjRfdCBzaXplID0gc3RhdGVtZW50LmdldENvbHVtbkludDY0KDApICogcGFnZVNpemUoKTsKKyAg
ICBpbnQ2NF90IGZyZWVsaXN0Q291bnQgPSAwOwogCi0gICAgZW5hYmxlQXV0aG9yaXplcih0cnVl
KTsKLSAgICByZXR1cm4gc2l6ZTsKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X2F1dGhvcml6ZXJMb2NrKTsKKyAgICAgICAgZW5hYmxlQXV0aG9yaXplcihmYWxzZSk7CisgICAg
ICAgIC8vIE5vdGU6IGZyZWVsaXN0X2NvdW50IHdhcyBhZGRlZCBpbiBTUUxpdGUgMy40LjEuCisg
ICAgICAgIFNRTGl0ZVN0YXRlbWVudCBzdGF0ZW1lbnQoKnRoaXMsICJQUkFHTUEgZnJlZWxpc3Rf
Y291bnQiKTsKKyAgICAgICAgZnJlZWxpc3RDb3VudCA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQ2
NCgwKTsKKyAgICAgICAgZW5hYmxlQXV0aG9yaXplcih0cnVlKTsKKyAgICB9CisKKyAgICByZXR1
cm4gZnJlZWxpc3RDb3VudCAqIHBhZ2VTaXplKCk7Cit9CisKK2ludDY0X3QgU1FMaXRlRGF0YWJh
c2U6OnRvdGFsU2l6ZSgpCit7CisgICAgaW50NjRfdCBwYWdlQ291bnQgPSAwOworCisgICAgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9hdXRob3JpemVyTG9jayk7CisgICAgICAgIGVu
YWJsZUF1dGhvcml6ZXIoZmFsc2UpOworICAgICAgICBTUUxpdGVTdGF0ZW1lbnQgc3RhdGVtZW50
KCp0aGlzLCAiUFJBR01BIHBhZ2VfY291bnQiKTsKKyAgICAgICAgcGFnZUNvdW50ID0gc3RhdGVt
ZW50LmdldENvbHVtbkludDY0KDApOworICAgICAgICBlbmFibGVBdXRob3JpemVyKHRydWUpOwor
ICAgIH0KKworICAgIHJldHVybiBwYWdlQ291bnQgKiBwYWdlU2l6ZSgpOwogfQogCiB2b2lkIFNR
TGl0ZURhdGFiYXNlOjpzZXRTeW5jaHJvbm91cyhTeW5jaHJvbm91c1ByYWdtYSBzeW5jKQpAQCAt
MjI5LDYgKzI1MSwxNyBAQCB2b2lkIFNRTGl0ZURhdGFiYXNlOjpydW5WYWN1dW1Db21tYW5kKCkK
ICAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAiVW5hYmxlIHRvIHZhY3V1bSBkYXRhYmFzZSAtICVz
IiwgbGFzdEVycm9yTXNnKCkpOwogfQogCit2b2lkIFNRTGl0ZURhdGFiYXNlOjpydW5JbmNyZW1l
bnRhbFZhY3V1bUNvbW1hbmQoKQoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2F1dGhvcml6
ZXJMb2NrKTsKKyAgICBlbmFibGVBdXRob3JpemVyKGZhbHNlKTsKKworICAgIGlmICghZXhlY3V0
ZUNvbW1hbmQoIlBSQUdNQSBpbmNyZW1lbnRhbF92YWN1dW0iKSkKKyAgICAgICAgTE9HKFNRTERh
dGFiYXNlLCAiVW5hYmxlIHRvIHJ1biBpbmNyZW1lbnRhbCB2YWN1dW0gLSAlcyIsIGxhc3RFcnJv
ck1zZygpKTsKKworICAgIGVuYWJsZUF1dGhvcml6ZXIodHJ1ZSk7Cit9CisKIGludDY0X3QgU1FM
aXRlRGF0YWJhc2U6Omxhc3RJbnNlcnRSb3dJRCgpCiB7CiAgICAgaWYgKCFtX2RiKQpAQCAtMzc5
LDQgKzQxMiwzNCBAQCBib29sIFNRTGl0ZURhdGFiYXNlOjppc0F1dG9Db21taXRPbigpIGNvCiAg
ICAgcmV0dXJuIHNxbGl0ZTNfZ2V0X2F1dG9jb21taXQobV9kYik7CiB9CiAKK2Jvb2wgU1FMaXRl
RGF0YWJhc2U6OnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpCit7CisgICAgU1FMaXRlU3Rh
dGVtZW50IHN0YXRlbWVudCgqdGhpcywgIlBSQUdNQSBhdXRvX3ZhY3V1bSIpOworICAgIGludCBh
dXRvVmFjdXVtTW9kZSA9IHN0YXRlbWVudC5nZXRDb2x1bW5JbnQoMCk7CisgICAgaW50IGVycm9y
ID0gbGFzdEVycm9yKCk7CisKKyAgICAvLyBDaGVjayBpZiB3ZSBnb3QgYW4gZXJyb3Igd2hpbGUg
dHJ5aW5nIHRvIGdldCB0aGUgdmFsdWUgb2YgdGhlIGF1dG9fdmFjdXVtIGZsYWcuCisgICAgLy8g
SWYgd2UgZ290IGEgU1FMSVRFX0JVU1kgZXJyb3IsIHRoZW4gdGhlcmUncyBwcm9iYWJseSBhbm90
aGVyIHRyYW5zYWN0aW9uIGluCisgICAgLy8gcHJvZ3Jlc3Mgb24gdGhpcyBkYXRhYmFzZS4gSW4g
dGhpcyBjYXNlLCBrZWVwIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZQorICAgIC8vIGF1dG9fdmFj
dXVtIGZsYWcgYW5kIHRyeSB0byBzZXQgaXQgdG8gSU5DUkVNRU5UQUwgdGhlIG5leHQgdGltZSB3
ZSBvcGVuIHRoaXMKKyAgICAvLyBkYXRhYmFzZS4gSWYgdGhlIGVycm9yIGlzIG5vdCBTUUxJVEVf
QlVTWSwgdGhlbiB3ZSBwcm9iYWJseSByYW4gaW50byBhIG1vcmUKKyAgICAvLyBzZXJpb3VzIHBy
b2JsZW0gYW5kIHNob3VsZCByZXR1cm4gZmFsc2UgKHRvIGxvZyBhbiBlcnJvciBtZXNzYWdlKS4K
KyAgICBpZiAoZXJyb3IgIT0gU1FMSVRFX1JPVykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3dpdGNoIChhdXRvVmFjdXVtTW9kZSkgeworICAgIGNhc2UgQXV0b1ZhY3V1bUluY3JlbWVu
dGFsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEF1dG9WYWN1dW1GdWxsOgorICAg
ICAgICByZXR1cm4gZXhlY3V0ZUNvbW1hbmQoIlBSQUdNQSBhdXRvX3ZhY3V1bSA9IDIiKTsKKyAg
ICBjYXNlIEF1dG9WYWN1dW1Ob25lOgorICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICghZXhlY3V0
ZUNvbW1hbmQoIlBSQUdNQSBhdXRvX3ZhY3V1bSA9IDIiKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcnVuVmFjdXVtQ29tbWFuZCgpOworICAgICAgICBlcnJvciA9IGxhc3RF
cnJvcigpOworICAgICAgICByZXR1cm4gKGVycm9yID09IFNRTElURV9PSyk7CisgICAgfQorfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3NxbC9TUUxp
dGVEYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZURh
dGFiYXNlLmgJKHJldmlzaW9uIDU4MzM1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRl
RGF0YWJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCB0YWJsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIGNsZWFyQWxsVGFibGVz
KCk7CiAgICAgdm9pZCBydW5WYWN1dW1Db21tYW5kKCk7CisgICAgdm9pZCBydW5JbmNyZW1lbnRh
bFZhY3V1bUNvbW1hbmQoKTsKICAgICAKICAgICBib29sIHRyYW5zYWN0aW9uSW5Qcm9ncmVzcygp
IGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25JblByb2dyZXNzOyB9CiAgICAgCkBAIC04NSw2
ICs4Niw3IEBAIHB1YmxpYzoKICAgICAKICAgICAvLyBHZXRzIHRoZSBudW1iZXIgb2YgdW51c2Vk
IGJ5dGVzIGluIHRoZSBkYXRhYmFzZSBmaWxlLgogICAgIGludDY0X3QgZnJlZVNwYWNlU2l6ZSgp
OworICAgIGludDY0X3QgdG90YWxTaXplKCk7CiAKICAgICAvLyBUaGUgU1FMaXRlIFNZTkNIUk9O
T1VTIHByYWdtYSBjYW4gYmUgZWl0aGVyIEZVTEwsIE5PUk1BTCwgb3IgT0ZGCiAgICAgLy8gRlVM
TCAtIEFueSB3cml0aW5nIGNhbGxzIHRvIHRoZSBEQiBibG9jayB1bnRpbCB0aGUgZGF0YSBpcyBh
Y3R1YWxseSBvbiB0aGUgZGlzayBzdXJmYWNlCkBAIC0xMDgsNiArMTEwLDE4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHVubG9jaygpOwogICAgIGJvb2wgaXNBdXRvQ29tbWl0T24oKSBjb25zdDsKIAor
ICAgIC8vIFRoZSBTUUxpdGUgQVVUT19WQUNVVU0gcHJhZ21hIGNhbiBiZSBlaXRoZXIgTk9ORSwg
RlVMTCwgb3IgSU5DUkVNRU5UQUwuCisgICAgLy8gTk9ORSAtIFNRTGl0ZSBkb2VzIG5vdCBkbyBh
bnkgdmFjdXVtaW5nCisgICAgLy8gRlVMTCAtIFNRTGl0ZSBtb3ZlcyBhbGwgZW1wdHkgcGFnZXMg
dG8gdGhlIGVuZCBvZiB0aGUgREIgZmlsZSBhbmQgdHJ1bmNhdGVzCisgICAgLy8gICAgICAgIHRo
ZSBmaWxlIHRvIHJlbW92ZSB0aG9zZSBwYWdlcyBhZnRlciBldmVyeSB0cmFuc2FjdGlvbi4gVGhp
cyBvcHRpb24KKyAgICAvLyAgICAgICAgcmVxdWlyZXMgU1FMaXRlIHRvIHN0b3JlIGFkZGl0aW9u
YWwgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBwYWdlIGluCisgICAgLy8gICAgICAgIHRoZSBkYXRh
YmFzZSBmaWxlLgorICAgIC8vIElOQ1JFTUVOVEFMIC0gU1FMaXRlIHN0b3JlcyBleHRyYSBpbmZv
cm1hdGlvbiBmb3IgZWFjaCBwYWdlIGluIHRoZSBkYXRhYmFzZQorICAgIC8vICAgICAgICAgICAg
ICAgZmlsZSwgYnV0IHJlbW92ZXMgdGhlIGVtcHR5IHBhZ2VzIG9ubHkgd2hlbiBQUkFHTUEgSU5D
UkVNQU5UQUxfVkFDVVVNCisgICAgLy8gICAgICAgICAgICAgICBpcyBjYWxsZWQuCisgICAgZW51
bSBBdXRvVmFjdXVtUHJhZ21hIHsgQXV0b1ZhY3V1bU5vbmUgPSAwLCBBdXRvVmFjdXVtRnVsbCA9
IDEsIEF1dG9WYWN1dW1JbmNyZW1lbnRhbCA9IDIgfTsKKyAgICBib29sIHR1cm5PbkluY3JlbWVu
dGFsQXV0b1ZhY3V1bSgpOworCiAgICAgLy8gU2V0IHRoaXMgZmxhZyB0byBhbGxvdyBhY2Nlc3Mg
ZnJvbSBtdWx0aXBsZSB0aHJlYWRzLiAgTm90IGFsbCBtdWx0aS10aHJlYWRlZCBhY2Nlc3NlcyBh
cmUgc2FmZSEKICAgICAvLyBTZWUgaHR0cDovL3d3dy5zcWxpdGUub3JnL2N2c3RyYWMvd2lraT9w
PU11bHRpVGhyZWFkaW5nIGZvciBtb3JlIGluZm8uCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9zcWwvU1FMaXRlU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL3NxbC9TUUxpdGVTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiA1ODMzNSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vc3FsL1NRTGl0ZVN0YXRlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY1LDYgKzY1LDE1IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnByZXBhcmUoKQogICAgIExP
RyhTUUxEYXRhYmFzZSwgIlNRTCAtIHByZXBhcmUgLSAlcyIsIG1fcXVlcnkuYXNjaWkoKS5kYXRh
KCkpOwogICAgIFN0cmluZyBzdHJpcHBlZFF1ZXJ5ID0gbV9xdWVyeS5zdHJpcFdoaXRlU3BhY2Uo
KTsKICAgICBpbnQgZXJyb3IgPSBzcWxpdGUzX3ByZXBhcmUxNl92MihtX2RhdGFiYXNlLnNxbGl0
ZTNIYW5kbGUoKSwgc3RyaXBwZWRRdWVyeS5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LCAtMSwgJm1fc3RhdGVtZW50LCAmdGFpbCk7CisKKyAgICAvLyBTdGFydGluZyB3aXRoIHZlcnNp
b24gMy42LjE2LCBzcWxpdGUgaGFzIGEgcGF0Y2ggKGh0dHA6Ly93d3cuc3FsaXRlLm9yZy9zcmMv
Y2kvMjU2ZWMzYzZhZikKKyAgICAvLyB0aGF0IHNob3VsZCBtYWtlIHN1cmUgc3FsaXRlM19wcmVw
YXJlMTZfdjIgZG9lc24ndCByZXR1cm4gYSBTUUxJVEVfU0NIRU1BIGVycm9yLgorICAgIC8vIElm
IHdlJ3JlIHVzaW5nIGFuIG9sZGVyIHNxbGl0ZSB2ZXJzaW9uLCB0cnkgdG8gZW11bGF0ZSB0aGUg
cGF0Y2guCisgICAgaWYgKGVycm9yID09IFNRTElURV9TQ0hFTUEpIHsKKyAgICAgIHNxbGl0ZTNf
ZmluYWxpemUobV9zdGF0ZW1lbnQpOworICAgICAgZXJyb3IgPSBzcWxpdGUzX3ByZXBhcmUxNl92
MihtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSwgbV9xdWVyeS5jaGFyYWN0ZXJzV2l0aE51bGxU
ZXJtaW5hdGlvbigpLCAtMSwgJm1fc3RhdGVtZW50LCAmdGFpbCk7CisgICAgfQorCiAgICAgaWYg
KGVycm9yICE9IFNRTElURV9PSykKICAgICAgICAgTE9HKFNRTERhdGFiYXNlLCAic3FsaXRlM19w
cmVwYXJlMTYgZmFpbGVkICglaSlcbiVzXG4lcyIsIGVycm9yLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0
YSgpLCBzcWxpdGUzX2Vycm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwogICAgIGNv
bnN0IFVDaGFyKiBjaCA9IHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4odGFpbCk7CkBAIC04Nyw2
ICs5Niw3IEBAIGludCBTUUxpdGVTdGF0ZW1lbnQ6OnN0ZXAoKQogICAgICAgICBMT0coU1FMRGF0
YWJhc2UsICJzcWxpdGUzX3N0ZXAgZmFpbGVkICglaSlcblF1ZXJ5IC0gJXNcbkVycm9yIC0gJXMi
LCAKICAgICAgICAgICAgIGVycm9yLCBtX3F1ZXJ5LmFzY2lpKCkuZGF0YSgpLCBzcWxpdGUzX2Vy
cm1zZyhtX2RhdGFiYXNlLnNxbGl0ZTNIYW5kbGUoKSkpOwogICAgIH0KKwogICAgIHJldHVybiBl
cnJvcjsKIH0KICAgICAKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL0RhdGFiYXNlLmNwcAkocmV2aXNpb24gNTgzMzUpCisr
KyBXZWJDb3JlL3N0b3JhZ2UvRGF0YWJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDMsNiAr
NTQzLDggQEAgYm9vbCBEYXRhYmFzZTo6cGVyZm9ybU9wZW5BbmRWZXJpZnkoRXhjZQogICAgICAg
ICBlID0gSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Cisg
ICAgaWYgKCFtX3NxbGl0ZURhdGFiYXNlLnR1cm5PbkluY3JlbWVudGFsQXV0b1ZhY3V1bSgpKQor
ICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byB0dXJuIG9uIGluY3JlbWVudGFsIGF1dG8tdmFj
dXVtIGZvciBkYXRhYmFzZSAlcyIsIG1fZmlsZW5hbWUuYXNjaWkoKS5kYXRhKCkpOwogCiAgICAg
QVNTRVJUKG1fZGF0YWJhc2VBdXRob3JpemVyKTsKICAgICBtX3NxbGl0ZURhdGFiYXNlLnNldEF1
dGhvcml6ZXIobV9kYXRhYmFzZUF1dGhvcml6ZXIpOwpAQCAtODA4LDYgKzgxMCwxNCBAQCBTdHJp
bmcgRGF0YWJhc2U6OmZpbGVOYW1lKCkgY29uc3QKICAgICByZXR1cm4gbV9maWxlbmFtZS50aHJl
YWRzYWZlQ29weSgpOwogfQogCit2b2lkIERhdGFiYXNlOjppbmNyZW1lbnRhbFZhY3V1bUlmTmVl
ZGVkKCkKK3sKKyAgICBpbnQ2NF90IGZyZWVTcGFjZVNpemUgPSBtX3NxbGl0ZURhdGFiYXNlLmZy
ZWVTcGFjZVNpemUoKTsKKyAgICBpbnQ2NF90IHRvdGFsU2l6ZSA9IG1fc3FsaXRlRGF0YWJhc2Uu
dG90YWxTaXplKCk7CisgICAgaWYgKHRvdGFsU2l6ZSA8PSAxMCAqIGZyZWVTcGFjZVNpemUpCisg
ICAgICAgIG1fc3FsaXRlRGF0YWJhc2UucnVuSW5jcmVtZW50YWxWYWN1dW1Db21tYW5kKCk7Cit9
CisKICNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9EYXRhYmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3RvcmFnZS9EYXRhYmFzZS5oCShyZXZpc2lvbiA1ODMzNSkKKysrIFdlYkNvcmUvc3RvcmFnZS9E
YXRhYmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiArMTMzLDggQEAgcHVibGljOgogICAg
IFNRTFRyYW5zYWN0aW9uQ2xpZW50KiB0cmFuc2FjdGlvbkNsaWVudCgpIGNvbnN0OwogICAgIFNR
TFRyYW5zYWN0aW9uQ29vcmRpbmF0b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdDsK
IAorICAgIHZvaWQgaW5jcmVtZW50YWxWYWN1dW1JZk5lZWRlZCgpOworCiBwcml2YXRlOgogICAg
IERhdGFiYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
bmFtZSwKICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGV4cGVjdGVkVmVyc2lvbiwgY29uc3Qg
U3RyaW5nJiBkaXNwbGF5TmFtZSwKSW5kZXg6IFdlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcAko
cmV2aXNpb24gNTgzMzUpCisrKyBXZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9z
dGZsaWdodEFuZENvbW1pdAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgLy8gVGhlIGNv
bW1pdCB3YXMgc3VjY2Vzc2Z1bCwgdmFjdXVtIHRoZSBkYXRhYmFzZSBpZiBuZWVkZWQKKyAgICBt
X2RhdGFiYXNlLT5pbmNyZW1lbnRhbFZhY3V1bUlmTmVlZGVkKCk7CisKICAgICAvLyBUaGUgY29t
bWl0IHdhcyBzdWNjZXNzZnVsLCBub3RpZnkgdGhlIGRlbGVnYXRlcyBpZiB0aGUgdHJhbnNhY3Rp
b24gbW9kaWZpZWQgdGhpcyBkYXRhYmFzZQogICAgIGlmIChtX21vZGlmaWVkRGF0YWJhc2UpCiAg
ICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENvbW1pdFRyYW5zYWN0
aW9uKHRoaXMpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTgzNDIpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wNC0yNyAgRHVtaXRy
dSBEYW5pbGl1YyAgPGR1bWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkanVzdGluZyB0aGUgZXhwZWN0ZWQgYW1vdW50IG9m
IHNwYWNlIHVzZWQgYnkgcXVvdGEtdHJhY2tpbmcuaHRtbC4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4MTkxCisKKyAgICAgICAgVGhlIGV4cGVjdGF0
aW9ucyBjaGFuZ2VkIGJlY2F1c2Ugb2YgQVVUT19WQUNVVU0ncyBvdmVyaGVhZC4KKworICAgICAg
ICAqIHBsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKyAgICAgICAgKiBz
dG9yYWdlL3F1b3RhLXRyYWNraW5nLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBzdG9yYWdlL3F1
b3RhLXRyYWNraW5nLmh0bWw6CisKIDIwMTAtMDQtMjcgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI1ODMxOC4KSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtL3Rlc3RfZXhwZWN0YXRpb25zLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS90ZXN0X2V4cGVjdGF0aW9u
cy50eHQJKHJldmlzaW9uIDU4MzM1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0v
dGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yODc3LDYgKzI4NzcsMyBA
QCBCVUdXSzM4MTA2IE1BQyA6IHN2Zy9jdXN0b20vZG9taW5hbnQtYmFzCiAKIC8vIFN0YXJ0ZWQg
ZmFpbGluZyBhdCA1ODIxMgogQlVHV0szODEwOCBNQUMgOiBmYXN0L2JhY2tncm91bmRzL3NpemUv
Y29udGFpbi1hbmQtY292ZXIuaHRtbCA9IElNQUdFCi0KLS8vIFN0YXJ0ZWQgZmFpbGluZyBhZnRl
ciByZXZlcnQuCi1CVUdXSzM4MTkxIDogc3RvcmFnZS9xdW90YS10cmFja2luZy5odG1sID0gVElN
RU9VVCBURVhUCkluZGV4OiBMYXlvdXRUZXN0cy9zdG9yYWdlL3F1b3RhLXRyYWNraW5nLWV4cGVj
dGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3F1b3RhLXRyYWNraW5n
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gNTgzMzUpCisrKyBMYXlvdXRUZXN0cy9zdG9yYWdlL3F1
b3RhLXRyYWNraW5nLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IFVJIERFTEVHQVRFIERBVEFCQVNFIENBTExCQUNLOiBleGNlZWRlZERhdGFiYXNlUXVvdGFGb3JT
ZWN1cml0eU9yaWdpbjp7ZmlsZSwgLCAwfSBkYXRhYmFzZTpRdW90YU1hbmFnZW1lbnREYXRhYmFz
ZTIKIFRoaXMgdGVzdCBjaGVja3MgdG8gbWFrZSBzdXJlIHRoYXQgcXVvdGFzIGFyZSBlbmZvcmNl
ZCBwZXItb3JpZ2luIGluc3RlYWQgb2YgcGVyLWRhdGFiYXNlLCBhcyB0aGV5IHdlcmUgcHJpb3Ig
dG8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9wcm9qZWN0cy93ZWJraXQvY2hhbmdlc2V0LzI5OTgz
LgotVGhlIHRlc3QgY2xlYXJzIGFsbCBkYXRhYmFzZXMsIHNldHMgdGhlIHF1b3RhIGZvciB0aGUg
b3JpZ2luIHRvIDMyaywgdGhlbiB0cmllcyB0byBpbnNlcnQgMTdrIG9mIGRhdGEgaW50byB0d28g
ZGF0YWJhc2VzLiBJZiB0aGluZ3MgZ28gYXMgcGxhbm5lZCwgdGhlIFVJIERlbGVnYXRlIHdpbGwg
YmUgaW5mb3JtZWQgb2YgdGhlIGV4Y2VlZGVkIHF1b3RhIGFuZCBzaG91bGQgaW5jcmVhc2UgdGhl
IHF1b3RhIGZvciB0aGlzIG9yaWdpbi4gSW5zZXJ0aW5nIDE3ayBvZiBkYXRhIHRoZSB0aGlyZCB0
aW1lIHNob3VsZCBzdWNjZWVkIGFnYWluLgorVGhlIHRlc3QgY2xlYXJzIGFsbCBkYXRhYmFzZXMs
IHNldHMgdGhlIHF1b3RhIGZvciB0aGUgb3JpZ2luIHRvIDQwaywgdGhlbiB0cmllcyB0byBpbnNl
cnQgMTdrIG9mIGRhdGEgaW50byB0d28gZGF0YWJhc2VzLiBJZiB0aGluZ3MgZ28gYXMgcGxhbm5l
ZCwgdGhlIHNlY29uZCBpbnNlcnQgc2hvdWxkIGZhaWwsIHRoZSBVSSBEZWxlZ2F0ZSBzaG91bGQg
YmUgaW5mb3JtZWQgb2YgdGhlIGV4Y2VlZGVkIHF1b3RhIGFuZCBzaG91bGQgaW5jcmVhc2UgdGhl
IHF1b3RhIGZvciB0aGlzIG9yaWdpbi4gSW5zZXJ0aW5nIDE3ayBvZiBkYXRhIHRoZSB0aGlyZCB0
aW1lIHNob3VsZCBzdWNjZWVkIGFnYWluLgogQWRkaW5nIGEgdGFibGUKIEluc2VydGluZyBzb21l
IGRhdGEKIERvbmUgYWRkaW5nIGRhdGEKSW5kZXg6IExheW91dFRlc3RzL3N0b3JhZ2UvcXVvdGEt
dHJhY2tpbmcuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9zdG9yYWdlL3F1b3RhLXRy
YWNraW5nLmh0bWwJKHJldmlzaW9uIDU4MzM1KQorKysgTGF5b3V0VGVzdHMvc3RvcmFnZS9xdW90
YS10cmFja2luZy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC05MSw3ICs5MSw3IEBAIGZ1bmN0aW9u
IHJ1blRlc3QoKQogICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKICAgICAg
ICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuY2xlYXJBbGxEYXRhYmFzZXMoKTsKICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcERhdGFiYXNlQ2FsbGJhY2tzKCk7Ci0gICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLnNldERhdGFiYXNlUXVvdGEoMzI3NjgpOworICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5zZXREYXRhYmFzZVF1b3RhKDQwOTYwKTsKICAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwogICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CiAgICAgfQpAQCAtMTA1LDcgKzEwNSw3IEBAIGZ1bmN0aW9uIHJ1blRl
c3QoKQogCiA8Ym9keSBvbmxvYWQ9InJ1blRlc3QoKSI+CiBUaGlzIHRlc3QgY2hlY2tzIHRvIG1h
a2Ugc3VyZSB0aGF0IHF1b3RhcyBhcmUgZW5mb3JjZWQgcGVyLW9yaWdpbiBpbnN0ZWFkIG9mIHBl
ci1kYXRhYmFzZSwgYXMgdGhleSB3ZXJlIHByaW9yIHRvIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcv
cHJvamVjdHMvd2Via2l0L2NoYW5nZXNldC8yOTk4My48YnI+Ci1UaGUgdGVzdCBjbGVhcnMgYWxs
IGRhdGFiYXNlcywgc2V0cyB0aGUgcXVvdGEgZm9yIHRoZSBvcmlnaW4gdG8gMzJrLCB0aGVuIHRy
aWVzIHRvIGluc2VydCAxN2sgb2YgZGF0YSBpbnRvIHR3byBkYXRhYmFzZXMuIElmIHRoaW5ncyBn
byBhcyBwbGFubmVkLCB0aGUgVUkgRGVsZWdhdGUgd2lsbCBiZSBpbmZvcm1lZCBvZiB0aGUgZXhj
ZWVkZWQgcXVvdGEgYW5kIHNob3VsZCBpbmNyZWFzZSB0aGUgcXVvdGEgZm9yIHRoaXMgb3JpZ2lu
LiBJbnNlcnRpbmcgMTdrIG9mIGRhdGEgdGhlIHRoaXJkIHRpbWUgc2hvdWxkIHN1Y2NlZWQgYWdh
aW4uCitUaGUgdGVzdCBjbGVhcnMgYWxsIGRhdGFiYXNlcywgc2V0cyB0aGUgcXVvdGEgZm9yIHRo
ZSBvcmlnaW4gdG8gNDBrLCB0aGVuIHRyaWVzIHRvIGluc2VydCAxN2sgb2YgZGF0YSBpbnRvIHR3
byBkYXRhYmFzZXMuIElmIHRoaW5ncyBnbyBhcyBwbGFubmVkLCB0aGUgc2Vjb25kIGluc2VydCBz
aG91bGQgZmFpbCwgdGhlIFVJIERlbGVnYXRlIHNob3VsZCBiZSBpbmZvcm1lZCBvZiB0aGUgZXhj
ZWVkZWQgcXVvdGEgYW5kIHNob3VsZCBpbmNyZWFzZSB0aGUgcXVvdGEgZm9yIHRoaXMgb3JpZ2lu
LiBJbnNlcnRpbmcgMTdrIG9mIGRhdGEgdGhlIHRoaXJkIHRpbWUgc2hvdWxkIHN1Y2NlZWQgYWdh
aW4uCiA8cHJlIGlkPSJjb25zb2xlIj4KIDwvcHJlPgogPC9ib2R5Pgo=
</data>
<flag name="review"
          id="38485"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="38486"
          type_id="3"
          status="-"
          setter="dumi"
    />
          </attachment>
      

    </bug>

</bugzilla>