<?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>55919</bug_id>
          
          <creation_ts>2011-03-07 19:52:07 -0800</creation_ts>
          <short_desc>Yet another multi-threading bug in WebSQLDatabase.</short_desc>
          <delta_ts>2011-03-11 16:00:47 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore 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>56229</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Nordman">michaeln</reporter>
          <assigned_to name="Michael Nordman">michaeln</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dimich</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>363778</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-07 19:52:07 -0800</bug_when>
    <thetext>See http://code.google.com/p/chromium/issues/detail?id=71026

SQLTransaction and SQLStatement keep RefPtrs to javascript callbacks, which hold onto the tree nodes. We shouldn&apos;t release callbacks or tree nodes on a database thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363782</commentid>
    <comment_count>1</comment_count>
      <attachid>85012</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-07 20:02:06 -0800</bug_when>
    <thetext>Created attachment 85012
fix

Wdyt? I can put the new class in a separate file if need be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363824</commentid>
    <comment_count>2</comment_count>
      <attachid>85012</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-07 22:31:25 -0800</bug_when>
    <thetext>Comment on attachment 85012
fix

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

Thanks for doing this! 
Some notes:

&gt; Source/WebCore/storage/SQLStatement.cpp:170
&gt; +    RefPtr&lt;SQLStatementErrorCallback&gt; errorCallback = m_statementErrorCallback.release();

This looks a bit confusing. The naming is such as if both &apos;callback&apos; objects are of the same type, and the only thing that goes on is refcount manipulations.
Perhaps m_statementErrorCallback -&gt; m_statementErrorCallbackBox or some other name that would make the need for .release() (or unbox()?) obvious. Otherwise code looks like strange assignment of RefPtrs.

&gt; Source/WebCore/storage/SQLStatement.h:52
&gt; +template&lt;typename T&gt; class SQLCallbackReference {

Indeed could be nice to have a file for it.

&gt; Source/WebCore/storage/SQLStatement.h:90
&gt; +    bool has() const

bool operator() could be clearer here...

&gt; Source/WebCore/storage/SQLStatement.h:104
&gt; +    mutable Mutex m_mutex;

Hmm, why do we need a mutex in this class? We didn&apos;t have one before, and it seems posting the task to the context thread for destruction is all we need.
Or, is there more then one issue this patch is fixing?

&gt; Source/WebCore/storage/SQLStatement.h:106
&gt; +    RefPtr&lt;ScriptExecutionContext&gt; m_scriptExecutionContent;

m_scriptExecutionContent -&gt; m_scriptExecutionContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>363997</commentid>
    <comment_count>3</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-08 09:43:00 -0800</bug_when>
    <thetext>Thanks for looking.

(In reply to comment #2)
&gt; &gt; Source/WebCore/storage/SQLStatement.cpp:170
&gt; &gt; +    RefPtr&lt;SQLStatementErrorCallback&gt; errorCallback = m_statementErrorCallback.release();
&gt; 
&gt; This looks a bit confusing. The naming is such as if both &apos;callback&apos; objects are of the same type...

The &apos;box&apos; term works for me.

&gt; &gt; Source/WebCore/storage/SQLStatement.h:52
&gt; &gt; +template&lt;typename T&gt; class SQLCallbackReference {
&gt; 
&gt; Indeed could be nice to have a file for it.

Definitely want to get the class name settled before updating dozens of make files to add the .h file.

&gt; &gt; Source/WebCore/storage/SQLStatement.h:90
&gt; &gt; +    bool has() const
&gt; 
&gt; bool operator() could be clearer here...

sgtm

&gt; &gt; Source/WebCore/storage/SQLStatement.h:104
&gt; &gt; +    mutable Mutex m_mutex;
&gt; 
&gt; Hmm, why do we need a mutex in this class? We didn&apos;t have one before, and it seems posting the task to the context thread for destruction is all we need.
&gt; Or, is there more then one issue this patch is fixing?

Multiple threads can test and clearing the reference. I couldn&apos;t convince myself that a mutex wasn&apos;t needed, and now it&apos;s two data members that are being cleared instead of one. Can you convince me that we don&apos;t need one?

&gt; &gt; Source/WebCore/storage/SQLStatement.h:106
&gt; &gt; +    RefPtr&lt;ScriptExecutionContext&gt; m_scriptExecutionContent;
&gt; 
&gt; m_scriptExecutionContent -&gt; m_scriptExecutionContext

Doh... thnx!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364074</commentid>
    <comment_count>4</comment_count>
      <attachid>85074</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-08 11:54:57 -0800</bug_when>
    <thetext>Created attachment 85074
box terminology</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364083</commentid>
    <comment_count>5</comment_count>
      <attachid>85074</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-08 12:00:14 -0800</bug_when>
    <thetext>Comment on attachment 85074
box terminology

How&apos;s SQLCallbackBox for a class name and unbox() for the method of interest?

&gt; Source/WebCore/ChangeLog:17
&gt; +        (WebCore::SQLCallbackReference::SQLCallbackReference):

oh... i&apos;ll have to update the ChangeLog too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364120</commentid>
    <comment_count>6</comment_count>
      <attachid>85074</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-08 13:00:09 -0800</bug_when>
    <thetext>Comment on attachment 85074
box terminology

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

Looks good.

&gt; Source/WebCore/storage/SQLStatement.h:51
&gt; +// SQLStatement and SQLTransaction on the proper thread.

Lets add a comment to this class describing all 3 ways the &apos;boxed&apos; reference can be dereferenced:
- by destructing enclosing object - on either thread
- by calling clear() - on either thread
- by unboxing and then dereferencing normally - on context thread only)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364121</commentid>
    <comment_count>7</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-08 13:01:22 -0800</bug_when>
    <thetext>Oh, and lets remove taking a lock in bool operators...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364125</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-08 13:08:04 -0800</bug_when>
    <thetext>Thnx... i still need to do the make file changes... any bets on how many builds i can break by adding a single .h file to the project :)

&gt; Source/WebCore/storage/SQLStatement.h:98
&gt; +        MutexLocker locker(m_mutex);

Right... locking the mutex in the bool operators looks pointless, i think we can remove them too.

Q: RefPtr and PassRefPtr use a trick discourage mis-using operator bool(), should that trick be used here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364178</commentid>
    <comment_count>9</comment_count>
      <attachid>85074</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-08 14:59:32 -0800</bug_when>
    <thetext>Comment on attachment 85074
box terminology

Removing flag for now, reflecting offline discussion:
- it&apos;s good to have a separate file for this new class
- lets go back from bool operators to hasCallback() (w/o lock)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364195</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-08 15:38:00 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 85074 [details])
&gt; Removing flag for now, reflecting offline discussion:
&gt; - it&apos;s good to have a separate file for this new class
&gt; - lets go back from bool operators to hasCallback() (w/o lock)

Sounds good... when i figure out which dozen makefiles to change and how... i&apos;ll post a new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364284</commentid>
    <comment_count>11</comment_count>
      <attachid>85124</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-08 19:16:22 -0800</bug_when>
    <thetext>Created attachment 85124
wrapper

Made changes as discussed. I still have to poke at more make files to add the new .h to them, but the code changes should be settled now. I&apos;m on take three for  a class name so far, any better suggestions would be welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364287</commentid>
    <comment_count>12</comment_count>
      <attachid>85124</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-08 19:19:31 -0800</bug_when>
    <thetext>Comment on attachment 85124
wrapper

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

&gt; Source/WebCore/storage/SQLCallbackWrapper.h:93
&gt; +    mutable Mutex m_mutex;

this doesn&apos;t have to be mutable anymore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364694</commentid>
    <comment_count>13</comment_count>
      <attachid>85216</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-09 12:28:01 -0800</bug_when>
    <thetext>Created attachment 85216
wrapper2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364696</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-03-09 12:30:03 -0800</bug_when>
    <thetext>Attachment 85216 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/storage/SQLCallbackWrapper.h:28:  #ifndef header guard has wrong style, please use: WTF_SQLCallbackWrapper_h  [build/header_guard] [5]
Total errors found: 1 in 7 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>364700</commentid>
    <comment_count>15</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-09 12:36:52 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Attachment 85216 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
&gt; 
&gt; Source/WebCore/storage/SQLCallbackWrapper.h:28:  #ifndef header guard has wrong style, please use: WTF_SQLCallbackWrapper_h  [build/header_guard] [5]

The error is real. The suggestion is wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364716</commentid>
    <comment_count>16</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-09 12:54:42 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; Attachment 85216 [details] [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
&gt; &gt; 
&gt; &gt; Source/WebCore/storage/SQLCallbackWrapper.h:28:  #ifndef header guard has wrong style, please use: WTF_SQLCallbackWrapper_h  [build/header_guard] [5]
&gt; 
&gt; The error is real. The suggestion is wrong.

Yes, i see it. Still have poked at most of the make files, but i wanted to see what the EWS bots thought about this much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364813</commentid>
    <comment_count>17</comment_count>
      <attachid>85244</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-09 15:08:25 -0800</bug_when>
    <thetext>Created attachment 85244
wrapper

fixed the header guard and added the .h file to various project/make fiels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364822</commentid>
    <comment_count>18</comment_count>
      <attachid>85244</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-09 15:32:43 -0800</bug_when>
    <thetext>Comment on attachment 85244
wrapper

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

Just a few comments, so r- for now (but perhaps after a bit of back and forth I could be convinced to do r+ with some changes on check in).

&gt; Source/WebCore/storage/SQLCallbackWrapper.h:72
&gt; +        context-&gt;postTask(createCallbackTask(&amp;safeRelease, m_callback.release().leakRef()));

Personally, I would prefer if postTask were done outside of the mutex (since it can be as long as m_callback.release().leakRef() is stored in a local).

&gt; Source/WebCore/storage/SQLCallbackWrapper.h:77
&gt; +        ASSERT(!m_callback || m_scriptExecutionContext-&gt;isContextThread());

Doesn&apos;t the assert need to be inside of the locker?

&gt; Source/WebCore/storage/SQLCallbackWrapper.h:83
&gt; +    bool hasCallback() const { return m_callback; }

I don&apos;t understand how this method could be useful unless there is some implied locking mechanism at a higher level which ensure that it isn&apos;t called if clear or unwrap may be called on another thread.

Given that clear and unwrap both have mutex guards in them, it implies that they may be called on another thread so this seems concerning.

btw, I&apos;m not arguing for a mutex here as that doesn&apos;t fix the problem that I&apos;m talking about. It feels like this needs a comment in the code because something tricky is happening here (and in general this method feels like it is prone to leading people to write broken code).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364841</commentid>
    <comment_count>19</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-09 16:00:20 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 85244 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85244&amp;action=review
&gt; 
&gt; Just a few comments, so r- for now (but perhaps after a bit of back and forth I could be convinced to do r+ with some changes on check in).
&gt; 
&gt; &gt; Source/WebCore/storage/SQLCallbackWrapper.h:72
&gt; &gt; +        context-&gt;postTask(createCallbackTask(&amp;safeRelease, m_callback.release().leakRef()));
&gt; 
&gt; Personally, I would prefer if postTask were done outside of the mutex
&gt; (since it can be as long as m_callback.release().leakRef() is stored in a local).

If you think it matters, i could change it, although that would decrease readability a little.

&gt; &gt; Source/WebCore/storage/SQLCallbackWrapper.h:77
&gt; &gt; +        ASSERT(!m_callback || m_scriptExecutionContext-&gt;isContextThread());
&gt; 
&gt; Doesn&apos;t the assert need to be inside of the locker?

Yup... good point.

&gt; &gt; Source/WebCore/storage/SQLCallbackWrapper.h:83
&gt; &gt; +    bool hasCallback() const { return m_callback; }
&gt; 
&gt; I don&apos;t understand how this method could be useful unless there is some implied locking mechanism at a higher level which ensure that it isn&apos;t called if clear or unwrap may be called on another thread.
&gt; 
&gt; Given that clear and unwrap both have mutex guards in them, it implies that they may be called on another thread so this seems concerning.
&gt; 
&gt; btw, I&apos;m not arguing for a mutex here as that doesn&apos;t fix the problem that I&apos;m talking about. It feels like this needs a comment in the code because something tricky is happening here (and in general this method feels like it is prone to leading people to write broken code).

Dimich and chatted about the lock in this method and we decided to remove it as it doesn&apos;t actually accomplish anything. This method is used for optimizations in the database system to avoid some round trips to the context thread and back to the database thread. The usage is correct albeit fragile.

The entire db system if fragile, i&apos;m just trying to fix the particular problem of deref&apos;ing the callbacks on the wrong thread w/o tackling the larger problems with the db system.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364859</commentid>
    <comment_count>20</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-09 16:09:30 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (From update of attachment 85244 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85244&amp;action=review
&gt; &gt; 
&gt; &gt; Just a few comments, so r- for now (but perhaps after a bit of back and forth I could be convinced to do r+ with some changes on check in).
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/storage/SQLCallbackWrapper.h:72
&gt; &gt; &gt; +        context-&gt;postTask(createCallbackTask(&amp;safeRelease, m_callback.release().leakRef()));
&gt; &gt; 
&gt; &gt; Personally, I would prefer if postTask were done outside of the mutex
&gt; &gt; (since it can be as long as m_callback.release().leakRef() is stored in a local).
&gt; 
&gt; If you think it matters, i could change it, although that would decrease readability a little.

I had to spend a few minutes time convincing myself it was safe because the postTask also takes a mutex (but fortunately this should be in a MessageQueue which will only take the mutex around queue and dequeue operations so there shouldn&apos;t be any possible lock order inversion happening) so it is ok as is but it feels mildly fragile.

&gt; 
&gt; &gt; &gt; Source/WebCore/storage/SQLCallbackWrapper.h:83
&gt; &gt; &gt; +    bool hasCallback() const { return m_callback; }
&gt; 
&gt; Dimich and chatted about the lock in this method and we decided to remove it as it doesn&apos;t actually accomplish anything. This method is used for optimizations in the database system to avoid some round trips to the context thread and back to the database thread. The usage is correct albeit fragile.

I was thinking of when someone would use this method and it seemed that immediately after it returned the result could be wrong -- a lock wouldn&apos;t help that.

Upon further reflection, this will all work as long as one always checks the return value from unwrap which it looks like the code always does (and this method is only used as a quick optimization check).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364873</commentid>
    <comment_count>21</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-03-09 16:30:07 -0800</bug_when>
    <thetext>We might add comment to hasCallback() that this method can only be used for optimization in threaded environment, since David is the second already who spotted potential trouble here.
Of course, if one would do a more substantial redesign of Database code, this kind of things would go. It is only there because existing code does the same type of check, and so far it doesn&apos;t seem to cause a problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364974</commentid>
    <comment_count>22</comment_count>
      <attachid>85280</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-09 20:45:02 -0800</bug_when>
    <thetext>Created attachment 85280
wrapper

made the changes we talked about</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365364</commentid>
    <comment_count>23</comment_count>
      <attachid>85280</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-10 11:42:40 -0800</bug_when>
    <thetext>Comment on attachment 85280
wrapper

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

Two nits. If you fixed them before check in, that would be nice, but the check in could go in as is.

&gt; Source/WebCore/ChangeLog:7
&gt; +        which holds those referenc whose dtor will schedule the release of those references on the ScriptExecution thread.

typo: referenc

&gt; Source/WebCore/storage/SQLCallbackWrapper.h:75
&gt; +            callback =  m_callback.release().leakRef();

extra space after =</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>365379</commentid>
    <comment_count>24</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-03-10 11:49:14 -0800</bug_when>
    <thetext>fyi dimich was ok with this r+ as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366232</commentid>
    <comment_count>25</comment_count>
      <attachid>85511</attachid>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-11 12:28:55 -0800</bug_when>
    <thetext>Created attachment 85511
wrapper

i&apos;ve fixed up the typos david mentioned and just syncd/merged the project files... so i&apos;d like to throw this patch at the commit queue now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366238</commentid>
    <comment_count>26</comment_count>
      <attachid>85511</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-11 12:34:40 -0800</bug_when>
    <thetext>Comment on attachment 85511
wrapper

Rejecting attachment 85511 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;ap...&quot; exit_code: 2

Last 500 characters of output:
Core/WebCore.vcproj/WebCore.vcproj.rej
patching file Source/WebCore/WebCore.xcodeproj/project.pbxproj
patching file Source/WebCore/storage/SQLCallbackWrapper.h
patching file Source/WebCore/storage/SQLStatement.cpp
patching file Source/WebCore/storage/SQLStatement.h
patching file Source/WebCore/storage/SQLTransaction.cpp
patching file Source/WebCore/storage/SQLTransaction.h

Failed to run &quot;[u&apos;/Projects/CommitQueue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;David Levin&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8141387</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366244</commentid>
    <comment_count>27</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-11 12:44:30 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; (From update of attachment 85511 [details])
&gt; Rejecting attachment 85511 [details] from commit-queue.
&gt; 
&gt; Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;ap...&quot; exit_code: 2
&gt; 
&gt; Last 500 characters of output:
&gt; Core/WebCore.vcproj/WebCore.vcproj.rej
&gt; patching file Source/WebCore/WebCore.xcodeproj/project.pbxproj
&gt; patching file Source/WebCore/storage/SQLCallbackWrapper.h
&gt; patching file Source/WebCore/storage/SQLStatement.cpp
&gt; patching file Source/WebCore/storage/SQLStatement.h
&gt; patching file Source/WebCore/storage/SQLTransaction.cpp
&gt; patching file Source/WebCore/storage/SQLTransaction.h
&gt; 
&gt; Failed to run &quot;[u&apos;/Projects/CommitQueue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;David Levin&apos;, u&apos;--force&apos;]&quot; exit_code: 1
&gt; 
&gt; Full output: http://queues.webkit.org/results/8141387

whatever... landing manually using webkit-patch land</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366245</commentid>
    <comment_count>28</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-03-11 12:45:37 -0800</bug_when>
    <thetext>&gt; whatever... landing manually using webkit-patch land

Sorry.  :(

We really need to improve the commit-queue&apos;s error messages for these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366264</commentid>
    <comment_count>29</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-11 13:10:16 -0800</bug_when>
    <thetext>Committed r80876: &lt;http://trac.webkit.org/changeset/80876&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366344</commentid>
    <comment_count>30</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-11 14:56:26 -0800</bug_when>
    <thetext>(In reply to comment #29)
&gt; Committed r80876: &lt;http://trac.webkit.org/changeset/80876&gt;

bah... some test failures on GTK and XP...

change-version.html
executesql-accepts-only-one-statement.html
null-callbacks.html
quota-tracking.html
statement-error-callback.html

... all crash, no data on how</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366372</commentid>
    <comment_count>31</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-11 15:27:55 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (In reply to comment #29)
&gt; &gt; Committed r80876: &lt;http://trac.webkit.org/changeset/80876&gt;
&gt; 
&gt; bah... some test failures on GTK and XP...
&gt; 
&gt; change-version.html
&gt; executesql-accepts-only-one-statement.html
&gt; null-callbacks.html
&gt; quota-tracking.html
&gt; statement-error-callback.html
&gt; 
&gt; ... all crash, no data on how

Gee... maybe it&apos;s that missing ~ on the dtor :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>366392</commentid>
    <comment_count>32</comment_count>
    <who name="Michael Nordman">michaeln</who>
    <bug_when>2011-03-11 16:00:47 -0800</bug_when>
    <thetext>Gee... maybe it&apos;s that missing ~ on the dtor?

http://trac.webkit.org/changeset/80897</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85012</attachid>
            <date>2011-03-07 20:02:06 -0800</date>
            <delta_ts>2011-03-08 11:54:57 -0800</delta_ts>
            <desc>fix</desc>
            <filename>callbackRef.txt</filename>
            <type>text/plain</type>
            <size>15507</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNTI3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDMtMDcgIE1pY2hhZWwg
Tm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFNRTENhbGxiYWNrUmVmZXJlbmNlLgorICAgICAg
ICBJbnN0ZWFkIG9mIGRpcmVjdGx5IGhvbGRpbmcgUmVmUHRyPFQ+cyB0byB0aGUgQ2FsbGJhY2sg
b2JqZWN0cyBpbiBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uLCBob2xkIGFuIG9iamVj
dCB3aGljaAorICAgICAgICBob2xkcyB0aG9zZSByZWZlcmVuY2UgYW5kIHdob3NlIGR0b3Igd2ls
bCBzY2hlZHVsZSB0aGUgcmVsZWFzZSBvZiB0aG9zZSByZWZlcmVuY2VzIG9uIHRoZSBTY3JpcHRF
eGVjdXRpb24gdGhyZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU5MTkKKworICAgICAgICBObyBuZXcgdGVzdHMsIGV4aXN0aW5nIHRlc3RzIGFw
cGx5LgorCisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMU3RhdGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVt
ZW50OjpTUUxTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpwZXJm
b3JtQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTUUxDYWxsYmFja1JlZmVyZW5jZTo6U1FMQ2FsbGJhY2tSZWZlcmVuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMQ2FsbGJhY2tSZWZlcmVuY2U6On5TUUxDYWxsYmFja1JlZmVy
ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxDYWxsYmFja1JlZmVyZW5jZTo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMQ2FsbGJhY2tSZWZlcmVuY2U6OnJlbGVhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMQ2FsbGJhY2tSZWZlcmVuY2U6Omhhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxDYWxsYmFja1JlZmVyZW5jZTo6c2FmZVJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
U1FMU3RhdGVtZW50OjpoYXNTdGF0ZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxTdGF0ZW1lbnQ6Omhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OlNRTFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpleGVj
dXRlU1FMKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpjaGVja0FuZEhhbmRs
ZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcnJvcik6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oOgorCiAyMDExLTAzLTA3ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNw
cAkocmV2aXNpb24gODA1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0MywxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShj
b25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRz
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lvbnMp
CitQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoRGF0YWJhc2Uq
IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVl
PiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywg
UGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQg
cGVybWlzc2lvbnMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQoc3Rh
dGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBwZXJtaXNzaW9ucykp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KGRhdGFiYXNlLCBzdGF0ZW1l
bnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHBlcm1pc3Npb25zKSk7CiB9
CiAKLVNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBj
b25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKK1NRTFN0YXRlbWVudDo6U1FMU3RhdGVt
ZW50KERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQogICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50LmNy
b3NzVGhyZWFkU3RyaW5nKCkpCiAgICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBt
X3N0YXRlbWVudENhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxi
YWNrKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX3N0YXRlbWVudENhbGxiYWNrKGNhbGxiYWNrLCBk
YXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9zdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrKGVycm9yQ2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpCiAgICAgLCBtX3Blcm1pc3Npb25zKHBlcm1pc3Npb25zKQogewogfQpAQCAtMTY2LDE3ICsx
NjYsMTYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhTUUxUcgogCiAgICAg
Ym9vbCBjYWxsYmFja0Vycm9yID0gZmFsc2U7CiAKKyAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2Fs
bGJhY2s+IGNhbGxiYWNrID0gbV9zdGF0ZW1lbnRDYWxsYmFjay5yZWxlYXNlKCk7CisgICAgUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX3N0YXRlbWVu
dEVycm9yQ2FsbGJhY2sucmVsZWFzZSgpOworCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUg
c3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCByZXN1bHRlZCBpbiBhbiBlcnJvciwK
ICAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBl
cnJvciBjYWxsYmFjay4KICAgICBpZiAobV9lcnJvcikgewotICAgICAgICBBU1NFUlQobV9zdGF0
ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3RhdGVtZW50
RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOwot
ICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgY2FsbGJhY2tFcnJv
ciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwgbV9yZXN1
bHRTZXQuZ2V0KCkpOwotCi0gICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywgdG8gYnJl
YWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsKLSAgICBt
X3N0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSAwOworICAgICAgICBBU1NFUlQoZXJyb3JDYWxsYmFj
ayk7CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0
cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChjYWxsYmFjaykKKyAg
ICAgICAgY2FsbGJhY2tFcnJvciA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24s
IG1fcmVzdWx0U2V0LmdldCgpKTsKIAogICAgIHJldHVybiBjYWxsYmFja0Vycm9yOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oCShyZXZpc2lvbiA4MDUyMykKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDEwICszMCwxMyBAQAogCiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCisjaW5jbHVkZSAiQ3Jv
c3NUaHJlYWRUYXNrLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCiAjaW5j
bHVkZSAiU1FMVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC00NCwxNSArNDcsNzQgQEAgY2xhc3MgU1FMU3RhdGVtZW50Q2Fs
bGJhY2s7CiBjbGFzcyBTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrOwogY2xhc3MgU1FMVHJhbnNh
Y3Rpb247CiAKKy8vIEEgaGVscGVyIGNsYXNzIHRvIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgQ2Fs
bGJhY2sgb2JqZWN0cyBoZWxkIGJ5CisvLyBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9u
IG9uIHRoZSBwcm9wZXIgdGhyZWFkLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gY2xhc3MgU1FMQ2Fs
bGJhY2tSZWZlcmVuY2UgeworcHVibGljOgorICAgIFNRTENhbGxiYWNrUmVmZXJlbmNlKFBhc3NS
ZWZQdHI8VD4gY2FsbGJhY2ssIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQpCisgICAgICAgIDogbV9jYWxsYmFjayhjYWxsYmFjaykKKyAgICAgICAgLCBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRlbnQobV9jYWxsYmFjayA/IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQg
OiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2NhbGxiYWNrIHx8IChtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRlbnQuZ2V0KCkgJiYgbV9zY3JpcHRFeGVjdXRpb25Db250ZW50LT5pc0NvbnRleHRU
aHJlYWQoKSkpOworICAgIH0KKworICAgIH5TUUxDYWxsYmFja1JlZmVyZW5jZSgpCisgICAgewor
ICAgICAgICBjbGVhcigpOworICAgIH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBpZiAoIW1fY2FsbGJhY2sp
IHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9zY3JpcHRFeGVjdXRpb25Db250ZW50KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25D
b250ZW50LT5pc0NvbnRleHRUaHJlYWQoKSkgeworICAgICAgICAgICAgbV9jYWxsYmFjayA9IDA7
CisgICAgICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRlbnQgPSAwOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQgPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRlbnQucmVsZWFzZSgpLmxlYWtSZWYoKTsKKyAgICAg
ICAgY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZzYWZlUmVsZWFzZSwgbV9j
YWxsYmFjay5yZWxlYXNlKCkubGVha1JlZigpKSk7CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxU
PiByZWxlYXNlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayB8fCBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRlbnQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICAgICAgTXV0ZXhMb2Nr
ZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRlbnQgPSAw
OworICAgICAgICByZXR1cm4gbV9jYWxsYmFjay5yZWxlYXNlKCk7CisgICAgfQorCisgICAgYm9v
bCBoYXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgICAgICByZXR1cm4gbV9jYWxsYmFjay5nZXQoKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIHZvaWQgc2FmZVJlbGVhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgVCogY2FsbGJhY2spCisgICAgeworICAgICAgICBBU1NFUlQoY2FsbGJhY2sgJiYgY29udGV4
dCAmJiBjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgICAgIGNhbGxiYWNrLT5kZXJl
ZigpOworICAgICAgICBjb250ZXh0LT5kZXJlZigpOworICAgIH0KKworICAgIG11dGFibGUgTXV0
ZXggbV9tdXRleDsKKyAgICBSZWZQdHI8VD4gbV9jYWxsYmFjazsKKyAgICBSZWZQdHI8U2NyaXB0
RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZW50OworfTsKKwogY2xhc3Mg
U1FMU3RhdGVtZW50IDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMU3RhdGVtZW50PiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVy
bWlzc2lvbnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gY3JlYXRlKERh
dGFiYXNlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOwogCiAgICAgYm9vbCBleGVjdXRlKERhdGFiYXNlKik7
CiAgICAgYm9vbCBsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0OwogCi0gICAg
Ym9vbCBoYXNTdGF0ZW1lbnRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50Q2Fs
bGJhY2s7IH0KLSAgICBib29sIGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2s7IH0KKyAgICBib29sIGhhc1N0YXRlbWVudENh
bGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZW1lbnRDYWxsYmFjay5oYXMoKTsgfQorICAg
IGJvb2wgaGFzU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVt
ZW50RXJyb3JDYWxsYmFjay5oYXMoKTsgfQogCiAgICAgdm9pZCBzZXREYXRhYmFzZURlbGV0ZWRF
cnJvcigpOwogICAgIHZvaWQgc2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcigpOwpAQCAtNjEsMTUg
KzEyMywxNSBAQCBwdWJsaWM6CiAKICAgICBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCB7IHJl
dHVybiBtX2Vycm9yLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFNRTFN0YXRlbWVudChjb25zdCBT
dHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNz
UmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiwgaW50IHBlcm1pc3Npb25zKTsKKyAgICBTUUxTdGF0ZW1lbnQoRGF0YWJhc2Uq
LCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1l
bnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0
ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBlcm1pc3Npb25zKTsKIAogICAgIHZvaWQgc2V0RmFp
bHVyZUR1ZVRvUXVvdGEoKTsKICAgICB2b2lkIGNsZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKTsKIAog
ICAgIFN0cmluZyBtX3N0YXRlbWVudDsKICAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJndW1lbnRz
OwotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gbV9zdGF0ZW1lbnRDYWxsYmFjazsK
LSAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gbV9zdGF0ZW1lbnRFcnJvckNh
bGxiYWNrOworICAgIFNRTENhbGxiYWNrUmVmZXJlbmNlPFNRTFN0YXRlbWVudENhbGxiYWNrPiBt
X3N0YXRlbWVudENhbGxiYWNrOworICAgIFNRTENhbGxiYWNrUmVmZXJlbmNlPFNRTFN0YXRlbWVu
dEVycm9yQ2FsbGJhY2s+IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjazsKIAogICAgIFJlZlB0cjxT
UUxFcnJvcj4gbV9lcnJvcjsKICAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiBtX3Jlc3VsdFNldDsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lv
biA4MDUyMykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw5IEBAIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2Fj
dGlvbihEYXRhYmFzZSoKICAgICAsIG1fZXhlY3V0ZVNxbEFsbG93ZWQoZmFsc2UpCiAgICAgLCBt
X2RhdGFiYXNlKGRiKQogICAgICwgbV93cmFwcGVyKHdyYXBwZXIpCi0gICAgLCBtX2NhbGxiYWNr
KGNhbGxiYWNrKQotICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQotICAg
ICwgbV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX2NhbGxiYWNrKGNhbGxi
YWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9zdWNjZXNzQ2FsbGJh
Y2soc3VjY2Vzc0NhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwg
bV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpCiAgICAgLCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChmYWxzZSkKICAgICAsIG1f
bW9kaWZpZWREYXRhYmFzZShmYWxzZSkKICAgICAsIG1fbG9ja0FjcXVpcmVkKGZhbHNlKQpAQCAt
MTAwLDcgKzEwMCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QK
ICAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQogICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFz
ZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKIAotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0
YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBj
YWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVybWlzc2lvbnMpOworICAgIFJlZlB0cjxTUUxTdGF0
ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKG1fZGF0YWJhc2UuZ2V0KCks
IHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVybWlz
c2lvbnMpOwogCiAgICAgaWYgKG1fZGF0YWJhc2UtPmRlbGV0ZWQoKSkKICAgICAgICAgc3RhdGVt
ZW50LT5zZXREYXRhYmFzZURlbGV0ZWRFcnJvcigpOwpAQCAtMTU5LDkgKzE1OSw5IEBAIHZvaWQg
U1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2UKICAgICBtX25leHRTdGVwID0gMDsK
IAogICAgIC8vIFJlbGVhc2UgdGhlIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJl
bmNlIGN5Y2xlcy4KLSAgICBtX2NhbGxiYWNrID0gMDsKLSAgICBtX3N1Y2Nlc3NDYWxsYmFjayA9
IDA7Ci0gICAgbV9lcnJvckNhbGxiYWNrID0gMDsKKyAgICBtX2NhbGxiYWNrLmNsZWFyKCk7Cisg
ICAgbV9zdWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2suY2xlYXIo
KTsKIAogICAgIC8vIFRoZSBuZXh0IHN0ZXBzIHNob3VsZCBiZSBleGVjdXRlZCBvbmx5IGlmIHdl
J3JlIG9uIHRoZSBEQiB0aHJlYWQuCiAgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBkYXRhYmFz
ZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVh
ZElEKCkpCkBAIC0yOTMsMTEgKzI5MywxMSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVy
VHJhbnNhY3Rpb25DCiB7CiAgICAgYm9vbCBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9IGZh
bHNlOwogCi0gICAgaWYgKG1fY2FsbGJhY2spIHsKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25D
YWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrLnJlbGVhc2UoKTsKKyAgICBpZiAoY2FsbGJh
Y2spIHsKICAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIHNob3Vs
ZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gIW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpOwor
ICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9ICFjYWxsYmFjay0+aGFuZGxlRXZl
bnQodGhpcyk7CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKLSAgICAgICAg
bV9jYWxsYmFjayA9IDA7CiAgICAgfQogCiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCA1IC0gSWYg
dGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdhcyBudWxsIG9yIHJhaXNlZCBhbiBleGNlcHRpb24s
IGp1bXAgdG8gdGhlIGVycm9yIGNhbGxiYWNrCkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBTUUxU
cmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbAogICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQg
PSBmYWxzZTsKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9
IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBj
YWxsYmFjayByYWlzZWQgYW4gZXhjZXB0aW9uIG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBk
aWQgbm90IHJldHVybiBmYWxzZSIpOworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInRoZSBzdGF0ZW1lbnQgY2FsbGJh
Y2sgcmFpc2VkIGFuIGV4Y2VwdGlvbiBvciBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgZGlkIG5v
dCByZXR1cm4gZmFsc2UiKTsKICAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcih0cnVlKTsK
ICAgICB9IGVsc2UKICAgICAgICAgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKQEAgLTQ2NSw3
ICs0NjUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0CiAKICAg
ICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUg
bWFya2VkIGFzICJpbiBwcm9ncmVzcyIKICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Q
cm9ncmVzcygpKSB7Ci0gICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrID0gMDsKKyAgICAgICAgbV9z
dWNjZXNzQ2FsbGJhY2suY2xlYXIoKTsKICAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FM
RXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiZmFpbGVkIHRvIGNvbW1pdCB0
aGUgdHJhbnNhY3Rpb24iKTsKICAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7
CiAgICAgICAgIHJldHVybjsKQEAgLTQ4MCwxMCArNDgwLDEwIEBAIHZvaWQgU1FMVHJhbnNhY3Rp
b246OnBvc3RmbGlnaHRBbmRDb21taXQKICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25D
bGllbnQoKS0+ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihkYXRhYmFzZSgpKTsKIAogICAgIC8v
IE5vdyByZWxlYXNlIG91ciB1bm5lZWRlZCBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBj
eWNsZXMuCi0gICAgbV9lcnJvckNhbGxiYWNrID0gMDsKKyAgICBtX2Vycm9yQ2FsbGJhY2suY2xl
YXIoKTsKIAogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3MgY2Fs
bGJhY2ssIGlmIHRoZXJlIGlzIG9uZQotICAgIGlmIChtX3N1Y2Nlc3NDYWxsYmFjaykgeworICAg
IGlmIChtX3N1Y2Nlc3NDYWxsYmFjay5oYXMoKSkgewogICAgICAgICBtX25leHRTdGVwID0gJlNR
TFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrOwogICAgICAgICBMT0coU3RvcmFn
ZUFQSSwgIlNjaGVkdWxpbmcgZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24g
JXBcbiIsIHRoaXMpOwogICAgICAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2Fs
bGJhY2sodGhpcyk7CkBAIC00OTQsMTEgKzQ5NCw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBv
c3RmbGlnaHRBbmRDb21taXQKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2Fs
bGJhY2soKQogewogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3Mg
Y2FsbGJhY2sKLSAgICBBU1NFUlQobV9zdWNjZXNzQ2FsbGJhY2spOwotICAgIG1fc3VjY2Vzc0Nh
bGxiYWNrLT5oYW5kbGVFdmVudCgpOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBjYWxsYmFj
ayB0byBicmVhayByZWZlcmVuY2UgY3ljbGUKLSAgICBtX3N1Y2Nlc3NDYWxsYmFjayA9IDA7Cisg
ICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gbV9zdWNjZXNzQ2FsbGJh
Y2sucmVsZWFzZSgpOworICAgIEFTU0VSVChzdWNjZXNzQ2FsbGJhY2spOworICAgIHN1Y2Nlc3ND
YWxsYmFjay0+aGFuZGxlRXZlbnQoKTsKIAogICAgIC8vIFNjaGVkdWxlIGEgInBvc3Qtc3VjY2Vz
cyBjYWxsYmFjayIgc3RlcCB0byByZXR1cm4gY29udHJvbCB0byB0aGUgZGF0YWJhc2UgdGhyZWFk
IGluIGNhc2UgdGhlcmUKICAgICAvLyBhcmUgZnVydGhlciB0cmFuc2FjdGlvbnMgcXVldWVkIHVw
IGZvciB0aGlzIERhdGFiYXNlCkBAIC01MjQsNyArNTIyLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bjo6Y2xlYW51cEFmdGVyU3VjY2VzcwogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFu
c2FjdGlvbkVycm9yKGJvb2wgaW5DYWxsYmFjaykKIHsKLSAgICBpZiAobV9lcnJvckNhbGxiYWNr
KSB7CisgICAgaWYgKG1fZXJyb3JDYWxsYmFjay5oYXMoKSkgewogICAgICAgICBpZiAoaW5DYWxs
YmFjaykKICAgICAgICAgICAgIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2soKTsKICAg
ICAgICAgZWxzZSB7CkBAIC01NTIsMTAgKzU1MCw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJUcmFuc2FjdGlvbkUKIAogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIgLSBJZiBleGlz
dHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRoZSBsYXN0CiAgICAgLy8gZXJyb3IgdG8g
aGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgotICAgIGlmIChtX2Vycm9yQ2FsbGJh
Y2spIHsKLSAgICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9u
RXJyb3IuZ2V0KCkpOwotICAgICAgICBtX2Vycm9yQ2FsbGJhY2sgPSAwOwotICAgIH0KKyAgICBS
ZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gbV9lcnJv
ckNhbGxiYWNrLnJlbGVhc2UoKTsKKyAgICBpZiAoZXJyb3JDYWxsYmFjaykKKyAgICAgICAgZXJy
b3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKIAogICAg
IG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJy
b3JDYWxsYmFjazsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVy
VHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiA4MDUy
MykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMTE1LDkgKzExNSw5IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8RGF0YWJhc2U+
IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gbV93cmFwcGVy
OwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwotICAgIFJl
ZlB0cjxWb2lkQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwotICAgIFJlZlB0cjxTUUxUcmFu
c2FjdGlvbkVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKKyAgICBTUUxDYWxsYmFja1Jl
ZmVyZW5jZTxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOworICAgIFNRTENhbGxi
YWNrUmVmZXJlbmNlPFZvaWRDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7CisgICAgU1FMQ2Fs
bGJhY2tSZWZlcmVuY2U8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJh
Y2s7CiAgICAgUmVmUHRyPFNRTEVycm9yPiBtX3RyYW5zYWN0aW9uRXJyb3I7CiAgICAgYm9vbCBt
X3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudDsKICAgICBib29sIG1fbW9kaWZpZWREYXRhYmFz
ZTsK
</data>
<flag name="review"
          id="77075"
          type_id="1"
          status="-"
          setter="dimich"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85074</attachid>
            <date>2011-03-08 11:54:57 -0800</date>
            <delta_ts>2011-03-08 19:16:22 -0800</delta_ts>
            <desc>box terminology</desc>
            <filename>callbackRef2.txt</filename>
            <type>text/plain</type>
            <size>15609</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNTI3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDMtMDcgIE1pY2hhZWwg
Tm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFNRTENhbGxiYWNrUmVmZXJlbmNlLgorICAgICAg
ICBJbnN0ZWFkIG9mIGRpcmVjdGx5IGhvbGRpbmcgUmVmUHRyPFQ+cyB0byB0aGUgQ2FsbGJhY2sg
b2JqZWN0cyBpbiBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uLCBob2xkIGFuIG9iamVj
dCB3aGljaAorICAgICAgICBob2xkcyB0aG9zZSByZWZlcmVuY2UgYW5kIHdob3NlIGR0b3Igd2ls
bCBzY2hlZHVsZSB0aGUgcmVsZWFzZSBvZiB0aG9zZSByZWZlcmVuY2VzIG9uIHRoZSBTY3JpcHRF
eGVjdXRpb24gdGhyZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU5MTkKKworICAgICAgICBObyBuZXcgdGVzdHMsIGV4aXN0aW5nIHRlc3RzIGFw
cGx5LgorCisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1FMU3RhdGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVt
ZW50OjpTUUxTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpwZXJm
b3JtQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTUUxDYWxsYmFja1JlZmVyZW5jZTo6U1FMQ2FsbGJhY2tSZWZlcmVuY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMQ2FsbGJhY2tSZWZlcmVuY2U6On5TUUxDYWxsYmFja1JlZmVy
ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxDYWxsYmFja1JlZmVyZW5jZTo6Y2xlYXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMQ2FsbGJhY2tSZWZlcmVuY2U6OnJlbGVhc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMQ2FsbGJhY2tSZWZlcmVuY2U6Omhhcyk6CisgICAgICAgIChXZWJDb3Jl
OjpTUUxDYWxsYmFja1JlZmVyZW5jZTo6c2FmZVJlbGVhc2UpOgorICAgICAgICAoV2ViQ29yZTo6
U1FMU3RhdGVtZW50OjpoYXNTdGF0ZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxTdGF0ZW1lbnQ6Omhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3Jh
Z2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246
OlNRTFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpleGVj
dXRlU1FMKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpjaGVja0FuZEhhbmRs
ZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFu
c2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdCk6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcnJvcik6CisgICAgICAg
IChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFj
ayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oOgorCiAyMDExLTAzLTA3ICBB
bGV4ZXkgUHJvc2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IERhcmluIEFkbGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNw
cAkocmV2aXNpb24gODA1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDE2ICs0MywxNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShj
b25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRz
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lvbnMp
CitQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoRGF0YWJhc2Uq
IGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVl
PiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywg
UGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQg
cGVybWlzc2lvbnMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQoc3Rh
dGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBwZXJtaXNzaW9ucykp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KGRhdGFiYXNlLCBzdGF0ZW1l
bnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHBlcm1pc3Npb25zKSk7CiB9
CiAKLVNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBj
b25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKK1NRTFN0YXRlbWVudDo6U1FMU3RhdGVt
ZW50KERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQogICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50LmNy
b3NzVGhyZWFkU3RyaW5nKCkpCiAgICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBt
X3N0YXRlbWVudENhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxi
YWNrKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX3N0YXRlbWVudENhbGxiYWNrQm94KGNhbGxiYWNr
LCBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9zdGF0ZW1lbnRF
cnJvckNhbGxiYWNrQm94KGVycm9yQ2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCiAgICAgLCBtX3Blcm1pc3Npb25zKHBlcm1pc3Npb25zKQogewogfQpAQCAtMTY2
LDE3ICsxNjYsMTYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhTUUxUcgog
CiAgICAgYm9vbCBjYWxsYmFja0Vycm9yID0gZmFsc2U7CiAKKyAgICBSZWZQdHI8U1FMU3RhdGVt
ZW50Q2FsbGJhY2s+IGNhbGxiYWNrID0gbV9zdGF0ZW1lbnRDYWxsYmFja0JveC51bmJveCgpOwor
ICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gbV9z
dGF0ZW1lbnRFcnJvckNhbGxiYWNrQm94LnVuYm94KCk7CisKICAgICAvLyBDYWxsIHRoZSBhcHBy
b3ByaWF0ZSBzdGF0ZW1lbnQgY2FsbGJhY2sgYW5kIHRyYWNrIGlmIGl0IHJlc3VsdGVkIGluIGFu
IGVycm9yLAogICAgIC8vIGJlY2F1c2UgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8gdGhlIHRyYW5z
YWN0aW9uIGVycm9yIGNhbGxiYWNrLgogICAgIGlmIChtX2Vycm9yKSB7Ci0gICAgICAgIEFTU0VS
VChtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2spOwotICAgICAgICBjYWxsYmFja0Vycm9yID0gbV9z
dGF0ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwgbV9lcnJvci5n
ZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChtX3N0YXRlbWVudENhbGxiYWNrKQotICAgICAgICBjYWxs
YmFja0Vycm9yID0gIW1fc3RhdGVtZW50Q2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9u
LCBtX3Jlc3VsdFNldC5nZXQoKSk7Ci0KLSAgICAvLyBOb3cgcmVsZWFzZSBvdXIgY2FsbGJhY2tz
LCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fc3RhdGVtZW50Q2FsbGJhY2sgPSAw
OwotICAgIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayA9IDA7CisgICAgICAgIEFTU0VSVChlcnJv
ckNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9IGVycm9yQ2FsbGJhY2stPmhhbmRs
ZUV2ZW50KHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKKyAgICB9IGVsc2UgaWYgKGNhbGxi
YWNrKQorICAgICAgICBjYWxsYmFja0Vycm9yID0gIWNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFu
c2FjdGlvbiwgbV9yZXN1bHRTZXQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGNhbGxiYWNrRXJyb3I7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgJKHJldmlzaW9uIDgw
NTIzKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTAgKzMwLDEzIEBACiAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKKyNpbmNs
dWRlICJDcm9zc1RocmVhZFRhc2suaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQu
aCIKICNpbmNsdWRlICJTUUxWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDE1ICs0Nyw4MCBAQCBjbGFzcyBTUUxTdGF0
ZW1lbnRDYWxsYmFjazsKIGNsYXNzIFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s7CiBjbGFzcyBT
UUxUcmFuc2FjdGlvbjsKIAorLy8gQSBoZWxwZXIgY2xhc3MgdG8gc2FmZWx5IGRlcmVmZXJlbmNl
IHRoZSBDYWxsYmFjayBvYmplY3RzIGhlbGQgYnkKKy8vIFNRTFN0YXRlbWVudCBhbmQgU1FMVHJh
bnNhY3Rpb24gb24gdGhlIHByb3BlciB0aHJlYWQuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFz
cyBTUUxDYWxsYmFja0JveCB7CitwdWJsaWM6CisgICAgU1FMQ2FsbGJhY2tCb3goUGFzc1JlZlB0
cjxUPiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCkKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAsIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dChtX2NhbGxiYWNrID8gc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA6IDAp
CisgICAgeworICAgICAgICBBU1NFUlQoIW1fY2FsbGJhY2sgfHwgKG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dC5nZXQoKSAmJiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKSk7CisgICAgfQorCisgICAgflNRTENhbGxiYWNrQm94KCkKKyAgICB7CisgICAgICAgIGNs
ZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIGlmICghbV9jYWxsYmFjaykgeworICAgICAg
ICAgICAgQVNTRVJUKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlz
Q29udGV4dFRocmVhZCgpKSB7CisgICAgICAgICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICAgICAg
ICAgIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IG1fc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dC5yZWxlYXNlKCkubGVha1JlZigpOworICAgICAgICBjb250ZXh0
LT5wb3N0VGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJnNhZmVSZWxlYXNlLCBtX2NhbGxiYWNrLnJl
bGVhc2UoKS5sZWFrUmVmKCkpKTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPFQ+IHVuYm94KCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayB8fCBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAwOworICAgICAgICBy
ZXR1cm4gbV9jYWxsYmFjay5yZWxlYXNlKCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAg
ICAgICByZXR1cm4gIW1fY2FsbGJhY2s7CisgICAgfQorICAgIAorICAgIG9wZXJhdG9yIGJvb2wo
KSBjb25zdAorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAg
ICAgICByZXR1cm4gbV9jYWxsYmFjazsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZv
aWQgc2FmZVJlbGVhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVCogY2FsbGJh
Y2spCisgICAgeworICAgICAgICBBU1NFUlQoY2FsbGJhY2sgJiYgY29udGV4dCAmJiBjb250ZXh0
LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgICAgIGNhbGxiYWNrLT5kZXJlZigpOworICAgICAg
ICBjb250ZXh0LT5kZXJlZigpOworICAgIH0KKworICAgIG11dGFibGUgTXV0ZXggbV9tdXRleDsK
KyAgICBSZWZQdHI8VD4gbV9jYWxsYmFjazsKKyAgICBSZWZQdHI8U2NyaXB0RXhlY3V0aW9uQ29u
dGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworfTsKKwogY2xhc3MgU1FMU3RhdGVtZW50
IDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMU3RhdGVtZW50PiB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29u
c3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQ
YXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gY3JlYXRlKERhdGFiYXNlKiwgY29u
c3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQg
cGVybWlzc2lvbnMpOwogCiAgICAgYm9vbCBleGVjdXRlKERhdGFiYXNlKik7CiAgICAgYm9vbCBs
YXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNTdGF0
ZW1lbnRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50Q2FsbGJhY2s7IH0KLSAg
ICBib29sIGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
bWVudEVycm9yQ2FsbGJhY2s7IH0KKyAgICBib29sIGhhc1N0YXRlbWVudENhbGxiYWNrKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZW1lbnRDYWxsYmFja0JveDsgfQorICAgIGJvb2wgaGFzU3RhdGVt
ZW50RXJyb3JDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFj
a0JveDsgfQogCiAgICAgdm9pZCBzZXREYXRhYmFzZURlbGV0ZWRFcnJvcigpOwogICAgIHZvaWQg
c2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcigpOwpAQCAtNjEsMTUgKzEyOSwxNSBAQCBwdWJsaWM6
CiAKICAgICBTUUxFcnJvciogc3FsRXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgp
OyB9CiBwcml2YXRlOgotICAgIFNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwg
Y29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBl
cm1pc3Npb25zKTsKKyAgICBTUUxTdGF0ZW1lbnQoRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIHN0
YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNr
PiwgaW50IHBlcm1pc3Npb25zKTsKIAogICAgIHZvaWQgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsK
ICAgICB2b2lkIGNsZWFyRmFpbHVyZUR1ZVRvUXVvdGEoKTsKIAogICAgIFN0cmluZyBtX3N0YXRl
bWVudDsKICAgICBWZWN0b3I8U1FMVmFsdWU+IG1fYXJndW1lbnRzOwotICAgIFJlZlB0cjxTUUxT
dGF0ZW1lbnRDYWxsYmFjaz4gbV9zdGF0ZW1lbnRDYWxsYmFjazsKLSAgICBSZWZQdHI8U1FMU3Rh
dGVtZW50RXJyb3JDYWxsYmFjaz4gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrOworICAgIFNRTENh
bGxiYWNrQm94PFNRTFN0YXRlbWVudENhbGxiYWNrPiBtX3N0YXRlbWVudENhbGxiYWNrQm94Owor
ICAgIFNRTENhbGxiYWNrQm94PFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IG1fc3RhdGVtZW50
RXJyb3JDYWxsYmFja0JveDsKIAogICAgIFJlZlB0cjxTUUxFcnJvcj4gbV9lcnJvcjsKICAgICBS
ZWZQdHI8U1FMUmVzdWx0U2V0PiBtX3Jlc3VsdFNldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA4MDUyMykKKysrIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3
MSw5IEBAIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSoKICAgICAsIG1f
ZXhlY3V0ZVNxbEFsbG93ZWQoZmFsc2UpCiAgICAgLCBtX2RhdGFiYXNlKGRiKQogICAgICwgbV93
cmFwcGVyKHdyYXBwZXIpCi0gICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9zdWNj
ZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQotICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9y
Q2FsbGJhY2spCisgICAgLCBtX2NhbGxiYWNrQm94KGNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKQorICAgICwgbV9zdWNjZXNzQ2FsbGJhY2tCb3goc3VjY2Vzc0NhbGxiYWNr
LCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9lcnJvckNhbGxiYWNrQm94
KGVycm9yQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgLCBtX3No
b3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChmYWxzZSkKICAgICAsIG1fbW9kaWZpZWREYXRhYmFz
ZShmYWxzZSkKICAgICAsIG1fbG9ja0FjcXVpcmVkKGZhbHNlKQpAQCAtMTAwLDcgKzEwMCw3IEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QKICAgICBlbHNlIGlmICht
X3JlYWRPbmx5KQogICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJl
YWRPbmx5TWFzazsKIAotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0
YXRlbWVudDo6Y3JlYXRlKHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJh
Y2tFcnJvciwgcGVybWlzc2lvbnMpOworICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVu
dCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKG1fZGF0YWJhc2UuZ2V0KCksIHNxbFN0YXRlbWVudCwg
YXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVybWlzc2lvbnMpOwogCiAgICAg
aWYgKG1fZGF0YWJhc2UtPmRlbGV0ZWQoKSkKICAgICAgICAgc3RhdGVtZW50LT5zZXREYXRhYmFz
ZURlbGV0ZWRFcnJvcigpOwpAQCAtMTU5LDkgKzE1OSw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246
OmNoZWNrQW5kSGFuZGxlQ2xvc2UKICAgICBtX25leHRTdGVwID0gMDsKIAogICAgIC8vIFJlbGVh
c2UgdGhlIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAg
ICBtX2NhbGxiYWNrID0gMDsKLSAgICBtX3N1Y2Nlc3NDYWxsYmFjayA9IDA7Ci0gICAgbV9lcnJv
ckNhbGxiYWNrID0gMDsKKyAgICBtX2NhbGxiYWNrQm94LmNsZWFyKCk7CisgICAgbV9zdWNjZXNz
Q2FsbGJhY2tCb3guY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2tCb3guY2xlYXIoKTsKIAog
ICAgIC8vIFRoZSBuZXh0IHN0ZXBzIHNob3VsZCBiZSBleGVjdXRlZCBvbmx5IGlmIHdlJ3JlIG9u
IHRoZSBEQiB0aHJlYWQuCiAgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBkYXRhYmFzZSgpLT5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkp
CkBAIC0yOTMsMTEgKzI5MywxMSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNh
Y3Rpb25DCiB7CiAgICAgYm9vbCBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9IGZhbHNlOwog
Ci0gICAgaWYgKG1fY2FsbGJhY2spIHsKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFj
az4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrQm94LnVuYm94KCk7CisgICAgaWYgKGNhbGxiYWNrKSB7
CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVlOwotICAgICAgICBzaG91bGREZWxp
dmVyRXJyb3JDYWxsYmFjayA9ICFtX2NhbGxiYWNrLT5oYW5kbGVFdmVudCh0aGlzKTsKKyAgICAg
ICAgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSAhY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRo
aXMpOwogICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gZmFsc2U7Ci0gICAgICAgIG1fY2Fs
bGJhY2sgPSAwOwogICAgIH0KIAogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgNSAtIElmIHRoZSB0
cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgbnVsbCBvciByYWlzZWQgYW4gZXhjZXB0aW9uLCBqdW1w
IHRvIHRoZSBlcnJvciBjYWxsYmFjawpAQCAtNDI1LDcgKzQyNSw3IEBAIHZvaWQgU1FMVHJhbnNh
Y3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWwKICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gZmFs
c2U7CiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxF
cnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInRoZSBzdGF0ZW1lbnQgY2FsbGJh
Y2sgcmFpc2VkIGFuIGV4Y2VwdGlvbiBvciBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgZGlkIG5v
dCByZXR1cm4gZmFsc2UiKTsKKyAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6
OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ0aGUgc3RhdGVtZW50IGNhbGxiYWNrIHJh
aXNlZCBhbiBleGNlcHRpb24gb3Igc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrIGRpZCBub3QgcmV0
dXJuIGZhbHNlIik7CiAgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IodHJ1ZSk7CiAgICAg
fSBlbHNlCiAgICAgICAgIHNjaGVkdWxlVG9SdW5TdGF0ZW1lbnRzKCk7CkBAIC00NjUsNyArNDY1
LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdAogCiAgICAgLy8g
SWYgdGhlIGNvbW1pdCBmYWlsZWQsIHRoZSB0cmFuc2FjdGlvbiB3aWxsIHN0aWxsIGJlIG1hcmtl
ZCBhcyAiaW4gcHJvZ3Jlc3MiCiAgICAgaWYgKG1fc3FsaXRlVHJhbnNhY3Rpb24tPmluUHJvZ3Jl
c3MoKSkgewotICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFjayA9IDA7CisgICAgICAgIG1fc3VjY2Vz
c0NhbGxiYWNrQm94LmNsZWFyKCk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVy
cm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgImZhaWxlZCB0byBjb21taXQgdGhl
IHRyYW5zYWN0aW9uIik7CiAgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwog
ICAgICAgICByZXR1cm47CkBAIC00ODAsMTAgKzQ4MCwxMCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
Ojpwb3N0ZmxpZ2h0QW5kQ29tbWl0CiAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xp
ZW50KCktPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7CiAKICAgICAvLyBO
b3cgcmVsZWFzZSBvdXIgdW5uZWVkZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3lj
bGVzLgotICAgIG1fZXJyb3JDYWxsYmFjayA9IDA7CisgICAgbV9lcnJvckNhbGxiYWNrQm94LmNs
ZWFyKCk7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEwIC0gRGVsaXZlciBzdWNjZXNzIGNh
bGxiYWNrLCBpZiB0aGVyZSBpcyBvbmUKLSAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spIHsKKyAg
ICBpZiAobV9zdWNjZXNzQ2FsbGJhY2tCb3gpIHsKICAgICAgICAgbV9uZXh0U3RlcCA9ICZTUUxU
cmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjazsKICAgICAgICAgTE9HKFN0b3JhZ2VB
UEksICJTY2hlZHVsaW5nIGRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVw
XG4iLCB0aGlzKTsKICAgICAgICAgbV9kYXRhYmFzZS0+c2NoZWR1bGVUcmFuc2FjdGlvbkNhbGxi
YWNrKHRoaXMpOwpAQCAtNDk0LDExICs0OTQsOSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0
ZmxpZ2h0QW5kQ29tbWl0CiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0NhbGxi
YWNrKCkKIHsKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEwIC0gRGVsaXZlciBzdWNjZXNzIGNh
bGxiYWNrCi0gICAgQVNTRVJUKG1fc3VjY2Vzc0NhbGxiYWNrKTsKLSAgICBtX3N1Y2Nlc3NDYWxs
YmFjay0+aGFuZGxlRXZlbnQoKTsKLQotICAgIC8vIFJlbGVhc2UgdGhlIGxhc3QgY2FsbGJhY2sg
dG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlCi0gICAgbV9zdWNjZXNzQ2FsbGJhY2sgPSAwOworICAg
IFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFjayA9IG1fc3VjY2Vzc0NhbGxiYWNr
Qm94LnVuYm94KCk7CisgICAgQVNTRVJUKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgc3VjY2Vzc0Nh
bGxiYWNrLT5oYW5kbGVFdmVudCgpOwogCiAgICAgLy8gU2NoZWR1bGUgYSAicG9zdC1zdWNjZXNz
IGNhbGxiYWNrIiBzdGVwIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBkYXRhYmFzZSB0aHJlYWQg
aW4gY2FzZSB0aGVyZQogICAgIC8vIGFyZSBmdXJ0aGVyIHRyYW5zYWN0aW9ucyBxdWV1ZWQgdXAg
Zm9yIHRoaXMgRGF0YWJhc2UKQEAgLTUyNCw3ICs1MjIsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
OjpjbGVhbnVwQWZ0ZXJTdWNjZXNzCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZVRyYW5z
YWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKQogewotICAgIGlmIChtX2Vycm9yQ2FsbGJhY2sp
IHsKKyAgICBpZiAobV9lcnJvckNhbGxiYWNrQm94KSB7CiAgICAgICAgIGlmIChpbkNhbGxiYWNr
KQogICAgICAgICAgICAgZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwogICAgICAg
ICBlbHNlIHsKQEAgLTU1MiwxMCArNTUwLDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clRyYW5zYWN0aW9uRQogCiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIElmIGV4aXN0cywg
aW52b2tlIGVycm9yIGNhbGxiYWNrIHdpdGggdGhlIGxhc3QKICAgICAvLyBlcnJvciB0byBoYXZl
IG9jY3VycmVkIGluIHRoaXMgdHJhbnNhY3Rpb24uCi0gICAgaWYgKG1fZXJyb3JDYWxsYmFjaykg
ewotICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJv
ci5nZXQoKSk7Ci0gICAgICAgIG1fZXJyb3JDYWxsYmFjayA9IDA7Ci0gICAgfQorICAgIFJlZlB0
cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9yQ2Fs
bGJhY2tCb3gudW5ib3goKTsKKyAgICBpZiAoZXJyb3JDYWxsYmFjaykKKyAgICAgICAgZXJyb3JD
YWxsYmFjay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKIAogICAgIG1f
bmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclRyYW5zYWN0aW9uRXJyb3JD
YWxsYmFjazsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxpbmcgY2xlYW51cEFmdGVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCShyZXZpc2lvbiA4MDUyMykK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTE1LDkgKzExNSw5IEBAIHByaXZhdGU6CiAKICAgICBSZWZQdHI8RGF0YWJhc2U+IG1f
ZGF0YWJhc2U7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3JhcHBlcj4gbV93cmFwcGVyOwot
ICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrOwotICAgIFJlZlB0
cjxWb2lkQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwotICAgIFJlZlB0cjxTUUxUcmFuc2Fj
dGlvbkVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKKyAgICBTUUxDYWxsYmFja0JveDxT
UUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrQm94OworICAgIFNRTENhbGxiYWNrQm94
PFZvaWRDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2tCb3g7CisgICAgU1FMQ2FsbGJhY2tCb3g8
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tCb3g7CiAgICAgUmVm
UHRyPFNRTEVycm9yPiBtX3RyYW5zYWN0aW9uRXJyb3I7CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5
Q3VycmVudFN0YXRlbWVudDsKICAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85124</attachid>
            <date>2011-03-08 19:16:22 -0800</date>
            <delta_ts>2011-03-09 12:28:01 -0800</delta_ts>
            <desc>wrapper</desc>
            <filename>callbackWrapper.txt</filename>
            <type>text/plain</type>
            <size>21428</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjEwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMDMtMDggIE1pY2hhZWwg
Tm9yZG1hbiAgPG1ub3JkbWFuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFNRTENhbGxiYWNrV3JhcHBlcgorICAgICAgICBJ
bnN0ZWFkIG9mIGRpcmVjdGx5IGhvbGRpbmcgUmVmUHRycyB0byB0aGUgQ2FsbGJhY2sgb2JqZWN0
cyBpbiBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uLCBob2xkIGEgd3JhcHBlciBvYmpl
Y3QKKyAgICAgICAgd2hpY2ggaG9sZHMgdGhvc2UgcmVmZXJlbmMgd2hvc2UgZHRvciB3aWxsIHNj
aGVkdWxlIHRoZSByZWxlYXNlIG9mIHRob3NlIHJlZmVyZW5jZXMgb24gdGhlIFNjcmlwdEV4ZWN1
dGlvbiB0aHJlYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NTkxOQorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3RpbmcgdGVzdHMgYXBwbHku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogc3RvcmFnZS9TUUxDYWxsYmFja1dyYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTUUxDYWxsYmFja1dyYXBwZXI6OlNRTENhbGxiYWNrV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpTUUxDYWxsYmFja1dyYXBwZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTENh
bGxiYWNrV3JhcHBlcjo6dW53cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTENhbGxiYWNrV3Jh
cHBlcjo6aGFzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMQ2FsbGJhY2tXcmFwcGVy
OjpzYWZlUmVsZWFzZSk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1FMU3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVt
ZW50OjpwZXJmb3JtQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6Omhhc1N0YXRlbWVudENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6aGFzU3RhdGVtZW50RXJyb3JDYWxsYmFj
ayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2Fj
dGlvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9u
Lmg6CisKIDIwMTEtMDMtMDggIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgQ2hyb21pdW0gTGludXggYnVpbGQgZml4IGF0dGVtcHQgYWZ0ZXIgcjgwNTgyLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gODA1MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY0MSw2ICs2NDEsNyBAQAogCQkyMEQ2
MjkyNzEyNTM2OTBCMDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMEQ2MjkyNTEyNTM2OTBC
MDAwODE1NDMgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmggKi87IH07CiAJCTIyODg1RTY0
MTMwMUFFNEMwMDUyNkU2OCAvKiBKU0RPTUltcGxlbWVudGF0aW9uQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDIyODg1RTYzMTMwMUFFNEMw
MDUyNkU2OCAvKiBKU0RPTUltcGxlbWVudGF0aW9uQ3VzdG9tLmNwcCAqLzsgfTsKIAkJMjI4QzI4
NDUxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8q
IFNjcmlwdFdyYXBwYWJsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTI0NUQ3RjY3MTMyNzEyMEIwMDM0OTJBNiAvKiBTUUxDYWxsYmFja1dyYXBw
ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0NUQ3
RjY2MTMyNzEyMEIwMDM0OTJBNiAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCAqLzsgfTsKIAkJMjRG
NTRFQUMxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI0RjU0RUFBMTAxRkU5MTQw
MDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi87IH07CiAJCTI0RjU0RUFEMTAx
RkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjRGNTRFQUIxMDFGRTkxNDAwMEFFNzQxIC8q
IEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsg
fTsgfTsKIAkJMjU0MkY0REExMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9y
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI1NDJG
NEQ4MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgKi87IH07CkBA
IC02OTg2LDYgKzY5ODcsNyBAQAogCQkyMjg4NUU2MzEzMDFBRTRDMDA1MjZFNjggLyogSlNET01J
bXBsZW1lbnRhdGlvbkN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU0RPTUltcGxlbWVudGF0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMjI4QzI4NDQxMEQ4MjUwMDAwOUQwRDBFIC8qIFNjcmlwdFdyYXBwYWJsZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JpcHRXcmFwcGFibGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjQ0MkJCRjgxMTk0QzlEMzAwRDQ5NDY5IC8qIEhhc2hD
aGFuZ2VFdmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoQ2hhbmdl
RXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMjQ1RDdGNjYxMzI3MTIwQjAw
MzQ5MkE2IC8qIFNRTENhbGxiYWNrV3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTUUxDYWxsYmFja1dyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVIb3N0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjRGNTRFQUIxMDFGRTkxNDAwMEFF
NzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEFwcGxpY2F0aW9uQ2FjaGVIb3N0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTI1NDJGNEQ4MTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBVc2VyR2VzdHVyZUluZGljYXRv
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMjgzMCw2ICsxMjgzMiw3IEBA
CiAJCTFBRTgyRUM5MENBQUUxNzcwMDIyMzdBRSAvKiBzdG9yYWdlICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkyNDVEN0Y2NjEzMjcxMjBCMDAzNDkyQTYg
LyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggKi8sCiAJCQkJQjVCNURDNjcxMTlCQjNENTAwMkE4Nzkw
IC8qIEFic3RyYWN0RGF0YWJhc2UuY3BwICovLAogCQkJCUI1QjVEQzY4MTE5QkIzRDUwMDJBODc5
MCAvKiBBYnN0cmFjdERhdGFiYXNlLmggKi8sCiAJCQkJNTE0MTg1RUQwQ0Q2NUYwNDAwNzYzQzk5
IC8qIENoYW5nZVZlcnNpb25XcmFwcGVyLmNwcCAqLywKQEAgLTIyNTQ0LDYgKzIyNTQ3LDcgQEAK
IAkJCQk1OTNEM0VCMTEzMjUzMjk1MDA1N0U3RUUgLyogSmF2YVN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTk4RDc3REYxMzI1NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTk4RDc3RTMxMzI1NDIwRTAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMjQ1RDdGNjcxMzI3MTIwQjAwMzQ5MkE2IC8qIFNRTENhbGxi
YWNrV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdl
L1NRTENhbGxiYWNrV3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL1NRTENhbGxiYWNrV3JhcHBlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
Q29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisjaWZuZGVmIFNRTENhbGxiYWNrZVdyYXBwZXJfaAorI2RlZmluZSBTUUxDYWxsYmFja2VXcmFw
cGVyX2gKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFz
ay5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgaGVs
cGVyIGNsYXNzIHRvIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgY2FsbGJhY2sgb2JqZWN0cyBoZWxk
IGJ5CisvLyBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uIG9uIHRoZSBwcm9wZXIgdGhy
ZWFkLiBUaGUgJ3dyYXBwZWQnCisvLyBjYWxsYmFjayBpcyBkZXJlZmVyZW5jZWQ6CisvLyAtIGJ5
IGRlc3RydWN0aW5nIHRoZSBlbmNsb3Npbmcgd3JhcHBlciAtIG9uIGFueSB0aHJlYWQKKy8vIC0g
YnkgY2FsbGluZyBjbGVhcigpIC0gb24gYW55IHRocmVhZAorLy8gLSBieSB1bndyYXBwaW5nIGFu
ZCB0aGVuIGRlcmVmZXJlbmNpbmcgbm9ybWFsbHkgLSBvbiBjb250ZXh0IHRocmVhZCBvbmx5Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTUUxDYWxsYmFja1dyYXBwZXIgeworcHVibGljOgor
ICAgIFNRTENhbGxiYWNrV3JhcHBlcihQYXNzUmVmUHRyPFQ+IGNhbGxiYWNrLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICA6IG1fY2FsbGJh
Y2soY2FsbGJhY2spCisgICAgICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KG1fY2FsbGJh
Y2sgPyBzY3JpcHRFeGVjdXRpb25Db250ZXh0IDogMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgh
bV9jYWxsYmFjayB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpICYmIG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpKTsKKyAgICB9CisKKyAgICBTUUxD
YWxsYmFja1dyYXBwZXIoKQorICAgIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICB9CisKKyAgICB2
b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsK
KyAgICAgICAgaWYgKCFtX2NhbGxiYWNrKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpIHsKKyAg
ICAgICAgICAgIG1fY2FsbGJhY2sgPSAwOworICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25D
b250ZXh0ID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnJl
bGVhc2UoKS5sZWFrUmVmKCk7CisgICAgICAgIGNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxi
YWNrVGFzaygmc2FmZVJlbGVhc2UsIG1fY2FsbGJhY2sucmVsZWFzZSgpLmxlYWtSZWYoKSkpOwor
ICAgIH0KKworICAgIFBhc3NSZWZQdHI8VD4gdW53cmFwKCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghbV9jYWxsYmFjayB8fCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVh
ZCgpKTsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3Nj
cmlwdEV4ZWN1dGlvbkNvbnRleHQgPSAwOworICAgICAgICByZXR1cm4gbV9jYWxsYmFjay5yZWxl
YXNlKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbGJhY2s7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBzYWZlUmVsZWFzZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUKiBjYWxsYmFjaykKKyAgICB7CisgICAgICAg
IEFTU0VSVChjYWxsYmFjayAmJiBjb250ZXh0ICYmIGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgp
KTsKKyAgICAgICAgY2FsbGJhY2stPmRlcmVmKCk7CisgICAgICAgIGNvbnRleHQtPmRlcmVmKCk7
CisgICAgfQorCisgICAgbXV0YWJsZSBNdXRleCBtX211dGV4OworICAgIFJlZlB0cjxUPiBtX2Nh
bGxiYWNrOworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxDYWxsYmFja2VXcmFwcGVyX2gKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDgwNTIzKQor
KysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MywxNiArNDMsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRy
PFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZW1l
bnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0
ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxs
YmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQorUGFzc1JlZlB0cjxTUUxTdGF0
ZW1lbnQ+IFNRTFN0YXRlbWVudDo6Y3JlYXRlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3Ry
aW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQogewotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KHN0YXRlbWVudCwgYXJndW1lbnRzLCBj
YWxsYmFjaywgZXJyb3JDYWxsYmFjaywgcGVybWlzc2lvbnMpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFNRTFN0YXRlbWVudChkYXRhYmFzZSwgc3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxi
YWNrLCBlcnJvckNhbGxiYWNrLCBwZXJtaXNzaW9ucykpOwogfQogCi1TUUxTdGF0ZW1lbnQ6OlNR
TFN0YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVl
PiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywg
UGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQg
cGVybWlzc2lvbnMpCitTUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChEYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1
bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNz
aW9ucykKICAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudC5jcm9zc1RocmVhZFN0cmluZygpKQog
ICAgICwgbV9hcmd1bWVudHMoYXJndW1lbnRzKQotICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhj
YWxsYmFjaykKLSAgICAsIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQor
ICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRhdGFiYXNlLT5zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFw
cGVyKGVycm9yQ2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAg
ICAgLCBtX3Blcm1pc3Npb25zKHBlcm1pc3Npb25zKQogewogfQpAQCAtMTY2LDE3ICsxNjYsMTYg
QEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhTUUxUcgogCiAgICAgYm9vbCBj
YWxsYmFja0Vycm9yID0gZmFsc2U7CiAKKyAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+
IGNhbGxiYWNrID0gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CisgICAgUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX3N0YXRlbWVu
dEVycm9yQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9w
cmlhdGUgc3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCByZXN1bHRlZCBpbiBhbiBl
cnJvciwKICAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0cmFuc2Fj
dGlvbiBlcnJvciBjYWxsYmFjay4KICAgICBpZiAobV9lcnJvcikgewotICAgICAgICBBU1NFUlQo
bV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3Rh
dGVtZW50RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0
KCkpOwotICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgY2FsbGJh
Y2tFcnJvciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwg
bV9yZXN1bHRTZXQuZ2V0KCkpOwotCi0gICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywg
dG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsK
LSAgICBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSAwOworICAgICAgICBBU1NFUlQoZXJyb3JD
YWxsYmFjayk7CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSBlcnJvckNhbGxiYWNrLT5oYW5kbGVF
dmVudCh0cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChjYWxsYmFj
aykKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNh
Y3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsKIAogICAgIHJldHVybiBjYWxsYmFja0Vycm9yOwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oCShyZXZpc2lvbiA4MDUy
MykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTENhbGxiYWNrV3JhcHBlci5oIgogI2luY2x1
ZGUgIlNRTFJlc3VsdFNldC5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KQEAgLTQ2LDEzICs0NywxMyBAQCBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIAog
Y2xhc3MgU1FMU3RhdGVtZW50IDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMU3RhdGVtZW50
PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3Rh
dGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBp
bnQgcGVybWlzc2lvbnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gY3Jl
YXRlKERhdGFiYXNlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBh
c3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVy
cm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOwogCiAgICAgYm9vbCBleGVjdXRlKERhdGFi
YXNlKik7CiAgICAgYm9vbCBsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0Owog
Ci0gICAgYm9vbCBoYXNTdGF0ZW1lbnRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVt
ZW50Q2FsbGJhY2s7IH0KLSAgICBib29sIGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2s7IH0KKyAgICBib29sIGhhc1N0YXRl
bWVudENhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIu
aGFzQ2FsbGJhY2soKTsgfQorICAgIGJvb2wgaGFzU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2so
KTsgfQogCiAgICAgdm9pZCBzZXREYXRhYmFzZURlbGV0ZWRFcnJvcigpOwogICAgIHZvaWQgc2V0
VmVyc2lvbk1pc21hdGNoZWRFcnJvcigpOwpAQCAtNjEsMTUgKzYyLDE1IEBAIHB1YmxpYzoKIAog
ICAgIFNRTEVycm9yKiBzcWxFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7IH0K
IHByaXZhdGU6Ci0gICAgU1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25z
dCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlz
c2lvbnMpOworICAgIFNRTFN0YXRlbWVudChEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgc3RhdGVt
ZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3Rh
dGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBp
bnQgcGVybWlzc2lvbnMpOwogCiAgICAgdm9pZCBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOwogICAg
IHZvaWQgY2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpOwogCiAgICAgU3RyaW5nIG1fc3RhdGVtZW50
OwogICAgIFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1bWVudHM7Ci0gICAgUmVmUHRyPFNRTFN0YXRl
bWVudENhbGxiYWNrPiBtX3N0YXRlbWVudENhbGxiYWNrOwotICAgIFJlZlB0cjxTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2s7CisgICAgU1FMQ2FsbGJh
Y2tXcmFwcGVyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBl
cjsKKyAgICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gbV9z
dGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlcjsKIAogICAgIFJlZlB0cjxTUUxFcnJvcj4gbV9l
cnJvcjsKICAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiBtX3Jlc3VsdFNldDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA4MDUyMykKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC03MSw5ICs3MSw5IEBAIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFz
ZSoKICAgICAsIG1fZXhlY3V0ZVNxbEFsbG93ZWQoZmFsc2UpCiAgICAgLCBtX2RhdGFiYXNlKGRi
KQogICAgICwgbV93cmFwcGVyKHdyYXBwZXIpCi0gICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQot
ICAgICwgbV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQotICAgICwgbV9lcnJvckNh
bGxiYWNrKGVycm9yQ2FsbGJhY2spCisgICAgLCBtX2NhbGxiYWNrV3JhcHBlcihjYWxsYmFjaywg
ZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrV3Jh
cHBlcihzdWNjZXNzQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAg
LCBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyKGVycm9yQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpCiAgICAgLCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChmYWxzZSkK
ICAgICAsIG1fbW9kaWZpZWREYXRhYmFzZShmYWxzZSkKICAgICAsIG1fbG9ja0FjcXVpcmVkKGZh
bHNlKQpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwo
Y29uc3QgU3QKICAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQogICAgICAgICBwZXJtaXNzaW9ucyB8
PSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKIAotICAgIFJlZlB0cjxTUUxTdGF0
ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKHNxbFN0YXRlbWVudCwgYXJn
dW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVybWlzc2lvbnMpOworICAgIFJlZlB0
cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKG1fZGF0YWJh
c2UuZ2V0KCksIHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJv
ciwgcGVybWlzc2lvbnMpOwogCiAgICAgaWYgKG1fZGF0YWJhc2UtPmRlbGV0ZWQoKSkKICAgICAg
ICAgc3RhdGVtZW50LT5zZXREYXRhYmFzZURlbGV0ZWRFcnJvcigpOwpAQCAtMTU5LDkgKzE1OSw5
IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2UKICAgICBtX25leHRT
dGVwID0gMDsKIAogICAgIC8vIFJlbGVhc2UgdGhlIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJl
YWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2NhbGxiYWNrID0gMDsKLSAgICBtX3N1Y2Nlc3ND
YWxsYmFjayA9IDA7Ci0gICAgbV9lcnJvckNhbGxiYWNrID0gMDsKKyAgICBtX2NhbGxiYWNrV3Jh
cHBlci5jbGVhcigpOworICAgIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5jbGVhcigpOworICAg
IG1fZXJyb3JDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKIAogICAgIC8vIFRoZSBuZXh0IHN0ZXBz
IHNob3VsZCBiZSBleGVjdXRlZCBvbmx5IGlmIHdlJ3JlIG9uIHRoZSBEQiB0aHJlYWQuCiAgICAg
aWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBkYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCktPmRhdGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpCkBAIC0yOTMsMTEgKzI5MywxMSBA
QCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DCiB7CiAgICAgYm9vbCBz
aG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9IGZhbHNlOwogCi0gICAgaWYgKG1fY2FsbGJhY2sp
IHsKKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxi
YWNrV3JhcHBlci51bndyYXAoKTsKKyAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgbV9leGVj
dXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNr
ID0gIW1fY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpOworICAgICAgICBzaG91bGREZWxpdmVy
RXJyb3JDYWxsYmFjayA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7CiAgICAgICAgIG1f
ZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAg
fQogCiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCA1IC0gSWYgdGhlIHRyYW5zYWN0aW9uIGNhbGxi
YWNrIHdhcyBudWxsIG9yIHJhaXNlZCBhbiBleGNlcHRpb24sIGp1bXAgdG8gdGhlIGVycm9yIGNh
bGxiYWNrCkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0
YXRlbWVudENhbAogICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKIAogICAgIGlmIChy
ZXN1bHQpIHsKLSAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FM
RXJyb3I6OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBjYWxsYmFjayByYWlzZWQgYW4gZXhj
ZXB0aW9uIG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBmYWxzZSIp
OworICAgICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9y
OjpVTktOT1dOX0VSUiwgInRoZSBzdGF0ZW1lbnQgY2FsbGJhY2sgcmFpc2VkIGFuIGV4Y2VwdGlv
biBvciBzdGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgZGlkIG5vdCByZXR1cm4gZmFsc2UiKTsKICAg
ICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcih0cnVlKTsKICAgICB9IGVsc2UKICAgICAgICAg
c2NoZWR1bGVUb1J1blN0YXRlbWVudHMoKTsKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIFNRTFRy
YW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0CiAKICAgICAvLyBJZiB0aGUgY29tbWl0IGZh
aWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVz
cyIKICAgICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAg
IG1fc3VjY2Vzc0NhbGxiYWNrID0gMDsKKyAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVy
LmNsZWFyKCk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUo
U1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwgImZhaWxlZCB0byBjb21taXQgdGhlIHRyYW5zYWN0aW9u
Iik7CiAgICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwogICAgICAgICByZXR1
cm47CkBAIC00ODAsMTAgKzQ4MCwxMCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0
QW5kQ29tbWl0CiAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENv
bW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7CiAKICAgICAvLyBOb3cgcmVsZWFzZSBv
dXIgdW5uZWVkZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1f
ZXJyb3JDYWxsYmFjayA9IDA7CisgICAgbV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwog
CiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjaywg
aWYgdGhlcmUgaXMgb25lCi0gICAgaWYgKG1fc3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgaWYgKG1f
c3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpKSB7CiAgICAgICAgIG1fbmV4dFN0
ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2s7CiAgICAgICAgIExP
RyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrIGZvciB0cmFu
c2FjdGlvbiAlcFxuIiwgdGhpcyk7CiAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNh
Y3Rpb25DYWxsYmFjayh0aGlzKTsKQEAgLTQ5NCwxMSArNDk0LDkgQEAgdm9pZCBTUUxUcmFuc2Fj
dGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1
Y2Nlc3NDYWxsYmFjaygpCiB7CiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIg
c3VjY2VzcyBjYWxsYmFjawotICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgbV9z
dWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBsYXN0
IGNhbGxiYWNrIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZQotICAgIG1fc3VjY2Vzc0NhbGxiYWNr
ID0gMDsKKyAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBtX3N1Y2Nl
c3NDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CisgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykKKyAg
ICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudCgpOwogCiAgICAgLy8gU2NoZWR1bGUg
YSAicG9zdC1zdWNjZXNzIGNhbGxiYWNrIiBzdGVwIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBk
YXRhYmFzZSB0aHJlYWQgaW4gY2FzZSB0aGVyZQogICAgIC8vIGFyZSBmdXJ0aGVyIHRyYW5zYWN0
aW9ucyBxdWV1ZWQgdXAgZm9yIHRoaXMgRGF0YWJhc2UKQEAgLTUyNCw3ICs1MjIsNyBAQCB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzCiAKIHZvaWQgU1FMVHJhbnNhY3Rp
b246OmhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKQogewotICAgIGlmICht
X2Vycm9yQ2FsbGJhY2spIHsKKyAgICBpZiAobV9lcnJvckNhbGxiYWNrV3JhcHBlci5oYXNDYWxs
YmFjaygpKSB7CiAgICAgICAgIGlmIChpbkNhbGxiYWNrKQogICAgICAgICAgICAgZGVsaXZlclRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjaygpOwogICAgICAgICBlbHNlIHsKQEAgLTU1MiwxMCArNTUw
LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRQogCiAgICAgLy8g
VHJhbnNhY3Rpb24gU3RlcCAxMiAtIElmIGV4aXN0cywgaW52b2tlIGVycm9yIGNhbGxiYWNrIHdp
dGggdGhlIGxhc3QKICAgICAvLyBlcnJvciB0byBoYXZlIG9jY3VycmVkIGluIHRoaXMgdHJhbnNh
Y3Rpb24uCi0gICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICBtX2Vycm9yQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7Ci0gICAgICAgIG1fZXJy
b3JDYWxsYmFjayA9IDA7Ci0gICAgfQorICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOwor
ICAgIGlmIChlcnJvckNhbGxiYWNrKQorICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVu
dChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0KCkpOwogCiAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFu
c2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwogICAgIExPRyhT
dG9yYWdlQVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDgwNTIzKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDkg
QEAgcHJpdmF0ZToKIAogICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICBSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVyPiBtX3dyYXBwZXI7Ci0gICAgUmVmUHRyPFNRTFRyYW5z
YWN0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2s7Ci0gICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gbV9z
dWNjZXNzQ2FsbGJhY2s7Ci0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4g
bV9lcnJvckNhbGxiYWNrOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxUcmFuc2FjdGlvbkNh
bGxiYWNrPiBtX2NhbGxiYWNrV3JhcHBlcjsKKyAgICBTUUxDYWxsYmFja1dyYXBwZXI8Vm9pZENh
bGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXI7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVy
PFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrV3JhcHBlcjsKICAg
ICBSZWZQdHI8U1FMRXJyb3I+IG1fdHJhbnNhY3Rpb25FcnJvcjsKICAgICBib29sIG1fc2hvdWxk
UmV0cnlDdXJyZW50U3RhdGVtZW50OwogICAgIGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85216</attachid>
            <date>2011-03-09 12:28:01 -0800</date>
            <delta_ts>2011-03-09 15:08:25 -0800</delta_ts>
            <desc>wrapper2</desc>
            <filename>callbackWrapper2.txt</filename>
            <type>text/plain</type>
            <size>21479</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjU1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDAgQEAKKzIwMTEtMDMtMDggIE1pY2hhZWwg
Tm9yZG1hbiAgPG1ub3JkbWFuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFNRTENhbGxiYWNrV3JhcHBlcgorICAgICAgICBJ
bnN0ZWFkIG9mIGRpcmVjdGx5IGhvbGRpbmcgUmVmUHRycyB0byB0aGUgQ2FsbGJhY2sgb2JqZWN0
cyBpbiBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uLCBob2xkIGEgd3JhcHBlciBvYmpl
Y3QKKyAgICAgICAgd2hpY2ggaG9sZHMgdGhvc2UgcmVmZXJlbmMgd2hvc2UgZHRvciB3aWxsIHNj
aGVkdWxlIHRoZSByZWxlYXNlIG9mIHRob3NlIHJlZmVyZW5jZXMgb24gdGhlIFNjcmlwdEV4ZWN1
dGlvbiB0aHJlYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NTkxOQorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3RpbmcgdGVzdHMgYXBwbHku
CisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAg
ICogc3RvcmFnZS9TUUxDYWxsYmFja1dyYXBwZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTUUxDYWxsYmFja1dyYXBwZXI6OlNRTENhbGxiYWNrV3JhcHBlcik6CisgICAgICAgIChXZWJD
b3JlOjpTUUxDYWxsYmFja1dyYXBwZXI6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTENh
bGxiYWNrV3JhcHBlcjo6dW53cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTENhbGxiYWNrV3Jh
cHBlcjo6aGFzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMQ2FsbGJhY2tXcmFwcGVy
OjpzYWZlUmVsZWFzZSk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
U1FMU3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVt
ZW50OjpwZXJmb3JtQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6Omhhc1N0YXRlbWVudENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6aGFzU3RhdGVtZW50RXJyb3JDYWxsYmFj
ayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTUUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
U1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNh
Y3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2VkT3JJbnRlcnJ1cHRlZERhdGFiYXNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29t
bWl0KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3VjY2Vzc0Nh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2Fj
dGlvbkVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9u
Lmg6CisKIDIwMTEtMDMtMDkgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDgwNjU1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NDEsNiArNjQxLDcgQEAKIAkJMjBENjI5MjcxMjUzNjkw
QjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8q
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjg4NUU2NDEzMDFBRTRDMDA1
MjZFNjggLyogSlNET01JbXBsZW1lbnRhdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyMjg4NUU2MzEzMDFBRTRDMDA1MjZFNjggLyog
SlNET01JbXBsZW1lbnRhdGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCTIyOEMyODQ1MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFw
cGFibGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQkyNDVEODBBMzEzMjgwRTQwMDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNDVEODBBMjEzMjgwRTQw
MDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggKi87IH07CiAJCTI0RjU0RUFDMTAxRkU5
MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyog
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwICovOyB9OwogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3
NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlv
bkNhY2hlSG9zdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTI1
NDJGNERBMTE2NkMyNUEwMEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREODExNjZDMjVB
MDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwICovOyB9OwpAQCAtNjk5Myw2ICs2
OTk0LDcgQEAKIAkJMjI4ODVFNjMxMzAxQUU0QzAwNTI2RTY4IC8qIEpTRE9NSW1wbGVtZW50YXRp
b25DdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01J
bXBsZW1lbnRhdGlvbkN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIy
OEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTI0NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTI0NUQ4MEEyMTMyODBFNDAwMDM0OTJBNiAvKiBT
UUxDYWxsYmFja1dyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FM
Q2FsbGJhY2tXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RjU0RUFB
MTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBs
aWNhdGlvbkNhY2hlSG9zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNTQyRjRE
ODExNjZDMjVBMDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI5MzAsNiArMTI5MzIsNyBAQAogCQkJCTUxQTky
Njc5MEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5RdW90YU1hbmFnZXIuaCAqLywKIAkJCQk1MUE5
MjY3QTBENTNGMDU3MDA2M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwICovLAogCQkJCTUx
QTkyNjdCMEQ1M0YwNTcwMDYzRUNDMiAvKiBPcmlnaW5Vc2FnZVJlY29yZC5oICovLAorCQkJCTI0
NUQ4MEEyMTMyODBFNDAwMDM0OTJBNiAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCAqLywKIAkJCQk1
MUVDOTI1NzBDRTkwREI0MDBGOTAzMDggLyogU1FMRXJyb3IuaCAqLywKIAkJCQk1MUVDOTI1ODBD
RTkwREI0MDBGOTAzMDggLyogU1FMRXJyb3IuaWRsICovLAogCQkJCUI1NkVCQTgzMTFDOUZGODEw
MEIwNDQ3NyAvKiBTUUxFeGNlcHRpb24uaCAqLywKQEAgLTIyNTc3LDYgKzIyNTgwLDcgQEAKIAkJ
CQk1OThENzdERjEzMjU0MUZBMDA3NjFCMjIgLyogSmF2YUFycmF5SlNDLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1OThENzdFMzEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0QzRjk4MzEzMjZDOTM3MDAwOThBNjAgLyogVGV4dE9yaWVudGF0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQkyNDVEODBBMzEzMjgwRTQwMDAzNDkyQTYgLyogU1FMQ2Fs
bGJhY2tXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3Jh
Z2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxDYWxsYmFja1dyYXBwZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKyNpZm5kZWYgU1FMQ2FsbGJhY2tlV3JhcHBlcl9oCisjZGVmaW5lIFNRTENhbGxiYWNrZVdy
YXBwZXJfaAorCisjaWYgRU5BQkxFKERBVEFCQVNFKQorCisjaW5jbHVkZSAiQ3Jvc3NUaHJlYWRU
YXNrLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gQSBo
ZWxwZXIgY2xhc3MgdG8gc2FmZWx5IGRlcmVmZXJlbmNlIHRoZSBjYWxsYmFjayBvYmplY3RzIGhl
bGQgYnkKKy8vIFNRTFN0YXRlbWVudCBhbmQgU1FMVHJhbnNhY3Rpb24gb24gdGhlIHByb3BlciB0
aHJlYWQuIFRoZSAnd3JhcHBlZCcKKy8vIGNhbGxiYWNrIGlzIGRlcmVmZXJlbmNlZDoKKy8vIC0g
YnkgZGVzdHJ1Y3RpbmcgdGhlIGVuY2xvc2luZyB3cmFwcGVyIC0gb24gYW55IHRocmVhZAorLy8g
LSBieSBjYWxsaW5nIGNsZWFyKCkgLSBvbiBhbnkgdGhyZWFkCisvLyAtIGJ5IHVud3JhcHBpbmcg
YW5kIHRoZW4gZGVyZWZlcmVuY2luZyBub3JtYWxseSAtIG9uIGNvbnRleHQgdGhyZWFkIG9ubHkK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IGNsYXNzIFNRTENhbGxiYWNrV3JhcHBlciB7CitwdWJsaWM6
CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyKFBhc3NSZWZQdHI8VD4gY2FsbGJhY2ssIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQpCisgICAgICAgIDogbV9jYWxs
YmFjayhjYWxsYmFjaykKKyAgICAgICAgLCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQobV9jYWxs
YmFjayA/IHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQgOiAwKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KCFtX2NhbGxiYWNrIHx8IChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQuZ2V0KCkgJiYgbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkpOworICAgIH0KKworICAgIFNR
TENhbGxiYWNrV3JhcHBlcigpCisgICAgeworICAgICAgICBjbGVhcigpOworICAgIH0KKworICAg
IHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgp
OworICAgICAgICBpZiAoIW1fY2FsbGJhY2spIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9zY3Jp
cHRFeGVjdXRpb25Db250ZXh0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBpZiAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSkgewor
ICAgICAgICAgICAgbV9jYWxsYmFjayA9IDA7CisgICAgICAgICAgICBtX3NjcmlwdEV4ZWN1dGlv
bkNvbnRleHQgPSAwOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
cmVsZWFzZSgpLmxlYWtSZWYoKTsKKyAgICAgICAgY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZzYWZlUmVsZWFzZSwgbV9jYWxsYmFjay5yZWxlYXNlKCkubGVha1JlZigpKSk7
CisgICAgfQorCisgICAgUGFzc1JlZlB0cjxUPiB1bndyYXAoKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX2NhbGxiYWNrIHx8IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhy
ZWFkKCkpOworICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIG1f
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCA9IDA7CisgICAgICAgIHJldHVybiBtX2NhbGxiYWNrLnJl
bGVhc2UoKTsKKyAgICB9CisKKyAgICBib29sIGhhc0NhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4g
bV9jYWxsYmFjazsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2b2lkIHNhZmVSZWxlYXNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFQqIGNhbGxiYWNrKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGNhbGxiYWNrICYmIGNvbnRleHQgJiYgY29udGV4dC0+aXNDb250ZXh0VGhyZWFk
KCkpOworICAgICAgICBjYWxsYmFjay0+ZGVyZWYoKTsKKyAgICAgICAgY29udGV4dC0+ZGVyZWYo
KTsKKyAgICB9CisKKyAgICBNdXRleCBtX211dGV4OworICAgIFJlZlB0cjxUPiBtX2NhbGxiYWNr
OworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
REFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxDYWxsYmFja2VXcmFwcGVyX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDgwNjU1KQorKysgU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MywxNiArNDMsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFN0
YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNv
bnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRD
YWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4g
ZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQorUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+
IFNRTFN0YXRlbWVudDo6Y3JlYXRlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBz
dGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJy
b3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KHN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFj
aywgZXJyb3JDYWxsYmFjaywgcGVybWlzc2lvbnMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNRTFN0YXRlbWVudChkYXRhYmFzZSwgc3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBl
cnJvckNhbGxiYWNrLCBwZXJtaXNzaW9ucykpOwogfQogCi1TUUxTdGF0ZW1lbnQ6OlNRTFN0YXRl
bWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJn
dW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlz
c2lvbnMpCitTUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChEYXRhYmFzZSogZGF0YWJhc2UsIGNv
bnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMs
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykK
ICAgICA6IG1fc3RhdGVtZW50KHN0YXRlbWVudC5jcm9zc1RocmVhZFN0cmluZygpKQogICAgICwg
bV9hcmd1bWVudHMoYXJndW1lbnRzKQotICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhjYWxsYmFj
aykKLSAgICAsIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQorICAgICwg
bV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpCisgICAgLCBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyKGVy
cm9yQ2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgLCBt
X3Blcm1pc3Npb25zKHBlcm1pc3Npb25zKQogewogfQpAQCAtMTY2LDE3ICsxNjYsMTYgQEAgYm9v
bCBTUUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayhTUUxUcgogCiAgICAgYm9vbCBjYWxsYmFj
a0Vycm9yID0gZmFsc2U7CiAKKyAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxi
YWNrID0gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CisgICAgUmVmUHRyPFNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX3N0YXRlbWVudEVycm9y
Q2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUg
c3RhdGVtZW50IGNhbGxiYWNrIGFuZCB0cmFjayBpZiBpdCByZXN1bHRlZCBpbiBhbiBlcnJvciwK
ICAgICAvLyBiZWNhdXNlIHRoZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBl
cnJvciBjYWxsYmFjay4KICAgICBpZiAobV9lcnJvcikgewotICAgICAgICBBU1NFUlQobV9zdGF0
ZW1lbnRFcnJvckNhbGxiYWNrKTsKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3RhdGVtZW50
RXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOwot
ICAgIH0gZWxzZSBpZiAobV9zdGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgY2FsbGJhY2tFcnJv
ciA9ICFtX3N0YXRlbWVudENhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwgbV9yZXN1
bHRTZXQuZ2V0KCkpOwotCi0gICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywgdG8gYnJl
YWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsKLSAgICBt
X3N0YXRlbWVudEVycm9yQ2FsbGJhY2sgPSAwOworICAgICAgICBBU1NFUlQoZXJyb3JDYWxsYmFj
ayk7CisgICAgICAgIGNhbGxiYWNrRXJyb3IgPSBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0
cmFuc2FjdGlvbiwgbV9lcnJvci5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChjYWxsYmFjaykKKyAg
ICAgICAgY2FsbGJhY2tFcnJvciA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24s
IG1fcmVzdWx0U2V0LmdldCgpKTsKIAogICAgIHJldHVybiBjYWxsYmFja0Vycm9yOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oCShyZXZpc2lvbiA4MDY1NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlNRTENhbGxiYWNrV3JhcHBlci5oIgogI2luY2x1ZGUgIlNR
TFJlc3VsdFNldC5oIgogI2luY2x1ZGUgIlNRTFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KQEAgLTQ2LDEzICs0NywxMyBAQCBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIAogY2xhc3Mg
U1FMU3RhdGVtZW50IDogcHVibGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMU3RhdGVtZW50PiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVy
bWlzc2lvbnMpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gY3JlYXRlKERh
dGFiYXNlKiwgY29uc3QgU3RyaW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQ
dHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOwogCiAgICAgYm9vbCBleGVjdXRlKERhdGFiYXNlKik7
CiAgICAgYm9vbCBsYXN0RXhlY3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0OwogCi0gICAg
Ym9vbCBoYXNTdGF0ZW1lbnRDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50Q2Fs
bGJhY2s7IH0KLSAgICBib29sIGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSBjb25zdCB7IHJl
dHVybiBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2s7IH0KKyAgICBib29sIGhhc1N0YXRlbWVudENh
bGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIuaGFzQ2Fs
bGJhY2soKTsgfQorICAgIGJvb2wgaGFzU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKTsgfQog
CiAgICAgdm9pZCBzZXREYXRhYmFzZURlbGV0ZWRFcnJvcigpOwogICAgIHZvaWQgc2V0VmVyc2lv
bk1pc21hdGNoZWRFcnJvcigpOwpAQCAtNjEsMTUgKzYyLDE1IEBAIHB1YmxpYzoKIAogICAgIFNR
TEVycm9yKiBzcWxFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7IH0KIHByaXZh
dGU6Ci0gICAgU1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0
b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+
LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMp
OworICAgIFNRTFN0YXRlbWVudChEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBj
b25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50
Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVy
bWlzc2lvbnMpOwogCiAgICAgdm9pZCBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOwogICAgIHZvaWQg
Y2xlYXJGYWlsdXJlRHVlVG9RdW90YSgpOwogCiAgICAgU3RyaW5nIG1fc3RhdGVtZW50OwogICAg
IFZlY3RvcjxTUUxWYWx1ZT4gbV9hcmd1bWVudHM7Ci0gICAgUmVmUHRyPFNRTFN0YXRlbWVudENh
bGxiYWNrPiBtX3N0YXRlbWVudENhbGxiYWNrOwotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2s7CisgICAgU1FMQ2FsbGJhY2tXcmFw
cGVyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlcjsKKyAg
ICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gbV9zdGF0ZW1l
bnRFcnJvckNhbGxiYWNrV3JhcHBlcjsKIAogICAgIFJlZlB0cjxTUUxFcnJvcj4gbV9lcnJvcjsK
ICAgICBSZWZQdHI8U1FMUmVzdWx0U2V0PiBtX3Jlc3VsdFNldDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCShyZXZpc2lvbiA4MDY1NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MSw5ICs3MSw5IEBAIFNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSoKICAg
ICAsIG1fZXhlY3V0ZVNxbEFsbG93ZWQoZmFsc2UpCiAgICAgLCBtX2RhdGFiYXNlKGRiKQogICAg
ICwgbV93cmFwcGVyKHdyYXBwZXIpCi0gICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICwg
bV9zdWNjZXNzQ2FsbGJhY2soc3VjY2Vzc0NhbGxiYWNrKQotICAgICwgbV9lcnJvckNhbGxiYWNr
KGVycm9yQ2FsbGJhY2spCisgICAgLCBtX2NhbGxiYWNrV3JhcHBlcihjYWxsYmFjaywgZGItPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcihz
dWNjZXNzQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2Vy
cm9yQ2FsbGJhY2tXcmFwcGVyKGVycm9yQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpCiAgICAgLCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChmYWxzZSkKICAgICAs
IG1fbW9kaWZpZWREYXRhYmFzZShmYWxzZSkKICAgICAsIG1fbG9ja0FjcXVpcmVkKGZhbHNlKQpA
QCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3Qg
U3QKICAgICBlbHNlIGlmIChtX3JlYWRPbmx5KQogICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRh
YmFzZUF1dGhvcml6ZXI6OlJlYWRPbmx5TWFzazsKIAotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+
IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKHNxbFN0YXRlbWVudCwgYXJndW1lbnRz
LCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVybWlzc2lvbnMpOworICAgIFJlZlB0cjxTUUxT
dGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKG1fZGF0YWJhc2UuZ2V0
KCksIHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVy
bWlzc2lvbnMpOwogCiAgICAgaWYgKG1fZGF0YWJhc2UtPmRlbGV0ZWQoKSkKICAgICAgICAgc3Rh
dGVtZW50LT5zZXREYXRhYmFzZURlbGV0ZWRFcnJvcigpOwpAQCAtMTU5LDkgKzE1OSw5IEBAIHZv
aWQgU1FMVHJhbnNhY3Rpb246OmNoZWNrQW5kSGFuZGxlQ2xvc2UKICAgICBtX25leHRTdGVwID0g
MDsKIAogICAgIC8vIFJlbGVhc2UgdGhlIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVm
ZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2NhbGxiYWNrID0gMDsKLSAgICBtX3N1Y2Nlc3NDYWxsYmFj
ayA9IDA7Ci0gICAgbV9lcnJvckNhbGxiYWNrID0gMDsKKyAgICBtX2NhbGxiYWNrV3JhcHBlci5j
bGVhcigpOworICAgIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5jbGVhcigpOworICAgIG1fZXJy
b3JDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKIAogICAgIC8vIFRoZSBuZXh0IHN0ZXBzIHNob3Vs
ZCBiZSBleGVjdXRlZCBvbmx5IGlmIHdlJ3JlIG9uIHRoZSBEQiB0aHJlYWQuCiAgICAgaWYgKGN1
cnJlbnRUaHJlYWQoKSAhPSBkYXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRh
dGFiYXNlVGhyZWFkKCktPmdldFRocmVhZElEKCkpCkBAIC0yOTMsMTEgKzI5MywxMSBAQCB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25DCiB7CiAgICAgYm9vbCBzaG91bGRE
ZWxpdmVyRXJyb3JDYWxsYmFjayA9IGZhbHNlOwogCi0gICAgaWYgKG1fY2FsbGJhY2spIHsKKyAg
ICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrV3Jh
cHBlci51bndyYXAoKTsKKyAgICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgbV9leGVjdXRlU3Fs
QWxsb3dlZCA9IHRydWU7Ci0gICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gIW1f
Y2FsbGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpOworICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JD
YWxsYmFjayA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7CiAgICAgICAgIG1fZXhlY3V0
ZVNxbEFsbG93ZWQgPSBmYWxzZTsKLSAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAgfQogCiAg
ICAgLy8gVHJhbnNhY3Rpb24gU3RlcCA1IC0gSWYgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdh
cyBudWxsIG9yIHJhaXNlZCBhbiBleGNlcHRpb24sIGp1bXAgdG8gdGhlIGVycm9yIGNhbGxiYWNr
CkBAIC00MjUsNyArNDI1LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVu
dENhbAogICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxzZTsKIAogICAgIGlmIChyZXN1bHQp
IHsKLSAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6
OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBjYWxsYmFjayByYWlzZWQgYW4gZXhjZXB0aW9u
IG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBmYWxzZSIpOworICAg
ICAgICBtX3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktO
T1dOX0VSUiwgInRoZSBzdGF0ZW1lbnQgY2FsbGJhY2sgcmFpc2VkIGFuIGV4Y2VwdGlvbiBvciBz
dGF0ZW1lbnQgZXJyb3IgY2FsbGJhY2sgZGlkIG5vdCByZXR1cm4gZmFsc2UiKTsKICAgICAgICAg
aGFuZGxlVHJhbnNhY3Rpb25FcnJvcih0cnVlKTsKICAgICB9IGVsc2UKICAgICAgICAgc2NoZWR1
bGVUb1J1blN0YXRlbWVudHMoKTsKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0
aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0CiAKICAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwg
dGhlIHRyYW5zYWN0aW9uIHdpbGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKICAg
ICBpZiAobV9zcWxpdGVUcmFuc2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIG1fc3Vj
Y2Vzc0NhbGxiYWNrID0gMDsKKyAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFy
KCk7CiAgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJy
b3I6OkRBVEFCQVNFX0VSUiwgImZhaWxlZCB0byBjb21taXQgdGhlIHRyYW5zYWN0aW9uIik7CiAg
ICAgICAgIGhhbmRsZVRyYW5zYWN0aW9uRXJyb3IoZmFsc2UpOwogICAgICAgICByZXR1cm47CkBA
IC00ODAsMTAgKzQ4MCwxMCBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29t
bWl0CiAgICAgICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENvbW1pdFdy
aXRlVHJhbnNhY3Rpb24oZGF0YWJhc2UoKSk7CiAKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5u
ZWVkZWQgY2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fZXJyb3JD
YWxsYmFjayA9IDA7CisgICAgbV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwogCiAgICAg
Ly8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjaywgaWYgdGhl
cmUgaXMgb25lCi0gICAgaWYgKG1fc3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgaWYgKG1fc3VjY2Vz
c0NhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpKSB7CiAgICAgICAgIG1fbmV4dFN0ZXAgPSAm
U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2s7CiAgICAgICAgIExPRyhTdG9y
YWdlQVBJLCAiU2NoZWR1bGluZyBkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrIGZvciB0cmFuc2FjdGlv
biAlcFxuIiwgdGhpcyk7CiAgICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25D
YWxsYmFjayh0aGlzKTsKQEAgLTQ5NCwxMSArNDk0LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6
cG9zdGZsaWdodEFuZENvbW1pdAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3ND
YWxsYmFjaygpCiB7CiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIgc3VjY2Vz
cyBjYWxsYmFjawotICAgIEFTU0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgbV9zdWNjZXNz
Q2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBsYXN0IGNhbGxi
YWNrIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZQotICAgIG1fc3VjY2Vzc0NhbGxiYWNrID0gMDsK
KyAgICBSZWZQdHI8Vm9pZENhbGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBtX3N1Y2Nlc3NDYWxs
YmFja1dyYXBwZXIudW53cmFwKCk7CisgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrLT5oYW5kbGVFdmVudCgpOwogCiAgICAgLy8gU2NoZWR1bGUgYSAicG9z
dC1zdWNjZXNzIGNhbGxiYWNrIiBzdGVwIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBkYXRhYmFz
ZSB0aHJlYWQgaW4gY2FzZSB0aGVyZQogICAgIC8vIGFyZSBmdXJ0aGVyIHRyYW5zYWN0aW9ucyBx
dWV1ZWQgdXAgZm9yIHRoaXMgRGF0YWJhc2UKQEAgLTUyNCw3ICs1MjIsNyBAQCB2b2lkIFNRTFRy
YW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJTdWNjZXNzCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246Omhh
bmRsZVRyYW5zYWN0aW9uRXJyb3IoYm9vbCBpbkNhbGxiYWNrKQogewotICAgIGlmIChtX2Vycm9y
Q2FsbGJhY2spIHsKKyAgICBpZiAobV9lcnJvckNhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygp
KSB7CiAgICAgICAgIGlmIChpbkNhbGxiYWNrKQogICAgICAgICAgICAgZGVsaXZlclRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaygpOwogICAgICAgICBlbHNlIHsKQEAgLTU1MiwxMCArNTUwLDkgQEAg
dm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uRQogCiAgICAgLy8gVHJhbnNh
Y3Rpb24gU3RlcCAxMiAtIElmIGV4aXN0cywgaW52b2tlIGVycm9yIGNhbGxiYWNrIHdpdGggdGhl
IGxhc3QKICAgICAvLyBlcnJvciB0byBoYXZlIG9jY3VycmVkIGluIHRoaXMgdHJhbnNhY3Rpb24u
Ci0gICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgewotICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhh
bmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7Ci0gICAgICAgIG1fZXJyb3JDYWxs
YmFjayA9IDA7Ci0gICAgfQorICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+
IGVycm9yQ2FsbGJhY2sgPSBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworICAgIGlm
IChlcnJvckNhbGxiYWNrKQorICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3Ry
YW5zYWN0aW9uRXJyb3IuZ2V0KCkpOwogCiAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlv
bjo6Y2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOwogICAgIExPRyhTdG9yYWdl
QVBJLCAiU2NoZWR1bGluZyBjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9y
IHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uLmgJKHJldmlzaW9uIDgwNjU1KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TUUxUcmFuc2FjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDkgQEAgcHJp
dmF0ZToKIAogICAgIFJlZlB0cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICBSZWZQdHI8U1FM
VHJhbnNhY3Rpb25XcmFwcGVyPiBtX3dyYXBwZXI7Ci0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9u
Q2FsbGJhY2s+IG1fY2FsbGJhY2s7Ci0gICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gbV9zdWNjZXNz
Q2FsbGJhY2s7Ci0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJv
ckNhbGxiYWNrOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNr
PiBtX2NhbGxiYWNrV3JhcHBlcjsKKyAgICBTUUxDYWxsYmFja1dyYXBwZXI8Vm9pZENhbGxiYWNr
PiBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXI7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrV3JhcHBlcjsKICAgICBSZWZQ
dHI8U1FMRXJyb3I+IG1fdHJhbnNhY3Rpb25FcnJvcjsKICAgICBib29sIG1fc2hvdWxkUmV0cnlD
dXJyZW50U3RhdGVtZW50OwogICAgIGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85244</attachid>
            <date>2011-03-09 15:08:25 -0800</date>
            <delta_ts>2011-03-09 20:45:02 -0800</delta_ts>
            <desc>wrapper</desc>
            <filename>callbackWrapper3.txt</filename>
            <type>text/plain</type>
            <size>23627</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDMtMDkgIE1pY2hhZWwg
Tm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFNRTENhbGxiYWNrV3JhcHBlcgorICAgICAgICBJ
bnN0ZWFkIG9mIGRpcmVjdGx5IGhvbGRpbmcgUmVmUHRycyB0byB0aGUgQ2FsbGJhY2sgb2JqZWN0
cyBpbiBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uLCBob2xkIGEgd3JhcHBlciBvYmpl
Y3QKKyAgICAgICAgd2hpY2ggaG9sZHMgdGhvc2UgcmVmZXJlbmMgd2hvc2UgZHRvciB3aWxsIHNj
aGVkdWxlIHRoZSByZWxlYXNlIG9mIHRob3NlIHJlZmVyZW5jZXMgb24gdGhlIFNjcmlwdEV4ZWN1
dGlvbiB0aHJlYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NTkxOQorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3RpbmcgdGVzdHMgYXBwbHku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHN0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1FMQ2FsbGJhY2tXcmFwcGVyOjpTUUxDYWxsYmFja1dyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMQ2FsbGJhY2tXcmFwcGVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpT
UUxDYWxsYmFja1dyYXBwZXI6OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxDYWxsYmFj
a1dyYXBwZXI6Omhhc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTENhbGxiYWNrV3Jh
cHBlcjo6c2FmZVJlbGVhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0
YXRlbWVudDo6cGVyZm9ybUNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpoYXNTdGF0ZW1lbnRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6Omhhc1N0YXRlbWVudEVycm9yQ2Fs
bGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRy
YW5zYWN0aW9uOjpjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFu
ZENvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nl
c3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJh
bnNhY3Rpb25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5oOgorCiAyMDExLTAzLTA5ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0JKHJldmlzaW9uIDgwNjU4KQorKysgU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0JKHdvcmtpbmcgY29weSkKQEAgLTMxNjEsNiArMzE2MSw3IEBAIHdlYmNvcmVfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuaCBcCiAJ
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29yZC5jcHAgXAogCVNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuaCBcCisJU291cmNlL1dlYkNvcmUvc3Rv
cmFnZS9TUUxDYWxsYmFja1dyYXBwZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxF
cnJvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTEV4Y2VwdGlvbi5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1NRTFJlc3VsdFNldC5jcHAgXApJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQkocmV2aXNpb24gODA2NTgpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtp
bmcgY29weSkKQEAgLTQ1NzgsNiArNDU3OCw3IEBACiAgICAgICAgICAgICAnc3RvcmFnZS9Pcmln
aW5RdW90YU1hbmFnZXIuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9PcmlnaW5Vc2FnZVJlY29y
ZC5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuaCcsCisgICAg
ICAgICAgICAnc3RvcmFnZS9TUUxDYWxsYmFja1dyYXBwZXIuaCcsCiAgICAgICAgICAgICAnc3Rv
cmFnZS9TUUxFcnJvci5oJywKICAgICAgICAgICAgICdzdG9yYWdlL1NRTEV4Y2VwdGlvbi5oJywK
ICAgICAgICAgICAgICdzdG9yYWdlL1NRTFJlc3VsdFNldC5jcHAnLApJbmRleDogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8JKHJldmlzaW9uIDgwNjU4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtp
bmcgY29weSkKQEAgLTI3MTcsNiArMjcxNyw3IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9E
T01fU1RPUkFHRT0xKQogICAgICAgICBzdG9yYWdlL0xvY2FsU3RvcmFnZVRocmVhZC5oIFwKICAg
ICAgICAgc3RvcmFnZS9PcmlnaW5RdW90YU1hbmFnZXIuaCBcCiAgICAgICAgIHN0b3JhZ2UvT3Jp
Z2luVXNhZ2VSZWNvcmQuaCBcCisgICAgICAgIHN0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgg
XAogICAgICAgICBzdG9yYWdlL1NRTFJlc3VsdFNldC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxS
ZXN1bHRTZXRSb3dMaXN0LmggXAogICAgICAgICBzdG9yYWdlL1NRTFN0YXRlbWVudC5oIFwKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZp
c2lvbiA4MDY1OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC02NTQzOCw3ICs2NTQzOCw3IEBACiAJCQkJPgogCQkJPC9G
aWxlPgogCQkJPEZpbGUKLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMQ2FsbGJhY2su
aCIKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHN0b3JhZ2VcU1FMQ2FsbGJhY2tXcmFwcGVyLmgiCiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDgwNjU4KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC02NDEsNiArNjQxLDcgQEAKIAkJMjBENjI5MjcxMjUzNjkwQjAwMDgxNTQzIC8qIElu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjBENjI5MjUxMjUzNjkwQjAwMDgxNTQzIC8qIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oICovOyB9OwogCQkyMjg4NUU2NDEzMDFBRTRDMDA1MjZFNjggLyogSlNET01J
bXBsZW1lbnRhdGlvbkN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyMjg4NUU2MzEzMDFBRTRDMDA1MjZFNjggLyogSlNET01JbXBsZW1lbnRh
dGlvbkN1c3RvbS5jcHAgKi87IH07CiAJCTIyOEMyODQ1MTBEODI1MDAwMDlEMEQwRSAvKiBTY3Jp
cHRXcmFwcGFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDIyOEMyODQ0MTBEODI1MDAwMDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkyNDVEODBBMzEzMjgw
RTQwMDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNDVEODBBMjEzMjgwRTQwMDAzNDkyQTYgLyogU1FM
Q2FsbGJhY2tXcmFwcGVyLmggKi87IH07CiAJCTI0RjU0RUFDMTAxRkU5MTQwMDBBRTc0MSAvKiBB
cHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNo
ZUhvc3QuY3BwICovOyB9OwogCQkyNEY1NEVBRDEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRp
b25DYWNoZUhvc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTI1NDJGNERBMTE2NkMyNUEw
MEU4OUE4NiAvKiBVc2VyR2VzdHVyZUluZGljYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyNTQyRjREODExNjZDMjVBMDBFODlBODYgLyogVXNl
ckdlc3R1cmVJbmRpY2F0b3IuY3BwICovOyB9OwpAQCAtNjk5Myw2ICs2OTk0LDcgQEAKIAkJMjI4
ODVFNjMxMzAxQUU0QzAwNTI2RTY4IC8qIEpTRE9NSW1wbGVtZW50YXRpb25DdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNET01JbXBsZW1lbnRhdGlvbkN1
c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTIyOEMyODQ0MTBEODI1MDAw
MDlEMEQwRSAvKiBTY3JpcHRXcmFwcGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2NyaXB0V3JhcHBhYmxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0
NDJCQkY4MTE5NEM5RDMwMEQ0OTQ2OSAvKiBIYXNoQ2hhbmdlRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENoYW5nZUV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTI0NUQ4MEEyMTMyODBFNDAwMDM0OTJBNiAvKiBTUUxDYWxsYmFja1dyYXBw
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1FMQ2FsbGJhY2tXcmFwcGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTI0RjU0RUFBMTAxRkU5MTQwMDBBRTc0
MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTI0RjU0RUFCMTAxRkU5MTQwMDBBRTc0MSAvKiBBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcHBsaWNhdGlvbkNhY2hlSG9z
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNTQyRjREODExNjZDMjVBMDBFODlB
ODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTI5MzAsNiArMTI5MzIsNyBAQAogCQkJCTUxQTkyNjc5MEQ1M0YwNTcwMDYz
RUNDMiAvKiBPcmlnaW5RdW90YU1hbmFnZXIuaCAqLywKIAkJCQk1MUE5MjY3QTBENTNGMDU3MDA2
M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuY3BwICovLAogCQkJCTUxQTkyNjdCMEQ1M0YwNTcw
MDYzRUNDMiAvKiBPcmlnaW5Vc2FnZVJlY29yZC5oICovLAorCQkJCTI0NUQ4MEEyMTMyODBFNDAw
MDM0OTJBNiAvKiBTUUxDYWxsYmFja1dyYXBwZXIuaCAqLywKIAkJCQk1MUVDOTI1NzBDRTkwREI0
MDBGOTAzMDggLyogU1FMRXJyb3IuaCAqLywKIAkJCQk1MUVDOTI1ODBDRTkwREI0MDBGOTAzMDgg
LyogU1FMRXJyb3IuaWRsICovLAogCQkJCUI1NkVCQTgzMTFDOUZGODEwMEIwNDQ3NyAvKiBTUUxF
eGNlcHRpb24uaCAqLywKQEAgLTIyNTc3LDYgKzIyNTgwLDcgQEAKIAkJCQk1OThENzdERjEzMjU0
MUZBMDA3NjFCMjIgLyogSmF2YUFycmF5SlNDLmggaW4gSGVhZGVycyAqLywKIAkJCQk1OThENzdF
MzEzMjU0MjBFMDA3NjFCMjIgLyogSmF2YUZpZWxkSlNDLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0QzRjk4MzEzMjZDOTM3MDAwOThBNjAgLyogVGV4dE9yaWVudGF0aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQkyNDVEODBBMzEzMjgwRTQwMDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMQ2FsbGJhY2tX
cmFwcGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxDYWxsYmFj
a1dyYXBwZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMQ2Fs
bGJhY2tXcmFwcGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENP
TlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU1FM
Q2FsbGJhY2tXcmFwcGVyX2gKKyNkZWZpbmUgU1FMQ2FsbGJhY2tXcmFwcGVyX2gKKworI2lmIEVO
QUJMRShEQVRBQkFTRSkKKworI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUg
IlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0
aXZlcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEEgaGVscGVyIGNsYXNzIHRvIHNh
ZmVseSBkZXJlZmVyZW5jZSB0aGUgY2FsbGJhY2sgb2JqZWN0cyBoZWxkIGJ5CisvLyBTUUxTdGF0
ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uIG9uIHRoZSBwcm9wZXIgdGhyZWFkLiBUaGUgJ3dyYXBw
ZWQnCisvLyBjYWxsYmFjayBpcyBkZXJlZmVyZW5jZWQ6CisvLyAtIGJ5IGRlc3RydWN0aW5nIHRo
ZSBlbmNsb3Npbmcgd3JhcHBlciAtIG9uIGFueSB0aHJlYWQKKy8vIC0gYnkgY2FsbGluZyBjbGVh
cigpIC0gb24gYW55IHRocmVhZAorLy8gLSBieSB1bndyYXBwaW5nIGFuZCB0aGVuIGRlcmVmZXJl
bmNpbmcgbm9ybWFsbHkgLSBvbiBjb250ZXh0IHRocmVhZCBvbmx5Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjbGFzcyBTUUxDYWxsYmFja1dyYXBwZXIgeworcHVibGljOgorICAgIFNRTENhbGxiYWNr
V3JhcHBlcihQYXNzUmVmUHRyPFQ+IGNhbGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KQorICAgICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCisg
ICAgICAgICwgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0KG1fY2FsbGJhY2sgPyBzY3JpcHRFeGVj
dXRpb25Db250ZXh0IDogMCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayB8fCAo
bV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LmdldCgpICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpKTsKKyAgICB9CisKKyAgICBTUUxDYWxsYmFja1dyYXBwZXIo
KQorICAgIHsKKyAgICAgICAgY2xlYXIoKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX211dGV4KTsKKyAgICAgICAgaWYgKCFt
X2NhbGxiYWNrKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1fc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG1fc2NyaXB0
RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpIHsKKyAgICAgICAgICAgIG1fY2Fs
bGJhY2sgPSAwOworICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0ID0gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0LnJlbGVhc2UoKS5sZWFrUmVm
KCk7CisgICAgICAgIGNvbnRleHQtPnBvc3RUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmc2FmZVJl
bGVhc2UsIG1fY2FsbGJhY2sucmVsZWFzZSgpLmxlYWtSZWYoKSkpOworICAgIH0KKworICAgIFBh
c3NSZWZQdHI8VD4gdW53cmFwKCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayB8
fCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICAgICAg
TXV0ZXhMb2NrZXIgbG9ja2VyKG1fbXV0ZXgpOworICAgICAgICBtX3NjcmlwdEV4ZWN1dGlvbkNv
bnRleHQgPSAwOworICAgICAgICByZXR1cm4gbV9jYWxsYmFjay5yZWxlYXNlKCk7CisgICAgfQor
CisgICAgYm9vbCBoYXNDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbGJhY2s7IH0KKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBzYWZlUmVsZWFzZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBUKiBjYWxsYmFjaykKKyAgICB7CisgICAgICAgIEFTU0VSVChjYWxsYmFj
ayAmJiBjb250ZXh0ICYmIGNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsKKyAgICAgICAgY2Fs
bGJhY2stPmRlcmVmKCk7CisgICAgICAgIGNvbnRleHQtPmRlcmVmKCk7CisgICAgfQorCisgICAg
TXV0ZXggbV9tdXRleDsKKyAgICBSZWZQdHI8VD4gbV9jYWxsYmFjazsKKyAgICBSZWZQdHI8U2Ny
aXB0RXhlY3V0aW9uQ29udGV4dD4gbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKERBVEFCQVNFKQorCisjZW5k
aWYgLy8gU1FMQ2FsbGJhY2tXcmFwcGVyX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U1FMU3RhdGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFN0YXRlbWVudC5jcHAJKHJldmlzaW9uIDgwNjU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TUUxTdGF0ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MywxNiArNDMsMTYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVt
ZW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1
ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ss
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50
IHBlcm1pc3Npb25zKQorUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IFNRTFN0YXRlbWVudDo6Y3Jl
YXRlKERhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZl
Y3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFj
az4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JD
YWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgU1FM
U3RhdGVtZW50KHN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywg
cGVybWlzc2lvbnMpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNRTFN0YXRlbWVudChkYXRh
YmFzZSwgc3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBwZXJt
aXNzaW9ucykpOwogfQogCi1TUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudChjb25zdCBTdHJpbmcm
IHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRy
PFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRF
cnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lvbnMpCitTUUxTdGF0ZW1l
bnQ6OlNRTFN0YXRlbWVudChEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3RhdGVt
ZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3Rh
dGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKICAgICA6IG1fc3RhdGVtZW50
KHN0YXRlbWVudC5jcm9zc1RocmVhZFN0cmluZygpKQogICAgICwgbV9hcmd1bWVudHMoYXJndW1l
bnRzKQotICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFjayhjYWxsYmFjaykKLSAgICAsIG1fc3RhdGVt
ZW50RXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNrKQorICAgICwgbV9zdGF0ZW1lbnRDYWxsYmFj
a1dyYXBwZXIoY2FsbGJhY2ssIGRhdGFiYXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisg
ICAgLCBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyKGVycm9yQ2FsbGJhY2ssIGRhdGFi
YXNlLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgLCBtX3Blcm1pc3Npb25zKHBlcm1p
c3Npb25zKQogewogfQpAQCAtMTY2LDE3ICsxNjYsMTYgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6OnBl
cmZvcm1DYWxsYmFjayhTUUxUcgogCiAgICAgYm9vbCBjYWxsYmFja0Vycm9yID0gZmFsc2U7CiAK
KyAgICBSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxiYWNrID0gbV9zdGF0ZW1lbnRD
YWxsYmFja1dyYXBwZXIudW53cmFwKCk7CisgICAgUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2Fs
bGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyLnVu
d3JhcCgpOworCiAgICAgLy8gQ2FsbCB0aGUgYXBwcm9wcmlhdGUgc3RhdGVtZW50IGNhbGxiYWNr
IGFuZCB0cmFjayBpZiBpdCByZXN1bHRlZCBpbiBhbiBlcnJvciwKICAgICAvLyBiZWNhdXNlIHRo
ZW4gd2UgbmVlZCB0byBqdW1wIHRvIHRoZSB0cmFuc2FjdGlvbiBlcnJvciBjYWxsYmFjay4KICAg
ICBpZiAobV9lcnJvcikgewotICAgICAgICBBU1NFUlQobV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNr
KTsKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjay0+aGFu
ZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fZXJyb3IuZ2V0KCkpOwotICAgIH0gZWxzZSBpZiAobV9z
dGF0ZW1lbnRDYWxsYmFjaykKLSAgICAgICAgY2FsbGJhY2tFcnJvciA9ICFtX3N0YXRlbWVudENh
bGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwgbV9yZXN1bHRTZXQuZ2V0KCkpOwotCi0g
ICAgLy8gTm93IHJlbGVhc2Ugb3VyIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xl
cy4KLSAgICBtX3N0YXRlbWVudENhbGxiYWNrID0gMDsKLSAgICBtX3N0YXRlbWVudEVycm9yQ2Fs
bGJhY2sgPSAwOworICAgICAgICBBU1NFUlQoZXJyb3JDYWxsYmFjayk7CisgICAgICAgIGNhbGxi
YWNrRXJyb3IgPSBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwgbV9lcnJv
ci5nZXQoKSk7CisgICAgfSBlbHNlIGlmIChjYWxsYmFjaykKKyAgICAgICAgY2FsbGJhY2tFcnJv
ciA9ICFjYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgp
KTsKIAogICAgIHJldHVybiBjYWxsYmFja0Vycm9yOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudC5oCShyZXZpc2lvbiA4MDY1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1
ZGUgIlNRTENhbGxiYWNrV3JhcHBlci5oIgogI2luY2x1ZGUgIlNRTFJlc3VsdFNldC5oIgogI2lu
Y2x1ZGUgIlNRTFZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTQ2LDEzICs0
NywxMyBAQCBjbGFzcyBTUUxUcmFuc2FjdGlvbjsKIAogY2xhc3MgU1FMU3RhdGVtZW50IDogcHVi
bGljIFRocmVhZFNhZmVTaGFyZWQ8U1FMU3RhdGVtZW50PiB7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiwgY29uc3QgVmVj
dG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gY3JlYXRlKERhdGFiYXNlKiwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2Fs
bGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlz
c2lvbnMpOwogCiAgICAgYm9vbCBleGVjdXRlKERhdGFiYXNlKik7CiAgICAgYm9vbCBsYXN0RXhl
Y3V0aW9uRmFpbGVkRHVlVG9RdW90YSgpIGNvbnN0OwogCi0gICAgYm9vbCBoYXNTdGF0ZW1lbnRD
YWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50Q2FsbGJhY2s7IH0KLSAgICBib29s
IGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudEVy
cm9yQ2FsbGJhY2s7IH0KKyAgICBib29sIGhhc1N0YXRlbWVudENhbGxiYWNrKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKTsgfQorICAgIGJv
b2wgaGFzU3RhdGVtZW50RXJyb3JDYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50
RXJyb3JDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKTsgfQogCiAgICAgdm9pZCBzZXREYXRh
YmFzZURlbGV0ZWRFcnJvcigpOwogICAgIHZvaWQgc2V0VmVyc2lvbk1pc21hdGNoZWRFcnJvcigp
OwpAQCAtNjEsMTUgKzYyLDE1IEBAIHB1YmxpYzoKIAogICAgIFNRTEVycm9yKiBzcWxFcnJvcigp
IGNvbnN0IHsgcmV0dXJuIG1fZXJyb3IuZ2V0KCk7IH0KIHByaXZhdGU6Ci0gICAgU1FMU3RhdGVt
ZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1
bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVmUHRyPFNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOworICAgIFNRTFN0YXRlbWVu
dChEYXRhYmFzZSosIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FMVmFs
dWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+LCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+LCBpbnQgcGVybWlzc2lvbnMpOwogCiAgICAg
dm9pZCBzZXRGYWlsdXJlRHVlVG9RdW90YSgpOwogICAgIHZvaWQgY2xlYXJGYWlsdXJlRHVlVG9R
dW90YSgpOwogCiAgICAgU3RyaW5nIG1fc3RhdGVtZW50OwogICAgIFZlY3RvcjxTUUxWYWx1ZT4g
bV9hcmd1bWVudHM7Ci0gICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBtX3N0YXRlbWVu
dENhbGxiYWNrOwotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBtX3N0YXRl
bWVudEVycm9yQ2FsbGJhY2s7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFN0YXRlbWVudENh
bGxiYWNrPiBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlcjsKKyAgICBTUUxDYWxsYmFja1dyYXBw
ZXI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3Jh
cHBlcjsKIAogICAgIFJlZlB0cjxTUUxFcnJvcj4gbV9lcnJvcjsKICAgICBSZWZQdHI8U1FMUmVz
dWx0U2V0PiBtX3Jlc3VsdFNldDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uY3BwCShyZXZpc2lvbiA4MDY1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U1FMVHJhbnNhY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MSw5ICs3MSw5IEBAIFNRTFRy
YW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbihEYXRhYmFzZSoKICAgICAsIG1fZXhlY3V0ZVNxbEFs
bG93ZWQoZmFsc2UpCiAgICAgLCBtX2RhdGFiYXNlKGRiKQogICAgICwgbV93cmFwcGVyKHdyYXBw
ZXIpCi0gICAgLCBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9zdWNjZXNzQ2FsbGJhY2so
c3VjY2Vzc0NhbGxiYWNrKQotICAgICwgbV9lcnJvckNhbGxiYWNrKGVycm9yQ2FsbGJhY2spCisg
ICAgLCBtX2NhbGxiYWNrV3JhcHBlcihjYWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAsIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcihzdWNjZXNzQ2FsbGJhY2ssIGRi
LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCisgICAgLCBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVy
KGVycm9yQ2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgLCBtX3No
b3VsZFJldHJ5Q3VycmVudFN0YXRlbWVudChmYWxzZSkKICAgICAsIG1fbW9kaWZpZWREYXRhYmFz
ZShmYWxzZSkKICAgICAsIG1fbG9ja0FjcXVpcmVkKGZhbHNlKQpAQCAtMTAwLDcgKzEwMCw3IEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTUUwoY29uc3QgU3QKICAgICBlbHNlIGlmICht
X3JlYWRPbmx5KQogICAgICAgICBwZXJtaXNzaW9ucyB8PSBEYXRhYmFzZUF1dGhvcml6ZXI6OlJl
YWRPbmx5TWFzazsKIAotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVudCA9IFNRTFN0
YXRlbWVudDo6Y3JlYXRlKHNxbFN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJh
Y2tFcnJvciwgcGVybWlzc2lvbnMpOworICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnQ+IHN0YXRlbWVu
dCA9IFNRTFN0YXRlbWVudDo6Y3JlYXRlKG1fZGF0YWJhc2UuZ2V0KCksIHNxbFN0YXRlbWVudCwg
YXJndW1lbnRzLCBjYWxsYmFjaywgY2FsbGJhY2tFcnJvciwgcGVybWlzc2lvbnMpOwogCiAgICAg
aWYgKG1fZGF0YWJhc2UtPmRlbGV0ZWQoKSkKICAgICAgICAgc3RhdGVtZW50LT5zZXREYXRhYmFz
ZURlbGV0ZWRFcnJvcigpOwpAQCAtMTU5LDkgKzE1OSw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246
OmNoZWNrQW5kSGFuZGxlQ2xvc2UKICAgICBtX25leHRTdGVwID0gMDsKIAogICAgIC8vIFJlbGVh
c2UgdGhlIHVubmVlZGVkIGNhbGxiYWNrcywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAg
ICBtX2NhbGxiYWNrID0gMDsKLSAgICBtX3N1Y2Nlc3NDYWxsYmFjayA9IDA7Ci0gICAgbV9lcnJv
ckNhbGxiYWNrID0gMDsKKyAgICBtX2NhbGxiYWNrV3JhcHBlci5jbGVhcigpOworICAgIG1fc3Vj
Y2Vzc0NhbGxiYWNrV3JhcHBlci5jbGVhcigpOworICAgIG1fZXJyb3JDYWxsYmFja1dyYXBwZXIu
Y2xlYXIoKTsKIAogICAgIC8vIFRoZSBuZXh0IHN0ZXBzIHNob3VsZCBiZSBleGVjdXRlZCBvbmx5
IGlmIHdlJ3JlIG9uIHRoZSBEQiB0aHJlYWQuCiAgICAgaWYgKGN1cnJlbnRUaHJlYWQoKSAhPSBk
YXRhYmFzZSgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPmRhdGFiYXNlVGhyZWFkKCktPmdl
dFRocmVhZElEKCkpCkBAIC0yOTMsMTEgKzI5MywxMSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpk
ZWxpdmVyVHJhbnNhY3Rpb25DCiB7CiAgICAgYm9vbCBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFj
ayA9IGZhbHNlOwogCi0gICAgaWYgKG1fY2FsbGJhY2spIHsKKyAgICBSZWZQdHI8U1FMVHJhbnNh
Y3Rpb25DYWxsYmFjaz4gY2FsbGJhY2sgPSBtX2NhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKKyAg
ICBpZiAoY2FsbGJhY2spIHsKICAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IHRydWU7Ci0g
ICAgICAgIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gIW1fY2FsbGJhY2stPmhhbmRsZUV2
ZW50KHRoaXMpOworICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9ICFjYWxsYmFj
ay0+aGFuZGxlRXZlbnQodGhpcyk7CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSBmYWxz
ZTsKLSAgICAgICAgbV9jYWxsYmFjayA9IDA7CiAgICAgfQogCiAgICAgLy8gVHJhbnNhY3Rpb24g
U3RlcCA1IC0gSWYgdGhlIHRyYW5zYWN0aW9uIGNhbGxiYWNrIHdhcyBudWxsIG9yIHJhaXNlZCBh
biBleGNlcHRpb24sIGp1bXAgdG8gdGhlIGVycm9yIGNhbGxiYWNrCkBAIC00MjUsNyArNDI1LDcg
QEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN0YXRlbWVudENhbAogICAgIG1fZXhlY3V0
ZVNxbEFsbG93ZWQgPSBmYWxzZTsKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgIG1fdHJhbnNh
Y3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhl
IHN0YXRlbWVudCBjYWxsYmFjayByYWlzZWQgYW4gZXhjZXB0aW9uIG9yIHN0YXRlbWVudCBlcnJv
ciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBmYWxzZSIpOworICAgICAgICBtX3RyYW5zYWN0aW9u
RXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwgInRoZSBzdGF0
ZW1lbnQgY2FsbGJhY2sgcmFpc2VkIGFuIGV4Y2VwdGlvbiBvciBzdGF0ZW1lbnQgZXJyb3IgY2Fs
bGJhY2sgZGlkIG5vdCByZXR1cm4gZmFsc2UiKTsKICAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25F
cnJvcih0cnVlKTsKICAgICB9IGVsc2UKICAgICAgICAgc2NoZWR1bGVUb1J1blN0YXRlbWVudHMo
KTsKQEAgLTQ2NSw3ICs0NjUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5k
Q29tbWl0CiAKICAgICAvLyBJZiB0aGUgY29tbWl0IGZhaWxlZCwgdGhlIHRyYW5zYWN0aW9uIHdp
bGwgc3RpbGwgYmUgbWFya2VkIGFzICJpbiBwcm9ncmVzcyIKICAgICBpZiAobV9zcWxpdGVUcmFu
c2FjdGlvbi0+aW5Qcm9ncmVzcygpKSB7Ci0gICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrID0gMDsK
KyAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7CiAgICAgICAgIG1fdHJh
bnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVhdGUoU1FMRXJyb3I6OkRBVEFCQVNFX0VSUiwg
ImZhaWxlZCB0byBjb21taXQgdGhlIHRyYW5zYWN0aW9uIik7CiAgICAgICAgIGhhbmRsZVRyYW5z
YWN0aW9uRXJyb3IoZmFsc2UpOwogICAgICAgICByZXR1cm47CkBAIC00ODAsMTAgKzQ4MCwxMCBA
QCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0CiAgICAgICAgIG1fZGF0
YWJhc2UtPnRyYW5zYWN0aW9uQ2xpZW50KCktPmRpZENvbW1pdFdyaXRlVHJhbnNhY3Rpb24oZGF0
YWJhc2UoKSk7CiAKICAgICAvLyBOb3cgcmVsZWFzZSBvdXIgdW5uZWVkZWQgY2FsbGJhY2tzLCB0
byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fZXJyb3JDYWxsYmFjayA9IDA7CisgICAg
bV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwogCiAgICAgLy8gVHJhbnNhY3Rpb24gU3Rl
cCAxMCAtIERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjaywgaWYgdGhlcmUgaXMgb25lCi0gICAgaWYg
KG1fc3VjY2Vzc0NhbGxiYWNrKSB7CisgICAgaWYgKG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5o
YXNDYWxsYmFjaygpKSB7CiAgICAgICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJTdWNjZXNzQ2FsbGJhY2s7CiAgICAgICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGlu
ZyBkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAlcFxuIiwgdGhpcyk7CiAg
ICAgICAgIG1fZGF0YWJhc2UtPnNjaGVkdWxlVHJhbnNhY3Rpb25DYWxsYmFjayh0aGlzKTsKQEAg
LTQ5NCwxMSArNDk0LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1p
dAogdm9pZCBTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjaygpCiB7CiAgICAg
Ly8gVHJhbnNhY3Rpb24gU3RlcCAxMCAtIERlbGl2ZXIgc3VjY2VzcyBjYWxsYmFjawotICAgIEFT
U0VSVChtX3N1Y2Nlc3NDYWxsYmFjayk7Ci0gICAgbV9zdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2
ZW50KCk7Ci0KLSAgICAvLyBSZWxlYXNlIHRoZSBsYXN0IGNhbGxiYWNrIHRvIGJyZWFrIHJlZmVy
ZW5jZSBjeWNsZQotICAgIG1fc3VjY2Vzc0NhbGxiYWNrID0gMDsKKyAgICBSZWZQdHI8Vm9pZENh
bGxiYWNrPiBzdWNjZXNzQ2FsbGJhY2sgPSBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIudW53cmFw
KCk7CisgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykKKyAgICAgICAgc3VjY2Vzc0NhbGxiYWNrLT5o
YW5kbGVFdmVudCgpOwogCiAgICAgLy8gU2NoZWR1bGUgYSAicG9zdC1zdWNjZXNzIGNhbGxiYWNr
IiBzdGVwIHRvIHJldHVybiBjb250cm9sIHRvIHRoZSBkYXRhYmFzZSB0aHJlYWQgaW4gY2FzZSB0
aGVyZQogICAgIC8vIGFyZSBmdXJ0aGVyIHRyYW5zYWN0aW9ucyBxdWV1ZWQgdXAgZm9yIHRoaXMg
RGF0YWJhc2UKQEAgLTUyNCw3ICs1MjIsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpjbGVhbnVw
QWZ0ZXJTdWNjZXNzCiAKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmhhbmRsZVRyYW5zYWN0aW9uRXJy
b3IoYm9vbCBpbkNhbGxiYWNrKQogewotICAgIGlmIChtX2Vycm9yQ2FsbGJhY2spIHsKKyAgICBp
ZiAobV9lcnJvckNhbGxiYWNrV3JhcHBlci5oYXNDYWxsYmFjaygpKSB7CiAgICAgICAgIGlmIChp
bkNhbGxiYWNrKQogICAgICAgICAgICAgZGVsaXZlclRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaygp
OwogICAgICAgICBlbHNlIHsKQEAgLTU1MiwxMCArNTUwLDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bjo6ZGVsaXZlclRyYW5zYWN0aW9uRQogCiAgICAgLy8gVHJhbnNhY3Rpb24gU3RlcCAxMiAtIElm
IGV4aXN0cywgaW52b2tlIGVycm9yIGNhbGxiYWNrIHdpdGggdGhlIGxhc3QKICAgICAvLyBlcnJv
ciB0byBoYXZlIG9jY3VycmVkIGluIHRoaXMgdHJhbnNhY3Rpb24uCi0gICAgaWYgKG1fZXJyb3JD
YWxsYmFjaykgewotICAgICAgICBtX2Vycm9yQ2FsbGJhY2stPmhhbmRsZUV2ZW50KG1fdHJhbnNh
Y3Rpb25FcnJvci5nZXQoKSk7Ci0gICAgICAgIG1fZXJyb3JDYWxsYmFjayA9IDA7Ci0gICAgfQor
ICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2sgPSBt
X2Vycm9yQ2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworICAgIGlmIChlcnJvckNhbGxiYWNrKQor
ICAgICAgICBlcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3RyYW5zYWN0aW9uRXJyb3IuZ2V0
KCkpOwogCiAgICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6Y2xlYW51cEFmdGVyVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrOwogICAgIExPRyhTdG9yYWdlQVBJLCAiU2NoZWR1bGluZyBj
bGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2sgZm9yIHRyYW5zYWN0aW9uICVwXG4i
LCB0aGlzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHJl
dmlzaW9uIDgwNjU4KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDkgQEAgcHJpdmF0ZToKIAogICAgIFJlZlB0
cjxEYXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25XcmFwcGVy
PiBtX3dyYXBwZXI7Ci0gICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s+IG1fY2FsbGJh
Y2s7Ci0gICAgUmVmUHRyPFZvaWRDYWxsYmFjaz4gbV9zdWNjZXNzQ2FsbGJhY2s7Ci0gICAgUmVm
UHRyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjaz4gbV9lcnJvckNhbGxiYWNrOworICAgIFNR
TENhbGxiYWNrV3JhcHBlcjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBtX2NhbGxiYWNrV3JhcHBl
cjsKKyAgICBTUUxDYWxsYmFja1dyYXBwZXI8Vm9pZENhbGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFj
a1dyYXBwZXI7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjaz4gbV9lcnJvckNhbGxiYWNrV3JhcHBlcjsKICAgICBSZWZQdHI8U1FMRXJyb3I+IG1fdHJh
bnNhY3Rpb25FcnJvcjsKICAgICBib29sIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVtZW50Owog
ICAgIGJvb2wgbV9tb2RpZmllZERhdGFiYXNlOwo=
</data>
<flag name="review"
          id="77344"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85280</attachid>
            <date>2011-03-09 20:45:02 -0800</date>
            <delta_ts>2011-03-11 12:28:55 -0800</delta_ts>
            <desc>wrapper</desc>
            <filename>callbackWrapper4.txt</filename>
            <type>text/plain</type>
            <size>23859</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNjg3KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDMtMDkgIE1pY2hhZWwg
Tm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFNRTENhbGxiYWNrV3JhcHBlcgorICAgICAgICBJ
bnN0ZWFkIG9mIGRpcmVjdGx5IGhvbGRpbmcgUmVmUHRycyB0byB0aGUgQ2FsbGJhY2sgb2JqZWN0
cyBpbiBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uLCBob2xkIGEgd3JhcHBlciBvYmpl
Y3QKKyAgICAgICAgd2hpY2ggaG9sZHMgdGhvc2UgcmVmZXJlbmMgd2hvc2UgZHRvciB3aWxsIHNj
aGVkdWxlIHRoZSByZWxlYXNlIG9mIHRob3NlIHJlZmVyZW5jZXMgb24gdGhlIFNjcmlwdEV4ZWN1
dGlvbiB0aHJlYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NTkxOQorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgZXhpc3RpbmcgdGVzdHMgYXBwbHku
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHN0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U1FMQ2FsbGJhY2tXcmFwcGVyOjpTUUxDYWxsYmFja1dyYXBwZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U1FMQ2FsbGJhY2tXcmFwcGVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpT
UUxDYWxsYmFja1dyYXBwZXI6OnVud3JhcCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxDYWxsYmFj
a1dyYXBwZXI6Omhhc0NhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTENhbGxiYWNrV3Jh
cHBlcjo6c2FmZVJlbGVhc2UpOgorICAgICAgICAqIHN0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0
YXRlbWVudDo6cGVyZm9ybUNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpoYXNTdGF0ZW1lbnRDYWxsYmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6Omhhc1N0YXRlbWVudEVycm9yQ2Fs
bGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRy
YW5zYWN0aW9uOjpjaGVja0FuZEhhbmRsZUNsb3NlZE9ySW50ZXJydXB0ZWREYXRhYmFzZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclRyYW5zYWN0aW9uQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFu
ZENvbW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nl
c3NDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJh
bnNhY3Rpb25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZGVsaXZl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxUcmFuc2Fj
dGlvbi5oOgorCiAyMDExLTAzLTA5ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgR2VudGlsY29yZS4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCShyZXZpc2lvbiA4MDY4NykKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCSh3b3JraW5nIGNvcHkpCkBAIC0zMTYxLDYgKzMxNjEsNyBAQCB3ZWJjb3JlX3NvdXJj
ZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmggXAog
CVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmggXAorCVNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FM
RXJyb3IuaCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaCBcCiAJU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHJldmlzaW9uIDgwNjg3KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTc4LDYgKzQ1NzgsNyBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvT3Jp
Z2luUXVvdGFNYW5hZ2VyLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNv
cmQuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmgnLAorICAg
ICAgICAgICAgJ3N0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgnLAogICAgICAgICAgICAgJ3N0
b3JhZ2UvU1FMRXJyb3IuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxFeGNlcHRpb24uaCcs
CiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwJywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJvCShyZXZpc2lvbiA4MDY4NykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNzE3LDYgKzI3MTcsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
RE9NX1NUT1JBR0U9MSkKICAgICAgICAgc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaCBcCiAg
ICAgICAgIHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmggXAogICAgICAgICBzdG9yYWdlL09y
aWdpblVzYWdlUmVjb3JkLmggXAorICAgICAgICBzdG9yYWdlL1NRTENhbGxiYWNrV3JhcHBlci5o
IFwKICAgICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXQuaCBcCiAgICAgICAgIHN0b3JhZ2UvU1FM
UmVzdWx0U2V0Um93TGlzdC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2
aXNpb24gODA2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNjU0MzgsNyArNjU0MzgsNyBAQAogCQkJCT4KIAkJCTwv
RmlsZT4KIAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTENhbGxiYWNr
LmgiCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTENhbGxiYWNrV3JhcHBlci5oIgog
CQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MDY4NykKKysrIFNv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtNjQxLDYgKzY0MSw3IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJ
bnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0
cnVtZW50YXRpb24uaCAqLzsgfTsKIAkJMjI4ODVFNjQxMzAxQUU0QzAwNTI2RTY4IC8qIEpTRE9N
SW1wbGVtZW50YXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjI4ODVFNjMxMzAxQUU0QzAwNTI2RTY4IC8qIEpTRE9NSW1wbGVtZW50
YXRpb25DdXN0b20uY3BwICovOyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2Ny
aXB0V3JhcHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyMjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjQ1RDgwQTMxMzI4
MEU0MDAwMzQ5MkE2IC8qIFNRTENhbGxiYWNrV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjQ1RDgwQTIxMzI4MEU0MDAwMzQ5MkE2IC8qIFNR
TENhbGxiYWNrV3JhcHBlci5oICovOyB9OwogCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEgLyog
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmNwcCAqLzsgfTsKIAkJMjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0
aW9uQ2FjaGVIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkyNTQyRjREQTExNjZDMjVB
MDBFODlBODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVz
ZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLzsgfTsKQEAgLTY5OTMsNiArNjk5NCw3IEBACiAJCTIy
ODg1RTYzMTMwMUFFNEMwMDUyNkU2OCAvKiBKU0RPTUltcGxlbWVudGF0aW9uQ3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NSW1wbGVtZW50YXRpb25D
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAw
MDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQky
NDQyQkJGODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkyNDVEODBBMjEzMjgwRTQwMDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tXcmFw
cGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTENhbGxiYWNrV3JhcHBl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQTEwMUZFOTE0MDAwQUU3
NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhv
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhv
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2QzI1QTAwRTg5
QTg2IC8qIFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTEyOTMwLDYgKzEyOTMyLDcgQEAKIAkJCQk1MUE5MjY3OTBENTNGMDU3MDA2
M0VDQzIgLyogT3JpZ2luUXVvdGFNYW5hZ2VyLmggKi8sCiAJCQkJNTFBOTI2N0EwRDUzRjA1NzAw
NjNFQ0MyIC8qIE9yaWdpblVzYWdlUmVjb3JkLmNwcCAqLywKIAkJCQk1MUE5MjY3QjBENTNGMDU3
MDA2M0VDQzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCAqLywKKwkJCQkyNDVEODBBMjEzMjgwRTQw
MDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggKi8sCiAJCQkJNTFFQzkyNTcwQ0U5MERC
NDAwRjkwMzA4IC8qIFNRTEVycm9yLmggKi8sCiAJCQkJNTFFQzkyNTgwQ0U5MERCNDAwRjkwMzA4
IC8qIFNRTEVycm9yLmlkbCAqLywKIAkJCQlCNTZFQkE4MzExQzlGRjgxMDBCMDQ0NzcgLyogU1FM
RXhjZXB0aW9uLmggKi8sCkBAIC0yMjU3Nyw2ICsyMjU4MCw3IEBACiAJCQkJNTk4RDc3REYxMzI1
NDFGQTAwNzYxQjIyIC8qIEphdmFBcnJheUpTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTk4RDc3
RTMxMzI1NDIwRTAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNEM0Y5ODMxMzI2QzkzNzAwMDk4QTYwIC8qIFRleHRPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMjQ1RDgwQTMxMzI4MEU0MDAwMzQ5MkE2IC8qIFNRTENhbGxiYWNrV3JhcHBlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTENhbGxiYWNr
V3JhcHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMQ2FsbGJh
Y2tXcmFwcGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTENh
bGxiYWNrV3JhcHBlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIFNR
TENhbGxiYWNrV3JhcHBlcl9oCisjZGVmaW5lIFNRTENhbGxiYWNrV3JhcHBlcl9oCisKKyNpZiBF
TkFCTEUoREFUQUJBU0UpCisKKyNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2suaCIKKyNpbmNsdWRl
ICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1ByaW1p
dGl2ZXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBBIGhlbHBlciBjbGFzcyB0byBz
YWZlbHkgZGVyZWZlcmVuY2UgdGhlIGNhbGxiYWNrIG9iamVjdHMgaGVsZCBieQorLy8gU1FMU3Rh
dGVtZW50IGFuZCBTUUxUcmFuc2FjdGlvbiBvbiB0aGUgcHJvcGVyIHRocmVhZC4gVGhlICd3cmFw
cGVkJworLy8gY2FsbGJhY2sgaXMgZGVyZWZlcmVuY2VkOgorLy8gLSBieSBkZXN0cnVjdGluZyB0
aGUgZW5jbG9zaW5nIHdyYXBwZXIgLSBvbiBhbnkgdGhyZWFkCisvLyAtIGJ5IGNhbGxpbmcgY2xl
YXIoKSAtIG9uIGFueSB0aHJlYWQKKy8vIC0gYnkgdW53cmFwcGluZyBhbmQgdGhlbiBkZXJlZmVy
ZW5jaW5nIG5vcm1hbGx5IC0gb24gY29udGV4dCB0aHJlYWQgb25seQordGVtcGxhdGU8dHlwZW5h
bWUgVD4gY2xhc3MgU1FMQ2FsbGJhY2tXcmFwcGVyIHsKK3B1YmxpYzoKKyAgICBTUUxDYWxsYmFj
a1dyYXBwZXIoUGFzc1JlZlB0cjxUPiBjYWxsYmFjaywgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCkKKyAgICAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQor
ICAgICAgICAsIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dChtX2NhbGxiYWNrID8gc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCA6IDApCisgICAgeworICAgICAgICBBU1NFUlQoIW1fY2FsbGJhY2sgfHwg
KG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC5nZXQoKSAmJiBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzQ29udGV4dFRocmVhZCgpKSk7CisgICAgfQorCisgICAgU1FMQ2FsbGJhY2tXcmFwcGVy
KCkKKyAgICB7CisgICAgICAgIGNsZWFyKCk7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisg
ICAgeworICAgICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0OworICAgICAgICBU
KiBjYWxsYmFjazsKKyAgICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1f
bXV0ZXgpOworICAgICAgICAgICAgaWYgKCFtX2NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKCFtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3NjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQtPmlzQ29udGV4dFRocmVhZCgpKSB7CisgICAgICAgICAgICAgICAgbV9jYWxsYmFjayA9IDA7
CisgICAgICAgICAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb250ZXh0ID0gbV9z
Y3JpcHRFeGVjdXRpb25Db250ZXh0LnJlbGVhc2UoKS5sZWFrUmVmKCk7CisgICAgICAgICAgICBj
YWxsYmFjayA9ICBtX2NhbGxiYWNrLnJlbGVhc2UoKS5sZWFrUmVmKCk7CisgICAgICAgIH0KKyAg
ICAgICAgY29udGV4dC0+cG9zdFRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZzYWZlUmVsZWFzZSwg
Y2FsbGJhY2spKTsKKyAgICB9CisKKyAgICBQYXNzUmVmUHRyPFQ+IHVud3JhcCgpCisgICAgewor
ICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgIEFTU0VSVCghbV9j
YWxsYmFjayB8fCBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPmlzQ29udGV4dFRocmVhZCgpKTsK
KyAgICAgICAgbV9zY3JpcHRFeGVjdXRpb25Db250ZXh0ID0gMDsKKyAgICAgICAgcmV0dXJuIG1f
Y2FsbGJhY2sucmVsZWFzZSgpOworICAgIH0KKworICAgIC8vIFVzZWZ1bCBmb3Igb3B0aW1pemF0
aW9ucyBvbmx5LCBwbGVhc2UgdGVzdCB0aGUgcmV0dXJuIHZhbHVlIG9mIHVud3JhcCB0byBiZSBz
dXJlLgorICAgIGJvb2wgaGFzQ2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX2NhbGxiYWNrOyB9
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIHZvaWQgc2FmZVJlbGVhc2UoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgVCogY2FsbGJhY2spCisgICAgeworICAgICAgICBBU1NFUlQoY2Fs
bGJhY2sgJiYgY29udGV4dCAmJiBjb250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgICAg
IGNhbGxiYWNrLT5kZXJlZigpOworICAgICAgICBjb250ZXh0LT5kZXJlZigpOworICAgIH0KKwor
ICAgIE11dGV4IG1fbXV0ZXg7CisgICAgUmVmUHRyPFQ+IG1fY2FsbGJhY2s7CisgICAgUmVmUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ+IG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShEQVRBQkFTRSkKKwor
I2VuZGlmIC8vIFNRTENhbGxiYWNrV3JhcHBlcl9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTFN0YXRlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9TUUxTdGF0ZW1lbnQuY3BwCShyZXZpc2lvbiA4MDY4NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0
b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTYgKzQzLDE2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IFNRTFN0
YXRlbWVudDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0b3I8U1FM
VmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IGNhbGxi
YWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2FsbGJhY2ss
IGludCBwZXJtaXNzaW9ucykKK1Bhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6
OmNyZWF0ZShEYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25z
dCBWZWN0b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2Fs
bGJhY2s+IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVy
cm9yQ2FsbGJhY2ssIGludCBwZXJtaXNzaW9ucykKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFNRTFN0YXRlbWVudChzdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGVycm9yQ2FsbGJh
Y2ssIHBlcm1pc3Npb25zKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQo
ZGF0YWJhc2UsIHN0YXRlbWVudCwgYXJndW1lbnRzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaywg
cGVybWlzc2lvbnMpKTsKIH0KIAotU1FMU3RhdGVtZW50OjpTUUxTdGF0ZW1lbnQoY29uc3QgU3Ry
aW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJhY2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVt
ZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywgaW50IHBlcm1pc3Npb25zKQorU1FMU3Rh
dGVtZW50OjpTUUxTdGF0ZW1lbnQoRGF0YWJhc2UqIGRhdGFiYXNlLCBjb25zdCBTdHJpbmcmIHN0
YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNR
TFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lvbnMpCiAgICAgOiBtX3N0YXRl
bWVudChzdGF0ZW1lbnQuY3Jvc3NUaHJlYWRTdHJpbmcoKSkKICAgICAsIG1fYXJndW1lbnRzKGFy
Z3VtZW50cykKLSAgICAsIG1fc3RhdGVtZW50Q2FsbGJhY2soY2FsbGJhY2spCi0gICAgLCBtX3N0
YXRlbWVudEVycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKKyAgICAsIG1fc3RhdGVtZW50Q2Fs
bGJhY2tXcmFwcGVyKGNhbGxiYWNrLCBkYXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KQorICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlcihlcnJvckNhbGxiYWNrLCBk
YXRhYmFzZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICwgbV9wZXJtaXNzaW9ucyhw
ZXJtaXNzaW9ucykKIHsKIH0KQEAgLTE2NiwxNyArMTY2LDE2IEBAIGJvb2wgU1FMU3RhdGVtZW50
OjpwZXJmb3JtQ2FsbGJhY2soU1FMVHIKIAogICAgIGJvb2wgY2FsbGJhY2tFcnJvciA9IGZhbHNl
OwogCisgICAgUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjayA9IG1fc3RhdGVt
ZW50Q2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBl
ci51bndyYXAoKTsKKwogICAgIC8vIENhbGwgdGhlIGFwcHJvcHJpYXRlIHN0YXRlbWVudCBjYWxs
YmFjayBhbmQgdHJhY2sgaWYgaXQgcmVzdWx0ZWQgaW4gYW4gZXJyb3IsCiAgICAgLy8gYmVjYXVz
ZSB0aGVuIHdlIG5lZWQgdG8ganVtcCB0byB0aGUgdHJhbnNhY3Rpb24gZXJyb3IgY2FsbGJhY2su
CiAgICAgaWYgKG1fZXJyb3IpIHsKLSAgICAgICAgQVNTRVJUKG1fc3RhdGVtZW50RXJyb3JDYWxs
YmFjayk7Ci0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2st
PmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKLSAgICB9IGVsc2UgaWYg
KG1fc3RhdGVtZW50Q2FsbGJhY2spCi0gICAgICAgIGNhbGxiYWNrRXJyb3IgPSAhbV9zdGF0ZW1l
bnRDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1fcmVzdWx0U2V0LmdldCgpKTsK
LQotICAgIC8vIE5vdyByZWxlYXNlIG91ciBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBj
eWNsZXMuCi0gICAgbV9zdGF0ZW1lbnRDYWxsYmFjayA9IDA7Ci0gICAgbV9zdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrID0gMDsKKyAgICAgICAgQVNTRVJUKGVycm9yQ2FsbGJhY2spOworICAgICAgICBj
YWxsYmFja0Vycm9yID0gZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQodHJhbnNhY3Rpb24sIG1f
ZXJyb3IuZ2V0KCkpOworICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spCisgICAgICAgIGNhbGxiYWNr
RXJyb3IgPSAhY2FsbGJhY2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5n
ZXQoKSk7CiAKICAgICByZXR1cm4gY2FsbGJhY2tFcnJvcjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAkocmV2aXNpb24gODA2ODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlICJTUUxDYWxsYmFja1dyYXBwZXIuaCIKICNpbmNsdWRlICJTUUxSZXN1bHRTZXQuaCIK
ICNpbmNsdWRlICJTUUxWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC00Niwx
MyArNDcsMTMgQEAgY2xhc3MgU1FMVHJhbnNhY3Rpb247CiAKIGNsYXNzIFNRTFN0YXRlbWVudCA6
IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPFNRTFN0YXRlbWVudD4gewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudD4gY3JlYXRlKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFZlY3RvcjxTUUxWYWx1ZT4mLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBlcm1pc3Npb25zKTsKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnQ+IGNyZWF0ZShEYXRhYmFzZSosIGNvbnN0
IFN0cmluZyYsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVu
dENhbGxiYWNrPiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBl
cm1pc3Npb25zKTsKIAogICAgIGJvb2wgZXhlY3V0ZShEYXRhYmFzZSopOwogICAgIGJvb2wgbGFz
dEV4ZWN1dGlvbkZhaWxlZER1ZVRvUXVvdGEoKSBjb25zdDsKIAotICAgIGJvb2wgaGFzU3RhdGVt
ZW50Q2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudENhbGxiYWNrOyB9Ci0gICAg
Ym9vbCBoYXNTdGF0ZW1lbnRFcnJvckNhbGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZW1l
bnRFcnJvckNhbGxiYWNrOyB9CisgICAgYm9vbCBoYXNTdGF0ZW1lbnRDYWxsYmFjaygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGVtZW50Q2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KKyAg
ICBib29sIGhhc1N0YXRlbWVudEVycm9yQ2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
bWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCk7IH0KIAogICAgIHZvaWQgc2V0
RGF0YWJhc2VEZWxldGVkRXJyb3IoKTsKICAgICB2b2lkIHNldFZlcnNpb25NaXNtYXRjaGVkRXJy
b3IoKTsKQEAgLTYxLDE1ICs2MiwxNSBAQCBwdWJsaWM6CiAKICAgICBTUUxFcnJvciogc3FsRXJy
b3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yLmdldCgpOyB9CiBwcml2YXRlOgotICAgIFNRTFN0
YXRlbWVudChjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYg
YXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFzc1JlZlB0cjxT
UUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBlcm1pc3Npb25zKTsKKyAgICBTUUxTdGF0
ZW1lbnQoRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNR
TFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiwgUGFz
c1JlZlB0cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiwgaW50IHBlcm1pc3Npb25zKTsKIAog
ICAgIHZvaWQgc2V0RmFpbHVyZUR1ZVRvUXVvdGEoKTsKICAgICB2b2lkIGNsZWFyRmFpbHVyZUR1
ZVRvUXVvdGEoKTsKIAogICAgIFN0cmluZyBtX3N0YXRlbWVudDsKICAgICBWZWN0b3I8U1FMVmFs
dWU+IG1fYXJndW1lbnRzOwotICAgIFJlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gbV9zdGF0
ZW1lbnRDYWxsYmFjazsKLSAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gbV9z
dGF0ZW1lbnRFcnJvckNhbGxiYWNrOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxTdGF0ZW1l
bnRDYWxsYmFjaz4gbV9zdGF0ZW1lbnRDYWxsYmFja1dyYXBwZXI7CisgICAgU1FMQ2FsbGJhY2tX
cmFwcGVyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFj
a1dyYXBwZXI7CiAKICAgICBSZWZQdHI8U1FMRXJyb3I+IG1fZXJyb3I7CiAgICAgUmVmUHRyPFNR
TFJlc3VsdFNldD4gbV9yZXN1bHRTZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NR
TFRyYW5zYWN0aW9uLmNwcAkocmV2aXNpb24gODA2ODcpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9y
YWdlL1NRTFRyYW5zYWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsOSArNzEsOSBAQCBT
UUxUcmFuc2FjdGlvbjo6U1FMVHJhbnNhY3Rpb24oRGF0YWJhc2UqCiAgICAgLCBtX2V4ZWN1dGVT
cWxBbGxvd2VkKGZhbHNlKQogICAgICwgbV9kYXRhYmFzZShkYikKICAgICAsIG1fd3JhcHBlcih3
cmFwcGVyKQotICAgICwgbV9jYWxsYmFjayhjYWxsYmFjaykKLSAgICAsIG1fc3VjY2Vzc0NhbGxi
YWNrKHN1Y2Nlc3NDYWxsYmFjaykKLSAgICAsIG1fZXJyb3JDYWxsYmFjayhlcnJvckNhbGxiYWNr
KQorICAgICwgbV9jYWxsYmFja1dyYXBwZXIoY2FsbGJhY2ssIGRiLT5zY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCisgICAgLCBtX3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIoc3VjY2Vzc0NhbGxiYWNr
LCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9lcnJvckNhbGxiYWNrV3Jh
cHBlcihlcnJvckNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQogICAgICwg
bV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQoZmFsc2UpCiAgICAgLCBtX21vZGlmaWVkRGF0
YWJhc2UoZmFsc2UpCiAgICAgLCBtX2xvY2tBY3F1aXJlZChmYWxzZSkKQEAgLTEwMCw3ICsxMDAs
NyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpleGVjdXRlU1FMKGNvbnN0IFN0CiAgICAgZWxzZSBp
ZiAobV9yZWFkT25seSkKICAgICAgICAgcGVybWlzc2lvbnMgfD0gRGF0YWJhc2VBdXRob3JpemVy
OjpSZWFkT25seU1hc2s7CiAKLSAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0ZW1lbnQgPSBT
UUxTdGF0ZW1lbnQ6OmNyZWF0ZShzcWxTdGF0ZW1lbnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNh
bGxiYWNrRXJyb3IsIHBlcm1pc3Npb25zKTsKKyAgICBSZWZQdHI8U1FMU3RhdGVtZW50PiBzdGF0
ZW1lbnQgPSBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShtX2RhdGFiYXNlLmdldCgpLCBzcWxTdGF0ZW1l
bnQsIGFyZ3VtZW50cywgY2FsbGJhY2ssIGNhbGxiYWNrRXJyb3IsIHBlcm1pc3Npb25zKTsKIAog
ICAgIGlmIChtX2RhdGFiYXNlLT5kZWxldGVkKCkpCiAgICAgICAgIHN0YXRlbWVudC0+c2V0RGF0
YWJhc2VEZWxldGVkRXJyb3IoKTsKQEAgLTE1OSw5ICsxNTksOSBAQCB2b2lkIFNRTFRyYW5zYWN0
aW9uOjpjaGVja0FuZEhhbmRsZUNsb3NlCiAgICAgbV9uZXh0U3RlcCA9IDA7CiAKICAgICAvLyBS
ZWxlYXNlIHRoZSB1bm5lZWRlZCBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMu
Ci0gICAgbV9jYWxsYmFjayA9IDA7Ci0gICAgbV9zdWNjZXNzQ2FsbGJhY2sgPSAwOwotICAgIG1f
ZXJyb3JDYWxsYmFjayA9IDA7CisgICAgbV9jYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKKyAgICBt
X3N1Y2Nlc3NDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKKyAgICBtX2Vycm9yQ2FsbGJhY2tXcmFw
cGVyLmNsZWFyKCk7CiAKICAgICAvLyBUaGUgbmV4dCBzdGVwcyBzaG91bGQgYmUgZXhlY3V0ZWQg
b25seSBpZiB3ZSdyZSBvbiB0aGUgREIgdGhyZWFkLgogICAgIGlmIChjdXJyZW50VGhyZWFkKCkg
IT0gZGF0YWJhc2UoKS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5kYXRhYmFzZVRocmVhZCgp
LT5nZXRUaHJlYWRJRCgpKQpAQCAtMjkzLDExICsyOTMsMTEgQEAgdm9pZCBTUUxUcmFuc2FjdGlv
bjo6ZGVsaXZlclRyYW5zYWN0aW9uQwogewogICAgIGJvb2wgc2hvdWxkRGVsaXZlckVycm9yQ2Fs
bGJhY2sgPSBmYWxzZTsKIAotICAgIGlmIChtX2NhbGxiYWNrKSB7CisgICAgUmVmUHRyPFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s+IGNhbGxiYWNrID0gbV9jYWxsYmFja1dyYXBwZXIudW53cmFwKCk7
CisgICAgaWYgKGNhbGxiYWNrKSB7CiAgICAgICAgIG1fZXhlY3V0ZVNxbEFsbG93ZWQgPSB0cnVl
OwotICAgICAgICBzaG91bGREZWxpdmVyRXJyb3JDYWxsYmFjayA9ICFtX2NhbGxiYWNrLT5oYW5k
bGVFdmVudCh0aGlzKTsKKyAgICAgICAgc2hvdWxkRGVsaXZlckVycm9yQ2FsbGJhY2sgPSAhY2Fs
bGJhY2stPmhhbmRsZUV2ZW50KHRoaXMpOwogICAgICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0g
ZmFsc2U7Ci0gICAgICAgIG1fY2FsbGJhY2sgPSAwOwogICAgIH0KIAogICAgIC8vIFRyYW5zYWN0
aW9uIFN0ZXAgNSAtIElmIHRoZSB0cmFuc2FjdGlvbiBjYWxsYmFjayB3YXMgbnVsbCBvciByYWlz
ZWQgYW4gZXhjZXB0aW9uLCBqdW1wIHRvIHRoZSBlcnJvciBjYWxsYmFjawpAQCAtNDI1LDcgKzQy
NSw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdGF0ZW1lbnRDYWwKICAgICBtX2V4
ZWN1dGVTcWxBbGxvd2VkID0gZmFsc2U7CiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICBtX3Ry
YW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpVTktOT1dOX0VSUiwg
InRoZSBzdGF0ZW1lbnQgY2FsbGJhY2sgcmFpc2VkIGFuIGV4Y2VwdGlvbiBvciBzdGF0ZW1lbnQg
ZXJyb3IgY2FsbGJhY2sgZGlkIG5vdCByZXR1cm4gZmFsc2UiKTsKKyAgICAgICAgbV90cmFuc2Fj
dGlvbkVycm9yID0gU1FMRXJyb3I6OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ0aGUg
c3RhdGVtZW50IGNhbGxiYWNrIHJhaXNlZCBhbiBleGNlcHRpb24gb3Igc3RhdGVtZW50IGVycm9y
IGNhbGxiYWNrIGRpZCBub3QgcmV0dXJuIGZhbHNlIik7CiAgICAgICAgIGhhbmRsZVRyYW5zYWN0
aW9uRXJyb3IodHJ1ZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHNjaGVkdWxlVG9SdW5TdGF0ZW1l
bnRzKCk7CkBAIC00NjUsNyArNDY1LDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdo
dEFuZENvbW1pdAogCiAgICAgLy8gSWYgdGhlIGNvbW1pdCBmYWlsZWQsIHRoZSB0cmFuc2FjdGlv
biB3aWxsIHN0aWxsIGJlIG1hcmtlZCBhcyAiaW4gcHJvZ3Jlc3MiCiAgICAgaWYgKG1fc3FsaXRl
VHJhbnNhY3Rpb24tPmluUHJvZ3Jlc3MoKSkgewotICAgICAgICBtX3N1Y2Nlc3NDYWxsYmFjayA9
IDA7CisgICAgICAgIG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci5jbGVhcigpOwogICAgICAgICBt
X3RyYW5zYWN0aW9uRXJyb3IgPSBTUUxFcnJvcjo6Y3JlYXRlKFNRTEVycm9yOjpEQVRBQkFTRV9F
UlIsICJmYWlsZWQgdG8gY29tbWl0IHRoZSB0cmFuc2FjdGlvbiIpOwogICAgICAgICBoYW5kbGVU
cmFuc2FjdGlvbkVycm9yKGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwpAQCAtNDgwLDEwICs0ODAs
MTAgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6cG9zdGZsaWdodEFuZENvbW1pdAogICAgICAgICBt
X2RhdGFiYXNlLT50cmFuc2FjdGlvbkNsaWVudCgpLT5kaWRDb21taXRXcml0ZVRyYW5zYWN0aW9u
KGRhdGFiYXNlKCkpOwogCiAgICAgLy8gTm93IHJlbGVhc2Ugb3VyIHVubmVlZGVkIGNhbGxiYWNr
cywgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcy4KLSAgICBtX2Vycm9yQ2FsbGJhY2sgPSAwOwor
ICAgIG1fZXJyb3JDYWxsYmFja1dyYXBwZXIuY2xlYXIoKTsKIAogICAgIC8vIFRyYW5zYWN0aW9u
IFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2ssIGlmIHRoZXJlIGlzIG9uZQotICAg
IGlmIChtX3N1Y2Nlc3NDYWxsYmFjaykgeworICAgIGlmIChtX3N1Y2Nlc3NDYWxsYmFja1dyYXBw
ZXIuaGFzQ2FsbGJhY2soKSkgewogICAgICAgICBtX25leHRTdGVwID0gJlNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrOwogICAgICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVk
dWxpbmcgZGVsaXZlclN1Y2Nlc3NDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMp
OwogICAgICAgICBtX2RhdGFiYXNlLT5zY2hlZHVsZVRyYW5zYWN0aW9uQ2FsbGJhY2sodGhpcyk7
CkBAIC00OTQsMTEgKzQ5NCw5IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRD
b21taXQKIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJTdWNjZXNzQ2FsbGJhY2soKQogewog
ICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTAgLSBEZWxpdmVyIHN1Y2Nlc3MgY2FsbGJhY2sKLSAg
ICBBU1NFUlQobV9zdWNjZXNzQ2FsbGJhY2spOwotICAgIG1fc3VjY2Vzc0NhbGxiYWNrLT5oYW5k
bGVFdmVudCgpOwotCi0gICAgLy8gUmVsZWFzZSB0aGUgbGFzdCBjYWxsYmFjayB0byBicmVhayBy
ZWZlcmVuY2UgY3ljbGUKLSAgICBtX3N1Y2Nlc3NDYWxsYmFjayA9IDA7CisgICAgUmVmUHRyPFZv
aWRDYWxsYmFjaz4gc3VjY2Vzc0NhbGxiYWNrID0gbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLnVu
d3JhcCgpOworICAgIGlmIChzdWNjZXNzQ2FsbGJhY2spCisgICAgICAgIHN1Y2Nlc3NDYWxsYmFj
ay0+aGFuZGxlRXZlbnQoKTsKIAogICAgIC8vIFNjaGVkdWxlIGEgInBvc3Qtc3VjY2VzcyBjYWxs
YmFjayIgc3RlcCB0byByZXR1cm4gY29udHJvbCB0byB0aGUgZGF0YWJhc2UgdGhyZWFkIGluIGNh
c2UgdGhlcmUKICAgICAvLyBhcmUgZnVydGhlciB0cmFuc2FjdGlvbnMgcXVldWVkIHVwIGZvciB0
aGlzIERhdGFiYXNlCkBAIC01MjQsNyArNTIyLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2xl
YW51cEFmdGVyU3VjY2VzcwogCiB2b2lkIFNRTFRyYW5zYWN0aW9uOjpoYW5kbGVUcmFuc2FjdGlv
bkVycm9yKGJvb2wgaW5DYWxsYmFjaykKIHsKLSAgICBpZiAobV9lcnJvckNhbGxiYWNrKSB7Cisg
ICAgaWYgKG1fZXJyb3JDYWxsYmFja1dyYXBwZXIuaGFzQ2FsbGJhY2soKSkgewogICAgICAgICBp
ZiAoaW5DYWxsYmFjaykKICAgICAgICAgICAgIGRlbGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJh
Y2soKTsKICAgICAgICAgZWxzZSB7CkBAIC01NTIsMTAgKzU1MCw5IEBAIHZvaWQgU1FMVHJhbnNh
Y3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkUKIAogICAgIC8vIFRyYW5zYWN0aW9uIFN0ZXAgMTIg
LSBJZiBleGlzdHMsIGludm9rZSBlcnJvciBjYWxsYmFjayB3aXRoIHRoZSBsYXN0CiAgICAgLy8g
ZXJyb3IgdG8gaGF2ZSBvY2N1cnJlZCBpbiB0aGlzIHRyYW5zYWN0aW9uLgotICAgIGlmIChtX2Vy
cm9yQ2FsbGJhY2spIHsKLSAgICAgICAgbV9lcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudChtX3Ry
YW5zYWN0aW9uRXJyb3IuZ2V0KCkpOwotICAgICAgICBtX2Vycm9yQ2FsbGJhY2sgPSAwOwotICAg
IH0KKyAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNr
ID0gbV9lcnJvckNhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKKyAgICBpZiAoZXJyb3JDYWxsYmFj
aykKKyAgICAgICAgZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlvbkVycm9y
LmdldCgpKTsKIAogICAgIG1fbmV4dFN0ZXAgPSAmU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRl
clRyYW5zYWN0aW9uRXJyb3JDYWxsYmFjazsKICAgICBMT0coU3RvcmFnZUFQSSwgIlNjaGVkdWxp
bmcgY2xlYW51cEFmdGVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrIGZvciB0cmFuc2FjdGlvbiAl
cFxuIiwgdGhpcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5o
CShyZXZpc2lvbiA4MDY4NykKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDkgKzExNSw5IEBAIHByaXZhdGU6CiAKICAgICBS
ZWZQdHI8RGF0YWJhc2U+IG1fZGF0YWJhc2U7CiAgICAgUmVmUHRyPFNRTFRyYW5zYWN0aW9uV3Jh
cHBlcj4gbV93cmFwcGVyOwotICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBtX2Nh
bGxiYWNrOwotICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrOwotICAg
IFJlZlB0cjxTUUxUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFjazsKKyAg
ICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gbV9jYWxsYmFja1dy
YXBwZXI7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFZvaWRDYWxsYmFjaz4gbV9zdWNjZXNzQ2Fs
bGJhY2tXcmFwcGVyOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxUcmFuc2FjdGlvbkVycm9y
Q2FsbGJhY2s+IG1fZXJyb3JDYWxsYmFja1dyYXBwZXI7CiAgICAgUmVmUHRyPFNRTEVycm9yPiBt
X3RyYW5zYWN0aW9uRXJyb3I7CiAgICAgYm9vbCBtX3Nob3VsZFJldHJ5Q3VycmVudFN0YXRlbWVu
dDsKICAgICBib29sIG1fbW9kaWZpZWREYXRhYmFzZTsK
</data>
<flag name="review"
          id="77382"
          type_id="1"
          status="+"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85511</attachid>
            <date>2011-03-11 12:28:55 -0800</date>
            <delta_ts>2011-03-11 12:34:40 -0800</delta_ts>
            <desc>wrapper</desc>
            <filename>callbackWrapper6.txt</filename>
            <type>text/plain</type>
            <size>24004</size>
            <attacher name="Michael Nordman">michaeln</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwODY2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTEtMDMtMDkgIE1pY2hhZWwg
Tm9yZG1hbiAgPG1pY2hhZWxuQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFNRTENhbGxiYWNrV3JhcHBlcgorICAgICAgICBJ
bnN0ZWFkIG9mIGRpcmVjdGx5IGhvbGRpbmcgUmVmUHRycyB0byB0aGUgQ2FsbGJhY2sgb2JqZWN0
cyBpbiBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9uLCBob2xkIGEgd3JhcHBlciBvYmpl
Y3RzCisgICAgICAgIHdoaWNoIGhvbGRzIHRob3NlIHJlZmVyZW5jZXMgd2hvc2UgZHRvcnMgd2ls
bCBzY2hlZHVsZSB0aGUgcmVsZWFzZSBvZiB0aG9zZSByZWZlcmVuY2VzIG9uIHRoZSBTY3JpcHRF
eGVjdXRpb24gdGhyZWFkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NTU5MTkKKworICAgICAgICBObyBuZXcgdGVzdHMsIGV4aXN0aW5nIHRlc3RzIGFw
cGx5LgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBzdG9yYWdlL1NRTENhbGxiYWNrV3JhcHBlci5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlNRTENhbGxiYWNrV3JhcHBlcjo6U1FMQ2FsbGJhY2tXcmFwcGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTENhbGxiYWNrV3JhcHBlcjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U1FMQ2FsbGJhY2tXcmFwcGVyOjp1bndyYXApOgorICAgICAgICAoV2ViQ29yZTo6U1FMQ2Fs
bGJhY2tXcmFwcGVyOjpoYXNDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTUUxDYWxsYmFj
a1dyYXBwZXI6OnNhZmVSZWxlYXNlKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFN0YXRlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxTdGF0ZW1lbnQ6OlNRTFN0YXRlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxTdGF0ZW1lbnQ6OnBlcmZvcm1DYWxsYmFjayk6CisgICAgICAgICogc3RvcmFnZS9TUUxTdGF0
ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNRTFN0YXRlbWVudDo6aGFzU3RhdGVtZW50Q2Fs
bGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMU3RhdGVtZW50OjpoYXNTdGF0ZW1lbnRFcnJv
ckNhbGxiYWNrKToKKyAgICAgICAgKiBzdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpTUUxUcmFuc2FjdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNRTCk6CisgICAgICAgIChXZWJDb3JlOjpT
UUxUcmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZWRPckludGVycnVwdGVkRGF0YWJhc2Up
OgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyU3RhdGVt
ZW50Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OnBvc3RmbGln
aHRBbmRDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJT
dWNjZXNzQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmhhbmRs
ZVRyYW5zYWN0aW9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6U1FMVHJhbnNhY3Rpb246OmRl
bGl2ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2spOgorICAgICAgICAqIHN0b3JhZ2UvU1FMVHJh
bnNhY3Rpb24uaDoKKwogMjAxMS0wMy0wOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBSb2Jlbi4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiA4MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0zMTc1LDYgKzMxNzUsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmggXAogCVNvdXJj
ZS9XZWJDb3JlL3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9zdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmggXAorCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2Uv
U1FMQ2FsbGJhY2tXcmFwcGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMRXJyb3Iu
aCBcCiAJU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxFeGNlcHRpb24uaCBcCiAJU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJl
dmlzaW9uIDgwODY2KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNv
cHkpCkBAIC00NTkyLDYgKzQ1OTIsNyBAQAogICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2luUXVv
dGFNYW5hZ2VyLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvT3JpZ2luVXNhZ2VSZWNvcmQuY3Bw
JywKICAgICAgICAgICAgICdzdG9yYWdlL09yaWdpblVzYWdlUmVjb3JkLmgnLAorICAgICAgICAg
ICAgJ3N0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgnLAogICAgICAgICAgICAgJ3N0b3JhZ2Uv
U1FMRXJyb3IuaCcsCiAgICAgICAgICAgICAnc3RvcmFnZS9TUUxFeGNlcHRpb24uaCcsCiAgICAg
ICAgICAgICAnc3RvcmFnZS9TUUxSZXN1bHRTZXQuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShy
ZXZpc2lvbiA4MDg2NikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNv
cHkpCkBAIC0yNzI5LDYgKzI3MjksNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfRE9NX1NU
T1JBR0U9MSkKICAgICAgICAgc3RvcmFnZS9Mb2NhbFN0b3JhZ2VUaHJlYWQuaCBcCiAgICAgICAg
IHN0b3JhZ2UvT3JpZ2luUXVvdGFNYW5hZ2VyLmggXAogICAgICAgICBzdG9yYWdlL09yaWdpblVz
YWdlUmVjb3JkLmggXAorICAgICAgICBzdG9yYWdlL1NRTENhbGxiYWNrV3JhcHBlci5oIFwKICAg
ICAgICAgc3RvcmFnZS9TUUxSZXN1bHRTZXQuaCBcCiAgICAgICAgIHN0b3JhZ2UvU1FMUmVzdWx0
U2V0Um93TGlzdC5oIFwKICAgICAgICAgc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaCBcCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
ODA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagko
d29ya2luZyBjb3B5KQpAQCAtNjU3MjIsNyArNjU3MjIsNyBAQAogCQkJCT4KIAkJCTwvRmlsZT4K
IAkJCTxGaWxlCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTENhbGxiYWNrLmgiCisJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxzdG9yYWdlXFNRTENhbGxiYWNrV3JhcHBlci5oIgogCQkJCT4K
IAkJCTwvRmlsZT4KIAkJCTxGaWxlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA4MDg2NikKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNjQxLDYgKzY0MSw3IEBACiAJCTIwRDYyOTI3MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDIwRDYyOTI1MTI1MzY5MEIwMDA4MTU0MyAvKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb24uaCAqLzsgfTsKIAkJMjI4ODVFNjQxMzAxQUU0QzAwNTI2RTY4IC8qIEpTRE9NSW1wbGVt
ZW50YXRpb25DdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjI4ODVFNjMxMzAxQUU0QzAwNTI2RTY4IC8qIEpTRE9NSW1wbGVtZW50YXRpb25D
dXN0b20uY3BwICovOyB9OwogCQkyMjhDMjg0NTEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3Jh
cHBhYmxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
MjhDMjg0NDEwRDgyNTAwMDA5RDBEMEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMjQ1RDgwQTMxMzI4MEU0MDAw
MzQ5MkE2IC8qIFNRTENhbGxiYWNrV3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjQ1RDgwQTIxMzI4MEU0MDAwMzQ5MkE2IC8qIFNRTENhbGxi
YWNrV3JhcHBlci5oICovOyB9OwogCQkyNEY1NEVBQzEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGlj
YXRpb25DYWNoZUhvc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMjRGNTRFQUExMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2FjaGVIb3N0
LmNwcCAqLzsgfTsKIAkJMjRGNTRFQUQxMDFGRTkxNDAwMEFFNzQxIC8qIEFwcGxpY2F0aW9uQ2Fj
aGVIb3N0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
NEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkyNTQyRjREQTExNjZDMjVBMDBFODlB
ODYgLyogVXNlckdlc3R1cmVJbmRpY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8qIFVzZXJHZXN0
dXJlSW5kaWNhdG9yLmNwcCAqLzsgfTsKQEAgLTcwMTAsNiArNzAxMSw3IEBACiAJCTIyODg1RTYz
MTMwMUFFNEMwMDUyNkU2OCAvKiBKU0RPTUltcGxlbWVudGF0aW9uQ3VzdG9tLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRE9NSW1wbGVtZW50YXRpb25DdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyMjhDMjg0NDEwRDgyNTAwMDA5RDBE
MEUgLyogU2NyaXB0V3JhcHBhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjcmlwdFdyYXBwYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNDQyQkJG
ODExOTRDOUQzMDBENDk0NjkgLyogSGFzaENoYW5nZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEhhc2hDaGFuZ2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkyNDVEODBBMjEzMjgwRTQwMDAzNDkyQTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNRTENhbGxiYWNrV3JhcHBlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyNEY1NEVBQTEwMUZFOTE0MDAwQUU3NDEgLyog
QXBwbGljYXRpb25DYWNoZUhvc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkyNEY1NEVBQjEwMUZFOTE0MDAwQUU3NDEgLyogQXBwbGljYXRpb25DYWNoZUhvc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXBwbGljYXRpb25DYWNoZUhvc3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjU0MkY0RDgxMTY2QzI1QTAwRTg5QTg2IC8q
IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFVzZXJHZXN0dXJlSW5kaWNhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyOTY2LDYgKzEyOTY4LDcgQEAKIAkJCQk1MUE5MjY3OTBENTNGMDU3MDA2M0VDQzIg
LyogT3JpZ2luUXVvdGFNYW5hZ2VyLmggKi8sCiAJCQkJNTFBOTI2N0EwRDUzRjA1NzAwNjNFQ0My
IC8qIE9yaWdpblVzYWdlUmVjb3JkLmNwcCAqLywKIAkJCQk1MUE5MjY3QjBENTNGMDU3MDA2M0VD
QzIgLyogT3JpZ2luVXNhZ2VSZWNvcmQuaCAqLywKKwkJCQkyNDVEODBBMjEzMjgwRTQwMDAzNDky
QTYgLyogU1FMQ2FsbGJhY2tXcmFwcGVyLmggKi8sCiAJCQkJNTFFQzkyNTcwQ0U5MERCNDAwRjkw
MzA4IC8qIFNRTEVycm9yLmggKi8sCiAJCQkJNTFFQzkyNTgwQ0U5MERCNDAwRjkwMzA4IC8qIFNR
TEVycm9yLmlkbCAqLywKIAkJCQlCNTZFQkE4MzExQzlGRjgxMDBCMDQ0NzcgLyogU1FMRXhjZXB0
aW9uLmggKi8sCkBAIC0yMjYzMiw2ICsyMjYzNSw3IEBACiAJCQkJNTk4RDc3REYxMzI1NDFGQTAw
NzYxQjIyIC8qIEphdmFBcnJheUpTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTk4RDc3RTMxMzI1
NDIwRTAwNzYxQjIyIC8qIEphdmFGaWVsZEpTQy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEM0Y5
ODMxMzI2QzkzNzAwMDk4QTYwIC8qIFRleHRPcmllbnRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMjQ1RDgwQTMxMzI4MEU0MDAwMzQ5MkE2IC8qIFNRTENhbGxiYWNrV3JhcHBlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRjMxNjM5NkMxMzI5NDgxQTAwQTY0OUNCIC8qIEluamVjdGVkU2NyaXB0
TWFuYWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5NDYxNjMxMzAyMEIyMDAwNEJCM0Y4IC8q
IEpTV2ViS2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk0NjE2QTEzMDIwQjY2
MDA0QkIzRjggLyogRE9NV2ViS2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxDYWxsYmFja1dyYXBwZXIuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMQ2FsbGJhY2tXcmFwcGVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1l
cyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgU1FMQ2FsbGJhY2tXcmFwcGVyX2gKKyNkZWZp
bmUgU1FMQ2FsbGJhY2tXcmFwcGVyX2gKKworI2lmIEVOQUJMRShEQVRBQkFTRSkKKworI2luY2x1
ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKKy8vIEEgaGVscGVyIGNsYXNzIHRvIHNhZmVseSBkZXJlZmVyZW5jZSB0aGUgY2Fs
bGJhY2sgb2JqZWN0cyBoZWxkIGJ5CisvLyBTUUxTdGF0ZW1lbnQgYW5kIFNRTFRyYW5zYWN0aW9u
IG9uIHRoZSBwcm9wZXIgdGhyZWFkLiBUaGUgJ3dyYXBwZWQnCisvLyBjYWxsYmFjayBpcyBkZXJl
ZmVyZW5jZWQ6CisvLyAtIGJ5IGRlc3RydWN0aW5nIHRoZSBlbmNsb3Npbmcgd3JhcHBlciAtIG9u
IGFueSB0aHJlYWQKKy8vIC0gYnkgY2FsbGluZyBjbGVhcigpIC0gb24gYW55IHRocmVhZAorLy8g
LSBieSB1bndyYXBwaW5nIGFuZCB0aGVuIGRlcmVmZXJlbmNpbmcgbm9ybWFsbHkgLSBvbiBjb250
ZXh0IHRocmVhZCBvbmx5Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBjbGFzcyBTUUxDYWxsYmFja1dy
YXBwZXIgeworcHVibGljOgorICAgIFNRTENhbGxiYWNrV3JhcHBlcihQYXNzUmVmUHRyPFQ+IGNh
bGxiYWNrLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KQor
ICAgICAgICA6IG1fY2FsbGJhY2soY2FsbGJhY2spCisgICAgICAgICwgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0KG1fY2FsbGJhY2sgPyBzY3JpcHRFeGVjdXRpb25Db250ZXh0IDogMCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCghbV9jYWxsYmFjayB8fCAobV9zY3JpcHRFeGVjdXRpb25Db250ZXh0
LmdldCgpICYmIG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpKTsK
KyAgICB9CisKKyAgICBTUUxDYWxsYmFja1dyYXBwZXIoKQorICAgIHsKKyAgICAgICAgY2xlYXIo
KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQ7CisgICAgICAgIFQqIGNhbGxiYWNrOworICAgICAgICB7Cisg
ICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV9tdXRleCk7CisgICAgICAgICAgICBpZiAo
IW1fY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgaWYgKG1fc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+aXNDb250ZXh0VGhyZWFkKCkpIHsK
KyAgICAgICAgICAgICAgICBtX2NhbGxiYWNrID0gMDsKKyAgICAgICAgICAgICAgICBtX3Njcmlw
dEV4ZWN1dGlvbkNvbnRleHQgPSAwOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGNvbnRleHQgPSBtX3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQucmVs
ZWFzZSgpLmxlYWtSZWYoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gbV9jYWxsYmFjay5yZWxl
YXNlKCkubGVha1JlZigpOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQtPnBvc3RUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmc2FmZVJlbGVhc2UsIGNhbGxiYWNrKSk7CisgICAgfQorCisgICAg
UGFzc1JlZlB0cjxUPiB1bndyYXAoKQorICAgIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fbXV0ZXgpOworICAgICAgICBBU1NFUlQoIW1fY2FsbGJhY2sgfHwgbV9zY3JpcHRFeGVjdXRp
b25Db250ZXh0LT5pc0NvbnRleHRUaHJlYWQoKSk7CisgICAgICAgIG1fc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCA9IDA7CisgICAgICAgIHJldHVybiBtX2NhbGxiYWNrLnJlbGVhc2UoKTsKKyAgICB9
CisKKyAgICAvLyBVc2VmdWwgZm9yIG9wdGltaXphdGlvbnMgb25seSwgcGxlYXNlIHRlc3QgdGhl
IHJldHVybiB2YWx1ZSBvZiB1bndyYXAgdG8gYmUgc3VyZS4KKyAgICBib29sIGhhc0NhbGxiYWNr
KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsYmFjazsgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyB2
b2lkIHNhZmVSZWxlYXNlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFQqIGNhbGxi
YWNrKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNhbGxiYWNrICYmIGNvbnRleHQgJiYgY29udGV4
dC0+aXNDb250ZXh0VGhyZWFkKCkpOworICAgICAgICBjYWxsYmFjay0+ZGVyZWYoKTsKKyAgICAg
ICAgY29udGV4dC0+ZGVyZWYoKTsKKyAgICB9CisKKyAgICBNdXRleCBtX211dGV4OworICAgIFJl
ZlB0cjxUPiBtX2NhbGxiYWNrOworICAgIFJlZlB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0PiBt
X3NjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoREFUQUJBU0UpCisKKyNlbmRpZiAvLyBTUUxDYWxsYmFja1dyYXBw
ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmNwcAkocmV2aXNp
b24gODA4NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQzLDE2ICs0MywxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NSZWZQdHI8U1FMU3RhdGVtZW50PiBTUUxTdGF0ZW1lbnQ6OmNyZWF0ZShjb25zdCBTdHJp
bmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1lbnRzLCBQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1l
bnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lvbnMpCitQYXNzUmVm
UHRyPFNRTFN0YXRlbWVudD4gU1FMU3RhdGVtZW50OjpjcmVhdGUoRGF0YWJhc2UqIGRhdGFiYXNl
LCBjb25zdCBTdHJpbmcmIHN0YXRlbWVudCwgY29uc3QgVmVjdG9yPFNRTFZhbHVlPiYgYXJndW1l
bnRzLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudENhbGxiYWNrPiBjYWxsYmFjaywgUGFzc1JlZlB0
cjxTUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrPiBlcnJvckNhbGxiYWNrLCBpbnQgcGVybWlzc2lv
bnMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTUUxTdGF0ZW1lbnQoc3RhdGVtZW50LCBh
cmd1bWVudHMsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrLCBwZXJtaXNzaW9ucykpOworICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgU1FMU3RhdGVtZW50KGRhdGFiYXNlLCBzdGF0ZW1lbnQsIGFyZ3Vt
ZW50cywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIHBlcm1pc3Npb25zKSk7CiB9CiAKLVNRTFN0
YXRlbWVudDo6U1FMU3RhdGVtZW50KGNvbnN0IFN0cmluZyYgc3RhdGVtZW50LCBjb25zdCBWZWN0
b3I8U1FMVmFsdWU+JiBhcmd1bWVudHMsIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+
IGNhbGxiYWNrLCBQYXNzUmVmUHRyPFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IGVycm9yQ2Fs
bGJhY2ssIGludCBwZXJtaXNzaW9ucykKK1NRTFN0YXRlbWVudDo6U1FMU3RhdGVtZW50KERhdGFi
YXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxW
YWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4gY2FsbGJh
Y2ssIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjaywg
aW50IHBlcm1pc3Npb25zKQogICAgIDogbV9zdGF0ZW1lbnQoc3RhdGVtZW50LmNyb3NzVGhyZWFk
U3RyaW5nKCkpCiAgICAgLCBtX2FyZ3VtZW50cyhhcmd1bWVudHMpCi0gICAgLCBtX3N0YXRlbWVu
dENhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrKGVycm9y
Q2FsbGJhY2spCisgICAgLCBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlcihjYWxsYmFjaywgZGF0
YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKKyAgICAsIG1fc3RhdGVtZW50RXJyb3JD
YWxsYmFja1dyYXBwZXIoZXJyb3JDYWxsYmFjaywgZGF0YWJhc2UtPnNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKSkKICAgICAsIG1fcGVybWlzc2lvbnMocGVybWlzc2lvbnMpCiB7CiB9CkBAIC0xNjYs
MTcgKzE2NiwxNiBAQCBib29sIFNRTFN0YXRlbWVudDo6cGVyZm9ybUNhbGxiYWNrKFNRTFRyCiAK
ICAgICBib29sIGNhbGxiYWNrRXJyb3IgPSBmYWxzZTsKIAorICAgIFJlZlB0cjxTUUxTdGF0ZW1l
bnRDYWxsYmFjaz4gY2FsbGJhY2sgPSBtX3N0YXRlbWVudENhbGxiYWNrV3JhcHBlci51bndyYXAo
KTsKKyAgICBSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9
IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFja1dyYXBwZXIudW53cmFwKCk7CisKICAgICAvLyBDYWxs
IHRoZSBhcHByb3ByaWF0ZSBzdGF0ZW1lbnQgY2FsbGJhY2sgYW5kIHRyYWNrIGlmIGl0IHJlc3Vs
dGVkIGluIGFuIGVycm9yLAogICAgIC8vIGJlY2F1c2UgdGhlbiB3ZSBuZWVkIHRvIGp1bXAgdG8g
dGhlIHRyYW5zYWN0aW9uIGVycm9yIGNhbGxiYWNrLgogICAgIGlmIChtX2Vycm9yKSB7Ci0gICAg
ICAgIEFTU0VSVChtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2spOwotICAgICAgICBjYWxsYmFja0Vy
cm9yID0gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrLT5oYW5kbGVFdmVudCh0cmFuc2FjdGlvbiwg
bV9lcnJvci5nZXQoKSk7Ci0gICAgfSBlbHNlIGlmIChtX3N0YXRlbWVudENhbGxiYWNrKQotICAg
ICAgICBjYWxsYmFja0Vycm9yID0gIW1fc3RhdGVtZW50Q2FsbGJhY2stPmhhbmRsZUV2ZW50KHRy
YW5zYWN0aW9uLCBtX3Jlc3VsdFNldC5nZXQoKSk7Ci0KLSAgICAvLyBOb3cgcmVsZWFzZSBvdXIg
Y2FsbGJhY2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fc3RhdGVtZW50Q2Fs
bGJhY2sgPSAwOwotICAgIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjayA9IDA7CisgICAgICAgIEFT
U0VSVChlcnJvckNhbGxiYWNrKTsKKyAgICAgICAgY2FsbGJhY2tFcnJvciA9IGVycm9yQ2FsbGJh
Y2stPmhhbmRsZUV2ZW50KHRyYW5zYWN0aW9uLCBtX2Vycm9yLmdldCgpKTsKKyAgICB9IGVsc2Ug
aWYgKGNhbGxiYWNrKQorICAgICAgICBjYWxsYmFja0Vycm9yID0gIWNhbGxiYWNrLT5oYW5kbGVF
dmVudCh0cmFuc2FjdGlvbiwgbV9yZXN1bHRTZXQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGNhbGxi
YWNrRXJyb3I7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL1NRTFN0YXRlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvU1FMU3RhdGVtZW50LmgJKHJl
dmlzaW9uIDgwODY2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxTdGF0ZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShEQVRBQkFTRSkKIAog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU1FMQ2FsbGJhY2tXcmFwcGVy
LmgiCiAjaW5jbHVkZSAiU1FMUmVzdWx0U2V0LmgiCiAjaW5jbHVkZSAiU1FMVmFsdWUuaCIKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgpAQCAtNDYsMTMgKzQ3LDEzIEBAIGNsYXNzIFNRTFRyYW5z
YWN0aW9uOwogCiBjbGFzcyBTUUxTdGF0ZW1lbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxT
UUxTdGF0ZW1lbnQ+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxTUUxTdGF0ZW1l
bnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U1FMVmFsdWU+JiwgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4sIGludCBwZXJtaXNzaW9ucyk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8U1FMU3Rh
dGVtZW50PiBjcmVhdGUoRGF0YWJhc2UqLCBjb25zdCBTdHJpbmcmLCBjb25zdCBWZWN0b3I8U1FM
VmFsdWU+JiwgUGFzc1JlZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FM
U3RhdGVtZW50RXJyb3JDYWxsYmFjaz4sIGludCBwZXJtaXNzaW9ucyk7CiAKICAgICBib29sIGV4
ZWN1dGUoRGF0YWJhc2UqKTsKICAgICBib29sIGxhc3RFeGVjdXRpb25GYWlsZWREdWVUb1F1b3Rh
KCkgY29uc3Q7CiAKLSAgICBib29sIGhhc1N0YXRlbWVudENhbGxiYWNrKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZW1lbnRDYWxsYmFjazsgfQotICAgIGJvb2wgaGFzU3RhdGVtZW50RXJyb3JDYWxs
YmFjaygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjazsgfQorICAgIGJv
b2wgaGFzU3RhdGVtZW50Q2FsbGJhY2soKSBjb25zdCB7IHJldHVybiBtX3N0YXRlbWVudENhbGxi
YWNrV3JhcHBlci5oYXNDYWxsYmFjaygpOyB9CisgICAgYm9vbCBoYXNTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZW1lbnRFcnJvckNhbGxiYWNrV3JhcHBlci5o
YXNDYWxsYmFjaygpOyB9CiAKICAgICB2b2lkIHNldERhdGFiYXNlRGVsZXRlZEVycm9yKCk7CiAg
ICAgdm9pZCBzZXRWZXJzaW9uTWlzbWF0Y2hlZEVycm9yKCk7CkBAIC02MSwxNSArNjIsMTUgQEAg
cHVibGljOgogCiAgICAgU1FMRXJyb3IqIHNxbEVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJv
ci5nZXQoKTsgfQogcHJpdmF0ZToKLSAgICBTUUxTdGF0ZW1lbnQoY29uc3QgU3RyaW5nJiBzdGF0
ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1JlZlB0cjxTUUxT
dGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjaz4s
IGludCBwZXJtaXNzaW9ucyk7CisgICAgU1FMU3RhdGVtZW50KERhdGFiYXNlKiwgY29uc3QgU3Ry
aW5nJiBzdGF0ZW1lbnQsIGNvbnN0IFZlY3RvcjxTUUxWYWx1ZT4mIGFyZ3VtZW50cywgUGFzc1Jl
ZlB0cjxTUUxTdGF0ZW1lbnRDYWxsYmFjaz4sIFBhc3NSZWZQdHI8U1FMU3RhdGVtZW50RXJyb3JD
YWxsYmFjaz4sIGludCBwZXJtaXNzaW9ucyk7CiAKICAgICB2b2lkIHNldEZhaWx1cmVEdWVUb1F1
b3RhKCk7CiAgICAgdm9pZCBjbGVhckZhaWx1cmVEdWVUb1F1b3RhKCk7CiAKICAgICBTdHJpbmcg
bV9zdGF0ZW1lbnQ7CiAgICAgVmVjdG9yPFNRTFZhbHVlPiBtX2FyZ3VtZW50czsKLSAgICBSZWZQ
dHI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IG1fc3RhdGVtZW50Q2FsbGJhY2s7Ci0gICAgUmVmUHRy
PFNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s+IG1fc3RhdGVtZW50RXJyb3JDYWxsYmFjazsKKyAg
ICBTUUxDYWxsYmFja1dyYXBwZXI8U1FMU3RhdGVtZW50Q2FsbGJhY2s+IG1fc3RhdGVtZW50Q2Fs
bGJhY2tXcmFwcGVyOworICAgIFNRTENhbGxiYWNrV3JhcHBlcjxTUUxTdGF0ZW1lbnRFcnJvckNh
bGxiYWNrPiBtX3N0YXRlbWVudEVycm9yQ2FsbGJhY2tXcmFwcGVyOwogCiAgICAgUmVmUHRyPFNR
TEVycm9yPiBtX2Vycm9yOwogICAgIFJlZlB0cjxTUUxSZXN1bHRTZXQ+IG1fcmVzdWx0U2V0OwpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHJldmlzaW9u
IDgwODY2KQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTcxLDkgKzcxLDkgQEAgU1FMVHJhbnNhY3Rpb246OlNRTFRyYW5zYWN0
aW9uKERhdGFiYXNlKgogICAgICwgbV9leGVjdXRlU3FsQWxsb3dlZChmYWxzZSkKICAgICAsIG1f
ZGF0YWJhc2UoZGIpCiAgICAgLCBtX3dyYXBwZXIod3JhcHBlcikKLSAgICAsIG1fY2FsbGJhY2so
Y2FsbGJhY2spCi0gICAgLCBtX3N1Y2Nlc3NDYWxsYmFjayhzdWNjZXNzQ2FsbGJhY2spCi0gICAg
LCBtX2Vycm9yQ2FsbGJhY2soZXJyb3JDYWxsYmFjaykKKyAgICAsIG1fY2FsbGJhY2tXcmFwcGVy
KGNhbGxiYWNrLCBkYi0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQorICAgICwgbV9zdWNjZXNz
Q2FsbGJhY2tXcmFwcGVyKHN1Y2Nlc3NDYWxsYmFjaywgZGItPnNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSkKKyAgICAsIG1fZXJyb3JDYWxsYmFja1dyYXBwZXIoZXJyb3JDYWxsYmFjaywgZGItPnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKICAgICAsIG1fc2hvdWxkUmV0cnlDdXJyZW50U3RhdGVt
ZW50KGZhbHNlKQogICAgICwgbV9tb2RpZmllZERhdGFiYXNlKGZhbHNlKQogICAgICwgbV9sb2Nr
QWNxdWlyZWQoZmFsc2UpCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6
ZXhlY3V0ZVNRTChjb25zdCBTdAogICAgIGVsc2UgaWYgKG1fcmVhZE9ubHkpCiAgICAgICAgIHBl
cm1pc3Npb25zIHw9IERhdGFiYXNlQXV0aG9yaXplcjo6UmVhZE9ubHlNYXNrOwogCi0gICAgUmVm
UHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50ID0gU1FMU3RhdGVtZW50OjpjcmVhdGUoc3FsU3Rh
dGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBjYWxsYmFja0Vycm9yLCBwZXJtaXNzaW9ucyk7
CisgICAgUmVmUHRyPFNRTFN0YXRlbWVudD4gc3RhdGVtZW50ID0gU1FMU3RhdGVtZW50OjpjcmVh
dGUobV9kYXRhYmFzZS5nZXQoKSwgc3FsU3RhdGVtZW50LCBhcmd1bWVudHMsIGNhbGxiYWNrLCBj
YWxsYmFja0Vycm9yLCBwZXJtaXNzaW9ucyk7CiAKICAgICBpZiAobV9kYXRhYmFzZS0+ZGVsZXRl
ZCgpKQogICAgICAgICBzdGF0ZW1lbnQtPnNldERhdGFiYXNlRGVsZXRlZEVycm9yKCk7CkBAIC0x
NTksOSArMTU5LDkgQEAgdm9pZCBTUUxUcmFuc2FjdGlvbjo6Y2hlY2tBbmRIYW5kbGVDbG9zZQog
ICAgIG1fbmV4dFN0ZXAgPSAwOwogCiAgICAgLy8gUmVsZWFzZSB0aGUgdW5uZWVkZWQgY2FsbGJh
Y2tzLCB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLgotICAgIG1fY2FsbGJhY2sgPSAwOwotICAg
IG1fc3VjY2Vzc0NhbGxiYWNrID0gMDsKLSAgICBtX2Vycm9yQ2FsbGJhY2sgPSAwOworICAgIG1f
Y2FsbGJhY2tXcmFwcGVyLmNsZWFyKCk7CisgICAgbV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmNs
ZWFyKCk7CisgICAgbV9lcnJvckNhbGxiYWNrV3JhcHBlci5jbGVhcigpOwogCiAgICAgLy8gVGhl
IG5leHQgc3RlcHMgc2hvdWxkIGJlIGV4ZWN1dGVkIG9ubHkgaWYgd2UncmUgb24gdGhlIERCIHRo
cmVhZC4KICAgICBpZiAoY3VycmVudFRocmVhZCgpICE9IGRhdGFiYXNlKCktPnNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+ZGF0YWJhc2VUaHJlYWQoKS0+Z2V0VGhyZWFkSUQoKSkKQEAgLTI5Mywx
MSArMjkzLDExIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmRlbGl2ZXJUcmFuc2FjdGlvbkMKIHsK
ICAgICBib29sIHNob3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gZmFsc2U7CiAKLSAgICBpZiAo
bV9jYWxsYmFjaykgeworICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbkNhbGxiYWNrPiBjYWxsYmFj
ayA9IG1fY2FsbGJhY2tXcmFwcGVyLnVud3JhcCgpOworICAgIGlmIChjYWxsYmFjaykgewogICAg
ICAgICBtX2V4ZWN1dGVTcWxBbGxvd2VkID0gdHJ1ZTsKLSAgICAgICAgc2hvdWxkRGVsaXZlckVy
cm9yQ2FsbGJhY2sgPSAhbV9jYWxsYmFjay0+aGFuZGxlRXZlbnQodGhpcyk7CisgICAgICAgIHNo
b3VsZERlbGl2ZXJFcnJvckNhbGxiYWNrID0gIWNhbGxiYWNrLT5oYW5kbGVFdmVudCh0aGlzKTsK
ICAgICAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNlOwotICAgICAgICBtX2NhbGxiYWNr
ID0gMDsKICAgICB9CiAKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDUgLSBJZiB0aGUgdHJhbnNh
Y3Rpb24gY2FsbGJhY2sgd2FzIG51bGwgb3IgcmFpc2VkIGFuIGV4Y2VwdGlvbiwganVtcCB0byB0
aGUgZXJyb3IgY2FsbGJhY2sKQEAgLTQyNSw3ICs0MjUsNyBAQCB2b2lkIFNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyU3RhdGVtZW50Q2FsCiAgICAgbV9leGVjdXRlU3FsQWxsb3dlZCA9IGZhbHNlOwog
CiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJyb3I6
OmNyZWF0ZShTUUxFcnJvcjo6VU5LTk9XTl9FUlIsICJ0aGUgc3RhdGVtZW50IGNhbGxiYWNrIHJh
aXNlZCBhbiBleGNlcHRpb24gb3Igc3RhdGVtZW50IGVycm9yIGNhbGxiYWNrIGRpZCBub3QgcmV0
dXJuIGZhbHNlIik7CisgICAgICAgIG1fdHJhbnNhY3Rpb25FcnJvciA9IFNRTEVycm9yOjpjcmVh
dGUoU1FMRXJyb3I6OlVOS05PV05fRVJSLCAidGhlIHN0YXRlbWVudCBjYWxsYmFjayByYWlzZWQg
YW4gZXhjZXB0aW9uIG9yIHN0YXRlbWVudCBlcnJvciBjYWxsYmFjayBkaWQgbm90IHJldHVybiBm
YWxzZSIpOwogICAgICAgICBoYW5kbGVUcmFuc2FjdGlvbkVycm9yKHRydWUpOwogICAgIH0gZWxz
ZQogICAgICAgICBzY2hlZHVsZVRvUnVuU3RhdGVtZW50cygpOwpAQCAtNDY1LDcgKzQ2NSw3IEBA
IHZvaWQgU1FMVHJhbnNhY3Rpb246OnBvc3RmbGlnaHRBbmRDb21taXQKIAogICAgIC8vIElmIHRo
ZSBjb21taXQgZmFpbGVkLCB0aGUgdHJhbnNhY3Rpb24gd2lsbCBzdGlsbCBiZSBtYXJrZWQgYXMg
ImluIHByb2dyZXNzIgogICAgIGlmIChtX3NxbGl0ZVRyYW5zYWN0aW9uLT5pblByb2dyZXNzKCkp
IHsKLSAgICAgICAgbV9zdWNjZXNzQ2FsbGJhY2sgPSAwOworICAgICAgICBtX3N1Y2Nlc3NDYWxs
YmFja1dyYXBwZXIuY2xlYXIoKTsKICAgICAgICAgbV90cmFuc2FjdGlvbkVycm9yID0gU1FMRXJy
b3I6OmNyZWF0ZShTUUxFcnJvcjo6REFUQUJBU0VfRVJSLCAiZmFpbGVkIHRvIGNvbW1pdCB0aGUg
dHJhbnNhY3Rpb24iKTsKICAgICAgICAgaGFuZGxlVHJhbnNhY3Rpb25FcnJvcihmYWxzZSk7CiAg
ICAgICAgIHJldHVybjsKQEAgLTQ4MCwxMCArNDgwLDEwIEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246
OnBvc3RmbGlnaHRBbmRDb21taXQKICAgICAgICAgbV9kYXRhYmFzZS0+dHJhbnNhY3Rpb25DbGll
bnQoKS0+ZGlkQ29tbWl0V3JpdGVUcmFuc2FjdGlvbihkYXRhYmFzZSgpKTsKIAogICAgIC8vIE5v
dyByZWxlYXNlIG91ciB1bm5lZWRlZCBjYWxsYmFja3MsIHRvIGJyZWFrIHJlZmVyZW5jZSBjeWNs
ZXMuCi0gICAgbV9lcnJvckNhbGxiYWNrID0gMDsKKyAgICBtX2Vycm9yQ2FsbGJhY2tXcmFwcGVy
LmNsZWFyKCk7CiAKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEwIC0gRGVsaXZlciBzdWNjZXNz
IGNhbGxiYWNrLCBpZiB0aGVyZSBpcyBvbmUKLSAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2spIHsK
KyAgICBpZiAobV9zdWNjZXNzQ2FsbGJhY2tXcmFwcGVyLmhhc0NhbGxiYWNrKCkpIHsKICAgICAg
ICAgbV9uZXh0U3RlcCA9ICZTUUxUcmFuc2FjdGlvbjo6ZGVsaXZlclN1Y2Nlc3NDYWxsYmFjazsK
ICAgICAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGRlbGl2ZXJTdWNjZXNzQ2FsbGJh
Y2sgZm9yIHRyYW5zYWN0aW9uICVwXG4iLCB0aGlzKTsKICAgICAgICAgbV9kYXRhYmFzZS0+c2No
ZWR1bGVUcmFuc2FjdGlvbkNhbGxiYWNrKHRoaXMpOwpAQCAtNDk0LDExICs0OTQsOSBAQCB2b2lk
IFNRTFRyYW5zYWN0aW9uOjpwb3N0ZmxpZ2h0QW5kQ29tbWl0CiB2b2lkIFNRTFRyYW5zYWN0aW9u
OjpkZWxpdmVyU3VjY2Vzc0NhbGxiYWNrKCkKIHsKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEw
IC0gRGVsaXZlciBzdWNjZXNzIGNhbGxiYWNrCi0gICAgQVNTRVJUKG1fc3VjY2Vzc0NhbGxiYWNr
KTsKLSAgICBtX3N1Y2Nlc3NDYWxsYmFjay0+aGFuZGxlRXZlbnQoKTsKLQotICAgIC8vIFJlbGVh
c2UgdGhlIGxhc3QgY2FsbGJhY2sgdG8gYnJlYWsgcmVmZXJlbmNlIGN5Y2xlCi0gICAgbV9zdWNj
ZXNzQ2FsbGJhY2sgPSAwOworICAgIFJlZlB0cjxWb2lkQ2FsbGJhY2s+IHN1Y2Nlc3NDYWxsYmFj
ayA9IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlci51bndyYXAoKTsKKyAgICBpZiAoc3VjY2Vzc0Nh
bGxiYWNrKQorICAgICAgICBzdWNjZXNzQ2FsbGJhY2stPmhhbmRsZUV2ZW50KCk7CiAKICAgICAv
LyBTY2hlZHVsZSBhICJwb3N0LXN1Y2Nlc3MgY2FsbGJhY2siIHN0ZXAgdG8gcmV0dXJuIGNvbnRy
b2wgdG8gdGhlIGRhdGFiYXNlIHRocmVhZCBpbiBjYXNlIHRoZXJlCiAgICAgLy8gYXJlIGZ1cnRo
ZXIgdHJhbnNhY3Rpb25zIHF1ZXVlZCB1cCBmb3IgdGhpcyBEYXRhYmFzZQpAQCAtNTI0LDcgKzUy
Miw3IEBAIHZvaWQgU1FMVHJhbnNhY3Rpb246OmNsZWFudXBBZnRlclN1Y2Nlc3MKIAogdm9pZCBT
UUxUcmFuc2FjdGlvbjo6aGFuZGxlVHJhbnNhY3Rpb25FcnJvcihib29sIGluQ2FsbGJhY2spCiB7
Ci0gICAgaWYgKG1fZXJyb3JDYWxsYmFjaykgeworICAgIGlmIChtX2Vycm9yQ2FsbGJhY2tXcmFw
cGVyLmhhc0NhbGxiYWNrKCkpIHsKICAgICAgICAgaWYgKGluQ2FsbGJhY2spCiAgICAgICAgICAg
ICBkZWxpdmVyVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrKCk7CiAgICAgICAgIGVsc2UgewpAQCAt
NTUyLDEwICs1NTAsOSBAQCB2b2lkIFNRTFRyYW5zYWN0aW9uOjpkZWxpdmVyVHJhbnNhY3Rpb25F
CiAKICAgICAvLyBUcmFuc2FjdGlvbiBTdGVwIDEyIC0gSWYgZXhpc3RzLCBpbnZva2UgZXJyb3Ig
Y2FsbGJhY2sgd2l0aCB0aGUgbGFzdAogICAgIC8vIGVycm9yIHRvIGhhdmUgb2NjdXJyZWQgaW4g
dGhpcyB0cmFuc2FjdGlvbi4KLSAgICBpZiAobV9lcnJvckNhbGxiYWNrKSB7Ci0gICAgICAgIG1f
ZXJyb3JDYWxsYmFjay0+aGFuZGxlRXZlbnQobV90cmFuc2FjdGlvbkVycm9yLmdldCgpKTsKLSAg
ICAgICAgbV9lcnJvckNhbGxiYWNrID0gMDsKLSAgICB9CisgICAgUmVmUHRyPFNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjaz4gZXJyb3JDYWxsYmFjayA9IG1fZXJyb3JDYWxsYmFja1dyYXBwZXIu
dW53cmFwKCk7CisgICAgaWYgKGVycm9yQ2FsbGJhY2spCisgICAgICAgIGVycm9yQ2FsbGJhY2st
PmhhbmRsZUV2ZW50KG1fdHJhbnNhY3Rpb25FcnJvci5nZXQoKSk7CiAKICAgICBtX25leHRTdGVw
ID0gJlNRTFRyYW5zYWN0aW9uOjpjbGVhbnVwQWZ0ZXJUcmFuc2FjdGlvbkVycm9yQ2FsbGJhY2s7
CiAgICAgTE9HKFN0b3JhZ2VBUEksICJTY2hlZHVsaW5nIGNsZWFudXBBZnRlclRyYW5zYWN0aW9u
RXJyb3JDYWxsYmFjayBmb3IgdHJhbnNhY3Rpb24gJXBcbiIsIHRoaXMpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9TUUxUcmFuc2FjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvU1FMVHJhbnNhY3Rpb24uaAkocmV2aXNpb24gODA4NjYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL1NRTFRyYW5zYWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NSw5ICsxMTUsOSBAQCBwcml2YXRlOgogCiAgICAgUmVmUHRyPERhdGFiYXNlPiBtX2RhdGFiYXNl
OwogICAgIFJlZlB0cjxTUUxUcmFuc2FjdGlvbldyYXBwZXI+IG1fd3JhcHBlcjsKLSAgICBSZWZQ
dHI8U1FMVHJhbnNhY3Rpb25DYWxsYmFjaz4gbV9jYWxsYmFjazsKLSAgICBSZWZQdHI8Vm9pZENh
bGxiYWNrPiBtX3N1Y2Nlc3NDYWxsYmFjazsKLSAgICBSZWZQdHI8U1FMVHJhbnNhY3Rpb25FcnJv
ckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2s7CisgICAgU1FMQ2FsbGJhY2tXcmFwcGVyPFNRTFRy
YW5zYWN0aW9uQ2FsbGJhY2s+IG1fY2FsbGJhY2tXcmFwcGVyOworICAgIFNRTENhbGxiYWNrV3Jh
cHBlcjxWb2lkQ2FsbGJhY2s+IG1fc3VjY2Vzc0NhbGxiYWNrV3JhcHBlcjsKKyAgICBTUUxDYWxs
YmFja1dyYXBwZXI8U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrPiBtX2Vycm9yQ2FsbGJhY2tX
cmFwcGVyOwogICAgIFJlZlB0cjxTUUxFcnJvcj4gbV90cmFuc2FjdGlvbkVycm9yOwogICAgIGJv
b2wgbV9zaG91bGRSZXRyeUN1cnJlbnRTdGF0ZW1lbnQ7CiAgICAgYm9vbCBtX21vZGlmaWVkRGF0
YWJhc2U7Cg==
</data>
<flag name="review"
          id="77645"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="77646"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>