<?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>45393</bug_id>
          
          <creation_ts>2010-09-08 08:16:02 -0700</creation_ts>
          <short_desc>WebKitTestRunner should be portable</short_desc>
          <delta_ts>2010-10-07 05:49:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          <blocked>44155</blocked>
    
    <blocked>47280</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>andersca</cc>
    
    <cc>aroben</cc>
    
    <cc>darin</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>mjs</cc>
    
    <cc>sam</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>275844</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-08 08:16:02 -0700</bug_when>
    <thetext>Currently WTR uses CF types (CFString and CFURL) what makes impossible to porting it. I believe that a common implementation would be much better then maintaining each platform&apos;s own WTR (like Qt&apos;s own DRT what makes a lot of trouble to keep feature equivalent with the common one).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275856</commentid>
    <comment_count>1</comment_count>
      <attachid>66900</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-08 08:42:23 -0700</bug_when>
    <thetext>Created attachment 66900
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275858</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-08 08:48:28 -0700</bug_when>
    <thetext>Attachment 66900 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/WebKitTestRunner/StringFunctions.h:33:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/qt/PlatformURLInlinesQt.h:3:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/PlatformURL.h:5:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/PlatformURL.h:21:  Tab found; better to use spaces  [whitespace/tab] [1]
WebKitTools/WebKitTestRunner/PlatformString.h:8:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
WebKitTools/WebKitTestRunner/PlatformString.h:6:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/qt/PlatformStringInlinesQt.h:3:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 15 in 13 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>275870</commentid>
    <comment_count>3</comment_count>
      <attachid>66903</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-08 09:11:16 -0700</bug_when>
    <thetext>Created attachment 66903
proposed patch

Fix the true positive check-webkit-style errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275873</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-08 09:16:07 -0700</bug_when>
    <thetext>Attachment 66903 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/WebKitTestRunner/StringFunctions.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/qt/PlatformURLInlinesQt.h:3:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/PlatformString.h:6:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/qt/PlatformStringInlinesQt.h:3:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 13 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>276366</commentid>
    <comment_count>5</comment_count>
      <attachid>67008</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-09 01:42:38 -0700</bug_when>
    <thetext>Created attachment 67008
proposed patch

This one removes all CFString and CFURL usage from WTR from the common (not port specific) files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276367</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 01:46:23 -0700</bug_when>
    <thetext>Attachment 67008 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/WebKitTestRunner/qt/PlatformURLInlinesQt.h:3:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/qt/PlatformStringInlinesQt.h:3:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/PlatformString.h:6:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/StringFunctions.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 14 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>276370</commentid>
    <comment_count>7</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-09 01:52:33 -0700</bug_when>
    <thetext>I have realized that the InjectedBundle depends on the cf run loop. I guess it would not be so hard to rework that in a platform independent manner but I would like to get feedback before starting to work on that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>277662</commentid>
    <comment_count>8</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-10 23:06:32 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I have realized that the InjectedBundle depends on the cf run loop. I guess it would not be so hard to rework that in a platform independent manner but I would like to get feedback before starting to work on that.

This looks good to me, thanks for doing this.  I don&apos;t think all the inlining is necessary though. I also don&apos;t know what you mean about the CFRunLoop. Can you elaborate on that or point to the code you are talking about?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278088</commentid>
    <comment_count>9</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-13 02:45:55 -0700</bug_when>
    <thetext>&gt; 
&gt; This looks good to me, thanks for doing this.  I don&apos;t think all the inlining is necessary though. I also don&apos;t know what you mean about the CFRunLoop. Can you elaborate on that or point to the code you are talking about?

I see other CF uses mostly in InjectedBundle/LayoutTestController.cpp, for example: http://trac.webkit.org/browser/trunk/WebKitTools/WebKitTestRunner/InjectedBundle/LayoutTestController.cpp#L116

Inlining could be avoided by using the same files for WTR and InjectedBundle. Do you thing it would be ok? Moreover we could introducing a new static lib target for those files or duplicate them. Which solution do you vote for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278199</commentid>
    <comment_count>10</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-13 07:25:03 -0700</bug_when>
    <thetext>Let me stating the obvious: the root of this problems is that WRT is relying on the public C API. Is it a possibility to using the internals directly? This way we would not need wrappers and the whole thing would be easier as I see.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278664</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-09-13 19:38:50 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Let me stating the obvious: the root of this problems is that WRT is relying on the public C API. Is it a possibility to using the internals directly? This way we would not need wrappers and the whole thing would be easier as I see.

No. I would like to keep it using API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278777</commentid>
    <comment_count>12</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-14 02:14:56 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Let me stating the obvious: the root of this problems is that WRT is relying on the public C API. Is it a possibility to using the internals directly? This way we would not need wrappers and the whole thing would be easier as I see.
&gt; 
&gt; No. I would like to keep it using API.

Ok. Do you thing the patch is ready for review? I can extend it with a solution for the CFRunLoop staff if you would like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282258</commentid>
    <comment_count>13</comment_count>
      <attachid>68229</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-21 06:33:08 -0700</bug_when>
    <thetext>Created attachment 68229
proposed patch - updated

Updated patch. Please review it if you really like to go into this direction, or inform me about that you don&apos;t like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>282268</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-21 06:38:11 -0700</bug_when>
    <thetext>Attachment 68229 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/WebKitTestRunner/qt/PlatformURLInlinesQt.h:3:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/qt/PlatformStringInlinesQt.h:3:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/PlatformString.h:6:  Alphabetical sorting problem.  [build/include_order] [4]
WebKitTools/WebKitTestRunner/StringFunctions.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 4 in 14 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>283655</commentid>
    <comment_count>15</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-23 08:21:53 -0700</bug_when>
    <thetext>Is there somebody who could review my poor patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283806</commentid>
    <comment_count>16</comment_count>
      <attachid>68229</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-23 11:50:45 -0700</bug_when>
    <thetext>Comment on attachment 68229
proposed patch - updated

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

&gt; WebKitTools/WebKitTestRunner/InjectedBundle/InjectedBundlePage.cpp:70
&gt; -    JSRetainPtr&lt;JSStringRef&gt; jsStringNodeName(Adopt, JSValueToStringCopy(context, nodeNameValue, 0));
&gt; +    JSStringRef jsStringNodeName = JSValueToStringCopy(context, nodeNameValue, 0);

This is not correct. It creates a storage leak.

&gt; WebKitTools/WebKitTestRunner/PlatformString.h:27
&gt; +#if PLATFORM(MAC) || PLATFORM(WIN)
&gt; +#include &lt;wtf/RetainPtr.h&gt;
&gt; +typedef CFStringRef NativeString;
&gt; +typedef RetainPtr&lt;CFStringRef&gt; NativeStringRef;
&gt; +#elif PLATFORM(QT)
&gt; +#include &lt;QString&gt;
&gt; +typedef QString NativeString;
&gt; +typedef QString NativeStringRef;
&gt; +#endif

Normally the word “Native” is not good in cases like this. If you work on WebKit, then you think that WTF::String is native. If you work on Mac then you think that CFStringRef is native. There’s no unambiguous meaning of the term. We tried to use this term in JavaScriptCore and half of the people thought it meant one thing and the other half thought it meant the other.

&gt; WebKitTools/WebKitTestRunner/PlatformString.h:45
&gt; +    friend WTR_ALWAYS_INLINE bool operator==(const PlatformString&amp; a, const PlatformString&amp; b);
&gt; +    friend WTR_ALWAYS_INLINE bool operator==(const PlatformString&amp; a, const char* b);

No need for &quot;a&quot; and &quot;b&quot; argument names here.

&gt; WebKitTools/WebKitTestRunner/PlatformString.h:55
&gt; +    NativeStringRef m_impl;

I am not a fan of the name “impl”. We should find another name to use here.=

&gt; WebKitTools/WebKitTestRunner/StringFunctions.h:43
&gt; +    return PlatformString(string).toWK();

It seems wrong that we have to go through a platform-specific string to go from a JSStringRef to a WKStringRef. A better fix would be to make it work directly without including the platform-specific string class at all.

&gt; WebKitTools/WebKitTestRunner/TestController.cpp:213
&gt; +    PlatformURL url(&quot;about:blank&quot;);

I think we should have a function that returns the about:blank URL, as we do in WebCore.

&gt; WebKitTools/WebKitTestRunner/TestInvocation.cpp:42
&gt; +    : m_url(AdoptWK, PlatformURL(pathOrURL).toWK())

Makes no sense to me that we have to go through PlatformURL to get to WKURLRef from a const char*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284328</commentid>
    <comment_count>17</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-24 05:33:02 -0700</bug_when>
    <thetext>&gt; 
&gt; &gt; WebKitTools/WebKitTestRunner/StringFunctions.h:43
&gt; &gt; +    return PlatformString(string).toWK();
&gt; 
&gt; It seems wrong that we have to go through a platform-specific string to go from a JSStringRef to a WKStringRef. A better fix would be to make it work directly without including the platform-specific string class at all.
&gt; 

There is no public API to do this. The API does not provide a function for getting a char* or UChar* from a WKStringRef. I will try to limit this kind of conversations to StringFunctions.h in the next patch that will hopefully solve all the other problems you mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>284386</commentid>
    <comment_count>18</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-09-24 08:09:48 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; 
&gt; &gt; &gt; WebKitTools/WebKitTestRunner/StringFunctions.h:43
&gt; &gt; &gt; +    return PlatformString(string).toWK();
&gt; &gt; 
&gt; &gt; It seems wrong that we have to go through a platform-specific string to go from a JSStringRef to a WKStringRef. A better fix would be to make it work directly without including the platform-specific string class at all.
&gt; &gt; 
&gt; 
&gt; There is no public API to do this. The API does not provide a function for getting a char* or UChar* from a WKStringRef. I will try to limit this kind of conversations to StringFunctions.h in the next patch that will hopefully solve all the other problems you mentioned.

The API is under our control. We can (and should) add the API functions we need if we think it&apos;s likely that other clients will need them, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285383</commentid>
    <comment_count>19</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-27 03:08:26 -0700</bug_when>
    <thetext>&gt; The API is under our control. We can (and should) add the API functions we need if we think it&apos;s likely that other clients will need them, too.

I hardly think that this kind of API would be useful for other clients.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285640</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-27 11:46:05 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; The API is under our control. We can (and should) add the API functions we need if we think it&apos;s likely that other clients will need them, too.
&gt; 
&gt; I hardly think that this kind of API would be useful for other clients.

I disagree.

I think that clients might may to work directly with WKString objects without being forced to allocate a new platform string each time, especially in code that could be performance critical.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285644</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-09-27 11:50:14 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; &gt; The API is under our control. We can (and should) add the API functions we need if we think it&apos;s likely that other clients will need them, too.
&gt; &gt; 
&gt; &gt; I hardly think that this kind of API would be useful for other clients.
&gt; 
&gt; I disagree.
&gt; 
&gt; I think that clients might may to work directly with WKString objects without being forced to allocate a new platform string each time, especially in code that could be performance critical.

I have to agree with Darin here. We should add the API we need, and not try to work around it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286915</commentid>
    <comment_count>22</comment_count>
      <attachid>69203</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-29 09:28:19 -0700</bug_when>
    <thetext>Created attachment 69203
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286917</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-29 09:30:14 -0700</bug_when>
    <thetext>Attachment 69203 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKitTools/WebKitTestRunner/TestInvocation.cpp:118:  Missing space before ( in if(  [whitespace/parens] [5]
WebKit2/Shared/API/c/WKString.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 11 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>286976</commentid>
    <comment_count>24</comment_count>
      <attachid>69217</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-29 10:46:25 -0700</bug_when>
    <thetext>Created attachment 69217
proposed patch

Fixed style and debug build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286991</commentid>
    <comment_count>25</comment_count>
      <attachid>69217</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-29 10:58:40 -0700</bug_when>
    <thetext>Comment on attachment 69217
proposed patch

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

Seems like a reasonable basic approach, but there are some problems.

&gt; WebKitTools/WebKitTestRunner/StringFunctions.h:80
&gt; +    ASSERT(WKStringGetMaximumUTF8CStringSize(stringRef) &lt;= staticBufferSize);

We can’t assert something just because we hope it’s true. There’s no guarantee this will be true, so the code is wrong!

&gt; WebKit2/Shared/API/c/WKString.cpp:48
&gt; +WKStringRef WKStringCreateWithUTF8CString(const char* string)
&gt; +{
&gt; +    return toRef(WebString::create(string).leakRef());
&gt; +}

The name of this function does not match the implementation. The name indicates the string is treated as UTF-8, but the code actually treats the strings as ISO Latin-1.

&gt; WebKit2/Shared/API/c/WKString.cpp:73
&gt; +bool WKStringIsEqualToUTF8CString(WKStringRef a, const char* b)
&gt; +{
&gt; +    return *toWK(a) == b;
&gt; +}

This function also won’t work right. The code treats the string as ISO Latin-1, not UTF-8.

&gt; WebKit2/Shared/API/c/WKURL.cpp:40
&gt; +WKURLRef WKURLCreateWithUTF8CString(const char* string)
&gt; +{
&gt; +    return toRef(WebURL::create(string).leakRef());
&gt; +}

Same problem here. This won’t treat the input as a UTF-8 string.

&gt; WebKit2/Shared/API/c/WKString.h:65
&gt; +WK_EXPORT WKStringRef WKStringCreateWithCharacters(const WKChar* characters, size_t length);
&gt; +
&gt; +WK_EXPORT WKStringRef WKStringCreateWithUTF8CString(const char* string);
&gt; +
&gt; +WK_EXPORT const WKChar* WKStringGetCharactersPtr(WKStringRef string);
&gt; +
&gt; +WK_EXPORT size_t WKStringGetLength(WKStringRef string);
&gt; +
&gt;  WK_EXPORT bool WKStringIsEmpty(WKStringRef string);
&gt;  
&gt; +WK_EXPORT bool WKStringIsEqual(WKStringRef a, WKStringRef b);
&gt; +
&gt; +WK_EXPORT bool WKStringIsEqualToUTF8CString(WKStringRef a, const char* b);
&gt; +
&gt; +WK_EXPORT size_t WKStringGetMaximumUTF8CStringSize(WKStringRef string);
&gt; +
&gt; +WK_EXPORT size_t WKStringGetUTF8CString(WKStringRef string, char* buffer, size_t bufferSize);

This might be too many operations. Do we really need all of these? For example, if we have GetCharactersPtr, I am not sure we need GetUTF8CString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287446</commentid>
    <comment_count>26</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-30 02:24:02 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (From update of attachment 69217 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69217&amp;action=review
&gt; 
&gt; Seems like a reasonable basic approach, but there are some problems.
&gt; 
&gt; &gt; WebKitTools/WebKitTestRunner/StringFunctions.h:80
&gt; &gt; +    ASSERT(WKStringGetMaximumUTF8CStringSize(stringRef) &lt;= staticBufferSize);
&gt; 
&gt; We can’t assert something just because we hope it’s true. There’s no guarantee this will be true, so the code is wrong!
&gt; 
&gt; &gt; WebKit2/Shared/API/c/WKString.cpp:48
&gt; &gt; +WKStringRef WKStringCreateWithUTF8CString(const char* string)
&gt; &gt; +{
&gt; &gt; +    return toRef(WebString::create(string).leakRef());
&gt; &gt; +}
&gt; 
&gt; The name of this function does not match the implementation. The name indicates the string is treated as UTF-8, but the code actually treats the strings as ISO Latin-1.
&gt; 
&gt; &gt; WebKit2/Shared/API/c/WKString.cpp:73
&gt; &gt; +bool WKStringIsEqualToUTF8CString(WKStringRef a, const char* b)
&gt; &gt; +{
&gt; &gt; +    return *toWK(a) == b;
&gt; &gt; +}
&gt; 
&gt; This function also won’t work right. The code treats the string as ISO Latin-1, not UTF-8.
&gt; 
&gt; &gt; WebKit2/Shared/API/c/WKURL.cpp:40
&gt; &gt; +WKURLRef WKURLCreateWithUTF8CString(const char* string)
&gt; &gt; +{
&gt; &gt; +    return toRef(WebURL::create(string).leakRef());
&gt; &gt; +}
&gt; 
&gt; Same problem here. This won’t treat the input as a UTF-8 string.
&gt; 
&gt; &gt; WebKit2/Shared/API/c/WKString.h:65
&gt; &gt; +WK_EXPORT WKStringRef WKStringCreateWithCharacters(const WKChar* characters, size_t length);
&gt; &gt; +
&gt; &gt; +WK_EXPORT WKStringRef WKStringCreateWithUTF8CString(const char* string);
&gt; &gt; +
&gt; &gt; +WK_EXPORT const WKChar* WKStringGetCharactersPtr(WKStringRef string);
&gt; &gt; +
&gt; &gt; +WK_EXPORT size_t WKStringGetLength(WKStringRef string);
&gt; &gt; +
&gt; &gt;  WK_EXPORT bool WKStringIsEmpty(WKStringRef string);
&gt; &gt;  
&gt; &gt; +WK_EXPORT bool WKStringIsEqual(WKStringRef a, WKStringRef b);
&gt; &gt; +
&gt; &gt; +WK_EXPORT bool WKStringIsEqualToUTF8CString(WKStringRef a, const char* b);
&gt; &gt; +
&gt; &gt; +WK_EXPORT size_t WKStringGetMaximumUTF8CStringSize(WKStringRef string);
&gt; &gt; +
&gt; &gt; +WK_EXPORT size_t WKStringGetUTF8CString(WKStringRef string, char* buffer, size_t bufferSize);
&gt; 
&gt; This might be too many operations. Do we really need all of these? For example, if we have GetCharactersPtr, I am not sure we need GetUTF8CString.

This is (near to) the minimal set we need in WTR.
I have introduced WKStringGetCharactersPtr to be able to create a JSString from a WKString without copying and I have introduced WKStringGetUTF8CString to be able to dump the string through iostream. However, according to the coding problems you mentioned, the latter should have been WKStringGetLatin1CString.
I am thinking about introducing a cpp API for streaming. The other coding problems will be fixed in the next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287547</commentid>
    <comment_count>27</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-09-30 08:05:52 -0700</bug_when>
    <thetext>&gt; &gt; WebKit2/Shared/API/c/WKString.cpp:73
&gt; &gt; +bool WKStringIsEqualToUTF8CString(WKStringRef a, const char* b)
&gt; &gt; +{
&gt; &gt; +    return *toWK(a) == b;
&gt; &gt; +}
&gt; 
&gt; This function also won’t work right. The code treats the string as ISO Latin-1, not UTF-8.

I do not agree with that. As I see operator==(const WTF::String&amp;, const char*) do the right thing for both Latin-1 and UTF-8 strings.
Only creation with C strings should be fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287692</commentid>
    <comment_count>28</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-30 11:31:41 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; &gt; WebKit2/Shared/API/c/WKString.cpp:73
&gt; &gt; &gt; +bool WKStringIsEqualToUTF8CString(WKStringRef a, const char* b)
&gt; &gt; &gt; +{
&gt; &gt; &gt; +    return *toWK(a) == b;
&gt; &gt; &gt; +}
&gt; &gt; 
&gt; &gt; This function also won’t work right. The code treats the string as ISO Latin-1, not UTF-8.
&gt; 
&gt; I do not agree with that. As I see operator==(const WTF::String&amp;, const char*) do the right thing for both Latin-1 and UTF-8 strings.
&gt; Only creation with C strings should be fixed.

That’s wrong.

Maybe you think that the const char* is guaranteed to be entirely ASCII?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287696</commentid>
    <comment_count>29</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-09-30 11:33:07 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; &gt; &gt; WebKit2/Shared/API/c/WKString.cpp:73
&gt; &gt; &gt; &gt; +bool WKStringIsEqualToUTF8CString(WKStringRef a, const char* b)
&gt; &gt; &gt; &gt; +{
&gt; &gt; &gt; &gt; +    return *toWK(a) == b;
&gt; &gt; &gt; &gt; +}
&gt; &gt; &gt; 
&gt; &gt; &gt; This function also won’t work right. The code treats the string as ISO Latin-1, not UTF-8.
&gt; &gt; 
&gt; &gt; I do not agree with that. As I see operator==(const WTF::String&amp;, const char*) do the right thing for both Latin-1 and UTF-8 strings.
&gt; &gt; Only creation with C strings should be fixed.
&gt; 
&gt; That’s wrong.
&gt; 
&gt; Maybe you think that the const char* is guaranteed to be entirely ASCII?

It’s easy to show that’s wrong. Use a WTF::String that has a single non-breaking space in it and compare with a const char* that has the UTF-8 sequence for a non-breaking space. The function will return false but it should return true.

If you’d like me to write out the test code for you, I’d be happy to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288122</commentid>
    <comment_count>30</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-01 01:46:10 -0700</bug_when>
    <thetext>&gt; It’s easy to show that’s wrong. Use a WTF::String that has a single non-breaking space in it and compare with a const char* that has the UTF-8 sequence for a non-breaking space. The function will return false but it should return true.
&gt; 
&gt; If you’d like me to write out the test code for you, I’d be happy to.

I have take another look into StringImpl.cpp so I have realized that you are right. No need to write out the test code. (Maybe finally I will learn what does it mean UTF-8 and Latin-1.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288197</commentid>
    <comment_count>31</comment_count>
      <attachid>69457</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-01 05:54:21 -0700</bug_when>
    <thetext>Created attachment 69457
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288492</commentid>
    <comment_count>32</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-01 14:36:40 -0700</bug_when>
    <thetext>Hm, I didn&apos;t realize this bug turned into new API for WKString.  I have done that in a separate bug as well (https://bugs.webkit.org/show_bug.cgi?id=46958), in a way that I thinks fits the style of our code better (the actual implementation is in WebString for instance) and includes tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288525</commentid>
    <comment_count>33</comment_count>
      <attachid>69457</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-01 15:33:22 -0700</bug_when>
    <thetext>Comment on attachment 69457
proposed patch

Removing r? because it would need to be rebased when Sam&apos;s patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288594</commentid>
    <comment_count>34</comment_count>
      <attachid>69546</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-01 17:18:19 -0700</bug_when>
    <thetext>Created attachment 69546
rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288623</commentid>
    <comment_count>35</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-10-01 18:18:13 -0700</bug_when>
    <thetext>Attachment 69546 did not build on qt:
Build output: http://queues.webkit.org/results/4145039</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288662</commentid>
    <comment_count>36</comment_count>
      <attachid>69569</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-02 01:01:30 -0700</bug_when>
    <thetext>Created attachment 69569
patch v9

Build fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288665</commentid>
    <comment_count>37</comment_count>
      <attachid>69569</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-02 01:54:02 -0700</bug_when>
    <thetext>Comment on attachment 69569
patch v9

I am late again:
http://trac.webkit.org/changeset/68961, http://trac.webkit.org/changeset/68966.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288666</commentid>
    <comment_count>38</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-02 01:55:27 -0700</bug_when>
    <thetext>Sam, could you implement URL stuff? I am getting tired of rebasing...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>288689</commentid>
    <comment_count>39</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-10-02 08:13:39 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Sam, could you implement URL stuff? I am getting tired of rebasing...

Yeah, I will handle the remaining issues,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290265</commentid>
    <comment_count>40</comment_count>
      <attachid>69932</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-06 06:53:00 -0700</bug_when>
    <thetext>Created attachment 69932
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290266</commentid>
    <comment_count>41</comment_count>
      <attachid>69933</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-06 06:56:49 -0700</bug_when>
    <thetext>Created attachment 69933
Patch

Typo fix for the previous one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290267</commentid>
    <comment_count>42</comment_count>
      <attachid>69933</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-06 06:58:36 -0700</bug_when>
    <thetext>Comment on attachment 69933
Patch

This looks pretty OK to me, but let&apos;s give Darin some time to comment before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290286</commentid>
    <comment_count>43</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-06 07:34:14 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (From update of attachment 69933 [details])
&gt; This looks pretty OK to me, but let&apos;s give Darin some time to comment before landing.

Roger that. Actually it has a trivial build error but of course I can fix it before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290676</commentid>
    <comment_count>44</comment_count>
      <attachid>69933</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-10-06 16:48:22 -0700</bug_when>
    <thetext>Comment on attachment 69933
Patch

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

&gt; WebKit2/Shared/API/c/WKURL.h:37
&gt; +WK_EXPORT WKURLRef WKURLCreateWithUTF8CString(const char* string);

This seems OK. Another way to do it is to make this take a WKStringRef.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290931</commentid>
    <comment_count>45</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2010-10-07 05:23:59 -0700</bug_when>
    <thetext>Committed r69297: &lt;http://trac.webkit.org/changeset/69297&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290945</commentid>
    <comment_count>46</comment_count>
      <attachid>69933</attachid>
    <who name="Andras Becsi">abecsi</who>
    <bug_when>2010-10-07 05:49:50 -0700</bug_when>
    <thetext>Comment on attachment 69933
Patch

Clearing flags.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66900</attachid>
            <date>2010-09-08 08:42:23 -0700</date>
            <delta_ts>2010-09-08 09:11:16 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>land_wtr_porting.diff</filename>
            <type>text/plain</type>
            <size>22693</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyOGU0ZDdmLi4wMDViMmZmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTAtMDkt
MDggIEJhbGF6cyBLZWxlbWVuICA8a2JAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgc2hvdWxk
IGJlIHBvcnRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTM5MworCisgICAgICAgIFdyYXAgcGxhdGZvcm0gc3BlY2lmaWMgc3RyaW5nIGFuZCBV
UkwgcmVwcmVzZW50YXRpb24gaW5zaWRlIGNvbW1vbiBjbGFzc2VzCisgICAgICAgIChQbGF0Zm9y
bVN0cmluZyBhbmQgUGxhdGZvcm1VUkwpIHRoYXQgcHJvdmlkZXMgYmFzaWMgZnVuY3Rpb25hbGl0
eSAoY29tcGFyaXNvbiwKKyAgICAgICAgdHJhbnNvcm1hdGlvbiBpbnRvIFdLIGFuZCBKUyB0eXBl
cywgc3RyZWFtaW5nKS4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAgICAgICAgKFdU
Ujo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKToKKyAgICAgICAgKFdUUjo6TGF5
b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvUGxhdGZvcm1TdHJpbmcuaDogQWRkZWQuIFdyYXBwaW5nIG9mIHBsYXRmb3JtIHNw
ZWNpZmljIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJp
bmc6OlBsYXRmb3JtU3RyaW5nKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVN0cmluZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVVSTC5oOiBBZGRlZC4gV3JhcHBpbmcgb2Yg
cGxhdGZvcm0gc3BlY2lmaWMgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVVSTDo6UGxhdGZvcm1VUkwpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3Ry
aW5nRnVuY3Rpb25zLmg6IFVzZSB0aGUgbmV3IGNsYXNzZXMgaW5zdGVhZCBvZiBDRiB0eXBlcy4K
KyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAgICAgIChXVFI6OnRvSlMpOgorICAgICAgICAoV1RS
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZEZv
ckZyYW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoK
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3JtU3RyaW5nSW5saW5l
c0NGLmg6IEFkZGVkLiBDRiBpbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1TdHJpbmcuCisgICAg
ICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyk6CisgICAgICAgIChXVFI6
OlBsYXRmb3JtU3RyaW5nOjp0b1dLKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6OnRv
SlMpOgorICAgICAgICAoV1RSOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdUUjo6b3BlcmF0b3I8
PCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElubGluZXNDRi5o
OiBBZGRlZC4gQ0YgaW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtVVJMLgorICAgICAgICAoV1RS
OjpQbGF0Zm9ybVVSTDo6UGxhdGZvcm1VUkwpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVVSTDo6
dG9XSyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtVVJMOjp0b1N0cmluZyk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVN0cmluZ0lubGluZXNRdC5oOiBBZGRlZC4gUXQg
aW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtU3RyaW5nLgorICAgICAgICAoV1RSOjpzYW5pdHlD
aGVjayk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyk6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjp0b1dLKToKKyAgICAgICAgKFdUUjo6UGxhdGZv
cm1TdHJpbmc6OnRvSlMpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVN0cmluZzo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXVFI6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvcXQvUGxhdGZvcm1VUkxJbmxpbmVzUXQuaDogQWRkZWQuIFF0IGltcGxlbWVudGF0aW9uIGZv
ciBQbGF0Zm9ybVVSTC4KKyAgICAgICAgKFdUUjo6UGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJMKToK
KyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAgICAgIChXVFI6OnRvU3RyaW5nKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvajoKKwogMjAxMC0w
OS0wNyAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAKaW5kZXggZDU0YmIxZC4uMjIyMGJhOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIv
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVy
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYQog
ICAgIC8vIEZJWE1FOiBJcyBpdCBPSyB0aGlzIHdvcmtzIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1l
PwogICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIG5lZWRlZCBvbmx5IGZvciB0aGUgbWFpbiBmcmFt
ZSwgdGhlbiB3aHkgaXMgdGhlIGZ1bmN0aW9uIG9uIFdLQnVuZGxlRnJhbWUgaW5zdGVhZCBvZiBX
S0J1bmRsZVBhZ2U/CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsK
LSAgICByZXR1cm4gV0tCdW5kbGVGcmFtZVBhdXNlQW5pbWF0aW9uT25FbGVtZW50V2l0aElkKG1h
aW5GcmFtZSwgdG9XSyhhbmltYXRpb25OYW1lKS5nZXQoKSwgdG9XSyhlbGVtZW50SWQpLmdldCgp
LCB0aW1lKTsKKyAgICByZXR1cm4gV0tCdW5kbGVGcmFtZVBhdXNlQW5pbWF0aW9uT25FbGVtZW50
V2l0aElkKG1haW5GcmFtZSwgdG9XSyhhbmltYXRpb25OYW1lKSwgdG9XSyhlbGVtZW50SWQpLCB0
aW1lKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0
cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCkBAIC0yMjUs
MTIgKzIyNSwxMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU1ZhbHVlUmVmCiAKIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIGFyZ3Vt
ZW50KQogewotICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0soYXJn
dW1lbnQpLmdldCgpKTsKKyAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLCB0b1dLKGFy
Z3VtZW50KSk7CiB9CiAKIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJs
ZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5n
Q29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0
b1dLKG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFu
ZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5h
bWUpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FuT3BlbldpbmRvd3Mo
Ym9vbCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1T
dHJpbmcuaCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1TdHJpbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQ1NjA3Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVN0cmluZy5oCkBAIC0w
LDAgKzEsNjYgQEAKKyNpZm5kZWYgUGxhdGZvcm1TdHJpbmdfaAorI2RlZmluZSBQbGF0Zm9ybVN0
cmluZ19oCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1
ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKw0KKy8vIFRoaXMgZmlsZSBpcyBhbHNvIHVzZWQgaW4gSW5qZWN0ZWRCdW5k
bGUgdGhyb3VnaCBTdHJpbmdGdW5jdGlvbnMuaA0KKy8vIHNvIHdlIG11c3QgaW5saW5laW5nIGV2
ZXJ5dGhpbmcgZXZlbiBpbiBkZWJ1Zy4NCisjaWYgQ09NUElMRVIoR0NDKSAmJiAhQ09NUElMRVIo
TUlOR1cpDQorI2RlZmluZSBXVFJfQUxXQVlTX0lOTElORSBpbmxpbmUgX19hdHRyaWJ1dGVfXygo
X19hbHdheXNfaW5saW5lX18pKQ0KKyNlbGlmIENPTVBJTEVSKE1TVkMpIHx8IENPTVBJTEVSKFJW
Q1QpDQorI2RlZmluZSBXVFJfQUxXQVlTX0lOTElORSBfX2ZvcmNlaW5saW5lDQorI2Vsc2UNCisj
ZGVmaW5lIFdUUl9BTFdBWVNfSU5MSU5FIGlubGluZQ0KKyNlbmRpZgorCisjaWYgUExBVEZPUk0o
TUFDKSB8fCBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgordHlwZWRl
ZiBDRlN0cmluZ1JlZiBOYXRpdmVTdHJpbmc7Cit0eXBlZGVmIFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gTmF0aXZlU3RyaW5nUmVmOworI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UVN0cmlu
Zz4KK3R5cGVkZWYgUVN0cmluZyBOYXRpdmVTdHJpbmc7Cit0eXBlZGVmIFFTdHJpbmcgTmF0aXZl
U3RyaW5nUmVmOworI2VuZGlmCisKK25hbWVzcGFjZSBXVFIgeworCitjbGFzcyBQbGF0Zm9ybVN0
cmluZyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1T
dHJpbmcoTmF0aXZlU3RyaW5nIHN0cmluZykKKyAgICAgICAgOiBtX2ltcGwoc3RyaW5nKQorICAg
IHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBXVFJfQUxXQVlTX0lOTElORSBQbGF0Zm9ybVN0cmlu
ZyhKU1N0cmluZ1JlZik7CisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1T
dHJpbmcoV0tTdHJpbmdSZWYpOworCisgICAgV1RSX0FMV0FZU19JTkxJTkUgV0tTdHJpbmdSZWYg
dG9XSygpOworICAgIFdUUl9BTFdBWVNfSU5MSU5FIEpTU3RyaW5nUmVmIHRvSlMoKTsKKworICAg
IGZyaWVuZCBXVFJfQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1T
dHJpbmcmIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKTsKKyAgICBmcmllbmQgV1RSX0FMV0FZ
U19JTkxJTkUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBj
aGFyKiBiKTsKKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGNoYXIqIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKSB7IHJldHVybiBiID09IGE7IH0K
KworICAgIGZyaWVuZCBXVFJfQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGxh
dGZvcm1TdHJpbmcmIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKSB7IHJldHVybiAhKGEgPT0g
Yik7IH0KKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0K
KyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNoYXIq
IGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKSB7IHJldHVybiAhKGIgPT0gYSk7IH0KKworICAg
IGZyaWVuZCBXVFJfQUxXQVlTX0lOTElORSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpv
c3RyZWFtJiwgY29uc3QgUGxhdGZvcm1TdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBOYXRpdmVT
dHJpbmdSZWYgbV9pbXBsOworfTsKKworfQorCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9S
TShXSU4pCisjaW5jbHVkZSAiY2YvUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaCIKKyNlbGlmIFBM
QVRGT1JNKFFUKQorI2luY2x1ZGUgInF0L1BsYXRmb3JtU3RyaW5nSW5saW5lc1F0LmgiCisjZW5k
aWYKKworI2VuZGlmIC8vIFBsYXRmb3JtU3RyaW5nX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1VUkwuaCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1VUkwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
NDZkYmZmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Q
bGF0Zm9ybVVSTC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgUGxhdGZvcm1VUkxfaAorI2Rl
ZmluZSBQbGF0Zm9ybVVSTF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4p
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgordHlwZWRlZiBDRlVSTFJlZiBOYXRpdmVVUkw7
Cit0eXBlZGVmIFJldGFpblB0cjxDRlVSTFJlZj4gTmF0aXZlVVJMUmVmOworI2VsaWYgUExBVEZP
Uk0oUVQpCisjaW5jbHVkZSA8UVVybD4KK3R5cGVkZWYgUVVybCBOYXRpdmVVUkw7Cit0eXBlZGVm
IFFVcmwgTmF0aXZlVVJMUmVmOworI2VuZGlmCisKK25hbWVzcGFjZSBXVFIgeworCitjbGFzcyBQ
bGF0Zm9ybVVSTCB7CitwdWJsaWM6CisJZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZv
cm1VUkwoTmF0aXZlVVJMIHVybCkKKyAgICAgICAgOiBtX2ltcGwodXJsKQorICAgIHsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBXVFJfQUxXQVlTX0lOTElORSBQbGF0Zm9ybVVSTChjb25zdCBjaGFy
Kik7CisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1VUkwoV0tVUkxSZWYp
OworCisgICAgV1RSX0FMV0FZU19JTkxJTkUgV0tVUkxSZWYgdG9XSygpOworICAgIFdUUl9BTFdB
WVNfSU5MSU5FIFBsYXRmb3JtU3RyaW5nIHRvU3RyaW5nKCk7CisKK3ByaXZhdGU6CisgICAgTmF0
aXZlVVJMUmVmIG1faW1wbDsKK307CisKK30KKworI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZP
Uk0oV0lOKQorI2luY2x1ZGUgImNmL1BsYXRmb3JtVVJMSW5saW5lc0NGLmgiCisjZWxpZiBQTEFU
Rk9STShRVCkKKyNpbmNsdWRlICJxdC9QbGF0Zm9ybVVSTElubGluZXNRdC5oIgorI2VuZGlmCisK
KyNlbmRpZiAvLyBQbGF0Zm9ybVVSTF9oCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9TdHJpbmdGdW5jdGlvbnMuaAppbmRleCA4MTk1NjA2Li4wNGVjODc3IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCisrKyBiL1dlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKQEAgLTI3LDU0ICsyNywy
NSBAQAogI2RlZmluZSBTdHJpbmdGdW5jdGlvbnNfaAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KLSNp
bmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nQ0YuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLVVJMLmg+
Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1VSTENGLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlIDxzc3RyZWFtPgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFj
ZSBXVFIgewogCiAvLyBDb252ZXJzaW9uIGZ1bmN0aW9ucwogCi1pbmxpbmUgUmV0YWluUHRyPENG
U3RyaW5nUmVmPiB0b0NGKEpTU3RyaW5nUmVmIHN0cmluZykKK2lubGluZSBXS1N0cmluZ1JlZiB0
b1dLKEpTU3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICByZXR1cm4gUmV0YWluUHRyPENGU3RyaW5n
UmVmPihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdHJpbmcpKTsKKyAgICByZXR1
cm4gUGxhdGZvcm1TdHJpbmcoc3RyaW5nKS50b1dLKCk7CiB9CiAKLWlubGluZSBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHRvQ0YoV0tTdHJpbmdSZWYgc3RyaW5nKQoraW5saW5lIEpTU3RyaW5nUmVm
IHRvSlMoV0tTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+KEFkb3B0Q0YsIFdLU3RyaW5nQ29weUNGU3RyaW5nKDAsIHN0cmluZykpOwotfQotCi1p
bmxpbmUgUmV0YWluUHRyPENGVVJMUmVmPiB0b0NGKFdLVVJMUmVmIHVybCkKLXsKLSAgICByZXR1
cm4gUmV0YWluUHRyPENGVVJMUmVmPihBZG9wdENGLCBXS1VSTENvcHlDRlVSTCgwLCB1cmwpKTsK
LX0KLQotaW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4gdG9DRihjb25zdCBXS1JldGFpblB0cjxX
S1VSTFJlZj4mIHVybCkKLXsKLSAgICByZXR1cm4gdG9DRih1cmwuZ2V0KCkpOwotfQotCi1pbmxp
bmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soSlNTdHJpbmdSZWYgc3RyaW5nKQotewot
ICAgIHJldHVybiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oQWRvcHRXSywgV0tTdHJpbmdDcmVh
dGVXaXRoQ0ZTdHJpbmcodG9DRihzdHJpbmcpLmdldCgpKSk7Ci19Ci0KLWlubGluZSBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKQot
ewotICAgIHJldHVybiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoQ0ZTdHJpbmcodG9DRihzdHJpbmcuZ2V0KCkpLmdldCgpKSk7Ci19Ci0KLWlubGlu
ZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdG9KUyhXS1N0cmluZ1JlZiBzdHJpbmcpCi17Ci0g
ICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVX
aXRoQ0ZTdHJpbmcodG9DRihzdHJpbmcpLmdldCgpKSk7CisgICAgcmV0dXJuIFBsYXRmb3JtU3Ry
aW5nKHN0cmluZykudG9KUygpOwogfQogCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IHRvSlMoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmcpCkBAIC04NCwyNyAr
NTUsMTEgQEAgaW5saW5lIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiYgc3RyaW5nKQogCiAvLyBTdHJlYW1pbmcgZnVuY3Rpb25zCiAK
LWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIENGU3Ry
aW5nUmVmIHN0cmluZ1JlZikKLXsKLSAgICBpZiAoIXN0cmluZ1JlZikKLSAgICAgICAgcmV0dXJu
IG91dDsKLSAgICBDRkluZGV4IGJ1ZmZlckxlbmd0aCA9IENGU3RyaW5nR2V0TWF4aW11bVNpemVG
b3JFbmNvZGluZyhDRlN0cmluZ0dldExlbmd0aChzdHJpbmdSZWYpLCBrQ0ZTdHJpbmdFbmNvZGlu
Z1VURjgpICsgMTsKLSAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7Ci0gICAg
aWYgKCFDRlN0cmluZ0dldENTdHJpbmcoc3RyaW5nUmVmLCBidWZmZXIuZGF0YSgpLCBidWZmZXJM
ZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkpCi0gICAgICAgIHJldHVybiBvdXQ7Ci0gICAg
cmV0dXJuIG91dCA8PCBidWZmZXIuZGF0YSgpOwotfQotCi1pbmxpbmUgc3RkOjpvc3RyZWFtJiBv
cGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
JiBzdHJpbmdSZWYpCi17Ci0gICAgcmV0dXJuIG91dCA8PCBzdHJpbmdSZWYuZ2V0KCk7Ci19Ci0K
IGlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIFdLU3Ry
aW5nUmVmIHN0cmluZ1JlZikKIHsKICAgICBpZiAoIXN0cmluZ1JlZikKICAgICAgICAgcmV0dXJu
IG91dDsKLSAgICByZXR1cm4gb3V0IDw8IHRvQ0Yoc3RyaW5nUmVmKTsKKyAgICByZXR1cm4gb3V0
IDw8IFBsYXRmb3JtU3RyaW5nKHN0cmluZ1JlZik7CiB9CiAKIGlubGluZSBzdGQ6Om9zdHJlYW0m
IG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiYgc3RyaW5nUmVmKQpAQCAtMTEyLDI0ICs2Nyw2IEBAIGlubGluZSBzdGQ6Om9zdHJlYW0m
IG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmCiAgICAgcmV0dXJuIG91dCA8PCBzdHJpbmdSZWYuZ2V0KCk7CiB9CiAKLS8vIFVSTCBjcmVh
dGlvbgotCi1pbmxpbmUgV0tVUkxSZWYgY3JlYXRlV0tVUkwoY29uc3QgY2hhciogcGF0aE9yVVJM
KQotewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gcGF0aE9yVVJMQ0ZTdHJpbmcoQWRvcHRD
RiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZygwLCBwYXRoT3JVUkwsIGtDRlN0cmluZ0VuY29k
aW5nVVRGOCkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2ZVUkw7Ci0gICAgaWYgKENGU3Ry
aW5nSGFzUHJlZml4KHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBDRlNUUigiaHR0cDovLyIpKSB8
fCBDRlN0cmluZ0hhc1ByZWZpeChwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwgQ0ZTVFIoImh0dHBz
Oi8vIikpKQotICAgICAgICBjZlVSTC5hZG9wdENGKENGVVJMQ3JlYXRlV2l0aFN0cmluZygwLCBw
YXRoT3JVUkxDRlN0cmluZy5nZXQoKSwgMCkpOwotICAgIGVsc2UKLSNpZiBQTEFURk9STShXSU4p
Ci0gICAgICAgIGNmVVJMLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwg
cGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIGtDRlVSTFdpbmRvd3NQYXRoU3R5bGUsIGZhbHNlKSk7
Ci0jZWxzZQotICAgICAgICBjZlVSTC5hZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1Q
YXRoKDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFs
c2UpKTsKLSNlbmRpZgotICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhDRlVSTChjZlVSTC5nZXQo
KSk7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV1RSCiAKICNlbmRpZiAvLyBTdHJpbmdGdW5jdGlv
bnNfaApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJv
bGxlci5jcHAgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAppbmRleCA2Zjk3YjlmLi5kOTM0MWRiIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9XZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0
UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMjUsNiArMjUsOCBAQAogCiAjaW5jbHVkZSAi
VGVzdENvbnRyb2xsZXIuaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1VUkwuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKICNpbmNsdWRl
ICJTdHJpbmdGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgpAQCAtMjA1
LDggKzIwNyw4IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRW
YWx1ZXMoKQogICAgIC8vIFJlc2V0IG1haW4gcGFnZSBiYWNrIHRvIGFib3V0OmJsYW5rCiAgICAg
bV9kb25lUmVzZXR0aW5nID0gZmFsc2U7CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gdXJs
KEFkb3B0V0ssIGNyZWF0ZVdLVVJMKCJhYm91dDpibGFuayIpKTsKLSAgICBXS1BhZ2VMb2FkVVJM
KG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgdXJsLmdldCgpKTsKKyAgICBQbGF0Zm9ybVVSTCB1cmwo
ImFib3V0OmJsYW5rIik7CisgICAgV0tQYWdlTG9hZFVSTChtX21haW5XZWJWaWV3LT5wYWdlKCks
IHVybC50b1dLKCkpOwogICAgIFRlc3RDb250cm9sbGVyOjpydW5VbnRpbChtX2RvbmVSZXNldHRp
bmcpOwogfQogCkBAIC0yNzIsMTAgKzI3NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZEZp
bmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSkKICAgICBp
ZiAoIVdLRnJhbWVJc01haW5GcmFtZShmcmFtZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdL
UmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTChBZG9wdFdLLCBXS0ZyYW1lQ29weVVSTChmcmFtZSkp
OwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2ZVUkw9IHRvQ0Yod2tVUkwpOwotICAgIENGU3Ry
aW5nUmVmIGNmVVJMU3RyaW5nID0gQ0ZVUkxHZXRTdHJpbmcoY2ZVUkwuZ2V0KCkpOwotICAgIGlm
ICghQ0ZFcXVhbChjZlVSTFN0cmluZywgQ0ZTVFIoImFib3V0OmJsYW5rIikpKQorICAgIGlmIChQ
bGF0Zm9ybVVSTChXS0ZyYW1lQ29weVVSTChmcmFtZSkpLnRvU3RyaW5nKCkgIT0gImFib3V0OmJs
YW5rIikKICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9kb25lUmVzZXR0aW5nID0gdHJ1ZTsKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3Bw
IGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAKaW5kZXgg
NDdkZjY2Yi4uMTRkYTFmMiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0SW52b2NhdGlvbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIlRlc3RJbnZv
Y2F0aW9uLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybVVSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2ViVmlldy5oIgogI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RD
b250cm9sbGVyLmgiCkBAIC0zOCw3ICszOSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1l
c3BhY2UgV1RSIHsKIAogVGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKGNvbnN0IGNoYXIq
IHBhdGhPclVSTCkKLSAgICA6IG1fdXJsKEFkb3B0V0ssIGNyZWF0ZVdLVVJMKHBhdGhPclVSTCkp
CisgICAgOiBtX3VybChBZG9wdFdLLCBQbGF0Zm9ybVVSTChwYXRoT3JVUkwpLnRvV0soKSkKICAg
ICAsIG1fcGF0aE9yVVJMKGZhc3RTdHJEdXAocGF0aE9yVVJMKSkKICAgICAsIG1fZ290SW5pdGlh
bFJlc3BvbnNlKGZhbHNlKQogICAgICwgbV9nb3RGaW5hbE1lc3NhZ2UoZmFsc2UpCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0
VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY1ZWU2ZDUuLjZkYTA5
ZDQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1
bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC04
OCw2ICs4OCw4IEBACiAJCTY1RUI4NTlEMTFFQzY3Q0MwMDM0RDMwMCAvKiBBY3RpdmF0ZUZvbnRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFjdGl2YXRlRm9udHMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVFQjg1OUYxMUVDNjdDQzAwMzREMzAwIC8qIEFj
dGl2YXRlRm9udHMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBB
Y3RpdmF0ZUZvbnRzLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4REQ3NkZBMTA0
ODZBQTc2MDBEOTZCNUUgLyogV2ViS2l0VGVzdFJ1bm5lciAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsg
aW5jbHVkZUluSW5kZXggPSAwOyBwYXRoID0gV2ViS2l0VGVzdFJ1bm5lcjsgc291cmNlVHJlZSA9
IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJOTg1NTIyMTMxMjM3RDg4ODAwMUI3OTE1IC8qIFBs
YXRmb3JtU3RyaW5nSW5saW5lc0NGLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IFBsYXRmb3JtU3RyaW5nSW5saW5lc0NGLmg7IHBhdGggPSBjZi9QbGF0Zm9ybVN0cmluZ0lubGlu
ZXNDRi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5ODU1MjIxNDEyMzdEODg4MDAx
Qjc5MTUgLyogUGxhdGZvcm1VUkxJbmxpbmVzQ0YuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gUGxhdGZvcm1VUkxJbmxpbmVzQ0YuaDsgcGF0aCA9IGNmL1BsYXRmb3JtVVJMSW5s
aW5lc0NGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTRFNEQ4MTIwRTAyRDAw
MDgyNkMwQyAvKiBHQ0NvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gR0NDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMTRFNEQ5
MTIwRTAyRDAwMDgyNkMwQyAvKiBHQ0NvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR0NDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMxNEU0RTExMjBFMDMyMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gR0NDb250cm9sbGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTE3Niw2ICsxNzgsNyBAQAogCQkwOEZCNzc5NUZFODQxNTVEQzAyQUFDMDcg
LyogVGVzdFJ1bm5lciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJOTg1NTIyMTIxMjM3RDg0NDAwMUI3OTE1IC8qIGNmICovLAogCQkJCUJDNzkzM0ZFMTE4
RjdDNzQwMDVFQThFMiAvKiBtYWMgKi8sCiAJCQkJQkMyNTFBMTcxMUQxNjc3NDAwMkVCQzAxIC8q
IFdlYktpdFRlc3RSdW5uZXJQcmVmaXguaCAqLywKIAkJCQlCQzc5MzRERDExOTA2NkVDMDA1RUE4
RTIgLyogUGxhdGZvcm1XZWJWaWV3LmggKi8sCkBAIC0yMTQsNiArMjE3LDE1IEBACiAJCQlwYXRo
ID0gbWFjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJOTg1NTIyMTIxMjM3
RDg0NDAwMUI3OTE1IC8qIGNmICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJl
biA9ICgKKwkJCQk5ODU1MjIxMzEyMzdEODg4MDAxQjc5MTUgLyogUGxhdGZvcm1TdHJpbmdJbmxp
bmVzQ0YuaCAqLywKKwkJCQk5ODU1MjIxNDEyMzdEODg4MDAxQjc5MTUgLyogUGxhdGZvcm1VUkxJ
bmxpbmVzQ0YuaCAqLywKKwkJCSk7CisJCQluYW1lID0gY2Y7CisJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOworCQl9OwogCQlCQzE0RTRFMDEyMEUwMkY5MDA4MjZDMEMgLyogQ29udHJvbGxlcnMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVN0cmluZ0lubGluZXNDRi5o
IGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVN0cmluZ0lubGluZXND
Ri5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOGM1YzUKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3JtU3RyaW5n
SW5saW5lc0NGLmgKQEAgLTAsMCArMSw1MiBAQAorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPEph
dmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmQ0YuaD4KKyNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5n
Q0YuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitQbGF0
Zm9ybVN0cmluZzo6UGxhdGZvcm1TdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQorICAgIDogbV9p
bXBsKEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKDAsIHN0cmluZykpCit7Cit9CisKK1Bs
YXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBt
X2ltcGwoQWRvcHRDRiwgV0tTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwgc3RyaW5nKSkKK3sKK30KKwor
V0tTdHJpbmdSZWYgUGxhdGZvcm1TdHJpbmc6OnRvV0soKQoreworICAgIHJldHVybiBXS1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZyhtX2ltcGwuZ2V0KCkpOworfQorCitKU1N0cmluZ1JlZiBQbGF0
Zm9ybVN0cmluZzo6dG9KUygpCit7CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3Ry
aW5nKG1faW1wbC5nZXQoKSk7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVN0
cmluZyYgYSwgY29uc3QgUGxhdGZvcm1TdHJpbmcmIGIpCit7CisgICAgcmV0dXJuIENGRXF1YWwo
YS5tX2ltcGwuZ2V0KCksIGIubV9pbXBsLmdldCgpKTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKQoreworICAgIHJldHVybiBDRkVx
dWFsKGEubV9pbXBsLmdldCgpLCBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIGIsIGtDRlN0
cmluZ0VuY29kaW5nQVNDSUkpKTsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6
b3N0cmVhbSYgb3V0LCBjb25zdCBQbGF0Zm9ybVN0cmluZyYgYSkKK3sKKyAgICBDRlN0cmluZ1Jl
ZiBjZlN0cmluZyA9IGEubV9pbXBsLmdldCgpOworICAgIGlmICghY2ZTdHJpbmcpCisgICAgICAg
IHJldHVybiBvdXQ7CisgICAgQ0ZJbmRleCBidWZmZXJMZW5ndGggPSBDRlN0cmluZ0dldE1heGlt
dW1TaXplRm9yRW5jb2RpbmcoQ0ZTdHJpbmdHZXRMZW5ndGgoY2ZTdHJpbmcpLCBrQ0ZTdHJpbmdF
bmNvZGluZ1VURjgpICsgMTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGJ1ZmZlckxlbmd0aCk7
CisgICAgaWYgKCFDRlN0cmluZ0dldENTdHJpbmcoY2ZTdHJpbmcsIGJ1ZmZlci5kYXRhKCksIGJ1
ZmZlckxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSkKKyAgICAgICAgcmV0dXJuIG91dDsK
KyAgICByZXR1cm4gb3V0IDw8IGJ1ZmZlci5kYXRhKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2YvUGxhdGZvcm1VUkxJbmxpbmVzQ0YuaCBiL1dl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2YvUGxhdGZvcm1VUkxJbmxpbmVzQ0YuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTUzNzI5Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElubGluZXNDRi5o
CkBAIC0wLDAgKzEsMzUgQEAKKyNpbmNsdWRlICJQbGF0Zm9ybVVSTC5oIgorCisjaW5jbHVkZSA8
V2ViS2l0Mi9XS1VSTENGLmg+CisKK25hbWVzcGFjZSBXVFIgeworCitQbGF0Zm9ybVVSTDo6UGxh
dGZvcm1VUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKQoreworICAgIFJldGFpblB0cjxDRlN0cmlu
Z1JlZj4gcGF0aE9yVVJMQ0ZTdHJpbmcoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmlu
ZygwLCBwYXRoT3JVUkwsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkpOworICAgIGlmIChDRlN0cmlu
Z0hhc1ByZWZpeChwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwgQ0ZTVFIoImh0dHA6Ly8iKSkgfHwg
Q0ZTdHJpbmdIYXNQcmVmaXgocGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RSKCJodHRwczov
LyIpKSkKKyAgICAgICAgbV9pbXBsLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKDAsIHBh
dGhPclVSTENGU3RyaW5nLmdldCgpLCAwKSk7CisgICAgZWxzZQorI2lmIFBMQVRGT1JNKFdJTikK
KyAgICAgICAgbV9pbXBsLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwg
cGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIGtDRlVSTFdpbmRvd3NQYXRoU3R5bGUsIGZhbHNlKSk7
CisjZWxzZQorICAgICAgICBtX2ltcGwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVt
UGF0aCgwLCBwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZh
bHNlKSk7CisjZW5kaWYKK30KKworUGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJMKFdLVVJMUmVmIHVy
bFJlZikKKyAgICA6IG1faW1wbChBZG9wdENGLCBXS1VSTENvcHlDRlVSTCgwLCB1cmxSZWYpKQor
eworfQorCitXS1VSTFJlZiBQbGF0Zm9ybVVSTDo6dG9XSygpCit7CisgICAgcmV0dXJuIFdLVVJM
Q3JlYXRlV2l0aENGVVJMKG1faW1wbC5nZXQoKSk7Cit9CisKK1BsYXRmb3JtU3RyaW5nIFBsYXRm
b3JtVVJMOjp0b1N0cmluZygpCit7CisgICAgcmV0dXJuIFBsYXRmb3JtU3RyaW5nKENGVVJMR2V0
U3RyaW5nKG1faW1wbC5nZXQoKSkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9X
ZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtU3RyaW5nSW5saW5lc1F0LmggYi9XZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtU3RyaW5nSW5saW5lc1F0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFlODI0ZQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1TdHJpbmdJbmxpbmVzUXQuaApA
QCAtMCwwICsxLDQ5IEBACisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUg
IkpTU3RyaW5nUmVmLmgiCisjaW5jbHVkZSAiV0tTdHJpbmdRdC5oIgorCituYW1lc3BhY2UgV1RS
IHsKKworLy8gTmV2ZXIgY2FsbGVkLCBqdXN0IGZvciBzY29waW5nIHRoZSBDT01QSUxFX0FTU0VS
VC4KK3N0YXRpYyBpbmxpbmUgdm9pZCBzYW5pdHlDaGVjaygpCit7CisgICAgQ09NUElMRV9BU1NF
UlQoc2l6ZW9mKFFDaGFyKSA9PSBzaXplb2YoVUNoYXIpLCBxY2hhcl9hbmRfdWNoYXJfbXVzdF9i
ZV9zYW1lX3NpemUpOworfQorCitQbGF0Zm9ybVN0cmluZzo6UGxhdGZvcm1TdHJpbmcoSlNTdHJp
bmdSZWYgc3RyaW5nKQorICAgIDogbV9pbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPihKU1N0
cmluZ0dldENoYXJhY3RlcnNQdHIoc3RyaW5nKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHN0cmluZykp
Cit7Cit9CisKK1BsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyhXS1N0cmluZ1JlZiBzdHJp
bmcpCisgICAgOiBtX2ltcGwoV0tTdHJpbmdDb3B5UVN0cmluZyhzdHJpbmcpKQoreworfQorCitX
S1N0cmluZ1JlZiBQbGF0Zm9ybVN0cmluZzo6dG9XSygpCit7CisgICAgcmV0dXJuIFdLU3RyaW5n
Q3JlYXRlV2l0aFFTdHJpbmcobV9pbXBsKTsKK30KKworSlNTdHJpbmdSZWYgUGxhdGZvcm1TdHJp
bmc6OnRvSlMoKQoreworICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG1f
aW1wbC5kYXRhKCksIG1faW1wbC5zaXplKCkpOworfQorCitib29sIFBsYXRmb3JtU3RyaW5nOjpv
cGVyYXRvcj09KGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBQbGF0Zm9ybVN0cmluZyYg
YikKK3sKKyAgICByZXR1cm4gYS5tX2ltcGwgPT0gYi5tX2ltcGw7Cit9CisKK2Jvb2wgUGxhdGZv
cm1TdHJpbmc6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEsIGNvbnN0IGNoYXIq
IGIpCit7CisgICAgcmV0dXJuIGEubV9pbXBsID09IGI7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3Bl
cmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgUGxhdGZvcm1TdHJpbmcmIHN0cmluZykK
K3sKKyAgICByZXR1cm4gb3MgPDwgc3RyaW5nLm1faW1wbC50b1N0ZFN0cmluZygpOworfQorCit9
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtVVJM
SW5saW5lc1F0LmggYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtVVJM
SW5saW5lc1F0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmM2E5Mwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZv
cm1VUkxJbmxpbmVzUXQuaApAQCAtMCwwICsxLDI4IEBACisjaW5jbHVkZSAiUGxhdGZvcm1VUkwu
aCIKKworI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tVUkxRdC5oIgor
CituYW1lc3BhY2UgV1RSIHsKKworUGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJMKGNvbnN0IGNoYXIq
IHBhdGhPclVSTCkKKyAgICA6IG1faW1wbChwYXRoT3JVUkwpCit7Cit9CisKK1BsYXRmb3JtVVJM
OjpQbGF0Zm9ybVVSTChXS1VSTFJlZiB1cmxSZWYpCisgICAgOiBtX2ltcGwoV0tVUkxDb3B5UVVS
TCh1cmxSZWYpKQoreworfQorCitXS1VSTFJlZiB0b1dLKCkKK3sKKyAgICByZXR1cm4gV0tVUkxD
cmVhdGVXaXRoUVVSTChtX2ltcGwpOworfQorCitQbGF0Zm9ybVN0cmluZyB0b1N0cmluZygpCit7
CisgICAgcmV0dXJuIFBsYXRmb3JtU3RyaW5nKG1faW1wbC50b1N0cmluZygpKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vV2ViS2l0VGVzdFJ1
bm5lci52Y3Byb2ogYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0
UnVubmVyLnZjcHJvagppbmRleCBkN2RkZDVjLi4xZjJkZGQyIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvagorKysgYi9X
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvagpA
QCAtMzE4LDYgKzMxOCwyNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCisJ
CTxGaWx0ZXINCisJCQlOYW1lPSJjZiINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlxjZlxQbGF0Zm9ybVN0cmluZ0lubGluZXNDRi5oIg0KKwkJCQk+DQorCQkJPC9GaWxl
Pg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cY2ZcUGxhdGZvcm1VUkxJbmxpbmVz
Q0YuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbGUNCisJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtU3RyaW5nLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJ
PEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtVVJMLmgiDQorCQkJPg0KKwkJPC9G
aWxlPg0KIAkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtV2ViVmlldy5oIg0K
IAkJCT4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66903</attachid>
            <date>2010-09-08 09:11:16 -0700</date>
            <delta_ts>2010-09-09 01:42:38 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>land_wtr_porting.diff</filename>
            <type>text/plain</type>
            <size>22707</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyOGU0ZDdmLi4wMDViMmZmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTAtMDkt
MDggIEJhbGF6cyBLZWxlbWVuICA8a2JAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgc2hvdWxk
IGJlIHBvcnRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTM5MworCisgICAgICAgIFdyYXAgcGxhdGZvcm0gc3BlY2lmaWMgc3RyaW5nIGFuZCBV
UkwgcmVwcmVzZW50YXRpb24gaW5zaWRlIGNvbW1vbiBjbGFzc2VzCisgICAgICAgIChQbGF0Zm9y
bVN0cmluZyBhbmQgUGxhdGZvcm1VUkwpIHRoYXQgcHJvdmlkZXMgYmFzaWMgZnVuY3Rpb25hbGl0
eSAoY29tcGFyaXNvbiwKKyAgICAgICAgdHJhbnNvcm1hdGlvbiBpbnRvIFdLIGFuZCBKUyB0eXBl
cywgc3RyZWFtaW5nKS4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRy
b2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAgICAgICAgKFdU
Ujo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKToKKyAgICAgICAgKFdUUjo6TGF5
b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvUGxhdGZvcm1TdHJpbmcuaDogQWRkZWQuIFdyYXBwaW5nIG9mIHBsYXRmb3JtIHNw
ZWNpZmljIHN0cmluZyByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJp
bmc6OlBsYXRmb3JtU3RyaW5nKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVN0cmluZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVVSTC5oOiBBZGRlZC4gV3JhcHBpbmcgb2Yg
cGxhdGZvcm0gc3BlY2lmaWMgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAoV1RSOjpQ
bGF0Zm9ybVVSTDo6UGxhdGZvcm1VUkwpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3Ry
aW5nRnVuY3Rpb25zLmg6IFVzZSB0aGUgbmV3IGNsYXNzZXMgaW5zdGVhZCBvZiBDRiB0eXBlcy4K
KyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAgICAgIChXVFI6OnRvSlMpOgorICAgICAgICAoV1RS
OjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3Rl
bnRWYWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZEZv
ckZyYW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoK
KyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL1dlYktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3JtU3RyaW5nSW5saW5l
c0NGLmg6IEFkZGVkLiBDRiBpbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1TdHJpbmcuCisgICAg
ICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyk6CisgICAgICAgIChXVFI6
OlBsYXRmb3JtU3RyaW5nOjp0b1dLKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6OnRv
SlMpOgorICAgICAgICAoV1RSOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdUUjo6b3BlcmF0b3I8
PCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElubGluZXNDRi5o
OiBBZGRlZC4gQ0YgaW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtVVJMLgorICAgICAgICAoV1RS
OjpQbGF0Zm9ybVVSTDo6UGxhdGZvcm1VUkwpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVVSTDo6
dG9XSyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtVVJMOjp0b1N0cmluZyk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVN0cmluZ0lubGluZXNRdC5oOiBBZGRlZC4gUXQg
aW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtU3RyaW5nLgorICAgICAgICAoV1RSOjpzYW5pdHlD
aGVjayk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyk6Cisg
ICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjp0b1dLKToKKyAgICAgICAgKFdUUjo6UGxhdGZv
cm1TdHJpbmc6OnRvSlMpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVN0cmluZzo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChXVFI6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5u
ZXIvcXQvUGxhdGZvcm1VUkxJbmxpbmVzUXQuaDogQWRkZWQuIFF0IGltcGxlbWVudGF0aW9uIGZv
ciBQbGF0Zm9ybVVSTC4KKyAgICAgICAgKFdUUjo6UGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJMKToK
KyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAgICAgIChXVFI6OnRvU3RyaW5nKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvajoKKwogMjAxMC0w
OS0wNyAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAKaW5kZXggZDU0YmIxZC4uMjIyMGJhOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIv
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAKQEAgLTE2MSw3ICsxNjEsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVy
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYQog
ICAgIC8vIEZJWE1FOiBJcyBpdCBPSyB0aGlzIHdvcmtzIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1l
PwogICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlzIG5lZWRlZCBvbmx5IGZvciB0aGUgbWFpbiBmcmFt
ZSwgdGhlbiB3aHkgaXMgdGhlIGZ1bmN0aW9uIG9uIFdLQnVuZGxlRnJhbWUgaW5zdGVhZCBvZiBX
S0J1bmRsZVBhZ2U/CiAgICAgV0tCdW5kbGVGcmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBh
Z2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsK
LSAgICByZXR1cm4gV0tCdW5kbGVGcmFtZVBhdXNlQW5pbWF0aW9uT25FbGVtZW50V2l0aElkKG1h
aW5GcmFtZSwgdG9XSyhhbmltYXRpb25OYW1lKS5nZXQoKSwgdG9XSyhlbGVtZW50SWQpLmdldCgp
LCB0aW1lKTsKKyAgICByZXR1cm4gV0tCdW5kbGVGcmFtZVBhdXNlQW5pbWF0aW9uT25FbGVtZW50
V2l0aElkKG1haW5GcmFtZSwgdG9XSyhhbmltYXRpb25OYW1lKSwgdG9XSyhlbGVtZW50SWQpLCB0
aW1lKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0
cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRTdGFydCwgYm9vbCBhbGxGcmFtZXMpCkBAIC0yMjUs
MTIgKzIyNSwxMiBAQCBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xs
ZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShKU1ZhbHVlUmVmCiAKIHZvaWQgTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3RyaW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIGFyZ3Vt
ZW50KQogewotICAgIFdLQnVuZGxlUGFnZUV4ZWN1dGVFZGl0aW5nQ29tbWFuZChJbmplY3RlZEJ1
bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdlKCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0soYXJn
dW1lbnQpLmdldCgpKTsKKyAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQoSW5q
ZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLCB0b1dLKGFy
Z3VtZW50KSk7CiB9CiAKIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJs
ZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5n
Q29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0
b1dLKG5hbWUpLmdldCgpKTsKKyAgICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFu
ZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5h
bWUpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0Q2FuT3BlbldpbmRvd3Mo
Ym9vbCkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1T
dHJpbmcuaCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1TdHJpbmcuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjY3NzQxCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVN0cmluZy5oCkBAIC0w
LDAgKzEsNjYgQEAKKyNpZm5kZWYgUGxhdGZvcm1TdHJpbmdfaAorI2RlZmluZSBQbGF0Zm9ybVN0
cmluZ19oCisKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1
ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworLy8gVGhpcyBmaWxlIGlzIGFsc28gdXNlZCBpbiBJbmplY3RlZEJ1bmRs
ZSB0aHJvdWdoIFN0cmluZ0Z1bmN0aW9ucy5oCisvLyBzbyB3ZSBtdXN0IGlubGluZWluZyBldmVy
eXRoaW5nIGV2ZW4gaW4gZGVidWcuCisjaWYgQ09NUElMRVIoR0NDKSAmJiAhQ09NUElMRVIoTUlO
R1cpCisjZGVmaW5lIFdUUl9BTFdBWVNfSU5MSU5FIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fs
d2F5c19pbmxpbmVfXykpCisjZWxpZiBDT01QSUxFUihNU1ZDKSB8fCBDT01QSUxFUihSVkNUKQor
I2RlZmluZSBXVFJfQUxXQVlTX0lOTElORSBfX2ZvcmNlaW5saW5lCisjZWxzZQorI2RlZmluZSBX
VFJfQUxXQVlTX0lOTElORSBpbmxpbmUKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQ
TEFURk9STShXSU4pCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgordHlwZWRlZiBDRlN0cmlu
Z1JlZiBOYXRpdmVTdHJpbmc7Cit0eXBlZGVmIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gTmF0aXZl
U3RyaW5nUmVmOworI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UVN0cmluZz4KK3R5cGVk
ZWYgUVN0cmluZyBOYXRpdmVTdHJpbmc7Cit0eXBlZGVmIFFTdHJpbmcgTmF0aXZlU3RyaW5nUmVm
OworI2VuZGlmCisKK25hbWVzcGFjZSBXVFIgeworCitjbGFzcyBQbGF0Zm9ybVN0cmluZyB7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1TdHJpbmcoTmF0
aXZlU3RyaW5nIHN0cmluZykKKyAgICAgICAgOiBtX2ltcGwoc3RyaW5nKQorICAgIHsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBXVFJfQUxXQVlTX0lOTElORSBQbGF0Zm9ybVN0cmluZyhKU1N0cmlu
Z1JlZik7CisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1TdHJpbmcoV0tT
dHJpbmdSZWYpOworCisgICAgV1RSX0FMV0FZU19JTkxJTkUgV0tTdHJpbmdSZWYgdG9XSygpOwor
ICAgIFdUUl9BTFdBWVNfSU5MSU5FIEpTU3RyaW5nUmVmIHRvSlMoKTsKKworICAgIGZyaWVuZCBX
VFJfQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEs
IGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKTsKKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKTsK
KyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIq
IGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKSB7IHJldHVybiBiID09IGE7IH0KKworICAgIGZy
aWVuZCBXVFJfQUxXQVlTX0lOTElORSBib29sIG9wZXJhdG9yIT0oY29uc3QgUGxhdGZvcm1TdHJp
bmcmIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KKyAg
ICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFBsYXRmb3Jt
U3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KKyAgICBmcmll
bmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGNoYXIqIGEsIGNvbnN0
IFBsYXRmb3JtU3RyaW5nJiBiKSB7IHJldHVybiAhKGIgPT0gYSk7IH0KKworICAgIGZyaWVuZCBX
VFJfQUxXQVlTX0lOTElORSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwg
Y29uc3QgUGxhdGZvcm1TdHJpbmcmKTsKKworcHJpdmF0ZToKKyAgICBOYXRpdmVTdHJpbmdSZWYg
bV9pbXBsOworfTsKKworfQorCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCisj
aW5jbHVkZSAiY2YvUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaCIKKyNlbGlmIFBMQVRGT1JNKFFU
KQorI2luY2x1ZGUgInF0L1BsYXRmb3JtU3RyaW5nSW5saW5lc1F0LmgiCisjZW5kaWYKKworI2Vu
ZGlmIC8vIFBsYXRmb3JtU3RyaW5nX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvUGxhdGZvcm1VUkwuaCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxh
dGZvcm1VUkwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2Q2M2Q1Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVVS
TC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5kZWYgUGxhdGZvcm1VUkxfaAorI2RlZmluZSBQbGF0
Zm9ybVVSTF9oCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCisjaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgordHlwZWRlZiBDRlVSTFJlZiBOYXRpdmVVUkw7Cit0eXBlZGVm
IFJldGFpblB0cjxDRlVSTFJlZj4gTmF0aXZlVVJMUmVmOworI2VsaWYgUExBVEZPUk0oUVQpCisj
aW5jbHVkZSA8UVVybD4KK3R5cGVkZWYgUVVybCBOYXRpdmVVUkw7Cit0eXBlZGVmIFFVcmwgTmF0
aXZlVVJMUmVmOworI2VuZGlmCisKK25hbWVzcGFjZSBXVFIgeworCitjbGFzcyBQbGF0Zm9ybVVS
TCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1VUkwo
TmF0aXZlVVJMIHVybCkKKyAgICAgICAgOiBtX2ltcGwodXJsKQorICAgIHsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBXVFJfQUxXQVlTX0lOTElORSBQbGF0Zm9ybVVSTChjb25zdCBjaGFyKik7Cisg
ICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1VUkwoV0tVUkxSZWYpOworCisg
ICAgV1RSX0FMV0FZU19JTkxJTkUgV0tVUkxSZWYgdG9XSygpOworICAgIFdUUl9BTFdBWVNfSU5M
SU5FIFBsYXRmb3JtU3RyaW5nIHRvU3RyaW5nKCk7CisKK3ByaXZhdGU6CisgICAgTmF0aXZlVVJM
UmVmIG1faW1wbDsKK307CisKK30KKworI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lO
KQorI2luY2x1ZGUgImNmL1BsYXRmb3JtVVJMSW5saW5lc0NGLmgiCisjZWxpZiBQTEFURk9STShR
VCkKKyNpbmNsdWRlICJxdC9QbGF0Zm9ybVVSTElubGluZXNRdC5oIgorI2VuZGlmCisKKyNlbmRp
ZiAvLyBQbGF0Zm9ybVVSTF9oCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1N0cmluZ0Z1bmN0aW9ucy5oIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJp
bmdGdW5jdGlvbnMuaAppbmRleCA4MTk1NjA2Li5iYzI4ZmUzIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCisrKyBiL1dlYktpdFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKQEAgLTI3LDU0ICsyNywyNSBAQAog
I2RlZmluZSBTdHJpbmdGdW5jdGlvbnNfaAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNS
ZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRh
aW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+Ci0jaW5jbHVkZSA8V2ViS2l0
Mi9XS1N0cmluZ0NGLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1VSTC5oPgotI2luY2x1ZGUgPFdl
YktpdDIvV0tVUkxDRi5oPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKIC8vIENvbnZlcnNpb24gZnVuY3Rpb25zCiAKLWlubGlu
ZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRvQ0YoSlNTdHJpbmdSZWYgc3RyaW5nKQotewotICAg
IHJldHVybiBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3Ry
aW5nKDAsIHN0cmluZykpOwotfQotCi1pbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB0b0NG
KFdLU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICByZXR1cm4gUmV0YWluUHRyPENGU3RyaW5nUmVm
PihBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdHJpbmcpKTsKLX0KLQotaW5saW5l
IFJldGFpblB0cjxDRlVSTFJlZj4gdG9DRihXS1VSTFJlZiB1cmwpCi17Ci0gICAgcmV0dXJuIFJl
dGFpblB0cjxDRlVSTFJlZj4oQWRvcHRDRiwgV0tVUkxDb3B5Q0ZVUkwoMCwgdXJsKSk7Ci19Ci0K
LWlubGluZSBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHRvQ0YoY29uc3QgV0tSZXRhaW5QdHI8V0tVUkxS
ZWY+JiB1cmwpCi17Ci0gICAgcmV0dXJuIHRvQ0YodXJsLmdldCgpKTsKLX0KLQotaW5saW5lIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICBy
ZXR1cm4gV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aENGU3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkpOwotfQotCi1pbmxpbmUgV0tSZXRhaW5QdHI8
V0tTdHJpbmdSZWY+IHRvV0soSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHN0cmluZykKK2lubGlu
ZSBXS1N0cmluZ1JlZiB0b1dLKEpTU3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICByZXR1cm4gV0tS
ZXRhaW5QdHI8V0tTdHJpbmdSZWY+KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5n
KHRvQ0Yoc3RyaW5nLmdldCgpKS5nZXQoKSkpOworICAgIHJldHVybiBQbGF0Zm9ybVN0cmluZyhz
dHJpbmcpLnRvV0soKTsKIH0KIAotaW5saW5lIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pT
KFdLU3RyaW5nUmVmIHN0cmluZykKK2lubGluZSBKU1N0cmluZ1JlZiB0b0pTKFdLU3RyaW5nUmVm
IHN0cmluZykKIHsKLSAgICByZXR1cm4gSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBK
U1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh0b0NGKHN0cmluZykuZ2V0KCkpKTsKKyAgICByZXR1
cm4gUGxhdGZvcm1TdHJpbmcoc3RyaW5nKS50b0pTKCk7CiB9CiAKIGlubGluZSBKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gdG9KUyhjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmlu
ZykKQEAgLTg0LDI3ICs1NSwxMSBAQCBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRv
SlMoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmcpCiAKIC8vIFN0cmVhbWlu
ZyBmdW5jdGlvbnMKIAotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG91dCwgQ0ZTdHJpbmdSZWYgc3RyaW5nUmVmKQotewotICAgIGlmICghc3RyaW5nUmVmKQot
ICAgICAgICByZXR1cm4gb3V0OwotICAgIENGSW5kZXggYnVmZmVyTGVuZ3RoID0gQ0ZTdHJpbmdH
ZXRNYXhpbXVtU2l6ZUZvckVuY29kaW5nKENGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZ1JlZiksIGtD
RlN0cmluZ0VuY29kaW5nVVRGOCkgKyAxOwotICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnVmZmVy
TGVuZ3RoKTsKLSAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmluZyhzdHJpbmdSZWYsIGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlckxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSkKLSAgICAgICAgcmV0
dXJuIG91dDsKLSAgICByZXR1cm4gb3V0IDw8IGJ1ZmZlci5kYXRhKCk7Ci19Ci0KLWlubGluZSBz
dGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFJldGFpblB0
cjxDRlN0cmluZ1JlZj4mIHN0cmluZ1JlZikKLXsKLSAgICByZXR1cm4gb3V0IDw8IHN0cmluZ1Jl
Zi5nZXQoKTsKLX0KLQogaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJl
YW0mIG91dCwgV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQogewogICAgIGlmICghc3RyaW5nUmVmKQog
ICAgICAgICByZXR1cm4gb3V0OwotICAgIHJldHVybiBvdXQgPDwgdG9DRihzdHJpbmdSZWYpOwor
ICAgIHJldHVybiBvdXQgPDwgUGxhdGZvcm1TdHJpbmcoc3RyaW5nUmVmKTsKIH0KIAogaW5saW5l
IHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmdSZWYpCkBAIC0xMTIsMjQgKzY3LDYgQEAgaW5saW5l
IHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWYKICAgICByZXR1cm4gb3V0IDw8IHN0cmluZ1JlZi5nZXQoKTsKIH0K
IAotLy8gVVJMIGNyZWF0aW9uCi0KLWlubGluZSBXS1VSTFJlZiBjcmVhdGVXS1VSTChjb25zdCBj
aGFyKiBwYXRoT3JVUkwpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoT3JVUkxD
RlN0cmluZyhBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIHBhdGhPclVSTCwg
a0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTDsK
LSAgICBpZiAoQ0ZTdHJpbmdIYXNQcmVmaXgocGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RS
KCJodHRwOi8vIikpIHx8IENGU3RyaW5nSGFzUHJlZml4KHBhdGhPclVSTENGU3RyaW5nLmdldCgp
LCBDRlNUUigiaHR0cHM6Ly8iKSkpCi0gICAgICAgIGNmVVJMLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVX
aXRoU3RyaW5nKDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCAwKSk7Ci0gICAgZWxzZQotI2lm
IFBMQVRGT1JNKFdJTikKLSAgICAgICAgY2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxl
U3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwga0NGVVJMV2luZG93c1BhdGhT
dHlsZSwgZmFsc2UpKTsKLSNlbHNlCi0gICAgICAgIGNmVVJMLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVX
aXRoRmlsZVN5c3RlbVBhdGgoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIGtDRlVSTFBPU0lY
UGF0aFN0eWxlLCBmYWxzZSkpOwotI2VuZGlmCi0gICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aENG
VVJMKGNmVVJMLmdldCgpKTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXVFIKIAogI2VuZGlmIC8v
IFN0cmluZ0Z1bmN0aW9uc19oCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCmluZGV4IDZmOTdiOWYuLmQ5MzQxZGIgMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0yNSw2ICsyNSw4IEBA
CiAKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVVSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmll
dy5oIgogI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0
aW9uLmgiCkBAIC0yMDUsOCArMjA3LDggQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0
ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgLy8gUmVzZXQgbWFpbiBwYWdlIGJhY2sgdG8gYWJv
dXQ6YmxhbmsKICAgICBtX2RvbmVSZXNldHRpbmcgPSBmYWxzZTsKIAotICAgIFdLUmV0YWluUHRy
PFdLVVJMUmVmPiB1cmwoQWRvcHRXSywgY3JlYXRlV0tVUkwoImFib3V0OmJsYW5rIikpOwotICAg
IFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCB1cmwuZ2V0KCkpOworICAgIFBs
YXRmb3JtVVJMIHVybCgiYWJvdXQ6YmxhbmsiKTsKKyAgICBXS1BhZ2VMb2FkVVJMKG1fbWFpbldl
YlZpZXctPnBhZ2UoKSwgdXJsLnRvV0soKSk7CiAgICAgVGVzdENvbnRyb2xsZXI6OnJ1blVudGls
KG1fZG9uZVJlc2V0dGluZyk7CiB9CiAKQEAgLTI3MiwxMCArMjc0LDcgQEAgdm9pZCBUZXN0Q29u
dHJvbGxlcjo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVm
IGZyYW1lKQogICAgIGlmICghV0tGcmFtZUlzTWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMKEFkb3B0V0ssIFdLRnJhbWVD
b3B5VVJMKGZyYW1lKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTD0gdG9DRih3a1VS
TCk7Ci0gICAgQ0ZTdHJpbmdSZWYgY2ZVUkxTdHJpbmcgPSBDRlVSTEdldFN0cmluZyhjZlVSTC5n
ZXQoKSk7Ci0gICAgaWYgKCFDRkVxdWFsKGNmVVJMU3RyaW5nLCBDRlNUUigiYWJvdXQ6Ymxhbmsi
KSkpCisgICAgaWYgKFBsYXRmb3JtVVJMKFdLRnJhbWVDb3B5VVJMKGZyYW1lKSkudG9TdHJpbmco
KSAhPSAiYWJvdXQ6YmxhbmsiKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNldHRp
bmcgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
SW52b2NhdGlvbi5jcHAgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAppbmRleCA0N2RmNjZiLi4xNGRhMWYyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9XZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5j
bHVkZSAiVGVzdEludm9jYXRpb24uaCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtVVJMLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAjaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAj
aW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIKQEAgLTM4LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKIG5hbWVzcGFjZSBXVFIgewogCiBUZXN0SW52b2NhdGlvbjo6VGVzdEludm9jYXRp
b24oY29uc3QgY2hhciogcGF0aE9yVVJMKQotICAgIDogbV91cmwoQWRvcHRXSywgY3JlYXRlV0tV
UkwocGF0aE9yVVJMKSkKKyAgICA6IG1fdXJsKEFkb3B0V0ssIFBsYXRmb3JtVVJMKHBhdGhPclVS
TCkudG9XSygpKQogICAgICwgbV9wYXRoT3JVUkwoZmFzdFN0ckR1cChwYXRoT3JVUkwpKQogICAg
ICwgbV9nb3RJbml0aWFsUmVzcG9uc2UoZmFsc2UpCiAgICAgLCBtX2dvdEZpbmFsTWVzc2FnZShm
YWxzZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVz
dFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
ZjVlZTZkNS4uNmRhMDlkNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViS2l0
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTg4LDYgKzg4LDggQEAKIAkJNjVFQjg1OUQxMUVDNjdDQzAwMzREMzAwIC8q
IEFjdGl2YXRlRm9udHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZh
dGVGb250cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5RjExRUM2N0ND
MDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgcGF0aCA9IEFjdGl2YXRlRm9udHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBXZWJLaXRUZXN0UnVubmVyICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1v
LmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVy
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk5ODU1MjIxMzEyMzdEODg4
MDAxQjc5MTUgLyogUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaDsgcGF0aCA9IGNmL1BsYXRm
b3JtU3RyaW5nSW5saW5lc0NGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk4NTUy
MjE0MTIzN0Q4ODgwMDFCNzkxNSAvKiBQbGF0Zm9ybVVSTElubGluZXNDRi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybVVSTElubGluZXNDRi5oOyBwYXRoID0gY2Yv
UGxhdGZvcm1VUkxJbmxpbmVzQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMx
NEU0RDgxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBHQ0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQkMxNEU0RDkxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzE0RTRFMTEyMEUwMzIwMDA4MjZDMEMgLyogR0NDb250
cm9sbGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBHQ0NvbnRyb2xsZXIuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc2LDYgKzE3OCw3IEBACiAJCTA4RkI3Nzk1RkU4
NDE1NURDMDJBQUMwNyAvKiBUZXN0UnVubmVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKKwkJCQk5ODU1MjIxMjEyMzdEODQ0MDAxQjc5MTUgLyogY2YgKi8sCiAJ
CQkJQkM3OTMzRkUxMThGN0M3NDAwNUVBOEUyIC8qIG1hYyAqLywKIAkJCQlCQzI1MUExNzExRDE2
Nzc0MDAyRUJDMDEgLyogV2ViS2l0VGVzdFJ1bm5lclByZWZpeC5oICovLAogCQkJCUJDNzkzNERE
MTE5MDY2RUMwMDVFQThFMiAvKiBQbGF0Zm9ybVdlYlZpZXcuaCAqLywKQEAgLTIxNCw2ICsyMTcs
MTUgQEAKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owor
CQk5ODU1MjIxMjEyMzdEODQ0MDAxQjc5MTUgLyogY2YgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91
cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTk4NTUyMjEzMTIzN0Q4ODgwMDFCNzkxNSAvKiBQbGF0
Zm9ybVN0cmluZ0lubGluZXNDRi5oICovLAorCQkJCTk4NTUyMjE0MTIzN0Q4ODgwMDFCNzkxNSAv
KiBQbGF0Zm9ybVVSTElubGluZXNDRi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBjZjsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUJDMTRFNEUwMTIwRTAyRjkwMDgyNkMwQyAv
KiBDb250cm9sbGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3JtU3Ry
aW5nSW5saW5lc0NGLmggYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3Jt
U3RyaW5nSW5saW5lc0NGLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4
YzVjNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2Yv
UGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaApAQCAtMCwwICsxLDUyIEBACisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+
CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgorI2luY2x1ZGUgPFdl
YktpdDIvV0tTdHJpbmdDRi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IFdUUiB7CisKK1BsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyhKU1N0cmluZ1JlZiBzdHJp
bmcpCisgICAgOiBtX2ltcGwoQWRvcHRDRiwgSlNTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwgc3RyaW5n
KSkKK3sKK30KKworUGxhdGZvcm1TdHJpbmc6OlBsYXRmb3JtU3RyaW5nKFdLU3RyaW5nUmVmIHN0
cmluZykKKyAgICA6IG1faW1wbChBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdHJp
bmcpKQoreworfQorCitXS1N0cmluZ1JlZiBQbGF0Zm9ybVN0cmluZzo6dG9XSygpCit7CisgICAg
cmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKG1faW1wbC5nZXQoKSk7Cit9CisKK0pT
U3RyaW5nUmVmIFBsYXRmb3JtU3RyaW5nOjp0b0pTKCkKK3sKKyAgICByZXR1cm4gSlNTdHJpbmdD
cmVhdGVXaXRoQ0ZTdHJpbmcobV9pbXBsLmdldCgpKTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBQbGF0Zm9ybVN0cmluZyYgYikKK3sKKyAgICBy
ZXR1cm4gQ0ZFcXVhbChhLm1faW1wbC5nZXQoKSwgYi5tX2ltcGwuZ2V0KCkpOworfQorCitib29s
IG9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpCit7Cisg
ICAgcmV0dXJuIENGRXF1YWwoYS5tX2ltcGwuZ2V0KCksIENGU3RyaW5nQ3JlYXRlV2l0aENTdHJp
bmcoMCwgYiwga0NGU3RyaW5nRW5jb2RpbmdBU0NJSSkpOworfQorCitzdGQ6Om9zdHJlYW0mIG9w
ZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhKQorewor
ICAgIENGU3RyaW5nUmVmIGNmU3RyaW5nID0gYS5tX2ltcGwuZ2V0KCk7CisgICAgaWYgKCFjZlN0
cmluZykKKyAgICAgICAgcmV0dXJuIG91dDsKKyAgICBDRkluZGV4IGJ1ZmZlckxlbmd0aCA9IENG
U3RyaW5nR2V0TWF4aW11bVNpemVGb3JFbmNvZGluZyhDRlN0cmluZ0dldExlbmd0aChjZlN0cmlu
ZyksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkgKyAxOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXIo
YnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmluZyhjZlN0cmluZywgYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyTGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKQorICAgICAg
ICByZXR1cm4gb3V0OworICAgIHJldHVybiBvdXQgPDwgYnVmZmVyLmRhdGEoKTsKK30KKworfQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElu
bGluZXNDRi5oIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElu
bGluZXNDRi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNTM3MjkKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3Jt
VVJMSW5saW5lc0NGLmgKQEAgLTAsMCArMSwzNSBAQAorI2luY2x1ZGUgIlBsYXRmb3JtVVJMLmgi
CisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLVVJMQ0YuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK1Bs
YXRmb3JtVVJMOjpQbGF0Zm9ybVVSTChjb25zdCBjaGFyKiBwYXRoT3JVUkwpCit7CisgICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoT3JVUkxDRlN0cmluZyhBZG9wdENGLCBDRlN0cmluZ0Ny
ZWF0ZVdpdGhDU3RyaW5nKDAsIHBhdGhPclVSTCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7Cisg
ICAgaWYgKENGU3RyaW5nSGFzUHJlZml4KHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBDRlNUUigi
aHR0cDovLyIpKSB8fCBDRlN0cmluZ0hhc1ByZWZpeChwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwg
Q0ZTVFIoImh0dHBzOi8vIikpKQorICAgICAgICBtX2ltcGwuYWRvcHRDRihDRlVSTENyZWF0ZVdp
dGhTdHJpbmcoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIDApKTsKKyAgICBlbHNlCisjaWYg
UExBVEZPUk0oV0lOKQorICAgICAgICBtX2ltcGwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxl
U3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwga0NGVVJMV2luZG93c1BhdGhT
dHlsZSwgZmFsc2UpKTsKKyNlbHNlCisgICAgICAgIG1faW1wbC5hZG9wdENGKENGVVJMQ3JlYXRl
V2l0aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBrQ0ZVUkxQT1NJ
WFBhdGhTdHlsZSwgZmFsc2UpKTsKKyNlbmRpZgorfQorCitQbGF0Zm9ybVVSTDo6UGxhdGZvcm1V
UkwoV0tVUkxSZWYgdXJsUmVmKQorICAgIDogbV9pbXBsKEFkb3B0Q0YsIFdLVVJMQ29weUNGVVJM
KDAsIHVybFJlZikpCit7Cit9CisKK1dLVVJMUmVmIFBsYXRmb3JtVVJMOjp0b1dLKCkKK3sKKyAg
ICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoQ0ZVUkwobV9pbXBsLmdldCgpKTsKK30KKworUGxhdGZv
cm1TdHJpbmcgUGxhdGZvcm1VUkw6OnRvU3RyaW5nKCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1T
dHJpbmcoQ0ZVUkxHZXRTdHJpbmcobV9pbXBsLmdldCgpKSk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1TdHJpbmdJbmxpbmVzUXQu
aCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1TdHJpbmdJbmxpbmVz
UXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWU4MjRlCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVN0cmlu
Z0lubGluZXNRdC5oCkBAIC0wLDAgKzEsNDkgQEAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorCisjaW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlICJXS1N0cmluZ1F0LmgiCisK
K25hbWVzcGFjZSBXVFIgeworCisvLyBOZXZlciBjYWxsZWQsIGp1c3QgZm9yIHNjb3BpbmcgdGhl
IENPTVBJTEVfQVNTRVJULgorc3RhdGljIGlubGluZSB2b2lkIHNhbml0eUNoZWNrKCkKK3sKKyAg
ICBDT01QSUxFX0FTU0VSVChzaXplb2YoUUNoYXIpID09IHNpemVvZihVQ2hhciksIHFjaGFyX2Fu
ZF91Y2hhcl9tdXN0X2JlX3NhbWVfc2l6ZSk7Cit9CisKK1BsYXRmb3JtU3RyaW5nOjpQbGF0Zm9y
bVN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX2ltcGwocmVpbnRlcnByZXRfY2Fz
dDxRQ2hhcio+KEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHJpbmcpKSwgSlNTdHJpbmdHZXRM
ZW5ndGgoc3RyaW5nKSkKK3sKK30KKworUGxhdGZvcm1TdHJpbmc6OlBsYXRmb3JtU3RyaW5nKFdL
U3RyaW5nUmVmIHN0cmluZykKKyAgICA6IG1faW1wbChXS1N0cmluZ0NvcHlRU3RyaW5nKHN0cmlu
ZykpCit7Cit9CisKK1dLU3RyaW5nUmVmIFBsYXRmb3JtU3RyaW5nOjp0b1dLKCkKK3sKKyAgICBy
ZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoUVN0cmluZyhtX2ltcGwpOworfQorCitKU1N0cmluZ1Jl
ZiBQbGF0Zm9ybVN0cmluZzo6dG9KUygpCit7CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0
aENoYXJhY3RlcnMobV9pbXBsLmRhdGEoKSwgbV9pbXBsLnNpemUoKSk7Cit9CisKK2Jvb2wgUGxh
dGZvcm1TdHJpbmc6Om9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEsIGNvbnN0IFBs
YXRmb3JtU3RyaW5nJiBiKQoreworICAgIHJldHVybiBhLm1faW1wbCA9PSBiLm1faW1wbDsKK30K
KworYm9vbCBQbGF0Zm9ybVN0cmluZzo6b3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVN0cmluZyYg
YSwgY29uc3QgY2hhciogYikKK3sKKyAgICByZXR1cm4gYS5tX2ltcGwgPT0gYjsKK30KKworc3Rk
Ojpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBQbGF0Zm9ybVN0
cmluZyYgc3RyaW5nKQoreworICAgIHJldHVybiBvcyA8PCBzdHJpbmcubV9pbXBsLnRvU3RkU3Ry
aW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
cXQvUGxhdGZvcm1VUkxJbmxpbmVzUXQuaCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
cXQvUGxhdGZvcm1VUkxJbmxpbmVzUXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45OGYzYTkzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9xdC9QbGF0Zm9ybVVSTElubGluZXNRdC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpbmNsdWRl
ICJQbGF0Zm9ybVVSTC5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJXS1VSTFF0LmgiCisKK25hbWVzcGFjZSBXVFIgeworCitQbGF0Zm9ybVVSTDo6UGxhdGZvcm1V
UkwoY29uc3QgY2hhciogcGF0aE9yVVJMKQorICAgIDogbV9pbXBsKHBhdGhPclVSTCkKK3sKK30K
KworUGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJMKFdLVVJMUmVmIHVybFJlZikKKyAgICA6IG1faW1w
bChXS1VSTENvcHlRVVJMKHVybFJlZikpCit7Cit9CisKK1dLVVJMUmVmIHRvV0soKQoreworICAg
IHJldHVybiBXS1VSTENyZWF0ZVdpdGhRVVJMKG1faW1wbCk7Cit9CisKK1BsYXRmb3JtU3RyaW5n
IHRvU3RyaW5nKCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1TdHJpbmcobV9pbXBsLnRvU3RyaW5n
KCkpOworfQorCit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dp
bi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvaiBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
d2luL1dlYktpdFRlc3RSdW5uZXIudmNwcm9qCmluZGV4IGQ3ZGRkNWMuLjFmMmRkZDIgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1dlYktpdFRlc3RSdW5uZXIu
dmNwcm9qCisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1dlYktpdFRlc3RS
dW5uZXIudmNwcm9qCkBAIC0zMTgsNiArMzE4LDI2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJ
CTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJCU5hbWU9ImNmIg0KKwkJCT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNmXFBsYXRmb3JtU3RyaW5nSW5saW5lc0NGLmgiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjZlxQbGF0
Zm9ybVVSTElubGluZXNDRi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQor
CQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1TdHJpbmcuaCINCisJCQk+DQor
CQk8L0ZpbGU+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1VUkwuaCIN
CisJCQk+DQorCQk8L0ZpbGU+DQogCQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZv
cm1XZWJWaWV3LmgiDQogCQkJPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67008</attachid>
            <date>2010-09-09 01:42:38 -0700</date>
            <delta_ts>2010-09-21 06:33:08 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>reland_wtr_porting.diff</filename>
            <type>text/plain</type>
            <size>28663</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCAyOGU0ZDdmLi5hNTIwZWJkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTAtMDkt
MDkgIEJhbGF6cyBLZWxlbWVuICA8a2JAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgc2hvdWxk
IGJlIHBvcnRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTM5MworCisgICAgICAgIFdyYXAgcGxhdGZvcm0gc3BlY2lmaWMgc3RyaW5nIGFuZCBV
UkwgcmVwcmVzZW50YXRpb24gaW5zaWRlIGNvbW1vbiBjbGFzc2VzCisgICAgICAgIChQbGF0Zm9y
bVN0cmluZyBhbmQgUGxhdGZvcm1VUkwpIHRoYXQgcHJvdmlkZXMgYmFzaWMgZnVuY3Rpb25hbGl0
eSAoY29tcGFyaXNvbiwKKyAgICAgICAgdHJhbnNvcm1hdGlvbiBpbnRvIFdLIGFuZCBKUyB0eXBl
cywgc3RyZWFtaW5nKS4KKworICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZGlk
UmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV1RSOjpJbmplY3RlZEJ1bmRsZTo6ZG9uZSk6Cisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHA6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudFdpdGhJZCk6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250
cm9sbGVyOjpleGVjQ29tbWFuZCk6CisgICAgICAgIChXVFI6OkxheW91dFRlc3RDb250cm9sbGVy
Ojppc0NvbW1hbmRFbmFibGVkKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1BsYXRmb3Jt
U3RyaW5nLmg6IEFkZGVkLiBXcmFwcGluZyBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBzdHJpbmcgcmVw
cmVzZW50YXRpb24uCisgICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmlu
Zyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdUUjo6UGxhdGZvcm1TdHJpbmc6Om9wZXJhdG9yIT0pOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvUGxhdGZvcm1VUkwuaDogQWRkZWQuIFdyYXBwaW5nIG9mIHBsYXRmb3JtIHNwZWNpZmlj
IFVSTCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgKFdUUjo6UGxhdGZvcm1VUkw6OlBsYXRmb3Jt
VVJMKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oOiBVc2Ug
dGhlIG5ldyBjbGFzc2VzIGluc3RlYWQgb2YgQ0YgdHlwZXMuCisgICAgICAgIChXVFI6OnRvV0sp
OgorICAgICAgICAoV1RSOjp0b0pTKToKKyAgICAgICAgKFdUUjo6b3BlcmF0b3I8PCk6CisgICAg
ICAgICogV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXVFI6
OlRlc3RDb250cm9sbGVyOjpyZXNldFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKToKKyAgICAgICAg
KFdUUjo6VGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRGb3JGcmFtZSk6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHA6CisgICAgICAgIChXVFI6OlRlc3RJ
bnZvY2F0aW9uOjpUZXN0SW52b2NhdGlvbik6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
OjppbnZva2UpOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3Nh
Z2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvV2ViS2l0
VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvY2YvUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaDogQWRkZWQuIEFkZGVkLiBDRiBp
bXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1TdHJpbmcuCisgICAgICAgIChXVFI6OlBsYXRmb3Jt
U3RyaW5nOjpQbGF0Zm9ybVN0cmluZyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjp0
b1dLKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6OnRvSlMpOgorICAgICAgICAoV1RS
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdUUjo6b3BlcmF0b3I8PCk6CisgICAgICAgICogV2Vi
S2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElubGluZXNDRi5oOiBBZGRlZC4gQWRkZWQuIENG
IGltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybVVSTC4KKyAgICAgICAgKFdUUjo6UGxhdGZvcm1V
Ukw6OlBsYXRmb3JtVVJMKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1VUkw6OnRvV0spOgorICAg
ICAgICAoV1RSOjpQbGF0Zm9ybVVSTDo6dG9TdHJpbmcpOgorICAgICAgICAqIFdlYktpdFRlc3RS
dW5uZXIvcXQvUGxhdGZvcm1TdHJpbmdJbmxpbmVzUXQuaDogQWRkZWQuIEFkZGVkLiBRdCBpbXBs
ZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1TdHJpbmcuCisgICAgICAgIChXVFI6OnNhbml0eUNoZWNr
KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6OlBsYXRmb3JtU3RyaW5nKToKKyAgICAg
ICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6OnRvV0spOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVN0
cmluZzo6dG9KUyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdUUjo6b3BlcmF0b3I8PCk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9x
dC9QbGF0Zm9ybVVSTElubGluZXNRdC5oOiBBZGRlZC4gQWRkZWQuIFF0IGltcGxlbWVudGF0aW9u
IGZvciBQbGF0Zm9ybVVSTC4KKyAgICAgICAgKFdUUjo6UGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJM
KToKKyAgICAgICAgKFdUUjo6dG9XSyk6CisgICAgICAgIChXVFI6OnRvU3RyaW5nKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvajoKKwogMjAx
MC0wOS0wNyAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgT2phbiBWYWZhaS4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvV2ViS2l0VG9vbHMv
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXgg
ZWNjMzAyZi4uN2EzOTA4YyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKKysrIGIvV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTI3LDEy
ICsyNywxMiBAQAogCiAjaW5jbHVkZSAiQWN0aXZhdGVGb250cy5oIgogI2luY2x1ZGUgIkluamVj
dGVkQnVuZGxlUGFnZS5oIgorI2luY2x1ZGUgIlN0cmluZ0Z1bmN0aW9ucy5oIgogI2luY2x1ZGUg
PFdlYktpdDIvV0tCdW5kbGUuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQnVuZGxlUGFnZS5oPgog
I2luY2x1ZGUgPFdlYktpdDIvV0tCdW5kbGVQYWdlUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFdlYktp
dDIvV0tCdW5kbGVQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgot
I2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmdDRi5oPgogI2luY2x1ZGUgPFdlYktpdDIvV2ViS2l0
Mi5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgpAQCAtMTA1LDE5ICsxMDUsMTQgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6d2lsbERlc3Ry
b3lQYWdlKFdLQnVuZGxlUGFnZVJlZiBwYWdlKQogCiB2b2lkIEluamVjdGVkQnVuZGxlOjpkaWRS
ZWNlaXZlTWVzc2FnZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VC
b2R5KQogewotICAgIENGU3RyaW5nUmVmIGNmTWVzc2FnZSA9IFdLU3RyaW5nQ29weUNGU3RyaW5n
KDAsIG1lc3NhZ2VOYW1lKTsKLSAgICBpZiAoQ0ZFcXVhbChjZk1lc3NhZ2UsIENGU1RSKCJCZWdp
blRlc3QiKSkpIHsKLSAgICAgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IGFja01lc3NhZ2VO
YW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RSKCJBY2siKSkpOwot
ICAgICAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gYWNrTWVzc2FnZUJvZHkoQWRvcHRXSywg
V0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIkJlZ2luVGVzdCIpKSk7Ci0gICAgICAg
IFdLQnVuZGxlUG9zdE1lc3NhZ2UobV9idW5kbGUsIGFja01lc3NhZ2VOYW1lLmdldCgpLCBhY2tN
ZXNzYWdlQm9keS5nZXQoKSk7CisgICAgaWYgKFBsYXRmb3JtU3RyaW5nKG1lc3NhZ2VOYW1lKSA9
PSAiQmVnaW5UZXN0IikgeworICAgICAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKG1fYnVuZGxlLCB0
b1dLKCJBY2siKSwgdG9XSygiQmVnaW5UZXN0IikpOwogCiAgICAgICAgIGJlZ2luVGVzdGluZygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
IGVycm9yTWVzc2FnZU5hbWUoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZT
VFIoIkVycm9yIikpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZXJyb3JNZXNzYWdl
Qm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlNUUigiVW5rbm93biIp
KSk7Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgZXJyb3JNZXNzYWdlTmFtZS5n
ZXQoKSwgZXJyb3JNZXNzYWdlQm9keS5nZXQoKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2FnZSht
X2J1bmRsZSwgdG9XSygiRXJyb3IiKSwgdG9XSygiVW5rbm93biIpKTsKIH0KIAogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6YmVnaW5UZXN0aW5nKCkKQEAgLTE0MiwxMyArMTM3LDEyIEBAIHZvaWQgSW5q
ZWN0ZWRCdW5kbGU6OmRvbmUoKQogewogICAgIG1fbWFpblBhZ2UtPnN0b3BMb2FkaW5nKCk7CiAK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gZG9uZU1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RSKCJEb25lIikpKTsKKyAgICBQbGF0Zm9ybVN0
cmluZyBkb25lTWVzc2FnZU5hbWUoIkRvbmUiKTsKIAogICAgIHN0ZDo6c3RyaW5nIG91dHB1dCA9
IG1fb3V0cHV0U3RyZWFtLnN0cigpOwotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gb3V0cHV0
Q0ZTdHJpbmcoQWRvcHRDRiwgQ0ZTdHJpbmdDcmVhdGVXaXRoQ1N0cmluZygwLCBvdXRwdXQuY19z
dHIoKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+IGRvbmVNZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhv
dXRwdXRDRlN0cmluZy5nZXQoKSkpOworICAgIFBsYXRmb3JtU3RyaW5nIGRvbmVNZXNzYWdlQm9k
eShvdXRwdXQuY19zdHIoKSwgUGxhdGZvcm1TdHJpbmc6OkNTdHJpbmdFbmNvZGluZ1VURjgpOwog
Ci0gICAgV0tCdW5kbGVQb3N0TWVzc2FnZShtX2J1bmRsZSwgZG9uZU1lc3NhZ2VOYW1lLmdldCgp
LCBkb25lTWVzc2FnZUJvZHkuZ2V0KCkpOworICAgIFdLQnVuZGxlUG9zdE1lc3NhZ2UobV9idW5k
bGUsIGRvbmVNZXNzYWdlTmFtZS50b1dLKCksIGRvbmVNZXNzYWdlQm9keS50b1dLKCkpOwogCiAg
ICAgbV9zdGF0ZSA9IElkbGU7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBiL1dlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
Y3BwCmluZGV4IGQ1NGJiMWQuLjIyMjBiYTkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBi
L1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCkBAIC0xNjEsNyArMTYxLDcgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnRXaXRoSWQoSlNTdHJpbmdSZWYgYW5pbWEK
ICAgICAvLyBGSVhNRTogSXMgaXQgT0sgdGhpcyB3b3JrcyBvbmx5IGZvciB0aGUgbWFpbiBmcmFt
ZT8KICAgICAvLyBGSVhNRTogSWYgdGhpcyBpcyBuZWVkZWQgb25seSBmb3IgdGhlIG1haW4gZnJh
bWUsIHRoZW4gd2h5IGlzIHRoZSBmdW5jdGlvbiBvbiBXS0J1bmRsZUZyYW1lIGluc3RlYWQgb2Yg
V0tCdW5kbGVQYWdlPwogICAgIFdLQnVuZGxlRnJhbWVSZWYgbWFpbkZyYW1lID0gV0tCdW5kbGVQ
YWdlR2V0TWFpbkZyYW1lKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSk7
Ci0gICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVQYXVzZUFuaW1hdGlvbk9uRWxlbWVudFdpdGhJZCht
YWluRnJhbWUsIHRvV0soYW5pbWF0aW9uTmFtZSkuZ2V0KCksIHRvV0soZWxlbWVudElkKS5nZXQo
KSwgdGltZSk7CisgICAgcmV0dXJuIFdLQnVuZGxlRnJhbWVQYXVzZUFuaW1hdGlvbk9uRWxlbWVu
dFdpdGhJZChtYWluRnJhbWUsIHRvV0soYW5pbWF0aW9uTmFtZSksIHRvV0soZWxlbWVudElkKSwg
dGltZSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQoSlNT
dHJpbmdSZWYgc291cmNlLCBib29sIHJ1bkF0U3RhcnQsIGJvb2wgYWxsRnJhbWVzKQpAQCAtMjI1
LDEyICsyMjUsMTIgQEAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250cm9s
bGVyOjptYXJrZXJUZXh0Rm9yTGlzdEl0ZW0oSlNWYWx1ZVJlZgogCiB2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpleGVjQ29tbWFuZChKU1N0cmluZ1JlZiBuYW1lLCBKU1N0cmluZ1JlZiBhcmd1
bWVudCkKIHsKLSAgICBXS0J1bmRsZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQoSW5qZWN0ZWRC
dW5kbGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpLCB0b1dLKGFy
Z3VtZW50KS5nZXQoKSk7CisgICAgV0tCdW5kbGVQYWdlRXhlY3V0ZUVkaXRpbmdDb21tYW5kKElu
amVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhuYW1lKSwgdG9XSyhh
cmd1bWVudCkpOwogfQogCiBib29sIExheW91dFRlc3RDb250cm9sbGVyOjppc0NvbW1hbmRFbmFi
bGVkKEpTU3RyaW5nUmVmIG5hbWUpCiB7Ci0gICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGlu
Z0NvbW1hbmRFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwg
dG9XSyhuYW1lKS5nZXQoKSk7CisgICAgcmV0dXJuIFdLQnVuZGxlUGFnZUlzRWRpdGluZ0NvbW1h
bmRFbmFibGVkKEluamVjdGVkQnVuZGxlOjpzaGFyZWQoKS5wYWdlKCktPnBhZ2UoKSwgdG9XSyhu
YW1lKSk7CiB9CiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldENhbk9wZW5XaW5kb3dz
KGJvb2wpCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3Jt
U3RyaW5nLmggYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtU3RyaW5nLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IwZDE0ZgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1TdHJpbmcuaApAQCAt
MCwwICsxLDczIEBACisjaWZuZGVmIFBsYXRmb3JtU3RyaW5nX2gKKyNkZWZpbmUgUGxhdGZvcm1T
dHJpbmdfaAorCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaD4KKyNpbmNs
dWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNlLmg+CisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKy8vIFRoaXMgZmlsZSBpcyBhbHNvIHVzZWQgaW4gSW5qZWN0ZWRCdW5k
bGUgdGhyb3VnaCBTdHJpbmdGdW5jdGlvbnMuaAorLy8gc28gd2UgbXVzdCBpbmxpbmVpbmcgZXZl
cnl0aGluZyBldmVuIGluIGRlYnVnLgorI2lmIENPTVBJTEVSKEdDQykgJiYgIUNPTVBJTEVSKE1J
TkdXKQorI2RlZmluZSBXVFJfQUxXQVlTX0lOTElORSBpbmxpbmUgX19hdHRyaWJ1dGVfXygoX19h
bHdheXNfaW5saW5lX18pKQorI2VsaWYgQ09NUElMRVIoTVNWQykgfHwgQ09NUElMRVIoUlZDVCkK
KyNkZWZpbmUgV1RSX0FMV0FZU19JTkxJTkUgX19mb3JjZWlubGluZQorI2Vsc2UKKyNkZWZpbmUg
V1RSX0FMV0FZU19JTkxJTkUgaW5saW5lCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwg
UExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KK3R5cGVkZWYgQ0ZTdHJp
bmdSZWYgTmF0aXZlU3RyaW5nOwordHlwZWRlZiBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IE5hdGl2
ZVN0cmluZ1JlZjsKKyNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFTdHJpbmc+Cit0eXBl
ZGVmIFFTdHJpbmcgTmF0aXZlU3RyaW5nOwordHlwZWRlZiBRU3RyaW5nIE5hdGl2ZVN0cmluZ1Jl
ZjsKKyNlbmRpZgorCituYW1lc3BhY2UgV1RSIHsKKworY2xhc3MgUGxhdGZvcm1TdHJpbmcgewor
cHVibGljOgorICAgIGV4cGxpY2l0IFdUUl9BTFdBWVNfSU5MSU5FIFBsYXRmb3JtU3RyaW5nKE5h
dGl2ZVN0cmluZyBzdHJpbmcpCisgICAgICAgIDogbV9pbXBsKHN0cmluZykKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1TdHJpbmcoV0tTdHJp
bmdSZWYpOworICAgIGV4cGxpY2l0IFdUUl9BTFdBWVNfSU5MSU5FIFBsYXRmb3JtU3RyaW5nKEpT
U3RyaW5nUmVmKTsKKworICAgIGVudW0gQ1N0cmluZ0VuY29kaW5nIHsKKyAgICAgICAgQ1N0cmlu
Z0VuY29kaW5nQVNDSUksCisgICAgICAgIENTdHJpbmdFbmNvZGluZ1VURjgKKyAgICB9OworCisg
ICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1TdHJpbmcoY29uc3QgY2hhcios
IENTdHJpbmdFbmNvZGluZyA9IENTdHJpbmdFbmNvZGluZ0FTQ0lJKTsKKworICAgIFdUUl9BTFdB
WVNfSU5MSU5FIFdLU3RyaW5nUmVmIHRvV0soKTsKKyAgICBXVFJfQUxXQVlTX0lOTElORSBKU1N0
cmluZ1JlZiB0b0pTKCk7CisKKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBQbGF0Zm9ybVN0cmluZyYgYik7
CisgICAgZnJpZW5kIFdUUl9BTFdBWVNfSU5MSU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBQbGF0
Zm9ybVN0cmluZyYgYSwgY29uc3QgY2hhciogYik7CisgICAgZnJpZW5kIFdUUl9BTFdBWVNfSU5M
SU5FIGJvb2wgb3BlcmF0b3I9PShjb25zdCBjaGFyKiBhLCBjb25zdCBQbGF0Zm9ybVN0cmluZyYg
YikgeyByZXR1cm4gYiA9PSBhOyB9CisKKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBQbGF0Zm9ybVN0cmlu
ZyYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CisgICAgZnJpZW5kIFdUUl9BTFdBWVNfSU5MSU5F
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBQbGF0Zm9ybVN0cmluZyYgYSwgY29uc3QgY2hhciogYikg
eyByZXR1cm4gIShhID09IGIpOyB9CisgICAgZnJpZW5kIFdUUl9BTFdBWVNfSU5MSU5FIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBjaGFyKiBhLCBjb25zdCBQbGF0Zm9ybVN0cmluZyYgYikgeyByZXR1
cm4gIShiID09IGEpOyB9CisKKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgc3RkOjpvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJik7CisK
K3ByaXZhdGU6CisgICAgTmF0aXZlU3RyaW5nUmVmIG1faW1wbDsKK307CisKK30KKworI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgImNmL1BsYXRmb3JtU3RyaW5n
SW5saW5lc0NGLmgiCisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJxdC9QbGF0Zm9ybVN0
cmluZ0lubGluZXNRdC5oIgorI2VuZGlmCisKKyNlbmRpZiAvLyBQbGF0Zm9ybVN0cmluZ19oCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtVVJMLmggYi9X
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1BsYXRmb3JtVVJMLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNzdkNjNkNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1VUkwuaApAQCAtMCwwICsxLDQ0IEBACisjaWZu
ZGVmIFBsYXRmb3JtVVJMX2gKKyNkZWZpbmUgUGxhdGZvcm1VUkxfaAorCisjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIFBMQVRGT1JN
KE1BQykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KK3R5cGVk
ZWYgQ0ZVUkxSZWYgTmF0aXZlVVJMOwordHlwZWRlZiBSZXRhaW5QdHI8Q0ZVUkxSZWY+IE5hdGl2
ZVVSTFJlZjsKKyNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFVcmw+Cit0eXBlZGVmIFFV
cmwgTmF0aXZlVVJMOwordHlwZWRlZiBRVXJsIE5hdGl2ZVVSTFJlZjsKKyNlbmRpZgorCituYW1l
c3BhY2UgV1RSIHsKKworY2xhc3MgUGxhdGZvcm1VUkwgeworcHVibGljOgorICAgIGV4cGxpY2l0
IFdUUl9BTFdBWVNfSU5MSU5FIFBsYXRmb3JtVVJMKE5hdGl2ZVVSTCB1cmwpCisgICAgICAgIDog
bV9pbXBsKHVybCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJ
TkUgUGxhdGZvcm1VUkwoY29uc3QgY2hhciopOworICAgIGV4cGxpY2l0IFdUUl9BTFdBWVNfSU5M
SU5FIFBsYXRmb3JtVVJMKFdLVVJMUmVmKTsKKworICAgIFdUUl9BTFdBWVNfSU5MSU5FIFdLVVJM
UmVmIHRvV0soKTsKKyAgICBXVFJfQUxXQVlTX0lOTElORSBQbGF0Zm9ybVN0cmluZyB0b1N0cmlu
ZygpOworCitwcml2YXRlOgorICAgIE5hdGl2ZVVSTFJlZiBtX2ltcGw7Cit9OworCit9CisKKyNp
ZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlICJjZi9QbGF0Zm9ybVVS
TElubGluZXNDRi5oIgorI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSAicXQvUGxhdGZvcm1V
UkxJbmxpbmVzUXQuaCIKKyNlbmRpZgorCisjZW5kaWYgLy8gUGxhdGZvcm1VUkxfaApkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaCBiL1dl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKaW5kZXggODE5NTYw
Ni4uMzRhOTJkNyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJp
bmdGdW5jdGlvbnMuaAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1
bmN0aW9ucy5oCkBAIC0yNyw1NCArMjcsMzAgQEAKICNkZWZpbmUgU3RyaW5nRnVuY3Rpb25zX2gK
IAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuaD4KKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8c3N0
cmVhbT4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0
Mi9XS1N0cmluZy5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmdDRi5oPgotI2luY2x1ZGUg
PFdlYktpdDIvV0tVUkwuaD4KLSNpbmNsdWRlIDxXZWJLaXQyL1dLVVJMQ0YuaD4KLSNpbmNsdWRl
IDxzc3RyZWFtPgotI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBXVFIgewogCiAv
LyBDb252ZXJzaW9uIGZ1bmN0aW9ucwogCi1pbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB0
b0NGKEpTU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICByZXR1cm4gUmV0YWluUHRyPENGU3RyaW5n
UmVmPihBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdHJpbmcpKTsKLX0KLQotaW5s
aW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdG9DRihXS1N0cmluZ1JlZiBzdHJpbmcpCi17Ci0g
ICAgcmV0dXJuIFJldGFpblB0cjxDRlN0cmluZ1JlZj4oQWRvcHRDRiwgV0tTdHJpbmdDb3B5Q0ZT
dHJpbmcoMCwgc3RyaW5nKSk7Ci19Ci0KLWlubGluZSBSZXRhaW5QdHI8Q0ZVUkxSZWY+IHRvQ0Yo
V0tVUkxSZWYgdXJsKQoraW5saW5lIFdLU3RyaW5nUmVmIHRvV0soY29uc3QgY2hhciogc3RyaW5n
KQogewotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxSZWY+KEFkb3B0Q0YsIFdLVVJMQ29weUNG
VVJMKDAsIHVybCkpOworICAgIHJldHVybiBQbGF0Zm9ybVN0cmluZyhzdHJpbmcpLnRvV0soKTsK
IH0KIAotaW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4gdG9DRihjb25zdCBXS1JldGFpblB0cjxX
S1VSTFJlZj4mIHVybCkKK2lubGluZSBXS1N0cmluZ1JlZiB0b1dLKEpTU3RyaW5nUmVmIHN0cmlu
ZykKIHsKLSAgICByZXR1cm4gdG9DRih1cmwuZ2V0KCkpOworICAgIHJldHVybiBQbGF0Zm9ybVN0
cmluZyhzdHJpbmcpLnRvV0soKTsKIH0KIAotaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PiB0b1dLKEpTU3RyaW5nUmVmIHN0cmluZykKK2lubGluZSBKU1N0cmluZ1JlZiB0b0pTKFdLU3Ry
aW5nUmVmIHN0cmluZykKIHsKLSAgICByZXR1cm4gV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KEFk
b3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkpOwot
fQotCi1pbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHN0cmluZykKLXsKLSAgICByZXR1cm4gV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nLmdldCgpKS5n
ZXQoKSkpOwotfQotCi1pbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJp
bmdSZWYgc3RyaW5nKQotewotICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRv
cHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkpOworICAg
IHJldHVybiBQbGF0Zm9ybVN0cmluZyhzdHJpbmcpLnRvSlMoKTsKIH0KIAogaW5saW5lIEpTUmV0
YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKGNvbnN0IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiYg
c3RyaW5nKQpAQCAtODQsMjcgKzYwLDExIEBAIGlubGluZSBKU1JldGFpblB0cjxKU1N0cmluZ1Jl
Zj4gdG9KUyhjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZykKIAogLy8gU3Ry
ZWFtaW5nIGZ1bmN0aW9ucwogCi1pbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6
b3N0cmVhbSYgb3V0LCBDRlN0cmluZ1JlZiBzdHJpbmdSZWYpCi17Ci0gICAgaWYgKCFzdHJpbmdS
ZWYpCi0gICAgICAgIHJldHVybiBvdXQ7Ci0gICAgQ0ZJbmRleCBidWZmZXJMZW5ndGggPSBDRlN0
cmluZ0dldE1heGltdW1TaXplRm9yRW5jb2RpbmcoQ0ZTdHJpbmdHZXRMZW5ndGgoc3RyaW5nUmVm
KSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSArIDE7Ci0gICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihi
dWZmZXJMZW5ndGgpOwotICAgIGlmICghQ0ZTdHJpbmdHZXRDU3RyaW5nKHN0cmluZ1JlZiwgYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyTGVuZ3RoLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKQotICAgICAg
ICByZXR1cm4gb3V0OwotICAgIHJldHVybiBvdXQgPDwgYnVmZmVyLmRhdGEoKTsKLX0KLQotaW5s
aW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiYgc3RyaW5nUmVmKQotewotICAgIHJldHVybiBvdXQgPDwgc3Ry
aW5nUmVmLmdldCgpOwotfQotCiBpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6
b3N0cmVhbSYgb3V0LCBXS1N0cmluZ1JlZiBzdHJpbmdSZWYpCiB7CiAgICAgaWYgKCFzdHJpbmdS
ZWYpCiAgICAgICAgIHJldHVybiBvdXQ7Ci0gICAgcmV0dXJuIG91dCA8PCB0b0NGKHN0cmluZ1Jl
Zik7CisgICAgcmV0dXJuIG91dCA8PCBQbGF0Zm9ybVN0cmluZyhzdHJpbmdSZWYpOwogfQogCiBp
bmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZ1JlZikKQEAgLTExMiwyNCArNzIsNiBAQCBp
bmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZgogICAgIHJldHVybiBvdXQgPDwgc3RyaW5nUmVmLmdldCgp
OwogfQogCi0vLyBVUkwgY3JlYXRpb24KLQotaW5saW5lIFdLVVJMUmVmIGNyZWF0ZVdLVVJMKGNv
bnN0IGNoYXIqIHBhdGhPclVSTCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhP
clVSTENGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgcGF0aE9y
VVJMLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNm
VVJMOwotICAgIGlmIChDRlN0cmluZ0hhc1ByZWZpeChwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwg
Q0ZTVFIoImh0dHA6Ly8iKSkgfHwgQ0ZTdHJpbmdIYXNQcmVmaXgocGF0aE9yVVJMQ0ZTdHJpbmcu
Z2V0KCksIENGU1RSKCJodHRwczovLyIpKSkKLSAgICAgICAgY2ZVUkwuYWRvcHRDRihDRlVSTENy
ZWF0ZVdpdGhTdHJpbmcoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIDApKTsKLSAgICBlbHNl
Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBjZlVSTC5hZG9wdENGKENGVVJMQ3JlYXRlV2l0
aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBrQ0ZVUkxXaW5kb3dz
UGF0aFN0eWxlLCBmYWxzZSkpOwotI2Vsc2UKLSAgICAgICAgY2ZVUkwuYWRvcHRDRihDRlVSTENy
ZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwga0NGVVJM
UE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gV0tVUkxDcmVhdGVX
aXRoQ0ZVUkwoY2ZVUkwuZ2V0KCkpOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdUUgogCiAjZW5k
aWYgLy8gU3RyaW5nRnVuY3Rpb25zX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggNmY5N2I5Zi4uZDkzNDFkYiAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTI1LDYgKzI1
LDggQEAKIAogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1X
ZWJWaWV3LmgiCiAjaW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdElu
dm9jYXRpb24uaCIKQEAgLTIwNSw4ICsyMDcsOCBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpyZXNl
dFN0YXRlVG9Db25zaXN0ZW50VmFsdWVzKCkKICAgICAvLyBSZXNldCBtYWluIHBhZ2UgYmFjayB0
byBhYm91dDpibGFuawogICAgIG1fZG9uZVJlc2V0dGluZyA9IGZhbHNlOwogCi0gICAgV0tSZXRh
aW5QdHI8V0tVUkxSZWY+IHVybChBZG9wdFdLLCBjcmVhdGVXS1VSTCgiYWJvdXQ6YmxhbmsiKSk7
Ci0gICAgV0tQYWdlTG9hZFVSTChtX21haW5XZWJWaWV3LT5wYWdlKCksIHVybC5nZXQoKSk7Cisg
ICAgUGxhdGZvcm1VUkwgdXJsKCJhYm91dDpibGFuayIpOworICAgIFdLUGFnZUxvYWRVUkwobV9t
YWluV2ViVmlldy0+cGFnZSgpLCB1cmwudG9XSygpKTsKICAgICBUZXN0Q29udHJvbGxlcjo6cnVu
VW50aWwobV9kb25lUmVzZXR0aW5nKTsKIH0KIApAQCAtMjcyLDEwICsyNzQsNyBAQCB2b2lkIFRl
c3RDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJh
bWVSZWYgZnJhbWUpCiAgICAgaWYgKCFXS0ZyYW1lSXNNYWluRnJhbWUoZnJhbWUpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBXS1JldGFpblB0cjxXS1VSTFJlZj4gd2tVUkwoQWRvcHRXSywgV0tG
cmFtZUNvcHlVUkwoZnJhbWUpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMPSB0b0NG
KHdrVVJMKTsKLSAgICBDRlN0cmluZ1JlZiBjZlVSTFN0cmluZyA9IENGVVJMR2V0U3RyaW5nKGNm
VVJMLmdldCgpKTsKLSAgICBpZiAoIUNGRXF1YWwoY2ZVUkxTdHJpbmcsIENGU1RSKCJhYm91dDpi
bGFuayIpKSkKKyAgICBpZiAoUGxhdGZvcm1VUkwoV0tGcmFtZUNvcHlVUkwoZnJhbWUpKS50b1N0
cmluZygpICE9ICJhYm91dDpibGFuayIpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZG9uZVJl
c2V0dGluZyA9IHRydWU7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RJbnZvY2F0aW9uLmNwcCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwCmluZGV4IDQ3ZGY2NmIuLmI4OGJhNjMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCisrKyBiL1dlYktpdFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAK
ICNpbmNsdWRlICJUZXN0SW52b2NhdGlvbi5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1VUkwuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVdlYlZpZXcuaCIKICNpbmNsdWRlICJTdHJpbmdGdW5jdGlvbnMu
aCIKICNpbmNsdWRlICJUZXN0Q29udHJvbGxlci5oIgpAQCAtMzgsNyArMzksNyBAQCB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogbmFtZXNwYWNlIFdUUiB7CiAKIFRlc3RJbnZvY2F0aW9uOjpUZXN0SW52
b2NhdGlvbihjb25zdCBjaGFyKiBwYXRoT3JVUkwpCi0gICAgOiBtX3VybChBZG9wdFdLLCBjcmVh
dGVXS1VSTChwYXRoT3JVUkwpKQorICAgIDogbV91cmwoQWRvcHRXSywgUGxhdGZvcm1VUkwocGF0
aE9yVVJMKS50b1dLKCkpCiAgICAgLCBtX3BhdGhPclVSTChmYXN0U3RyRHVwKHBhdGhPclVSTCkp
CiAgICAgLCBtX2dvdEluaXRpYWxSZXNwb25zZShmYWxzZSkKICAgICAsIG1fZ290RmluYWxNZXNz
YWdlKGZhbHNlKQpAQCAtNzAsOSArNzEsNyBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjppbnZva2Uo
KQogewogICAgIHNpemVXZWJWaWV3Rm9yQ3VycmVudFRlc3QobV9wYXRoT3JVUkwpOwogCi0gICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aENGU3RyaW5nKENGU1RSKCJCZWdpblRlc3QiKSkpOwotICAgIFdLUmV0YWluUHRyPFdL
U3RyaW5nUmVmPiBtZXNzYWdlQm9keShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmlu
ZyhDRlNUUigiIikpKTsKLSAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUo
VGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1l
c3NhZ2VCb2R5LmdldCgpKTsKKyAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5k
bGUoVGVzdENvbnRyb2xsZXI6OnNoYXJlZCgpLmNvbnRleHQoKSwgUGxhdGZvcm1TdHJpbmcoIkJl
Z2luVGVzdCIpLnRvV0soKSwgUGxhdGZvcm1TdHJpbmcoIiIpLnRvV0soKSk7CiAKICAgICBUZXN0
Q29udHJvbGxlcjo6cnVuVW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UpOwogICAgIGlmIChtX2Vy
cm9yKSB7CkBAIC0xMDQsOCArMTAzLDcgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZHVtcChjb25z
dCBjaGFyKiBzdHJpbmdUb0R1bXApCiAKIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVS
ZWYgbWVzc2FnZUJvZHkpCiB7Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZk1lc3NhZ2VO
YW1lKEFkb3B0Q0YsIFdLU3RyaW5nQ29weUNGU3RyaW5nKDAsIG1lc3NhZ2VOYW1lKSk7Ci0gICAg
aWYgKENGRXF1YWwoY2ZNZXNzYWdlTmFtZS5nZXQoKSwgQ0ZTVFIoIkVycm9yIikpKSB7CisgICAg
aWYgKFBsYXRmb3JtU3RyaW5nKG1lc3NhZ2VOYW1lKSA9PSAiRXJyb3IiKSB7CiAgICAgICAgIC8v
IFNldCBhbGwgc3RhdGVzIHRvIHRydWUgdG8gc3RvcCBzcGlubmluZyB0aGUgcnVubG9vcC4KICAg
ICAgICAgbV9nb3RJbml0aWFsUmVzcG9uc2UgPSB0cnVlOwogICAgICAgICBtX2dvdEZpbmFsTWVz
c2FnZSA9IHRydWU7CkBAIC0xMTMsMTEgKzExMSwxMSBAQCB2b2lkIFRlc3RJbnZvY2F0aW9uOjpk
aWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFt
ZQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKENGRXF1YWwoY2ZNZXNzYWdlTmFt
ZS5nZXQoKSwgQ0ZTVFIoIkFjayIpKSkgeworICAgIFBsYXRmb3JtU3RyaW5nIHBsYXRmb3JtTWVz
c2FnZU5hbWUobWVzc2FnZU5hbWUpOworICAgIGlmIChwbGF0Zm9ybU1lc3NhZ2VOYW1lID09ICJB
Y2siKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJp
bmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZNZXNzYWdl
Qm9keShBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4obWVzc2FnZUJvZHkpKSk7CiAKLSAgICAgICAgaWYgKENGRXF1YWwoY2ZNZXNzYWdlQm9k
eS5nZXQoKSwgQ0ZTVFIoIkJlZ2luVGVzdCIpKSkgeworICAgICAgICBpZiAoUGxhdGZvcm1TdHJp
bmcoc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KSkgPT0gIkJlZ2luVGVzdCIp
IHsKICAgICAgICAgICAgIG1fZ290SW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtMTI1LDcgKzEyMyw3IEBAIHZvaWQgVGVzdEludm9jYXRp
b246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIGlmIChD
RkVxdWFsKGNmTWVzc2FnZU5hbWUuZ2V0KCksIENGU1RSKCJEb25lIikpKSB7CisgICAgaWYgKHBs
YXRmb3JtTWVzc2FnZU5hbWUgPT0gIkRvbmUiKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJ
RChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CiAgICAgICAgIG9zdHJpbmdz
dHJlYW0gb3V0OwogICAgICAgICBvdXQgPDwgc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3Nh
Z2VCb2R5KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0
VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggZjVlZTZkNS4uNmRhMDlkNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTg4LDYgKzg4LDggQEAKIAkJNjVFQjg1OUQxMUVDNjdDQzAwMzREMzAw
IC8qIEFjdGl2YXRlRm9udHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0
aXZhdGVGb250cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUVCODU5RjExRUM2
N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
Lm9iamNwcDsgcGF0aCA9IEFjdGl2YXRlRm9udHMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1RSAvKiBXZWJLaXRUZXN0UnVubmVyICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFj
aC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBXZWJLaXRUZXN0UnVu
bmVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQk5ODU1MjIxMzEyMzdE
ODg4MDAxQjc5MTUgLyogUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaDsgcGF0aCA9IGNmL1Bs
YXRmb3JtU3RyaW5nSW5saW5lc0NGLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk4
NTUyMjE0MTIzN0Q4ODgwMDFCNzkxNSAvKiBQbGF0Zm9ybVVSTElubGluZXNDRi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0Zm9ybVVSTElubGluZXNDRi5oOyBwYXRoID0g
Y2YvUGxhdGZvcm1VUkxJbmxpbmVzQ0YuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QkMxNEU0RDgxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBHQ0NvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQkMxNEU0RDkxMjBFMDJEMDAwODI2QzBDIC8qIEdDQ29udHJvbGxlci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHQ0NvbnRyb2xsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzE0RTRFMTEyMEUwMzIwMDA4MjZDMEMgLyogR0ND
b250cm9sbGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBHQ0NvbnRyb2xsZXIuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTc2LDYgKzE3OCw3IEBACiAJCTA4RkI3Nzk1
RkU4NDE1NURDMDJBQUMwNyAvKiBUZXN0UnVubmVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5ODU1MjIxMjEyMzdEODQ0MDAxQjc5MTUgLyogY2YgKi8s
CiAJCQkJQkM3OTMzRkUxMThGN0M3NDAwNUVBOEUyIC8qIG1hYyAqLywKIAkJCQlCQzI1MUExNzEx
RDE2Nzc0MDAyRUJDMDEgLyogV2ViS2l0VGVzdFJ1bm5lclByZWZpeC5oICovLAogCQkJCUJDNzkz
NEREMTE5MDY2RUMwMDVFQThFMiAvKiBQbGF0Zm9ybVdlYlZpZXcuaCAqLywKQEAgLTIxNCw2ICsy
MTcsMTUgQEAKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9
OworCQk5ODU1MjIxMjEyMzdEODQ0MDAxQjc5MTUgLyogY2YgKi8gPSB7CisJCQlpc2EgPSBQQlhH
cm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTk4NTUyMjEzMTIzN0Q4ODgwMDFCNzkxNSAvKiBQ
bGF0Zm9ybVN0cmluZ0lubGluZXNDRi5oICovLAorCQkJCTk4NTUyMjE0MTIzN0Q4ODgwMDFCNzkx
NSAvKiBQbGF0Zm9ybVVSTElubGluZXNDRi5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBjZjsKKwkJ
CXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUJDMTRFNEUwMTIwRTAyRjkwMDgyNkMw
QyAvKiBDb250cm9sbGVycyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3Jt
U3RyaW5nSW5saW5lc0NGLmggYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRm
b3JtU3RyaW5nSW5saW5lc0NGLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MTdjNGM1MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIv
Y2YvUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaApAQCAtMCwwICsxLDU3IEBACisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVm
Lmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWZDRi5oPgorI2luY2x1ZGUg
PFdlYktpdDIvV0tTdHJpbmdDRi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIFdUUiB7CisKK1BsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyhjb25zdCBjaGFyKiBz
dHJpbmcsIENTdHJpbmdFbmNvZGluZyBlbmNvZGluZykKKyAgICA6IG1faW1wbChBZG9wdENGLCBD
RlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIHN0cmluZywgZW5jb2RpbmcgPT0gQ1N0cmluZ0Vu
Y29kaW5nQVNDSUkgPyBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJIDoga0NGU3RyaW5nRW5jb2RpbmdV
VEY4KSkKK3sKK30KKworUGxhdGZvcm1TdHJpbmc6OlBsYXRmb3JtU3RyaW5nKEpTU3RyaW5nUmVm
IHN0cmluZykKKyAgICA6IG1faW1wbChBZG9wdENGLCBKU1N0cmluZ0NvcHlDRlN0cmluZygwLCBz
dHJpbmcpKQoreworfQorCitQbGF0Zm9ybVN0cmluZzo6UGxhdGZvcm1TdHJpbmcoV0tTdHJpbmdS
ZWYgc3RyaW5nKQorICAgIDogbV9pbXBsKEFkb3B0Q0YsIFdLU3RyaW5nQ29weUNGU3RyaW5nKDAs
IHN0cmluZykpCit7Cit9CisKK1dLU3RyaW5nUmVmIFBsYXRmb3JtU3RyaW5nOjp0b1dLKCkKK3sK
KyAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcobV9pbXBsLmdldCgpKTsKK30K
KworSlNTdHJpbmdSZWYgUGxhdGZvcm1TdHJpbmc6OnRvSlMoKQoreworICAgIHJldHVybiBKU1N0
cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhtX2ltcGwuZ2V0KCkpOworfQorCitib29sIG9wZXJhdG9y
PT0oY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKQorewor
ICAgIHJldHVybiBDRkVxdWFsKGEubV9pbXBsLmdldCgpLCBiLm1faW1wbC5nZXQoKSk7Cit9CisK
K2Jvb2wgb3BlcmF0b3I9PShjb25zdCBQbGF0Zm9ybVN0cmluZyYgYSwgY29uc3QgY2hhciogYikK
K3sKKyAgICByZXR1cm4gQ0ZFcXVhbChhLm1faW1wbC5nZXQoKSwgQ0ZTdHJpbmdDcmVhdGVXaXRo
Q1N0cmluZygwLCBiLCBrQ0ZTdHJpbmdFbmNvZGluZ0FTQ0lJKSk7Cit9CisKK3N0ZDo6b3N0cmVh
bSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEp
Cit7CisgICAgQ0ZTdHJpbmdSZWYgY2ZTdHJpbmcgPSBhLm1faW1wbC5nZXQoKTsKKyAgICBpZiAo
IWNmU3RyaW5nKQorICAgICAgICByZXR1cm4gb3V0OworICAgIENGSW5kZXggYnVmZmVyTGVuZ3Ro
ID0gQ0ZTdHJpbmdHZXRNYXhpbXVtU2l6ZUZvckVuY29kaW5nKENGU3RyaW5nR2V0TGVuZ3RoKGNm
U3RyaW5nKSwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSArIDE7CisgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlcihidWZmZXJMZW5ndGgpOworICAgIGlmICghQ0ZTdHJpbmdHZXRDU3RyaW5nKGNmU3RyaW5n
LCBidWZmZXIuZGF0YSgpLCBidWZmZXJMZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkpCisg
ICAgICAgIHJldHVybiBvdXQ7CisgICAgcmV0dXJuIG91dCA8PCBidWZmZXIuZGF0YSgpOworfQor
Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3Jt
VVJMSW5saW5lc0NGLmggYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3Jt
VVJMSW5saW5lc0NGLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE1Mzcy
OQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2YvUGxh
dGZvcm1VUkxJbmxpbmVzQ0YuaApAQCAtMCwwICsxLDM1IEBACisjaW5jbHVkZSAiUGxhdGZvcm1V
UkwuaCIKKworI2luY2x1ZGUgPFdlYktpdDIvV0tVUkxDRi5oPgorCituYW1lc3BhY2UgV1RSIHsK
KworUGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKK3sKKyAg
ICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhPclVSTENGU3RyaW5nKEFkb3B0Q0YsIENGU3Ry
aW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgp
KTsKKyAgICBpZiAoQ0ZTdHJpbmdIYXNQcmVmaXgocGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENG
U1RSKCJodHRwOi8vIikpIHx8IENGU3RyaW5nSGFzUHJlZml4KHBhdGhPclVSTENGU3RyaW5nLmdl
dCgpLCBDRlNUUigiaHR0cHM6Ly8iKSkpCisgICAgICAgIG1faW1wbC5hZG9wdENGKENGVVJMQ3Jl
YXRlV2l0aFN0cmluZygwLCBwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwgMCkpOworICAgIGVsc2UK
KyNpZiBQTEFURk9STShXSU4pCisgICAgICAgIG1faW1wbC5hZG9wdENGKENGVVJMQ3JlYXRlV2l0
aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBrQ0ZVUkxXaW5kb3dz
UGF0aFN0eWxlLCBmYWxzZSkpOworI2Vsc2UKKyAgICAgICAgbV9pbXBsLmFkb3B0Q0YoQ0ZVUkxD
cmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIGtDRlVS
TFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOworI2VuZGlmCit9CisKK1BsYXRmb3JtVVJMOjpQbGF0
Zm9ybVVSTChXS1VSTFJlZiB1cmxSZWYpCisgICAgOiBtX2ltcGwoQWRvcHRDRiwgV0tVUkxDb3B5
Q0ZVUkwoMCwgdXJsUmVmKSkKK3sKK30KKworV0tVUkxSZWYgUGxhdGZvcm1VUkw6OnRvV0soKQor
eworICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhDRlVSTChtX2ltcGwuZ2V0KCkpOworfQorCitQ
bGF0Zm9ybVN0cmluZyBQbGF0Zm9ybVVSTDo6dG9TdHJpbmcoKQoreworICAgIHJldHVybiBQbGF0
Zm9ybVN0cmluZyhDRlVSTEdldFN0cmluZyhtX2ltcGwuZ2V0KCkpKTsKK30KKworfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVN0cmluZ0lubGlu
ZXNRdC5oIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVN0cmluZ0lu
bGluZXNRdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDFjMTAKLS0t
IC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3Jt
U3RyaW5nSW5saW5lc1F0LmgKQEAgLTAsMCArMSw1NyBAQAorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisKKyNpbmNsdWRlICJKU1N0cmluZ1JlZi5oIgorI2luY2x1ZGUgIldLU3RyaW5nUXQu
aCIKKworbmFtZXNwYWNlIFdUUiB7CisKKy8vIE5ldmVyIGNhbGxlZCwganVzdCBmb3Igc2NvcGlu
ZyB0aGUgQ09NUElMRV9BU1NFUlQuCitzdGF0aWMgaW5saW5lIHZvaWQgc2FuaXR5Q2hlY2soKQor
eworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihRQ2hhcikgPT0gc2l6ZW9mKFVDaGFyKSwgcWNo
YXJfYW5kX3VjaGFyX211c3RfYmVfc2FtZV9zaXplKTsKK30KKworUGxhdGZvcm1TdHJpbmc6OlBs
YXRmb3JtU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgQ1N0cmluZ0VuY29kaW5nIGVuY29kaW5n
KQoreworICAgIGlmIChlbmNvZGluZyA9PSBDU3RyaW5nRW5jb2RpbmdBU0NJSSkKKyAgICAgICAg
bV9pbXBsID0gUVN0cmluZzo6ZnJvbUxhdGluMShzdHJpbmcpOworICAgIGVsc2UKKyAgICAgICAg
bV9pbXBsID0gUVN0cmluZyhRU3RyaW5nOjpmcm9tTGF0aW4xKHN0cmluZykudG9VdGY4KCkpOwor
fQorCitQbGF0Zm9ybVN0cmluZzo6UGxhdGZvcm1TdHJpbmcoSlNTdHJpbmdSZWYgc3RyaW5nKQor
ICAgIDogbV9pbXBsKHJlaW50ZXJwcmV0X2Nhc3Q8UUNoYXIqPihKU1N0cmluZ0dldENoYXJhY3Rl
cnNQdHIoc3RyaW5nKSksIEpTU3RyaW5nR2V0TGVuZ3RoKHN0cmluZykpCit7Cit9CisKK1BsYXRm
b3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX2lt
cGwoV0tTdHJpbmdDb3B5UVN0cmluZyhzdHJpbmcpKQoreworfQorCitXS1N0cmluZ1JlZiBQbGF0
Zm9ybVN0cmluZzo6dG9XSygpCit7CisgICAgcmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aFFTdHJp
bmcobV9pbXBsKTsKK30KKworSlNTdHJpbmdSZWYgUGxhdGZvcm1TdHJpbmc6OnRvSlMoKQorewor
ICAgIHJldHVybiBKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKG1faW1wbC5kYXRhKCksIG1f
aW1wbC5zaXplKCkpOworfQorCitib29sIFBsYXRmb3JtU3RyaW5nOjpvcGVyYXRvcj09KGNvbnN0
IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBQbGF0Zm9ybVN0cmluZyYgYikKK3sKKyAgICByZXR1
cm4gYS5tX2ltcGwgPT0gYi5tX2ltcGw7Cit9CisKK2Jvb2wgUGxhdGZvcm1TdHJpbmc6Om9wZXJh
dG9yPT0oY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgcmV0
dXJuIGEubV9pbXBsID09IGI7Cit9CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9z
dHJlYW0mIG91dCwgY29uc3QgUGxhdGZvcm1TdHJpbmcmIHN0cmluZykKK3sKKyAgICByZXR1cm4g
b3MgPDwgc3RyaW5nLm1faW1wbC50b1N0ZFN0cmluZygpOworfQorCit9CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtVVJMSW5saW5lc1F0LmggYi9X
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3F0L1BsYXRmb3JtVVJMSW5saW5lc1F0LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOThmM2E5MwotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1VUkxJbmxpbmVzUXQu
aApAQCAtMCwwICsxLDI4IEBACisjaW5jbHVkZSAiUGxhdGZvcm1VUkwuaCIKKworI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiV0tVUkxRdC5oIgorCituYW1lc3BhY2UgV1RS
IHsKKworUGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKKyAg
ICA6IG1faW1wbChwYXRoT3JVUkwpCit7Cit9CisKK1BsYXRmb3JtVVJMOjpQbGF0Zm9ybVVSTChX
S1VSTFJlZiB1cmxSZWYpCisgICAgOiBtX2ltcGwoV0tVUkxDb3B5UVVSTCh1cmxSZWYpKQorewor
fQorCitXS1VSTFJlZiB0b1dLKCkKK3sKKyAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoUVVSTCht
X2ltcGwpOworfQorCitQbGF0Zm9ybVN0cmluZyB0b1N0cmluZygpCit7CisgICAgcmV0dXJuIFBs
YXRmb3JtU3RyaW5nKG1faW1wbC50b1N0cmluZygpKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci93aW4vV2ViS2l0VGVzdFJ1bm5lci52Y3Byb2ogYi9X
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvagpp
bmRleCBkN2RkZDVjLi4xZjJkZGQyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0
UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvagorKysgYi9XZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvagpAQCAtMzE4LDYgKzMxOCwy
NiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCisJCTxGaWx0ZXINCisJCQlO
YW1lPSJjZiINCisJCQk+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjZlxQbGF0
Zm9ybVN0cmluZ0lubGluZXNDRi5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQor
CQkJCVJlbGF0aXZlUGF0aD0iLi5cY2ZcUGxhdGZvcm1VUkxJbmxpbmVzQ0YuaCINCisJCQkJPg0K
KwkJCTwvRmlsZT4NCisJCTwvRmlsdGVyPg0KKwkJPEZpbGUNCisJCQlSZWxhdGl2ZVBhdGg9Ii4u
XFBsYXRmb3JtU3RyaW5nLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KKwkJPEZpbGUNCisJCQlSZWxh
dGl2ZVBhdGg9Ii4uXFBsYXRmb3JtVVJMLmgiDQorCQkJPg0KKwkJPC9GaWxlPg0KIAkJPEZpbGUN
CiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXFBsYXRmb3JtV2ViVmlldy5oIg0KIAkJCT4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68229</attachid>
            <date>2010-09-21 06:33:08 -0700</date>
            <delta_ts>2010-09-29 09:28:19 -0700</delta_ts>
            <desc>proposed patch - updated</desc>
            <filename>land_wtr_porting.diff</filename>
            <type>text/plain</type>
            <size>23706</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCBjY2I4ZDAxLi5mYTAwMzg0IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTggQEAKKzIwMTAtMDkt
MjEgIEJhbGF6cyBLZWxlbWVuICA8a2JAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYktpdFRlc3RSdW5uZXIgc2hvdWxk
IGJlIHBvcnRhYmxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTM5MworCisgICAgICAgIFdyYXAgcGxhdGZvcm0gc3BlY2lmaWMgc3RyaW5nIGFuZCBV
UkwgcmVwcmVzZW50YXRpb24gaW5zaWRlIGNvbW1vbiBjbGFzc2VzCisgICAgICAgIChQbGF0Zm9y
bVN0cmluZyBhbmQgUGxhdGZvcm1VUkwpIHRoYXQgcHJvdmlkZXMgYmFzaWMgZnVuY3Rpb25hbGl0
eSAoY29tcGFyaXNvbiwKKyAgICAgICAgdHJhbnNvcm1hdGlvbiBpbnRvIFdLIGFuZCBKUyB0eXBl
cywgc3RyZWFtaW5nKS4KKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0luamVjdGVkQnVuZGxlUGFnZS5jcHA6CisgICAgICAgIChXVFI6OmR1bXBQYXRoKToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0xheW91dFRlc3RDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9u
QXRUaW1lT25FbGVtZW50V2l0aElkKToKKyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmV4ZWNDb21tYW5kKToKKyAgICAgICAgKFdUUjo6TGF5b3V0VGVzdENvbnRyb2xsZXI6Omlz
Q29tbWFuZEVuYWJsZWQpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1TdHJp
bmcuaDogQWRkZWQuIFdyYXBwaW5nIG9mIHBsYXRmb3JtIHNwZWNpZmljIHN0cmluZyByZXByZXNl
bnRhdGlvbi4KKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6OlBsYXRmb3JtU3RyaW5nKToK
KyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RS
OjpQbGF0Zm9ybVN0cmluZzo6b3BlcmF0b3IhPSk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5l
ci9QbGF0Zm9ybVVSTC5oOiBBZGRlZC4gV3JhcHBpbmcgb2YgcGxhdGZvcm0gc3BlY2lmaWMgc3Ry
aW5nIHJlcHJlc2VudGF0aW9uLgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVVSTDo6UGxhdGZvcm1V
UkwpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6IFVzZSB0
aGUgbmV3IGNsYXNzZXMgaW5zdGVhZCBvZiBDRiB0eXBlcy4KKyAgICAgICAgKFdUUjo6dG9XSyk6
CisgICAgICAgIChXVFI6OnRvSlMpOgorICAgICAgICAoV1RSOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6
VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMpOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZEZvckZyYW1lKToKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAgICAgICAgKFdUUjo6VGVzdElu
dm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1dl
YktpdFRlc3RSdW5uZXIueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBXZWJL
aXRUZXN0UnVubmVyL2NmL1BsYXRmb3JtU3RyaW5nSW5saW5lc0NGLmg6IEFkZGVkLiBDRiBpbXBs
ZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1TdHJpbmcuCisgICAgICAgIChXVFI6OlBsYXRmb3JtU3Ry
aW5nOjpQbGF0Zm9ybVN0cmluZyk6CisgICAgICAgIChXVFI6OlBsYXRmb3JtU3RyaW5nOjp0b1dL
KToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6OnRvSlMpOgorICAgICAgICAoV1RSOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKFdUUjo6b3BlcmF0b3I8PCk6CisgICAgICAgICogV2ViS2l0
VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElubGluZXNDRi5oOiBBZGRlZC4gQ0YgaW1wbGVtZW50
YXRpb24gZm9yIFBsYXRmb3JtVVJMLgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVVSTDo6UGxhdGZv
cm1VUkwpOgorICAgICAgICAoV1RSOjpQbGF0Zm9ybVVSTDo6dG9XSyk6CisgICAgICAgIChXVFI6
OlBsYXRmb3JtVVJMOjp0b1N0cmluZyk6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9xdC9Q
bGF0Zm9ybVN0cmluZ0lubGluZXNRdC5oOiBBZGRlZC4gUXQgaW1wbGVtZW50YXRpb24gZm9yIFBs
YXRmb3JtU3RyaW5nLgorICAgICAgICAoV1RSOjpzYW5pdHlDaGVjayk6CisgICAgICAgIChXVFI6
OlBsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyk6CisgICAgICAgIChXVFI6OlBsYXRmb3Jt
U3RyaW5nOjp0b1dLKToKKyAgICAgICAgKFdUUjo6UGxhdGZvcm1TdHJpbmc6OnRvSlMpOgorICAg
ICAgICAoV1RSOjpQbGF0Zm9ybVN0cmluZzo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXVFI6Om9w
ZXJhdG9yPDwpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1VUkxJbmxp
bmVzUXQuaDogQWRkZWQuIFF0IGltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybVVSTC4KKyAgICAg
ICAgKFdUUjo6UGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJMKToKKyAgICAgICAgKFdUUjo6dG9XSyk6
CisgICAgICAgIChXVFI6OnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL3dp
bi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvajoKKwogMjAxMC0wOS0yMSAgUGF2ZWwgUG9kaXZpbG92
ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9JbmplY3Rl
ZEJ1bmRsZVBhZ2UuY3BwIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZVBhZ2UuY3BwCmluZGV4IGRkOTJlY2EuLjdmYjJhNzcgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGVQYWdlLmNwcAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlUGFnZS5jcHAKQEAgLTY3LDcgKzY3LDcgQEAgc3RhdGlj
IGRvdWJsZSBudW1lcmljV2luZG93UHJvcGVydHlWYWx1ZShXS0J1bmRsZUZyYW1lUmVmIGZyYW1l
LCBjb25zdCBjaGFyKiBwcm8KIHN0YXRpYyBzdHJpbmcgZHVtcFBhdGgoSlNHbG9iYWxDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG5vZGVWYWx1ZSkKIHsKICAgICBKU1ZhbHVlUmVmIG5v
ZGVOYW1lVmFsdWUgPSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIG5vZGVWYWx1ZSwgIm5vZGVOYW1l
Iik7Ci0gICAgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGpzU3RyaW5nTm9kZU5hbWUoQWRvcHQs
IEpTVmFsdWVUb1N0cmluZ0NvcHkoY29udGV4dCwgbm9kZU5hbWVWYWx1ZSwgMCkpOworICAgIEpT
U3RyaW5nUmVmIGpzU3RyaW5nTm9kZU5hbWUgPSBKU1ZhbHVlVG9TdHJpbmdDb3B5KGNvbnRleHQs
IG5vZGVOYW1lVmFsdWUsIDApOwogICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBub2RlTmFt
ZSA9IHRvV0soanNTdHJpbmdOb2RlTmFtZSk7CiAKICAgICBKU1ZhbHVlUmVmIHBhcmVudE5vZGUg
PSBwcm9wZXJ0eVZhbHVlKGNvbnRleHQsIG5vZGVWYWx1ZSwgInBhcmVudE5vZGUiKTsKZGlmZiAt
LWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZjhjYmQ0Zi4uYzkwYjZkZCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTE0NSw3ICsxNDUs
NyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxl
bWVudFdpdGhJZChKU1N0cmluZ1JlZiBhbmltYQogICAgIC8vIEZJWE1FOiBJcyBpdCBPSyB0aGlz
IHdvcmtzIG9ubHkgZm9yIHRoZSBtYWluIGZyYW1lPwogICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlz
IG5lZWRlZCBvbmx5IGZvciB0aGUgbWFpbiBmcmFtZSwgdGhlbiB3aHkgaXMgdGhlIGZ1bmN0aW9u
IG9uIFdLQnVuZGxlRnJhbWUgaW5zdGVhZCBvZiBXS0J1bmRsZVBhZ2U/CiAgICAgV0tCdW5kbGVG
cmFtZVJlZiBtYWluRnJhbWUgPSBXS0J1bmRsZVBhZ2VHZXRNYWluRnJhbWUoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpKTsKLSAgICByZXR1cm4gV0tCdW5kbGVGcmFtZVBh
dXNlQW5pbWF0aW9uT25FbGVtZW50V2l0aElkKG1haW5GcmFtZSwgdG9XSyhhbmltYXRpb25OYW1l
KS5nZXQoKSwgdG9XSyhlbGVtZW50SWQpLmdldCgpLCB0aW1lKTsKKyAgICByZXR1cm4gV0tCdW5k
bGVGcmFtZVBhdXNlQW5pbWF0aW9uT25FbGVtZW50V2l0aElkKG1haW5GcmFtZSwgdG9XSyhhbmlt
YXRpb25OYW1lKSwgdG9XSyhlbGVtZW50SWQpLCB0aW1lKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6YWRkVXNlclNjcmlwdChKU1N0cmluZ1JlZiBzb3VyY2UsIGJvb2wgcnVuQXRT
dGFydCwgYm9vbCBhbGxGcmFtZXMpCkBAIC0yMDksMTIgKzIwOSwxMiBAQCBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6Om1hcmtlclRleHRGb3JMaXN0SXRlbShK
U1ZhbHVlUmVmCiAKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmV4ZWNDb21tYW5kKEpTU3Ry
aW5nUmVmIG5hbWUsIEpTU3RyaW5nUmVmIGFyZ3VtZW50KQogewotICAgIFdLQnVuZGxlUGFnZUV4
ZWN1dGVFZGl0aW5nQ29tbWFuZChJbmplY3RlZEJ1bmRsZTo6c2hhcmVkKCkucGFnZSgpLT5wYWdl
KCksIHRvV0sobmFtZSkuZ2V0KCksIHRvV0soYXJndW1lbnQpLmdldCgpKTsKKyAgICBXS0J1bmRs
ZVBhZ2VFeGVjdXRlRWRpdGluZ0NvbW1hbmQoSW5qZWN0ZWRCdW5kbGU6OnNoYXJlZCgpLnBhZ2Uo
KS0+cGFnZSgpLCB0b1dLKG5hbWUpLCB0b1dLKGFyZ3VtZW50KSk7CiB9CiAKIGJvb2wgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmlzQ29tbWFuZEVuYWJsZWQoSlNTdHJpbmdSZWYgbmFtZSkKIHsKLSAg
ICByZXR1cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5k
bGU6OnNoYXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpLmdldCgpKTsKKyAgICByZXR1
cm4gV0tCdW5kbGVQYWdlSXNFZGl0aW5nQ29tbWFuZEVuYWJsZWQoSW5qZWN0ZWRCdW5kbGU6OnNo
YXJlZCgpLnBhZ2UoKS0+cGFnZSgpLCB0b1dLKG5hbWUpKTsKIH0KIAogdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0Q2FuT3BlbldpbmRvd3MoYm9vbCkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1TdHJpbmcuaCBiL1dlYktpdFRvb2xzL1dlYktp
dFRlc3RSdW5uZXIvUGxhdGZvcm1TdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iYjY3NzQxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVz
dFJ1bm5lci9QbGF0Zm9ybVN0cmluZy5oCkBAIC0wLDAgKzEsNjYgQEAKKyNpZm5kZWYgUGxhdGZv
cm1TdHJpbmdfaAorI2RlZmluZSBQbGF0Zm9ybVN0cmluZ19oCisKKyNpbmNsdWRlIDxKYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8V2Vi
S2l0Mi9XS0Jhc2UuaD4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworLy8gVGhpcyBmaWxl
IGlzIGFsc28gdXNlZCBpbiBJbmplY3RlZEJ1bmRsZSB0aHJvdWdoIFN0cmluZ0Z1bmN0aW9ucy5o
CisvLyBzbyB3ZSBtdXN0IGlubGluZWluZyBldmVyeXRoaW5nIGV2ZW4gaW4gZGVidWcuCisjaWYg
Q09NUElMRVIoR0NDKSAmJiAhQ09NUElMRVIoTUlOR1cpCisjZGVmaW5lIFdUUl9BTFdBWVNfSU5M
SU5FIGlubGluZSBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisjZWxpZiBDT01Q
SUxFUihNU1ZDKSB8fCBDT01QSUxFUihSVkNUKQorI2RlZmluZSBXVFJfQUxXQVlTX0lOTElORSBf
X2ZvcmNlaW5saW5lCisjZWxzZQorI2RlZmluZSBXVFJfQUxXQVlTX0lOTElORSBpbmxpbmUKKyNl
bmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgordHlwZWRlZiBDRlN0cmluZ1JlZiBOYXRpdmVTdHJpbmc7Cit0eXBlZGVm
IFJldGFpblB0cjxDRlN0cmluZ1JlZj4gTmF0aXZlU3RyaW5nUmVmOworI2VsaWYgUExBVEZPUk0o
UVQpCisjaW5jbHVkZSA8UVN0cmluZz4KK3R5cGVkZWYgUVN0cmluZyBOYXRpdmVTdHJpbmc7Cit0
eXBlZGVmIFFTdHJpbmcgTmF0aXZlU3RyaW5nUmVmOworI2VuZGlmCisKK25hbWVzcGFjZSBXVFIg
eworCitjbGFzcyBQbGF0Zm9ybVN0cmluZyB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV1RSX0FM
V0FZU19JTkxJTkUgUGxhdGZvcm1TdHJpbmcoTmF0aXZlU3RyaW5nIHN0cmluZykKKyAgICAgICAg
OiBtX2ltcGwoc3RyaW5nKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBXVFJfQUxXQVlT
X0lOTElORSBQbGF0Zm9ybVN0cmluZyhKU1N0cmluZ1JlZik7CisgICAgZXhwbGljaXQgV1RSX0FM
V0FZU19JTkxJTkUgUGxhdGZvcm1TdHJpbmcoV0tTdHJpbmdSZWYpOworCisgICAgV1RSX0FMV0FZ
U19JTkxJTkUgV0tTdHJpbmdSZWYgdG9XSygpOworICAgIFdUUl9BTFdBWVNfSU5MSU5FIEpTU3Ry
aW5nUmVmIHRvSlMoKTsKKworICAgIGZyaWVuZCBXVFJfQUxXQVlTX0lOTElORSBib29sIG9wZXJh
dG9yPT0oY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKTsK
KyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBsYXRm
b3JtU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKTsKKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJ
TkUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGNoYXIqIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBi
KSB7IHJldHVybiBiID09IGE7IH0KKworICAgIGZyaWVuZCBXVFJfQUxXQVlTX0lOTElORSBib29s
IG9wZXJhdG9yIT0oY29uc3QgUGxhdGZvcm1TdHJpbmcmIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5n
JiBiKSB7IHJldHVybiAhKGEgPT0gYik7IH0KKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBiKSB7
IHJldHVybiAhKGEgPT0gYik7IH0KKyAgICBmcmllbmQgV1RSX0FMV0FZU19JTkxJTkUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGNoYXIqIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKSB7IHJldHVy
biAhKGIgPT0gYSk7IH0KKworICAgIGZyaWVuZCBXVFJfQUxXQVlTX0lOTElORSBzdGQ6Om9zdHJl
YW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwgY29uc3QgUGxhdGZvcm1TdHJpbmcmKTsKKwor
cHJpdmF0ZToKKyAgICBOYXRpdmVTdHJpbmdSZWYgbV9pbXBsOworfTsKKworfQorCisjaWYgUExB
VEZPUk0oTUFDKSB8fCBQTEFURk9STShXSU4pCisjaW5jbHVkZSAiY2YvUGxhdGZvcm1TdHJpbmdJ
bmxpbmVzQ0YuaCIKKyNlbGlmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgInF0L1BsYXRmb3JtU3Ry
aW5nSW5saW5lc1F0LmgiCisjZW5kaWYKKworI2VuZGlmIC8vIFBsYXRmb3JtU3RyaW5nX2gKZGlm
ZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1VUkwuaCBiL1dl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvUGxhdGZvcm1VUkwuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43N2Q2M2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9QbGF0Zm9ybVVSTC5oCkBAIC0wLDAgKzEsNDQgQEAKKyNpZm5k
ZWYgUGxhdGZvcm1VUkxfaAorI2RlZmluZSBQbGF0Zm9ybVVSTF9oCisKKyNpbmNsdWRlICJQbGF0
Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgUExBVEZPUk0o
TUFDKSB8fCBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgordHlwZWRl
ZiBDRlVSTFJlZiBOYXRpdmVVUkw7Cit0eXBlZGVmIFJldGFpblB0cjxDRlVSTFJlZj4gTmF0aXZl
VVJMUmVmOworI2VsaWYgUExBVEZPUk0oUVQpCisjaW5jbHVkZSA8UVVybD4KK3R5cGVkZWYgUVVy
bCBOYXRpdmVVUkw7Cit0eXBlZGVmIFFVcmwgTmF0aXZlVVJMUmVmOworI2VuZGlmCisKK25hbWVz
cGFjZSBXVFIgeworCitjbGFzcyBQbGF0Zm9ybVVSTCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
V1RSX0FMV0FZU19JTkxJTkUgUGxhdGZvcm1VUkwoTmF0aXZlVVJMIHVybCkKKyAgICAgICAgOiBt
X2ltcGwodXJsKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBXVFJfQUxXQVlTX0lOTElO
RSBQbGF0Zm9ybVVSTChjb25zdCBjaGFyKik7CisgICAgZXhwbGljaXQgV1RSX0FMV0FZU19JTkxJ
TkUgUGxhdGZvcm1VUkwoV0tVUkxSZWYpOworCisgICAgV1RSX0FMV0FZU19JTkxJTkUgV0tVUkxS
ZWYgdG9XSygpOworICAgIFdUUl9BTFdBWVNfSU5MSU5FIFBsYXRmb3JtU3RyaW5nIHRvU3RyaW5n
KCk7CisKK3ByaXZhdGU6CisgICAgTmF0aXZlVVJMUmVmIG1faW1wbDsKK307CisKK30KKworI2lm
IFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgImNmL1BsYXRmb3JtVVJM
SW5saW5lc0NGLmgiCisjZWxpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlICJxdC9QbGF0Zm9ybVVS
TElubGluZXNRdC5oIgorI2VuZGlmCisKKyNlbmRpZiAvLyBQbGF0Zm9ybVVSTF9oCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIGIvV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAppbmRleCA4MTk1NjA2
Li5iYzI4ZmUzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oCisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVu
Y3Rpb25zLmgKQEAgLTI3LDU0ICsyNywyNSBAQAogI2RlZmluZSBTdHJpbmdGdW5jdGlvbnNfaAog
CiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pT
U3RyaW5nUmVmLmg+CisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDxzc3Ry
ZWFtPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQy
L1dLU3RyaW5nLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZ0NGLmg+Ci0jaW5jbHVkZSA8
V2ViS2l0Mi9XS1VSTC5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tVUkxDRi5oPgotI2luY2x1ZGUg
PHNzdHJlYW0+Ci0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKIC8v
IENvbnZlcnNpb24gZnVuY3Rpb25zCiAKLWlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRv
Q0YoSlNTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKDAsIHN0cmluZykpOwotfQotCi1pbmxp
bmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB0b0NGKFdLU3RyaW5nUmVmIHN0cmluZykKLXsKLSAg
ICByZXR1cm4gUmV0YWluUHRyPENGU3RyaW5nUmVmPihBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0
cmluZygwLCBzdHJpbmcpKTsKLX0KLQotaW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4gdG9DRihX
S1VSTFJlZiB1cmwpCi17Ci0gICAgcmV0dXJuIFJldGFpblB0cjxDRlVSTFJlZj4oQWRvcHRDRiwg
V0tVUkxDb3B5Q0ZVUkwoMCwgdXJsKSk7Ci19Ci0KLWlubGluZSBSZXRhaW5QdHI8Q0ZVUkxSZWY+
IHRvQ0YoY29uc3QgV0tSZXRhaW5QdHI8V0tVUkxSZWY+JiB1cmwpCi17Ci0gICAgcmV0dXJuIHRv
Q0YodXJsLmdldCgpKTsKLX0KLQotaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dL
KEpTU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICByZXR1cm4gV0tSZXRhaW5QdHI8V0tTdHJpbmdS
ZWY+KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQo
KSkpOwotfQotCi1pbmxpbmUgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHRvV0soSlNSZXRhaW5Q
dHI8SlNTdHJpbmdSZWY+IHN0cmluZykKK2lubGluZSBXS1N0cmluZ1JlZiB0b1dLKEpTU3RyaW5n
UmVmIHN0cmluZykKIHsKLSAgICByZXR1cm4gV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KEFkb3B0
V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nLmdldCgpKS5nZXQoKSkp
OworICAgIHJldHVybiBQbGF0Zm9ybVN0cmluZyhzdHJpbmcpLnRvV0soKTsKIH0KIAotaW5saW5l
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKFdLU3RyaW5nUmVmIHN0cmluZykKK2lubGlu
ZSBKU1N0cmluZ1JlZiB0b0pTKFdLU3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICByZXR1cm4gSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+KEFkb3B0LCBKU1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh0
b0NGKHN0cmluZykuZ2V0KCkpKTsKKyAgICByZXR1cm4gUGxhdGZvcm1TdHJpbmcoc3RyaW5nKS50
b0pTKCk7CiB9CiAKIGlubGluZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdG9KUyhjb25zdCBX
S1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZykKQEAgLTg0LDI3ICs1NSwxMSBAQCBpbmxp
bmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+JiBzdHJpbmcpCiAKIC8vIFN0cmVhbWluZyBmdW5jdGlvbnMKIAotaW5saW5lIHN0ZDo6
b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgQ0ZTdHJpbmdSZWYgc3RyaW5n
UmVmKQotewotICAgIGlmICghc3RyaW5nUmVmKQotICAgICAgICByZXR1cm4gb3V0OwotICAgIENG
SW5kZXggYnVmZmVyTGVuZ3RoID0gQ0ZTdHJpbmdHZXRNYXhpbXVtU2l6ZUZvckVuY29kaW5nKENG
U3RyaW5nR2V0TGVuZ3RoKHN0cmluZ1JlZiksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkgKyAxOwot
ICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoIUNGU3RyaW5n
R2V0Q1N0cmluZyhzdHJpbmdSZWYsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlckxlbmd0aCwga0NGU3Ry
aW5nRW5jb2RpbmdVVEY4KSkKLSAgICAgICAgcmV0dXJuIG91dDsKLSAgICByZXR1cm4gb3V0IDw8
IGJ1ZmZlci5kYXRhKCk7Ci19Ci0KLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3Rk
Ojpvc3RyZWFtJiBvdXQsIGNvbnN0IFJldGFpblB0cjxDRlN0cmluZ1JlZj4mIHN0cmluZ1JlZikK
LXsKLSAgICByZXR1cm4gb3V0IDw8IHN0cmluZ1JlZi5nZXQoKTsKLX0KLQogaW5saW5lIHN0ZDo6
b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgV0tTdHJpbmdSZWYgc3RyaW5n
UmVmKQogewogICAgIGlmICghc3RyaW5nUmVmKQogICAgICAgICByZXR1cm4gb3V0OwotICAgIHJl
dHVybiBvdXQgPDwgdG9DRihzdHJpbmdSZWYpOworICAgIHJldHVybiBvdXQgPDwgUGxhdGZvcm1T
dHJpbmcoc3RyaW5nUmVmKTsKIH0KIAogaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmdS
ZWYpCkBAIC0xMTIsMjQgKzY3LDYgQEAgaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChz
dGQ6Om9zdHJlYW0mIG91dCwgY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWYKICAgICByZXR1
cm4gb3V0IDw8IHN0cmluZ1JlZi5nZXQoKTsKIH0KIAotLy8gVVJMIGNyZWF0aW9uCi0KLWlubGlu
ZSBXS1VSTFJlZiBjcmVhdGVXS1VSTChjb25zdCBjaGFyKiBwYXRoT3JVUkwpCi17Ci0gICAgUmV0
YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoT3JVUkxDRlN0cmluZyhBZG9wdENGLCBDRlN0cmluZ0Ny
ZWF0ZVdpdGhDU3RyaW5nKDAsIHBhdGhPclVSTCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7Ci0g
ICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTDsKLSAgICBpZiAoQ0ZTdHJpbmdIYXNQcmVmaXgo
cGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RSKCJodHRwOi8vIikpIHx8IENGU3RyaW5nSGFz
UHJlZml4KHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBDRlNUUigiaHR0cHM6Ly8iKSkpCi0gICAg
ICAgIGNmVVJMLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoU3RyaW5nKDAsIHBhdGhPclVSTENGU3Ry
aW5nLmdldCgpLCAwKSk7Ci0gICAgZWxzZQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgY2ZV
UkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxDRlN0
cmluZy5nZXQoKSwga0NGVVJMV2luZG93c1BhdGhTdHlsZSwgZmFsc2UpKTsKLSNlbHNlCi0gICAg
ICAgIGNmVVJMLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoRmlsZVN5c3RlbVBhdGgoMCwgcGF0aE9y
VVJMQ0ZTdHJpbmcuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCBmYWxzZSkpOwotI2VuZGlm
Ci0gICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aENGVVJMKGNmVVJMLmdldCgpKTsKLX0KLQotCiB9
IC8vIG5hbWVzcGFjZSBXVFIKIAogI2VuZGlmIC8vIFN0cmluZ0Z1bmN0aW9uc19oCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1dl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IGE3MWIw
N2QuLmRlOTdiNGQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCkBAIC0yNSw2ICsyNSw4IEBACiAKICNpbmNsdWRlICJUZXN0Q29udHJvbGxl
ci5oIgogCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVVS
TC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtV2ViVmlldy5oIgogI2luY2x1ZGUgIlN0cmluZ0Z1bmN0
aW9ucy5oIgogI2luY2x1ZGUgIlRlc3RJbnZvY2F0aW9uLmgiCkBAIC0yMDgsOCArMjEwLDggQEAg
dm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAg
Ly8gUmVzZXQgbWFpbiBwYWdlIGJhY2sgdG8gYWJvdXQ6YmxhbmsKICAgICBtX2RvbmVSZXNldHRp
bmcgPSBmYWxzZTsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwoQWRvcHRXSywgY3Jl
YXRlV0tVUkwoImFib3V0OmJsYW5rIikpOwotICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmll
dy0+cGFnZSgpLCB1cmwuZ2V0KCkpOworICAgIFBsYXRmb3JtVVJMIHVybCgiYWJvdXQ6Ymxhbmsi
KTsKKyAgICBXS1BhZ2VMb2FkVVJMKG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgdXJsLnRvV0soKSk7
CiAgICAgVGVzdENvbnRyb2xsZXI6OnJ1blVudGlsKG1fZG9uZVJlc2V0dGluZyk7CiB9CiAKQEAg
LTI3NSwxMCArMjc3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZEZvckZy
YW1lKFdLUGFnZVJlZiBwYWdlLCBXS0ZyYW1lUmVmIGZyYW1lKQogICAgIGlmICghV0tGcmFtZUlz
TWFpbkZyYW1lKGZyYW1lKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV0tSZXRhaW5QdHI8V0tV
UkxSZWY+IHdrVVJMKEFkb3B0V0ssIFdLRnJhbWVDb3B5VVJMKGZyYW1lKSk7Ci0gICAgUmV0YWlu
UHRyPENGVVJMUmVmPiBjZlVSTD0gdG9DRih3a1VSTCk7Ci0gICAgQ0ZTdHJpbmdSZWYgY2ZVUkxT
dHJpbmcgPSBDRlVSTEdldFN0cmluZyhjZlVSTC5nZXQoKSk7Ci0gICAgaWYgKCFDRkVxdWFsKGNm
VVJMU3RyaW5nLCBDRlNUUigiYWJvdXQ6YmxhbmsiKSkpCisgICAgaWYgKFBsYXRmb3JtVVJMKFdL
RnJhbWVDb3B5VVJMKGZyYW1lKSkudG9TdHJpbmcoKSAhPSAiYWJvdXQ6YmxhbmsiKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNldHRpbmcgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9XZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCA0N2RmNjZiLi4xNGRh
MWYyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiVGVzdEludm9jYXRpb24uaCIKIAor
I2luY2x1ZGUgIlBsYXRmb3JtVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XZWJWaWV3LmgiCiAj
aW5jbHVkZSAiU3RyaW5nRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiVGVzdENvbnRyb2xsZXIuaCIK
QEAgLTM4LDcgKzM5LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIG5hbWVzcGFjZSBXVFIgewog
CiBUZXN0SW52b2NhdGlvbjo6VGVzdEludm9jYXRpb24oY29uc3QgY2hhciogcGF0aE9yVVJMKQot
ICAgIDogbV91cmwoQWRvcHRXSywgY3JlYXRlV0tVUkwocGF0aE9yVVJMKSkKKyAgICA6IG1fdXJs
KEFkb3B0V0ssIFBsYXRmb3JtVVJMKHBhdGhPclVSTCkudG9XSygpKQogICAgICwgbV9wYXRoT3JV
UkwoZmFzdFN0ckR1cChwYXRoT3JVUkwpKQogICAgICwgbV9nb3RJbml0aWFsUmVzcG9uc2UoZmFs
c2UpCiAgICAgLCBtX2dvdEZpbmFsTWVzc2FnZShmYWxzZSkKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvV2ViS2l0VGVzdFJ1bm5lci54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNmVjYmVmOS4uZDVmNzczMyAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJLaXRUZXN0UnVubmVyLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9XZWJL
aXRUZXN0UnVubmVyLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTg5LDYgKzg5LDggQEAK
IAkJNjVFQjg1OUQxMUVDNjdDQzAwMzREMzAwIC8qIEFjdGl2YXRlRm9udHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWN0aXZhdGVGb250cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2NUVCODU5RjExRUM2N0NDMDAzNEQzMDAgLyogQWN0aXZhdGVGb250cy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEFjdGl2YXRlRm9udHMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCThERDc2RkExMDQ4NkFBNzYwMEQ5NkI1
RSAvKiBXZWJLaXRUZXN0UnVubmVyICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRl
eCA9IDA7IHBhdGggPSBXZWJLaXRUZXN0UnVubmVyOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVD
VFNfRElSOyB9OworCQk5ODU1MjIxMzEyMzdEODg4MDAxQjc5MTUgLyogUGxhdGZvcm1TdHJpbmdJ
bmxpbmVzQ0YuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUGxhdGZvcm1TdHJp
bmdJbmxpbmVzQ0YuaDsgcGF0aCA9IGNmL1BsYXRmb3JtU3RyaW5nSW5saW5lc0NGLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk4NTUyMjE0MTIzN0Q4ODgwMDFCNzkxNSAvKiBQbGF0
Zm9ybVVSTElubGluZXNDRi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQbGF0
Zm9ybVVSTElubGluZXNDRi5oOyBwYXRoID0gY2YvUGxhdGZvcm1VUkxJbmxpbmVzQ0YuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxNEU0RDgxMjBFMDJEMDAwODI2QzBDIC8qIEdD
Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHQ0NvbnRyb2xs
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMxNEU0RDkxMjBFMDJEMDAwODI2
QzBDIC8qIEdDQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBHQ0NvbnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzE0
RTRFMTEyMEUwMzIwMDA4MjZDMEMgLyogR0NDb250cm9sbGVyLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBHQ0NvbnRyb2xsZXIuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
MTc4LDYgKzE4MCw3IEBACiAJCTA4RkI3Nzk1RkU4NDE1NURDMDJBQUMwNyAvKiBUZXN0UnVubmVy
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5ODU1MjIx
MjEyMzdEODQ0MDAxQjc5MTUgLyogY2YgKi8sCiAJCQkJQkM3OTMzRkUxMThGN0M3NDAwNUVBOEUy
IC8qIG1hYyAqLywKIAkJCQlCQzI1MUExNzExRDE2Nzc0MDAyRUJDMDEgLyogV2ViS2l0VGVzdFJ1
bm5lclByZWZpeC5oICovLAogCQkJCUJDNzkzNEREMTE5MDY2RUMwMDVFQThFMiAvKiBQbGF0Zm9y
bVdlYlZpZXcuaCAqLywKQEAgLTIxNiw2ICsyMTksMTUgQEAKIAkJCXBhdGggPSBtYWM7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQk5ODU1MjIxMjEyMzdEODQ0MDAxQjc5MTUg
LyogY2YgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTk4
NTUyMjEzMTIzN0Q4ODgwMDFCNzkxNSAvKiBQbGF0Zm9ybVN0cmluZ0lubGluZXNDRi5oICovLAor
CQkJCTk4NTUyMjE0MTIzN0Q4ODgwMDFCNzkxNSAvKiBQbGF0Zm9ybVVSTElubGluZXNDRi5oICov
LAorCQkJKTsKKwkJCW5hbWUgPSBjZjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07
CiAJCUJDMTRFNEUwMTIwRTAyRjkwMDgyNkMwQyAvKiBDb250cm9sbGVycyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9X
ZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3JtU3RyaW5nSW5saW5lc0NGLmggYi9XZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3JtU3RyaW5nSW5saW5lc0NGLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGM4YzVjNQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvY2YvUGxhdGZvcm1TdHJpbmdJbmxpbmVzQ0YuaApA
QCAtMCwwICsxLDUyIEBACisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmg+CisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUv
SlNTdHJpbmdSZWZDRi5oPgorI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmdDRi5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK1BsYXRmb3JtU3RyaW5nOjpQ
bGF0Zm9ybVN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcpCisgICAgOiBtX2ltcGwoQWRvcHRDRiwg
SlNTdHJpbmdDb3B5Q0ZTdHJpbmcoMCwgc3RyaW5nKSkKK3sKK30KKworUGxhdGZvcm1TdHJpbmc6
OlBsYXRmb3JtU3RyaW5nKFdLU3RyaW5nUmVmIHN0cmluZykKKyAgICA6IG1faW1wbChBZG9wdENG
LCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdHJpbmcpKQoreworfQorCitXS1N0cmluZ1JlZiBQ
bGF0Zm9ybVN0cmluZzo6dG9XSygpCit7CisgICAgcmV0dXJuIFdLU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKG1faW1wbC5nZXQoKSk7Cit9CisKK0pTU3RyaW5nUmVmIFBsYXRmb3JtU3RyaW5nOjp0
b0pTKCkKK3sKKyAgICByZXR1cm4gSlNTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcobV9pbXBsLmdl
dCgpKTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhLCBjb25z
dCBQbGF0Zm9ybVN0cmluZyYgYikKK3sKKyAgICByZXR1cm4gQ0ZFcXVhbChhLm1faW1wbC5nZXQo
KSwgYi5tX2ltcGwuZ2V0KCkpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgUGxhdGZvcm1T
dHJpbmcmIGEsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgcmV0dXJuIENGRXF1YWwoYS5tX2ltcGwu
Z2V0KCksIENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgYiwga0NGU3RyaW5nRW5jb2RpbmdB
U0NJSSkpOworfQorCitzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQs
IGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBhKQoreworICAgIENGU3RyaW5nUmVmIGNmU3RyaW5nID0g
YS5tX2ltcGwuZ2V0KCk7CisgICAgaWYgKCFjZlN0cmluZykKKyAgICAgICAgcmV0dXJuIG91dDsK
KyAgICBDRkluZGV4IGJ1ZmZlckxlbmd0aCA9IENGU3RyaW5nR2V0TWF4aW11bVNpemVGb3JFbmNv
ZGluZyhDRlN0cmluZ0dldExlbmd0aChjZlN0cmluZyksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkg
KyAxOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsKKyAgICBpZiAoIUNG
U3RyaW5nR2V0Q1N0cmluZyhjZlN0cmluZywgYnVmZmVyLmRhdGEoKSwgYnVmZmVyTGVuZ3RoLCBr
Q0ZTdHJpbmdFbmNvZGluZ1VURjgpKQorICAgICAgICByZXR1cm4gb3V0OworICAgIHJldHVybiBv
dXQgPDwgYnVmZmVyLmRhdGEoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElubGluZXNDRi5oIGIvV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9jZi9QbGF0Zm9ybVVSTElubGluZXNDRi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjMxNTM3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL2NmL1BsYXRmb3JtVVJMSW5saW5lc0NGLmgKQEAgLTAsMCArMSwz
NSBAQAorI2luY2x1ZGUgIlBsYXRmb3JtVVJMLmgiCisKKyNpbmNsdWRlIDxXZWJLaXQyL1dLVVJM
Q0YuaD4KKworbmFtZXNwYWNlIFdUUiB7CisKK1BsYXRmb3JtVVJMOjpQbGF0Zm9ybVVSTChjb25z
dCBjaGFyKiBwYXRoT3JVUkwpCit7CisgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoT3JV
UkxDRlN0cmluZyhBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIHBhdGhPclVS
TCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSk7CisgICAgaWYgKENGU3RyaW5nSGFzUHJlZml4KHBh
dGhPclVSTENGU3RyaW5nLmdldCgpLCBDRlNUUigiaHR0cDovLyIpKSB8fCBDRlN0cmluZ0hhc1By
ZWZpeChwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwgQ0ZTVFIoImh0dHBzOi8vIikpKQorICAgICAg
ICBtX2ltcGwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhTdHJpbmcoMCwgcGF0aE9yVVJMQ0ZTdHJp
bmcuZ2V0KCksIDApKTsKKyAgICBlbHNlCisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICBtX2lt
cGwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxDRlN0
cmluZy5nZXQoKSwga0NGVVJMV2luZG93c1BhdGhTdHlsZSwgZmFsc2UpKTsKKyNlbHNlCisgICAg
ICAgIG1faW1wbC5hZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhP
clVSTENGU3RyaW5nLmdldCgpLCBrQ0ZVUkxQT1NJWFBhdGhTdHlsZSwgZmFsc2UpKTsKKyNlbmRp
ZgorfQorCitQbGF0Zm9ybVVSTDo6UGxhdGZvcm1VUkwoV0tVUkxSZWYgdXJsUmVmKQorICAgIDog
bV9pbXBsKEFkb3B0Q0YsIFdLVVJMQ29weUNGVVJMKDAsIHVybFJlZikpCit7Cit9CisKK1dLVVJM
UmVmIFBsYXRmb3JtVVJMOjp0b1dLKCkKK3sKKyAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoQ0ZV
UkwobV9pbXBsLmdldCgpKTsKK30KKworUGxhdGZvcm1TdHJpbmcgUGxhdGZvcm1VUkw6OnRvU3Ry
aW5nKCkKK3sKKyAgICByZXR1cm4gUGxhdGZvcm1TdHJpbmcoQ0ZVUkxHZXRTdHJpbmcobV9pbXBs
LmdldCgpKSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvcXQvUGxhdGZvcm1TdHJpbmdJbmxpbmVzUXQuaCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RS
dW5uZXIvcXQvUGxhdGZvcm1TdHJpbmdJbmxpbmVzUXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44MWU4MjRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVN0cmluZ0lubGluZXNRdC5oCkBAIC0wLDAgKzEsNDkg
QEAKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSAiSlNTdHJpbmdSZWYu
aCIKKyNpbmNsdWRlICJXS1N0cmluZ1F0LmgiCisKK25hbWVzcGFjZSBXVFIgeworCisvLyBOZXZl
ciBjYWxsZWQsIGp1c3QgZm9yIHNjb3BpbmcgdGhlIENPTVBJTEVfQVNTRVJULgorc3RhdGljIGlu
bGluZSB2b2lkIHNhbml0eUNoZWNrKCkKK3sKKyAgICBDT01QSUxFX0FTU0VSVChzaXplb2YoUUNo
YXIpID09IHNpemVvZihVQ2hhciksIHFjaGFyX2FuZF91Y2hhcl9tdXN0X2JlX3NhbWVfc2l6ZSk7
Cit9CisKK1BsYXRmb3JtU3RyaW5nOjpQbGF0Zm9ybVN0cmluZyhKU1N0cmluZ1JlZiBzdHJpbmcp
CisgICAgOiBtX2ltcGwocmVpbnRlcnByZXRfY2FzdDxRQ2hhcio+KEpTU3RyaW5nR2V0Q2hhcmFj
dGVyc1B0cihzdHJpbmcpKSwgSlNTdHJpbmdHZXRMZW5ndGgoc3RyaW5nKSkKK3sKK30KKworUGxh
dGZvcm1TdHJpbmc6OlBsYXRmb3JtU3RyaW5nKFdLU3RyaW5nUmVmIHN0cmluZykKKyAgICA6IG1f
aW1wbChXS1N0cmluZ0NvcHlRU3RyaW5nKHN0cmluZykpCit7Cit9CisKK1dLU3RyaW5nUmVmIFBs
YXRmb3JtU3RyaW5nOjp0b1dLKCkKK3sKKyAgICByZXR1cm4gV0tTdHJpbmdDcmVhdGVXaXRoUVN0
cmluZyhtX2ltcGwpOworfQorCitKU1N0cmluZ1JlZiBQbGF0Zm9ybVN0cmluZzo6dG9KUygpCit7
CisgICAgcmV0dXJuIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMobV9pbXBsLmRhdGEoKSwg
bV9pbXBsLnNpemUoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1TdHJpbmc6Om9wZXJhdG9yPT0oY29u
c3QgUGxhdGZvcm1TdHJpbmcmIGEsIGNvbnN0IFBsYXRmb3JtU3RyaW5nJiBiKQoreworICAgIHJl
dHVybiBhLm1faW1wbCA9PSBiLm1faW1wbDsKK30KKworYm9vbCBQbGF0Zm9ybVN0cmluZzo6b3Bl
cmF0b3I9PShjb25zdCBQbGF0Zm9ybVN0cmluZyYgYSwgY29uc3QgY2hhciogYikKK3sKKyAgICBy
ZXR1cm4gYS5tX2ltcGwgPT0gYjsKK30KKworc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6
b3N0cmVhbSYgb3V0LCBjb25zdCBQbGF0Zm9ybVN0cmluZyYgc3RyaW5nKQoreworICAgIHJldHVy
biBvcyA8PCBzdHJpbmcubV9pbXBsLnRvU3RkU3RyaW5nKCk7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1VUkxJbmxpbmVzUXQuaCBi
L1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvcXQvUGxhdGZvcm1VUkxJbmxpbmVzUXQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGYzYTkzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9xdC9QbGF0Zm9ybVVSTElubGluZXNR
dC5oCkBAIC0wLDAgKzEsMjggQEAKKyNpbmNsdWRlICJQbGF0Zm9ybVVSTC5oIgorCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJXS1VSTFF0LmgiCisKK25hbWVzcGFjZSBX
VFIgeworCitQbGF0Zm9ybVVSTDo6UGxhdGZvcm1VUkwoY29uc3QgY2hhciogcGF0aE9yVVJMKQor
ICAgIDogbV9pbXBsKHBhdGhPclVSTCkKK3sKK30KKworUGxhdGZvcm1VUkw6OlBsYXRmb3JtVVJM
KFdLVVJMUmVmIHVybFJlZikKKyAgICA6IG1faW1wbChXS1VSTENvcHlRVVJMKHVybFJlZikpCit7
Cit9CisKK1dLVVJMUmVmIHRvV0soKQoreworICAgIHJldHVybiBXS1VSTENyZWF0ZVdpdGhRVVJM
KG1faW1wbCk7Cit9CisKK1BsYXRmb3JtU3RyaW5nIHRvU3RyaW5nKCkKK3sKKyAgICByZXR1cm4g
UGxhdGZvcm1TdHJpbmcobV9pbXBsLnRvU3RyaW5nKCkpOworfQorCit9CmRpZmYgLS1naXQgYS9X
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL3dpbi9XZWJLaXRUZXN0UnVubmVyLnZjcHJvaiBi
L1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvd2luL1dlYktpdFRlc3RSdW5uZXIudmNwcm9q
CmluZGV4IGQ3ZGRkNWMuLjFmMmRkZDIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvd2luL1dlYktpdFRlc3RSdW5uZXIudmNwcm9qCisrKyBiL1dlYktpdFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvd2luL1dlYktpdFRlc3RSdW5uZXIudmNwcm9qCkBAIC0zMTgsNiArMzE4
LDI2IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCTwvRmlsdGVyPg0KKwkJPEZpbHRlcg0KKwkJ
CU5hbWU9ImNmIg0KKwkJCT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNmXFBs
YXRmb3JtU3RyaW5nSW5saW5lc0NGLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUN
CisJCQkJUmVsYXRpdmVQYXRoPSIuLlxjZlxQbGF0Zm9ybVVSTElubGluZXNDRi5oIg0KKwkJCQk+
DQorCQkJPC9GaWxlPg0KKwkJPC9GaWx0ZXI+DQorCQk8RmlsZQ0KKwkJCVJlbGF0aXZlUGF0aD0i
Li5cUGxhdGZvcm1TdHJpbmcuaCINCisJCQk+DQorCQk8L0ZpbGU+DQorCQk8RmlsZQ0KKwkJCVJl
bGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1VUkwuaCINCisJCQk+DQorCQk8L0ZpbGU+DQogCQk8Rmls
ZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cUGxhdGZvcm1XZWJWaWV3LmgiDQogCQkJPg0K
</data>
<flag name="review"
          id="57719"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69203</attachid>
            <date>2010-09-29 09:28:19 -0700</date>
            <delta_ts>2010-09-29 10:46:25 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>wtr_porting.diff</filename>
            <type>text/plain</type>
            <size>18348</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMu
aAkocmV2aXNpb24gNjg1MDkpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDU1ICsyOSw0MSBAQAogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KLSNpbmNs
dWRlIDxXZWJLaXQyL1dLU3RyaW5nQ0YuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLVVJMLmg+Ci0j
aW5jbHVkZSA8V2ViS2l0Mi9XS1VSTENGLmg+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV1RSIHsKIAotLy8gQ29udmVyc2lvbiBmdW5jdGlv
bnMKLQotaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdG9DRihKU1N0cmluZ1JlZiBzdHJp
bmcpCitpbmxpbmUgV0tVUkxSZWYgYmxhbmtVUkwoKQogewotICAgIHJldHVybiBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKDAsIHN0cmluZykpOwor
ICAgIHN0YXRpYyBXS1VSTFJlZiBzdGF0aWNCbGFua1VSTCA9IFdLVVJMQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJhYm91dDpibGFuayIpOworICAgIHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0KIAot
aW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdG9DRihXS1N0cmluZ1JlZiBzdHJpbmcpCi17
Ci0gICAgcmV0dXJuIFJldGFpblB0cjxDRlN0cmluZ1JlZj4oQWRvcHRDRiwgV0tTdHJpbmdDb3B5
Q0ZTdHJpbmcoMCwgc3RyaW5nKSk7Ci19CisvLyBDb252ZXJzaW9uIGZ1bmN0aW9ucwogCi1pbmxp
bmUgUmV0YWluUHRyPENGVVJMUmVmPiB0b0NGKFdLVVJMUmVmIHVybCkKK2lubGluZSBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1N0cmluZ1JlZiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJu
IFJldGFpblB0cjxDRlVSTFJlZj4oQWRvcHRDRiwgV0tVUkxDb3B5Q0ZVUkwoMCwgdXJsKSk7Cisg
ICAgY29uc3QgSlNDaGFyKiBjaGFyYWN0ZXJzID0gSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHN0
cmluZyk7CisgICAgc2l6ZV90IGxlbmd0aCA9IEpTU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7Cisg
ICAgcmV0dXJuIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogfQogCi1pbmxpbmUgUmV0YWlu
UHRyPENGVVJMUmVmPiB0b0NGKGNvbnN0IFdLUmV0YWluUHRyPFdLVVJMUmVmPiYgdXJsKQoraW5s
aW5lIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKFdLU3RyaW5nUmVmIHN0cmluZykKIHsK
LSAgICByZXR1cm4gdG9DRih1cmwuZ2V0KCkpOworICAgIGNvbnN0IFdLQ2hhciogY2hhcmFjdGVy
cyA9IFdLU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHJpbmcpOworICAgIHNpemVfdCBsZW5ndGgg
PSBXS1N0cmluZ0dldExlbmd0aChzdHJpbmcpOworICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoY2hhcmFjdGVycywg
bGVuZ3RoKSk7CiB9CiAKLWlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1N0
cmluZ1JlZiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPihB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh0b0NGKHN0cmluZykuZ2V0KCkpKTsK
LX0KLQogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh0b0NGKHN0cmluZy5nZXQoKSku
Z2V0KCkpKTsKKyAgICByZXR1cm4gdG9XSyhzdHJpbmcuZ2V0KCkpOwogfQogCi1pbmxpbmUgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIHJl
dHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkpOwotfQotCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHRvSlMoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmcpCiB7
CiAgICAgcmV0dXJuIHRvSlMoc3RyaW5nLmdldCgpKTsKQEAgLTg0LDI3ICs3MSwxNCBAQAogCiAv
LyBTdHJlYW1pbmcgZnVuY3Rpb25zCiAKLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvdXQsIENGU3RyaW5nUmVmIHN0cmluZ1JlZikKLXsKLSAgICBpZiAoIXN0
cmluZ1JlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLSAgICBDRkluZGV4IGJ1ZmZlckxlbmd0aCA9
IENGU3RyaW5nR2V0TWF4aW11bVNpemVGb3JFbmNvZGluZyhDRlN0cmluZ0dldExlbmd0aChzdHJp
bmdSZWYpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpICsgMTsKLSAgICBWZWN0b3I8Y2hhcj4gYnVm
ZmVyKGJ1ZmZlckxlbmd0aCk7Ci0gICAgaWYgKCFDRlN0cmluZ0dldENTdHJpbmcoc3RyaW5nUmVm
LCBidWZmZXIuZGF0YSgpLCBidWZmZXJMZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkpCi0g
ICAgICAgIHJldHVybiBvdXQ7Ci0gICAgcmV0dXJuIG91dCA8PCBidWZmZXIuZGF0YSgpOwotfQot
Ci1pbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25z
dCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+JiBzdHJpbmdSZWYpCi17Ci0gICAgcmV0dXJuIG91dCA8
PCBzdHJpbmdSZWYuZ2V0KCk7Ci19Ci0KIGlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvdXQsIFdLU3RyaW5nUmVmIHN0cmluZ1JlZikKIHsKICAgICBpZiAoIXN0
cmluZ1JlZikKICAgICAgICAgcmV0dXJuIG91dDsKLSAgICByZXR1cm4gb3V0IDw8IHRvQ0Yoc3Ry
aW5nUmVmKTsKKyAgICBjb25zdCBzaXplX3Qgc3RhdGljQnVmZmVyU2l6ZSA9IDEwMjQ7CisgICAg
c3RhdGljIGNoYXIgc3RhdGljQnVmZmVyW3N0YXRpY0J1ZmZlclNpemVdOworICAgIEFTU0VSVChX
S1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyaW5nUmVmKSA8PSBzdGF0aWNCdWZm
ZXJTaXplKTsKKyAgICByZXR1cm4gb3V0IDw8IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyaW5n
UmVmLCBzdGF0aWNCdWZmZXIsIHN0YXRpY0J1ZmZlclNpemUpOwogfQogCiBpbmxpbmUgc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4mIHN0cmluZ1JlZikKQEAgLTExMiwyNCArODYsNiBAQAogICAgIHJldHVybiBv
dXQgPDwgc3RyaW5nUmVmLmdldCgpOwogfQogCi0vLyBVUkwgY3JlYXRpb24KLQotaW5saW5lIFdL
VVJMUmVmIGNyZWF0ZVdLVVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKLXsKLSAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHBhdGhPclVSTENGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRl
V2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAgICBS
ZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMOwotICAgIGlmIChDRlN0cmluZ0hhc1ByZWZpeChwYXRo
T3JVUkxDRlN0cmluZy5nZXQoKSwgQ0ZTVFIoImh0dHA6Ly8iKSkgfHwgQ0ZTdHJpbmdIYXNQcmVm
aXgocGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RSKCJodHRwczovLyIpKSkKLSAgICAgICAg
Y2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhTdHJpbmcoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcu
Z2V0KCksIDApKTsKLSAgICBlbHNlCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBjZlVSTC5h
ZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhPclVSTENGU3RyaW5n
LmdldCgpLCBrQ0ZVUkxXaW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOwotI2Vsc2UKLSAgICAgICAg
Y2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxD
RlN0cmluZy5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoY2ZVUkwuZ2V0KCkpOwotfQotCi0KIH0gLy8g
bmFtZXNwYWNlIFdUUgogCiAjZW5kaWYgLy8gU3RyaW5nRnVuY3Rpb25zX2gKSW5kZXg6IFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShyZXZpc2lv
biA2ODUwOSkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV1RSIHsKIAog
VGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKLSAg
ICA6IG1fdXJsKEFkb3B0V0ssIGNyZWF0ZVdLVVJMKHBhdGhPclVSTCkpCisgICAgOiBtX3VybChB
ZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpKQogICAgICwgbV9w
YXRoT3JVUkwoZmFzdFN0ckR1cChwYXRoT3JVUkwpKQogICAgICwgbV9nb3RJbml0aWFsUmVzcG9u
c2UoZmFsc2UpCiAgICAgLCBtX2dvdEZpbmFsTWVzc2FnZShmYWxzZSkKQEAgLTcwLDggKzcwLDgg
QEAKIHsKICAgICBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KG1fcGF0aE9yVVJMKTsKIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZyhDRlNUUigiQmVnaW5UZXN0IikpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJp
bmcoQ0ZTVFIoIiIpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7Cisg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CiAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiAKICAgICBUZXN0Q29udHJvbGxlcjo6cnVu
VW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UpOwpAQCAtMTA0LDggKzEwNCw3IEBACiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3Ry
aW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCiB7Ci0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBjZk1lc3NhZ2VOYW1lKEFkb3B0Q0YsIFdLU3RyaW5nQ29weUNGU3Ry
aW5nKDAsIG1lc3NhZ2VOYW1lKSk7Ci0gICAgaWYgKENGRXF1YWwoY2ZNZXNzYWdlTmFtZS5nZXQo
KSwgQ0ZTVFIoIkVycm9yIikpKSB7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJFcnJvciIpKSB7CiAgICAgICAgIC8vIFNldCBhbGwgc3RhdGVzIHRv
IHRydWUgdG8gc3RvcCBzcGlubmluZyB0aGUgcnVubG9vcC4KICAgICAgICAgbV9nb3RJbml0aWFs
UmVzcG9uc2UgPSB0cnVlOwogICAgICAgICBtX2dvdEZpbmFsTWVzc2FnZSA9IHRydWU7CkBAIC0x
MTMsMTEgKzExMiwxMCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKENGRXF1
YWwoY2ZNZXNzYWdlTmFtZS5nZXQoKSwgQ0ZTVFIoIkFjayIpKSkgeworICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWNrIikpIHsKICAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZk1lc3NhZ2VCb2R5KEFkb3B0Q0YsIFdLU3Ry
aW5nQ29weUNGU3RyaW5nKDAsIHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSkp
KTsKIAotICAgICAgICBpZiAoQ0ZFcXVhbChjZk1lc3NhZ2VCb2R5LmdldCgpLCBDRlNUUigiQmVn
aW5UZXN0IikpKSB7CisgICAgICAgIGlmKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KSwgIkJlZ2luVGVzdCIpKSB7CiAgICAg
ICAgICAgICBtX2dvdEluaXRpYWxSZXNwb25zZSA9IHRydWU7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KQEAgLTEyNSw3ICsxMjMsNyBAQAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKICAgICB9CiAKLSAgICBpZiAoQ0ZFcXVhbChjZk1lc3NhZ2VOYW1lLmdldCgpLCBDRlNU
UigiRG9uZSIpKSkgeworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3Nh
Z2VOYW1lLCAiRG9uZSIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9k
eSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7CiAgICAgICAgIG9zdHJpbmdzdHJlYW0gb3V0Owog
ICAgICAgICBvdXQgPDwgc3RhdGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KTsKSW5k
ZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
CShyZXZpc2lvbiA2ODUwOSkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTEsOCArMjExLDcgQEAKICAgICAvLyBS
ZXNldCBtYWluIHBhZ2UgYmFjayB0byBhYm91dDpibGFuawogICAgIG1fZG9uZVJlc2V0dGluZyA9
IGZhbHNlOwogCi0gICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHVybChBZG9wdFdLLCBjcmVhdGVX
S1VSTCgiYWJvdXQ6YmxhbmsiKSk7Ci0gICAgV0tQYWdlTG9hZFVSTChtX21haW5XZWJWaWV3LT5w
YWdlKCksIHVybC5nZXQoKSk7CisgICAgV0tQYWdlTG9hZFVSTChtX21haW5XZWJWaWV3LT5wYWdl
KCksIGJsYW5rVVJMKCkpOwogICAgIFRlc3RDb250cm9sbGVyOjpydW5VbnRpbChtX2RvbmVSZXNl
dHRpbmcpOwogfQogCkBAIC0yNzksOSArMjc4LDcgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAg
V0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMKEFkb3B0V0ssIFdLRnJhbWVDb3B5VVJMKGZyYW1l
KSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTD0gdG9DRih3a1VSTCk7Ci0gICAgQ0ZT
dHJpbmdSZWYgY2ZVUkxTdHJpbmcgPSBDRlVSTEdldFN0cmluZyhjZlVSTC5nZXQoKSk7Ci0gICAg
aWYgKCFDRkVxdWFsKGNmVVJMU3RyaW5nLCBDRlNUUigiYWJvdXQ6YmxhbmsiKSkpCisgICAgaWYg
KCFXS1VSTElzRXF1YWwod2tVUkwuZ2V0KCksIGJsYW5rVVJMKCkpKQogICAgICAgICByZXR1cm47
CiAKICAgICBtX2RvbmVSZXNldHRpbmcgPSB0cnVlOwpJbmRleDogV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gNjg2NDcp
CisrKyBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNCBA
QAorMjAxMC0wOS0yOSAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MzkzCisgICAgICAgIFdlYktpdFRlc3RSdW5u
ZXIgc2hvdWxkIGJlIHBvcnRhYmxlCisKKyAgICAgICAgVXNlIHRoZSBuZXcgV2ViS2l0MiBBUEkt
cyBmb3Igd29ya2luZyB3aXRoIHN0cmluZ3MgYW5kIHVybHMuCisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdUUjo6YmxhbmtVUkwpOgorICAg
ICAgICAoV1RSOjp0b1dLKToKKyAgICAgICAgKFdUUjo6dG9KUyk6CisgICAgICAgIChXVFI6Om9w
ZXJhdG9yPDwpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZh
bHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkRm9yRnJh
bWUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAg
ICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6VGVzdEludm9jYXRpb24pOgorICAgICAgICAoV1RS
OjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKToKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246
OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwogMjAxMC0wOS0yOCAgSm9o
bm55IERpbmcgIDxqbmRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0g
QmFydGguCkluZGV4OiBXZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL0No
YW5nZUxvZwkocmV2aXNpb24gNjg2NDcpCisrKyBXZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDEwLTA5LTI5ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxh
enNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXZWJLaXRUZXN0UnVubmVyIHNob3VsZCBiZSBwb3J0YWJsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDUzOTMKKworICAgICAgICBBZGQg
QyBBUEkgZm9yIGNyZWF0aW5nIGFuZCBtYW5pcHVsYXRpbmcgc3RyaW5ncyBhbmQgdXJscy4KKyAg
ICAgICAgVGhlIGRlc2luZyBvZiB0aGUgbmV3IEFQSS1zIHdhcyBpbnNwaXJlZCBieSB0aGUgSlNT
dHJpbmcKKyAgICAgICAgQVBJIG9mIEphdmFTY3JpcHRDb3JlLgorICAgICAgICAqIFNoYXJlZC9B
UEkvYy9XS1N0cmluZy5jcHA6CisgICAgICAgIChXS1N0cmluZ0lzRW1wdHkpOgorICAgICAgICAo
V0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcpOgorICAgICAgICAoV0tTdHJpbmdDcmVhdGVX
aXRoQ2hhcmFjdGVycyk6CisgICAgICAgIChXS1N0cmluZ0dldENoYXJhY3RlcnNQdHIpOgorICAg
ICAgICAoV0tTdHJpbmdHZXRMZW5ndGgpOgorICAgICAgICAoV0tTdHJpbmdJc0VxdWFsKToKKyAg
ICAgICAgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcpOgorICAgICAgICAoV0tTdHJpbmdn
ZXRNYXhpbXVtVVRGOFN0cmluZ1NpemUpOgorICAgICAgICAoV0tTdHJpbmdHZXRVVEY4Q1N0cmlu
Zyk6CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmg6CisgICAgICAgICogU2hhcmVk
L0FQSS9jL1dLVVJMLmNwcDoKKyAgICAgICAgKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKToK
KyAgICAgICAgKFdLVVJMSXNFcXVhbCk6CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLVVJMLmg6
CisgICAgICAgICogU2hhcmVkL1dlYlN0cmluZy5oOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJp
bmc6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6V2ViU3RyaW5nKToKKyAg
ICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisgICAgICAgICogU2hhcmVkL1dlYlVSTC5oOgor
ICAgICAgICAoV2ViS2l0OjpXZWJVUkw6OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlVS
TDo6V2ViVVJMKToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I9PSk6CisKIDIwMTAtMDktMjkg
IEFkYW0gUm9iZW4gIDxhcm9iZW5AYXBwbGUuY29tPgogCiAgICAgICAgIExvb2sgZm9yIFdlYktp
dC5kbGwgKG5vdCBXZWJLaXRfZGVidWcuZGxsKSB3aGVuIGxhdW5jaGluZyB0aGUgd2ViCkluZGV4
OiBXZWJLaXQyL1NoYXJlZC9XZWJVUkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9X
ZWJVUkwuaAkocmV2aXNpb24gNjg1MDkpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJVUkwuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZl
cnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00Myw2ICs0NCwxMSBAQAogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFdlYlVSTChzdHJpbmcpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJV
Ukw+IGNyZWF0ZShjb25zdCBjaGFyKiBzdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYlVSTChzdHJpbmcpKTsKKyAgICB9CisKICAgICBib29sIGlzTnVsbCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29u
c3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAKQEAgLTU0LDExICs2MCwxOCBAQAog
ICAgIHsKICAgICB9CiAKKyAgICBXZWJVUkwoY29uc3QgY2hhciogc3RyaW5nKQorICAgICAgICA6
IG1fc3RyaW5nKHN0cmluZykKKyAgICB7CisgICAgfQorCiAgICAgdmlydHVhbCBUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CiAKICAgICBTdHJpbmcgbV9zdHJpbmc7CiB9Owog
CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlVSTCYgYSwgY29uc3QgV2ViVVJMJiBi
KSB7IHJldHVybiBhLnN0cmluZygpID09IGIuc3RyaW5nKCk7IH0KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CiAKICNlbmRpZiAvLyBXZWJVUkxfaApJbmRleDogV2ViS2l0Mi9TaGFyZWQvQVBJL2Mv
V0tTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5n
LmNwcAkocmV2aXNpb24gNjg1MDkpCisrKyBXZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNiArMjcsOCBAQAogI2luY2x1ZGUgIldLU3RyaW5n
LmgiCiAKICNpbmNsdWRlICJXS0FQSUNhc3QuaCIKKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9VVEY4
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CiAKQEAgLTM4LDMgKzQxLDUyIEBACiB7CiAgICAgcmV0dXJuIHRvV0soc3RyaW5nUmVm
KS0+aXNFbXB0eSgpOwogfQorCitXS1N0cmluZ1JlZiBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvUmVmKFdlYlN0cmluZzo6
Y3JlYXRlKHN0cmluZykubGVha1JlZigpKTsKK30KKworV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdL
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoY29uc3QgV0tDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKQoreworICAgIHJldHVybiB0b1JlZihXZWJTdHJpbmc6OmNyZWF0ZShjaGFyYWN0
ZXJzLCBsZW5ndGgpLmxlYWtSZWYoKSk7Cit9CisKK2NvbnN0IFdLQ2hhciogV0tTdHJpbmdHZXRD
aGFyYWN0ZXJzUHRyKFdLU3RyaW5nUmVmIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9XSyhzdHJp
bmcpLT5zdHJpbmcoKS5jaGFyYWN0ZXJzKCk7Cit9CisKK3NpemVfdCBXS1N0cmluZ0dldExlbmd0
aChXS1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV0soc3RyaW5nKS0+c3RyaW5n
KCkubGVuZ3RoKCk7Cit9CisKK2Jvb2wgV0tTdHJpbmdJc0VxdWFsKFdLU3RyaW5nUmVmIGEsIFdL
U3RyaW5nUmVmIGIpCit7CisgICAgcmV0dXJuICp0b1dLKGEpID09ICp0b1dLKGIpOworfQorCiti
b29sIFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoV0tTdHJpbmdSZWYgYSwgY29uc3QgY2hh
ciogYikKK3sKKyAgICByZXR1cm4gKnRvV0soYSkgPT0gYjsKK30KKworc2l6ZV90IFdLU3RyaW5n
Z2V0TWF4aW11bVVURjhTdHJpbmdTaXplKFdLU3RyaW5nUmVmIHN0cmluZykKK3sKKyAgICAvLyBB
bnkgVVRGOCBjaGFyYWN0ZXIgPiAzIGJ5dGVzIGVuY29kZXMgYXMgYSBVVEYxNiBzdXJyb2dhdGUg
cGFpci4KKyAgICByZXR1cm4gdG9XSyhzdHJpbmcpLT5zdHJpbmcoKS5sZW5ndGgoKSAqIDMgKyAx
OyAvLyArIDEgZm9yIHRlcm1pbmF0aW5nICdcMCcKK30KKworc2l6ZV90IFdLU3RyaW5nR2V0VVRG
OENTdHJpbmcoV0tTdHJpbmdSZWYgc3RyaW5nLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJT
aXplKQoreworICAgIGNoYXIqIHAgPSBidWZmZXI7CisgICAgY29uc3QgU3RyaW5nJiB3dGZTdHJp
bmcgPSB0b1dLKHN0cmluZyktPnN0cmluZygpOworICAgIGNvbnN0IFVDaGFyKiBkID0gd3RmU3Ry
aW5nLmNoYXJhY3RlcnMoKTsKKyAgICBXVEY6OlVuaWNvZGU6OkNvbnZlcnNpb25SZXN1bHQgcmVz
dWx0ID0gV1RGOjpVbmljb2RlOjpjb252ZXJ0VVRGMTZUb1VURjgoJmQsIGQgKyB3dGZTdHJpbmcu
bGVuZ3RoKCksICZwLCBwICsgYnVmZmVyU2l6ZSAtIDEsIHRydWUpOworICAgICpwKysgPSAnXDAn
OworICAgIGlmIChyZXN1bHQgIT0gV1RGOjpVbmljb2RlOjpjb252ZXJzaW9uT0sgJiYgcmVzdWx0
ICE9IFdURjo6VW5pY29kZTo6dGFyZ2V0RXhoYXVzdGVkKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBwIC0gYnVmZmVyOworfQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tV
UkwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5oCShyZXZpc2lv
biA2ODUwOSkKKysrIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmgJKHdvcmtpbmcgY29weSkK
QEAgLTM0LDYgKzM0LDEwIEBACiAKIFdLX0VYUE9SVCBXS1R5cGVJRCBXS1VSTEdldFR5cGVJRCgp
OwogCitXS19FWFBPUlQgV0tVUkxSZWYgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29uc3Qg
Y2hhciogc3RyaW5nKTsKKworV0tfRVhQT1JUIGJvb2wgV0tVUkxJc0VxdWFsKFdLVVJMUmVmIGEs
IFdLVVJMUmVmIGIpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDogV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVk
L0FQSS9jL1dLVVJMLmNwcAkocmV2aXNpb24gNjg1MDkpCisrKyBXZWJLaXQyL1NoYXJlZC9BUEkv
Yy9XS1VSTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDMgKzMzLDEzIEBACiB7CiAgICAgcmV0
dXJuIHRvUmVmKFdlYlVSTDo6QVBJVHlwZSk7CiB9CisKK1dLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9SZWYoV2Vi
VVJMOjpjcmVhdGUoc3RyaW5nKS5sZWFrUmVmKCkpOworfQorCitib29sIFdLVVJMSXNFcXVhbChX
S1VSTFJlZiBhLCBXS1VSTFJlZiBiKQoreworICAgIHJldHVybiAqdG9XSyhhKSA9PSAqdG9XSyhi
KTsKK30KSW5kZXg6IFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuaAkocmV2aXNpb24gNjg1MDkpCisrKyBX
ZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2LDEw
ICszNywzMyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFdJTjMyKSAm
JiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fV0lOU0NXX18pIFwKKyAgICAmJiAhKChk
ZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfXykpICYmICFkZWZpbmVkKF9fbGlu
dXhfXykpIC8qIFJWQ1QgKi8KKyAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdLQ2hhcjsKKyNl
bHNlCisgICAgdHlwZWRlZiB3Y2hhcl90IFdLQ2hhcjsKKyNlbmRpZgorCiBXS19FWFBPUlQgV0tU
eXBlSUQgV0tTdHJpbmdHZXRUeXBlSUQoKTsKIAorV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLU3Ry
aW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoY29uc3QgV0tDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bGVuZ3RoKTsKKworV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZyk7CisKK1dLX0VYUE9SVCBjb25zdCBXS0NoYXIqIFdL
U3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihXS1N0cmluZ1JlZiBzdHJpbmcpOworCitXS19FWFBPUlQg
c2l6ZV90IFdLU3RyaW5nR2V0TGVuZ3RoKFdLU3RyaW5nUmVmIHN0cmluZyk7CisKIFdLX0VYUE9S
VCBib29sIFdLU3RyaW5nSXNFbXB0eShXS1N0cmluZ1JlZiBzdHJpbmcpOwogCitXS19FWFBPUlQg
Ym9vbCBXS1N0cmluZ0lzRXF1YWwoV0tTdHJpbmdSZWYgYSwgV0tTdHJpbmdSZWYgYik7CisKK1dL
X0VYUE9SVCBib29sIFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcoV0tTdHJpbmdSZWYgYSwg
Y29uc3QgY2hhciogYik7CisKK1dLX0VYUE9SVCBzaXplX3QgV0tTdHJpbmdHZXRNYXhpbXVtVVRG
OENTdHJpbmdTaXplKFdLU3RyaW5nUmVmIHN0cmluZyk7CisKK1dLX0VYUE9SVCBzaXplX3QgV0tT
dHJpbmdHZXRVVEY4Q1N0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcsIGNoYXIqIGJ1ZmZlciwgc2l6
ZV90IGJ1ZmZlclNpemUpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpJbmRleDog
V2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQv
V2ViU3RyaW5nLmgJKHJldmlzaW9uIDY4NTA5KQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
MCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsNiArMjgsNyBAQAogI2RlZmluZSBXZWJTdHJpbmdf
aAogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNT
dHJpbmdSZWYuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgogCkBAIC00Myw2ICs0NSwxNiBAQAogICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFdlYlN0cmluZyhzdHJpbmcpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJTdHJpbmc+IGNyZWF0ZShjb25zdCBjaGFyKiBjaGFyYWN0ZXJzKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTdHJpbmcoY2hhcmFjdGVycykpOworICAgIH0K
KworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlN0cmluZz4gY3JlYXRlKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSk7CisgICAgfQorCiAgICAgYm9vbCBp
c051bGwoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5pc051bGwoKTsgfQogICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzRW1wdHkoKTsgfQogCkBAIC01NCwxMSAr
NjYsMjUgQEAKICAgICB7CiAgICAgfQogCisgICAgV2ViU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmlu
ZykKKyAgICAgICAgOiBtX3N0cmluZyhzdHJpbmcpCisgICAgeworICAgIH0KKworICAgIFdlYlN0
cmluZyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCkKKyAgICAgICAgOiBt
X3N0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpCisgICAgeworICAgIH0KKwogICAgIHZpcnR1YWwg
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gQVBJVHlwZTsgfQogCiAgICAgU3RyaW5nIG1fc3Ry
aW5nOwogfTsKIAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJTdHJpbmcmIGEsIGNv
bnN0IFdlYlN0cmluZyYgYikgeyByZXR1cm4gYS5zdHJpbmcoKSA9PSBiLnN0cmluZygpOyB9Citp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlN0cmluZyYgYSwgY29uc3QgY2hhciogYikg
eyByZXR1cm4gYS5zdHJpbmcoKSA9PSBiOyB9CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGNoYXIqIGEsIGNvbnN0IFdlYlN0cmluZyYgYikgeyByZXR1cm4gYSA9PSBiLnN0cmluZygpOyB9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYgLy8gV2ViU3RyaW5nX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69217</attachid>
            <date>2010-09-29 10:46:25 -0700</date>
            <delta_ts>2010-10-01 05:54:21 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>wtr_porting.diff</filename>
            <type>text/plain</type>
            <size>18350</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMu
aAkocmV2aXNpb24gNjg2NTEpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDU1ICsyOSw0MSBAQAogCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8V2Vi
S2l0Mi9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmcuaD4KLSNpbmNs
dWRlIDxXZWJLaXQyL1dLU3RyaW5nQ0YuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLVVJMLmg+Ci0j
aW5jbHVkZSA8V2ViS2l0Mi9XS1VSTENGLmg+Ci0jaW5jbHVkZSA8c3N0cmVhbT4KLSNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV1RSIHsKIAotLy8gQ29udmVyc2lvbiBmdW5jdGlv
bnMKLQotaW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdG9DRihKU1N0cmluZ1JlZiBzdHJp
bmcpCitpbmxpbmUgV0tVUkxSZWYgYmxhbmtVUkwoKQogewotICAgIHJldHVybiBSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKDAsIHN0cmluZykpOwor
ICAgIHN0YXRpYyBXS1VSTFJlZiBzdGF0aWNCbGFua1VSTCA9IFdLVVJMQ3JlYXRlV2l0aFVURjhD
U3RyaW5nKCJhYm91dDpibGFuayIpOworICAgIHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0KIAot
aW5saW5lIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdG9DRihXS1N0cmluZ1JlZiBzdHJpbmcpCi17
Ci0gICAgcmV0dXJuIFJldGFpblB0cjxDRlN0cmluZ1JlZj4oQWRvcHRDRiwgV0tTdHJpbmdDb3B5
Q0ZTdHJpbmcoMCwgc3RyaW5nKSk7Ci19CisvLyBDb252ZXJzaW9uIGZ1bmN0aW9ucwogCi1pbmxp
bmUgUmV0YWluUHRyPENGVVJMUmVmPiB0b0NGKFdLVVJMUmVmIHVybCkKK2lubGluZSBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1N0cmluZ1JlZiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJu
IFJldGFpblB0cjxDRlVSTFJlZj4oQWRvcHRDRiwgV0tVUkxDb3B5Q0ZVUkwoMCwgdXJsKSk7Cisg
ICAgY29uc3QgSlNDaGFyKiBjaGFyYWN0ZXJzID0gSlNTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHN0
cmluZyk7CisgICAgc2l6ZV90IGxlbmd0aCA9IEpTU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7Cisg
ICAgcmV0dXJuIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCkpOwogfQogCi1pbmxpbmUgUmV0YWlu
UHRyPENGVVJMUmVmPiB0b0NGKGNvbnN0IFdLUmV0YWluUHRyPFdLVVJMUmVmPiYgdXJsKQoraW5s
aW5lIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKFdLU3RyaW5nUmVmIHN0cmluZykKIHsK
LSAgICByZXR1cm4gdG9DRih1cmwuZ2V0KCkpOworICAgIGNvbnN0IFdLQ2hhciogY2hhcmFjdGVy
cyA9IFdLU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHJpbmcpOworICAgIHNpemVfdCBsZW5ndGgg
PSBXS1N0cmluZ0dldExlbmd0aChzdHJpbmcpOworICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0
cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoY2hhcmFjdGVycywg
bGVuZ3RoKSk7CiB9CiAKLWlubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1N0
cmluZ1JlZiBzdHJpbmcpCi17Ci0gICAgcmV0dXJuIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPihB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh0b0NGKHN0cmluZykuZ2V0KCkpKTsK
LX0KLQogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTUmV0YWluUHRyPEpT
U3RyaW5nUmVmPiBzdHJpbmcpCiB7Ci0gICAgcmV0dXJuIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVm
PihBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyh0b0NGKHN0cmluZy5nZXQoKSku
Z2V0KCkpKTsKKyAgICByZXR1cm4gdG9XSyhzdHJpbmcuZ2V0KCkpOwogfQogCi1pbmxpbmUgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIHJl
dHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkpOwotfQotCiBpbmxpbmUgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHRvSlMoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmcpCiB7
CiAgICAgcmV0dXJuIHRvSlMoc3RyaW5nLmdldCgpKTsKQEAgLTg0LDI3ICs3MSwxNCBAQAogCiAv
LyBTdHJlYW1pbmcgZnVuY3Rpb25zCiAKLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvdXQsIENGU3RyaW5nUmVmIHN0cmluZ1JlZikKLXsKLSAgICBpZiAoIXN0
cmluZ1JlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLSAgICBDRkluZGV4IGJ1ZmZlckxlbmd0aCA9
IENGU3RyaW5nR2V0TWF4aW11bVNpemVGb3JFbmNvZGluZyhDRlN0cmluZ0dldExlbmd0aChzdHJp
bmdSZWYpLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpICsgMTsKLSAgICBWZWN0b3I8Y2hhcj4gYnVm
ZmVyKGJ1ZmZlckxlbmd0aCk7Ci0gICAgaWYgKCFDRlN0cmluZ0dldENTdHJpbmcoc3RyaW5nUmVm
LCBidWZmZXIuZGF0YSgpLCBidWZmZXJMZW5ndGgsIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkpCi0g
ICAgICAgIHJldHVybiBvdXQ7Ci0gICAgcmV0dXJuIG91dCA8PCBidWZmZXIuZGF0YSgpOwotfQot
Ci1pbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25z
dCBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+JiBzdHJpbmdSZWYpCi17Ci0gICAgcmV0dXJuIG91dCA8
PCBzdHJpbmdSZWYuZ2V0KCk7Ci19Ci0KIGlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvdXQsIFdLU3RyaW5nUmVmIHN0cmluZ1JlZikKIHsKICAgICBpZiAoIXN0
cmluZ1JlZikKICAgICAgICAgcmV0dXJuIG91dDsKLSAgICByZXR1cm4gb3V0IDw8IHRvQ0Yoc3Ry
aW5nUmVmKTsKKyAgICBjb25zdCBzaXplX3Qgc3RhdGljQnVmZmVyU2l6ZSA9IDEwMjQ7CisgICAg
c3RhdGljIGNoYXIgc3RhdGljQnVmZmVyW3N0YXRpY0J1ZmZlclNpemVdOworICAgIEFTU0VSVChX
S1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoc3RyaW5nUmVmKSA8PSBzdGF0aWNCdWZm
ZXJTaXplKTsKKyAgICByZXR1cm4gb3V0IDw8IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoc3RyaW5n
UmVmLCBzdGF0aWNCdWZmZXIsIHN0YXRpY0J1ZmZlclNpemUpOwogfQogCiBpbmxpbmUgc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4mIHN0cmluZ1JlZikKQEAgLTExMiwyNCArODYsNiBAQAogICAgIHJldHVybiBv
dXQgPDwgc3RyaW5nUmVmLmdldCgpOwogfQogCi0vLyBVUkwgY3JlYXRpb24KLQotaW5saW5lIFdL
VVJMUmVmIGNyZWF0ZVdLVVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKLXsKLSAgICBSZXRhaW5Q
dHI8Q0ZTdHJpbmdSZWY+IHBhdGhPclVSTENGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRl
V2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAgICBS
ZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMOwotICAgIGlmIChDRlN0cmluZ0hhc1ByZWZpeChwYXRo
T3JVUkxDRlN0cmluZy5nZXQoKSwgQ0ZTVFIoImh0dHA6Ly8iKSkgfHwgQ0ZTdHJpbmdIYXNQcmVm
aXgocGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RSKCJodHRwczovLyIpKSkKLSAgICAgICAg
Y2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhTdHJpbmcoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcu
Z2V0KCksIDApKTsKLSAgICBlbHNlCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBjZlVSTC5h
ZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhPclVSTENGU3RyaW5n
LmdldCgpLCBrQ0ZVUkxXaW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOwotI2Vsc2UKLSAgICAgICAg
Y2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxD
RlN0cmluZy5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0jZW5kaWYKLSAg
ICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoY2ZVUkwuZ2V0KCkpOwotfQotCi0KIH0gLy8g
bmFtZXNwYWNlIFdUUgogCiAjZW5kaWYgLy8gU3RyaW5nRnVuY3Rpb25zX2gKSW5kZXg6IFdlYktp
dFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwCShyZXZpc2lv
biA2ODY1MSkKKysrIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBACiBuYW1lc3BhY2UgV1RSIHsKIAog
VGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKLSAg
ICA6IG1fdXJsKEFkb3B0V0ssIGNyZWF0ZVdLVVJMKHBhdGhPclVSTCkpCisgICAgOiBtX3VybChB
ZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpKQogICAgICwgbV9w
YXRoT3JVUkwoZmFzdFN0ckR1cChwYXRoT3JVUkwpKQogICAgICwgbV9nb3RJbml0aWFsUmVzcG9u
c2UoZmFsc2UpCiAgICAgLCBtX2dvdEZpbmFsTWVzc2FnZShmYWxzZSkKQEAgLTcwLDggKzcwLDgg
QEAKIHsKICAgICBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KG1fcGF0aE9yVVJMKTsKIAotICAg
IFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0Ny
ZWF0ZVdpdGhDRlN0cmluZyhDRlNUUigiQmVnaW5UZXN0IikpKTsKLSAgICBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJp
bmcoQ0ZTVFIoIiIpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1l
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7Cisg
ICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CiAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0lu
amVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VO
YW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiAKICAgICBUZXN0Q29udHJvbGxlcjo6cnVu
VW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UpOwpAQCAtMTA0LDggKzEwNCw3IEBACiAKIHZvaWQg
VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3Ry
aW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkpCiB7Ci0gICAgUmV0YWlu
UHRyPENGU3RyaW5nUmVmPiBjZk1lc3NhZ2VOYW1lKEFkb3B0Q0YsIFdLU3RyaW5nQ29weUNGU3Ry
aW5nKDAsIG1lc3NhZ2VOYW1lKSk7Ci0gICAgaWYgKENGRXF1YWwoY2ZNZXNzYWdlTmFtZS5nZXQo
KSwgQ0ZTVFIoIkVycm9yIikpKSB7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJp
bmcobWVzc2FnZU5hbWUsICJFcnJvciIpKSB7CiAgICAgICAgIC8vIFNldCBhbGwgc3RhdGVzIHRv
IHRydWUgdG8gc3RvcCBzcGlubmluZyB0aGUgcnVubG9vcC4KICAgICAgICAgbV9nb3RJbml0aWFs
UmVzcG9uc2UgPSB0cnVlOwogICAgICAgICBtX2dvdEZpbmFsTWVzc2FnZSA9IHRydWU7CkBAIC0x
MTMsMTEgKzExMiwxMCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKENGRXF1
YWwoY2ZNZXNzYWdlTmFtZS5nZXQoKSwgQ0ZTVFIoIkFjayIpKSkgeworICAgIGlmIChXS1N0cmlu
Z0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiQWNrIikpIHsKICAgICAgICAgQVNT
RVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKLSAg
ICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBjZk1lc3NhZ2VCb2R5KEFkb3B0Q0YsIFdLU3Ry
aW5nQ29weUNGU3RyaW5nKDAsIHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSkp
KTsKIAotICAgICAgICBpZiAoQ0ZFcXVhbChjZk1lc3NhZ2VCb2R5LmdldCgpLCBDRlNUUigiQmVn
aW5UZXN0IikpKSB7CisgICAgICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKHN0
YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSksICJCZWdpblRlc3QiKSkgewogICAg
ICAgICAgICAgbV9nb3RJbml0aWFsUmVzcG9uc2UgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CkBAIC0xMjUsNyArMTIzLDcgQEAKICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogCi0gICAgaWYgKENGRXF1YWwoY2ZNZXNzYWdlTmFtZS5nZXQoKSwgQ0ZT
VFIoIkRvbmUiKSkpIHsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNz
YWdlTmFtZSwgIkRvbmUiKSkgewogICAgICAgICBBU1NFUlQoV0tHZXRUeXBlSUQobWVzc2FnZUJv
ZHkpID09IFdLU3RyaW5nR2V0VHlwZUlEKCkpOwogICAgICAgICBvc3RyaW5nc3RyZWFtIG91dDsK
ICAgICAgICAgb3V0IDw8IHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSk7Cklu
ZGV4OiBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cAkocmV2aXNpb24gNjg2NTEpCisrKyBXZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDggKzIxMyw3IEBACiAgICAgLy8g
UmVzZXQgbWFpbiBwYWdlIGJhY2sgdG8gYWJvdXQ6YmxhbmsKICAgICBtX2RvbmVSZXNldHRpbmcg
PSBmYWxzZTsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwoQWRvcHRXSywgY3JlYXRl
V0tVUkwoImFib3V0OmJsYW5rIikpOwotICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+
cGFnZSgpLCB1cmwuZ2V0KCkpOworICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFn
ZSgpLCBibGFua1VSTCgpKTsKICAgICBUZXN0Q29udHJvbGxlcjo6cnVuVW50aWwobV9kb25lUmVz
ZXR0aW5nKTsKIH0KIApAQCAtMjgxLDkgKzI4MCw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTChBZG9wdFdLLCBXS0ZyYW1lQ29weVVSTChmcmFt
ZSkpOwotICAgIFJldGFpblB0cjxDRlVSTFJlZj4gY2ZVUkw9IHRvQ0Yod2tVUkwpOwotICAgIENG
U3RyaW5nUmVmIGNmVVJMU3RyaW5nID0gQ0ZVUkxHZXRTdHJpbmcoY2ZVUkwuZ2V0KCkpOwotICAg
IGlmICghQ0ZFcXVhbChjZlVSTFN0cmluZywgQ0ZTVFIoImFib3V0OmJsYW5rIikpKQorICAgIGlm
ICghV0tVUkxJc0VxdWFsKHdrVVJMLmdldCgpLCBibGFua1VSTCgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9kb25lUmVzZXR0aW5nID0gdHJ1ZTsKSW5kZXg6IFdlYktpdFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDY4NjUx
KQorKysgV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTAtMDktMjkgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTM5MworICAgICAgICBXZWJLaXRUZXN0UnVu
bmVyIHNob3VsZCBiZSBwb3J0YWJsZQorCisgICAgICAgIFVzZSB0aGUgbmV3IFdlYktpdDIgQVBJ
LXMgZm9yIHdvcmtpbmcgd2l0aCBzdHJpbmdzIGFuZCB1cmxzLgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmg6CisgICAgICAgIChXVFI6OmJsYW5rVVJMKToKKyAg
ICAgICAgKFdUUjo6dG9XSyk6CisgICAgICAgIChXVFI6OnRvSlMpOgorICAgICAgICAoV1RSOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdUUjo6VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRW
YWx1ZXMpOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6ZGlkRmluaXNoTG9hZEZvckZy
YW1lKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcDoKKyAg
ICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKToKKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246Omludm9rZSk6CisgICAgICAgIChXVFI6OlRlc3RJbnZvY2F0aW9u
OjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisKIDIwMTAtMDktMjggIEpv
aG5ueSBEaW5nICA8am5kQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFt
IEJhcnRoLgpJbmRleDogV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDY4NjUxKQorKysgV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxMC0wOS0yOSAgQmFsYXpzIEtlbGVtZW4gIDxrYmFs
YXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9ydGFibGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MzkzCisKKyAgICAgICAgQWRk
IEMgQVBJIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIHN0cmluZ3MgYW5kIHVybHMuCisg
ICAgICAgIFRoZSBkZXNpbmcgb2YgdGhlIG5ldyBBUEktcyB3YXMgaW5zcGlyZWQgYnkgdGhlIEpT
U3RyaW5nCisgICAgICAgIEFQSSBvZiBKYXZhU2NyaXB0Q29yZS4KKyAgICAgICAgKiBTaGFyZWQv
QVBJL2MvV0tTdHJpbmcuY3BwOgorICAgICAgICAoV0tTdHJpbmdJc0VtcHR5KToKKyAgICAgICAg
KFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKToKKyAgICAgICAgKFdLU3RyaW5nQ3JlYXRl
V2l0aENoYXJhY3RlcnMpOgorICAgICAgICAoV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKToKKyAg
ICAgICAgKFdLU3RyaW5nR2V0TGVuZ3RoKToKKyAgICAgICAgKFdLU3RyaW5nSXNFcXVhbCk6Cisg
ICAgICAgIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKToKKyAgICAgICAgKFdLU3RyaW5n
Z2V0TWF4aW11bVVURjhTdHJpbmdTaXplKToKKyAgICAgICAgKFdLU3RyaW5nR2V0VVRGOENTdHJp
bmcpOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1N0cmluZy5oOgorICAgICAgICAqIFNoYXJl
ZC9BUEkvYy9XS1VSTC5jcHA6CisgICAgICAgIChXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyk6
CisgICAgICAgIChXS1VSTElzRXF1YWwpOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1VSTC5o
OgorICAgICAgICAqIFNoYXJlZC9XZWJTdHJpbmcuaDoKKyAgICAgICAgKFdlYktpdDo6V2ViU3Ry
aW5nOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OldlYlN0cmluZyk6Cisg
ICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIFNoYXJlZC9XZWJVUkwuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVVJMOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJV
Ukw6OldlYlVSTCk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPT0pOgorCiAyMDEwLTA5LTI5
ICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBMb29rIGZvciBXZWJL
aXQuZGxsIChub3QgV2ViS2l0X2RlYnVnLmRsbCkgd2hlbiBsYXVuY2hpbmcgdGhlIHdlYgpJbmRl
eDogV2ViS2l0Mi9TaGFyZWQvV2ViVVJMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFyZWQv
V2ViVVJMLmgJKHJldmlzaW9uIDY4NjUxKQorKysgV2ViS2l0Mi9TaGFyZWQvV2ViVVJMLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2
ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNDMsNiArNDQsMTEgQEAKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBXZWJVUkwoc3RyaW5nKSk7CiAgICAgfQogCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
VVJMPiBjcmVhdGUoY29uc3QgY2hhciogc3RyaW5nKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBXZWJVUkwoc3RyaW5nKSk7CisgICAgfQorCiAgICAgYm9vbCBpc051bGwoKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZy5pc051bGwoKTsgfQogICAgIGJvb2wgaXNFbXB0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzRW1wdHkoKTsgfQogCkBAIC01NCwxMSArNjAsMTggQEAK
ICAgICB7CiAgICAgfQogCisgICAgV2ViVVJMKGNvbnN0IGNoYXIqIHN0cmluZykKKyAgICAgICAg
OiBtX3N0cmluZyhzdHJpbmcpCisgICAgeworICAgIH0KKwogICAgIHZpcnR1YWwgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gQVBJVHlwZTsgfQogCiAgICAgU3RyaW5nIG1fc3RyaW5nOwogfTsK
IAoraW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJVUkwmIGEsIGNvbnN0IFdlYlVSTCYg
YikgeyByZXR1cm4gYS5zdHJpbmcoKSA9PSBiLnN0cmluZygpOyB9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCiAjZW5kaWYgLy8gV2ViVVJMX2gKSW5kZXg6IFdlYktpdDIvU2hhcmVkL0FQSS9j
L1dLU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmlu
Zy5jcHAJKHJldmlzaW9uIDY4NjUxKQorKysgV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDYgKzI3LDggQEAKICNpbmNsdWRlICJXS1N0cmlu
Zy5oIgogCiAjaW5jbHVkZSAiV0tBUElDYXN0LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVVRGOC5oPgogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViS2l0OwogCkBAIC0zOCwzICs0MSw1MiBAQAogewogICAgIHJldHVybiB0b1dLKHN0cmluZ1Jl
ZiktPmlzRW1wdHkoKTsKIH0KKworV0tTdHJpbmdSZWYgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIHJldHVybiB0b1JlZihXZWJTdHJpbmc6
OmNyZWF0ZShzdHJpbmcpLmxlYWtSZWYoKSk7Cit9CisKK1dLX0VYUE9SVCBXS1N0cmluZ1JlZiBX
S1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKGNvbnN0IFdLQ2hhciogY2hhcmFjdGVycywgc2l6
ZV90IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gdG9SZWYoV2ViU3RyaW5nOjpjcmVhdGUoY2hhcmFj
dGVycywgbGVuZ3RoKS5sZWFrUmVmKCkpOworfQorCitjb25zdCBXS0NoYXIqIFdLU3RyaW5nR2V0
Q2hhcmFjdGVyc1B0cihXS1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV0soc3Ry
aW5nKS0+c3RyaW5nKCkuY2hhcmFjdGVycygpOworfQorCitzaXplX3QgV0tTdHJpbmdHZXRMZW5n
dGgoV0tTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dLKHN0cmluZyktPnN0cmlu
ZygpLmxlbmd0aCgpOworfQorCitib29sIFdLU3RyaW5nSXNFcXVhbChXS1N0cmluZ1JlZiBhLCBX
S1N0cmluZ1JlZiBiKQoreworICAgIHJldHVybiAqdG9XSyhhKSA9PSAqdG9XSyhiKTsKK30KKwor
Ym9vbCBXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKFdLU3RyaW5nUmVmIGEsIGNvbnN0IGNo
YXIqIGIpCit7CisgICAgcmV0dXJuICp0b1dLKGEpID09IGI7Cit9CisKK3NpemVfdCBXS1N0cmlu
Z0dldE1heGltdW1VVEY4Q1N0cmluZ1NpemUoV0tTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIC8v
IEFueSBVVEY4IGNoYXJhY3RlciA+IDMgYnl0ZXMgZW5jb2RlcyBhcyBhIFVURjE2IHN1cnJvZ2F0
ZSBwYWlyLgorICAgIHJldHVybiB0b1dLKHN0cmluZyktPnN0cmluZygpLmxlbmd0aCgpICogMyAr
IDE7IC8vICsgMSBmb3IgdGVybWluYXRpbmcgJ1wwJworfQorCitzaXplX3QgV0tTdHJpbmdHZXRV
VEY4Q1N0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZl
clNpemUpCit7CisgICAgY2hhciogcCA9IGJ1ZmZlcjsKKyAgICBjb25zdCBTdHJpbmcmIHd0ZlN0
cmluZyA9IHRvV0soc3RyaW5nKS0+c3RyaW5nKCk7CisgICAgY29uc3QgVUNoYXIqIGQgPSB3dGZT
dHJpbmcuY2hhcmFjdGVycygpOworICAgIFdURjo6VW5pY29kZTo6Q29udmVyc2lvblJlc3VsdCBy
ZXN1bHQgPSBXVEY6OlVuaWNvZGU6OmNvbnZlcnRVVEYxNlRvVVRGOCgmZCwgZCArIHd0ZlN0cmlu
Zy5sZW5ndGgoKSwgJnAsIHAgKyBidWZmZXJTaXplIC0gMSwgdHJ1ZSk7CisgICAgKnArKyA9ICdc
MCc7CisgICAgaWYgKHJlc3VsdCAhPSBXVEY6OlVuaWNvZGU6OmNvbnZlcnNpb25PSyAmJiByZXN1
bHQgIT0gV1RGOjpVbmljb2RlOjp0YXJnZXRFeGhhdXN0ZWQpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgcmV0dXJuIHAgLSBidWZmZXI7Cit9CkluZGV4OiBXZWJLaXQyL1NoYXJlZC9BUEkvYy9X
S1VSTC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmgJKHJldmlz
aW9uIDY4NjUxKQorKysgV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuaAkod29ya2luZyBjb3B5
KQpAQCAtMzQsNiArMzQsMTAgQEAKIAogV0tfRVhQT1JUIFdLVHlwZUlEIFdLVVJMR2V0VHlwZUlE
KCk7CiAKK1dLX0VYUE9SVCBXS1VSTFJlZiBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb25z
dCBjaGFyKiBzdHJpbmcpOworCitXS19FWFBPUlQgYm9vbCBXS1VSTElzRXF1YWwoV0tVUkxSZWYg
YSwgV0tVUkxSZWYgYik7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkluZGV4OiBX
ZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvV0tVUkwuY3BwCShyZXZpc2lvbiA2ODY1MSkKKysrIFdlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLVVJMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMyArMzMsMTMgQEAKIHsKICAgICBy
ZXR1cm4gdG9SZWYoV2ViVVJMOjpBUElUeXBlKTsKIH0KKworV0tVUkxSZWYgV0tVUkxDcmVhdGVX
aXRoVVRGOENTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIHJldHVybiB0b1JlZihX
ZWJVUkw6OmNyZWF0ZShzdHJpbmcpLmxlYWtSZWYoKSk7Cit9CisKK2Jvb2wgV0tVUkxJc0VxdWFs
KFdLVVJMUmVmIGEsIFdLVVJMUmVmIGIpCit7CisgICAgcmV0dXJuICp0b1dLKGEpID09ICp0b1dL
KGIpOworfQpJbmRleDogV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5oCShyZXZpc2lvbiA2ODY1MSkKKysr
IFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzYs
MTAgKzM3LDMzIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoV0lOMzIp
ICYmICFkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19XSU5TQ1dfXykgXAorICAgICYmICEo
KGRlZmluZWQoX19DQ19BUk0pIHx8IGRlZmluZWQoX19BUk1DQ19fKSkgJiYgIWRlZmluZWQoX19s
aW51eF9fKSkgLyogUlZDVCAqLworICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgV0tDaGFyOwor
I2Vsc2UKKyAgICB0eXBlZGVmIHdjaGFyX3QgV0tDaGFyOworI2VuZGlmCisKIFdLX0VYUE9SVCBX
S1R5cGVJRCBXS1N0cmluZ0dldFR5cGVJRCgpOwogCitXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tT
dHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhjb25zdCBXS0NoYXIqIGNoYXJhY3RlcnMsIHNpemVf
dCBsZW5ndGgpOworCitXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKTsKKworV0tfRVhQT1JUIGNvbnN0IFdLQ2hhciog
V0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKFdLU3RyaW5nUmVmIHN0cmluZyk7CisKK1dLX0VYUE9S
VCBzaXplX3QgV0tTdHJpbmdHZXRMZW5ndGgoV0tTdHJpbmdSZWYgc3RyaW5nKTsKKwogV0tfRVhQ
T1JUIGJvb2wgV0tTdHJpbmdJc0VtcHR5KFdLU3RyaW5nUmVmIHN0cmluZyk7CiAKK1dLX0VYUE9S
VCBib29sIFdLU3RyaW5nSXNFcXVhbChXS1N0cmluZ1JlZiBhLCBXS1N0cmluZ1JlZiBiKTsKKwor
V0tfRVhQT1JUIGJvb2wgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhXS1N0cmluZ1JlZiBh
LCBjb25zdCBjaGFyKiBiKTsKKworV0tfRVhQT1JUIHNpemVfdCBXS1N0cmluZ0dldE1heGltdW1V
VEY4Q1N0cmluZ1NpemUoV0tTdHJpbmdSZWYgc3RyaW5nKTsKKworV0tfRVhQT1JUIHNpemVfdCBX
S1N0cmluZ0dldFVURjhDU3RyaW5nKFdLU3RyaW5nUmVmIHN0cmluZywgY2hhciogYnVmZmVyLCBz
aXplX3QgYnVmZmVyU2l6ZSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCkluZGV4
OiBXZWJLaXQyL1NoYXJlZC9XZWJTdHJpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQyL1NoYXJl
ZC9XZWJTdHJpbmcuaAkocmV2aXNpb24gNjg2NTEpCisrKyBXZWJLaXQyL1NoYXJlZC9XZWJTdHJp
bmcuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNyw2ICsyOCw3IEBACiAjZGVmaW5lIFdlYlN0cmlu
Z19oCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9K
U1N0cmluZ1JlZi5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTQzLDYgKzQ1LDE2IEBACiAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgV2ViU3RyaW5nKHN0cmluZykpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFdlYlN0cmluZz4gY3JlYXRlKGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlN0cmluZyhjaGFyYWN0ZXJzKSk7CisgICAg
fQorCisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU3RyaW5nPiBjcmVhdGUoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYlN0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICB9CisKICAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAKQEAgLTU0LDEx
ICs2NiwyNSBAQAogICAgIHsKICAgICB9CiAKKyAgICBXZWJTdHJpbmcoY29uc3QgY2hhciogc3Ry
aW5nKQorICAgICAgICA6IG1fc3RyaW5nKHN0cmluZykKKyAgICB7CisgICAgfQorCisgICAgV2Vi
U3RyaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQorICAgICAgICA6
IG1fc3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCkKKyAgICB7CisgICAgfQorCiAgICAgdmlydHVh
bCBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBBUElUeXBlOyB9CiAKICAgICBTdHJpbmcgbV9z
dHJpbmc7CiB9OwogCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlN0cmluZyYgYSwg
Y29uc3QgV2ViU3RyaW5nJiBiKSB7IHJldHVybiBhLnN0cmluZygpID09IGIuc3RyaW5nKCk7IH0K
K2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgV2ViU3RyaW5nJiBhLCBjb25zdCBjaGFyKiBi
KSB7IHJldHVybiBhLnN0cmluZygpID09IGI7IH0KK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgY2hhciogYSwgY29uc3QgV2ViU3RyaW5nJiBiKSB7IHJldHVybiBhID09IGIuc3RyaW5nKCk7
IH0KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBXZWJTdHJpbmdfaAo=
</data>
<flag name="review"
          id="58870"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69457</attachid>
            <date>2010-10-01 05:54:21 -0700</date>
            <delta_ts>2010-10-01 17:18:19 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>0001-WebKitTestRunner-should-be-portable.patch</filename>
            <type>text/plain</type>
            <size>18499</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">RnJvbSBiYTY4NDdiYmI4NjM4YjZmY2FkMTQ0YzlkOTBkZDYzZGM5NDU0ZWNkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBCYWxhenMgS2VsZW1lbiA8a2JhbGF6c0B3ZWJraXQub3JnPgpE
YXRlOiBGcmksIDEgT2N0IDIwMTAgMTQ6NTI6NTggKzAyMDAKU3ViamVjdDogW1BBVENIXSBXZWJL
aXRUZXN0UnVubmVyIHNob3VsZCBiZSBwb3J0YWJsZQoKLS0tCiBXZWJLaXQyL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjQgKysrKysrKwogV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvV0tTdHJpbmcuY3BwICAgICAgICAgICAgICAgfCAgIDQ5ICsrKysrKysrKysrKysK
IFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmggICAgICAgICAgICAgICAgIHwgICAxOCAr
KysrKwogV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuY3BwICAgICAgICAgICAgICAgICAgfCAg
IDEwICsrKwogV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuaCAgICAgICAgICAgICAgICAgICAg
fCAgICA0ICsKIFdlYktpdFRvb2xzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgICAyMSArKysrKysKIFdlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rp
b25zLmggIHwgICA4NSArKysrKystLS0tLS0tLS0tLS0tLS0tLQogV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAgfCAgIDE5ICsrLS0tCiBXZWJLaXRUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcCB8ICAgMTcgKystLS0KIDkgZmlsZXMg
Y2hhbmdlZCwgMTYzIGluc2VydGlvbnMoKyksIDg0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh
L1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggY2E4NGUxZS4uNTM3
ODVhYSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0Mi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMC0wMSAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpz
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9ydGFibGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MzkzCisKKyAgICAgICAgQWRkIEMg
QVBJIGZvciBjcmVhdGluZyBhbmQgbWFuaXB1bGF0aW5nIHN0cmluZ3MgYW5kIHVybHMuCisgICAg
ICAgIFRoZSBkZXNpbmcgb2YgdGhlIG5ldyBBUEktcyB3YXMgaW5zcGlyZWQgYnkgdGhlIEpTU3Ry
aW5nCisgICAgICAgIEFQSSBvZiBKYXZhU2NyaXB0Q29yZS4KKyAgICAgICAgKiBTaGFyZWQvQVBJ
L2MvV0tTdHJpbmcuY3BwOgorICAgICAgICAoV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcp
OgorICAgICAgICAoV0tTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyk6CisgICAgICAgIChXS1N0
cmluZ0dldENoYXJhY3RlcnNQdHIpOgorICAgICAgICAoV0tTdHJpbmdHZXRMZW5ndGgpOgorICAg
ICAgICAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyk6CisgICAgICAgIChXS1N0cmluZ0dl
dE1heGltdW1VVEY4Q1N0cmluZ1NpemUpOgorICAgICAgICAoV0tTdHJpbmdHZXRVVEY4Q1N0cmlu
Zyk6CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmg6CisgICAgICAgICogU2hhcmVk
L0FQSS9jL1dLVVJMLmNwcDoKKyAgICAgICAgKFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKToK
KyAgICAgICAgKFdLVVJMSXNFcXVhbCk6CisgICAgICAgICogU2hhcmVkL0FQSS9jL1dLVVJMLmg6
CisKIDIwMTAtMDktMzAgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJLaXQyL1No
YXJlZC9BUEkvYy9XS1N0cmluZy5jcHAgYi9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5j
cHAKaW5kZXggM2VjOWM4YS4uMThmNzgwMSAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9TaGFyZWQvQVBJ
L2MvV0tTdHJpbmcuY3BwCisrKyBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNwcApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2ICsyNyw4IEBACiAjaW5jbHVkZSAiV0tTdHJpbmcuaCIKIAogI2luY2x1ZGUgIldL
QVBJQ2FzdC5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgPHd0
Zi91bmljb2RlL1VURjguaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIApAQCAtMzQsNiAr
MzcsMjYgQEAgV0tUeXBlSUQgV0tTdHJpbmdHZXRUeXBlSUQoKQogICAgIHJldHVybiB0b1JlZihX
ZWJTdHJpbmc6OkFQSVR5cGUpOwogfQogCitXS1N0cmluZ1JlZiBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvUmVmKFdlYlN0
cmluZzo6Y3JlYXRlKFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSkubGVha1JlZigpKTsKK30KKwor
V0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdLU3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoY29uc3Qg
V0tDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQoreworICAgIHJldHVybiB0b1JlZihX
ZWJTdHJpbmc6OmNyZWF0ZShTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSkubGVha1JlZigpKTsK
K30KKworY29uc3QgV0tDaGFyKiBXS1N0cmluZ0dldENoYXJhY3RlcnNQdHIoV0tTdHJpbmdSZWYg
c3RyaW5nKQoreworICAgIHJldHVybiB0b1dLKHN0cmluZyktPnN0cmluZygpLmNoYXJhY3RlcnMo
KTsKK30KKworc2l6ZV90IFdLU3RyaW5nR2V0TGVuZ3RoKFdLU3RyaW5nUmVmIHN0cmluZykKK3sK
KyAgICByZXR1cm4gdG9XSyhzdHJpbmcpLT5zdHJpbmcoKS5sZW5ndGgoKTsKK30KKwogYm9vbCBX
S1N0cmluZ0lzRW1wdHkoV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQogewogICAgIHJldHVybiB0b1dL
KHN0cmluZ1JlZiktPmlzRW1wdHkoKTsKQEAgLTQ4LDMgKzcxLDI5IEBAIGJvb2wgV0tTdHJpbmdJ
c0VxdWFsKFdLU3RyaW5nUmVmIGZpcnN0U3RyaW5nLCBXS1N0cmluZ1JlZiBzZWNvbmRTdHJpbmcp
CiAgICAgICAgIAogICAgIHJldHVybiB0b1dLKGZpcnN0U3RyaW5nKS0+c3RyaW5nKCkgPT0gdG9X
SyhzZWNvbmRTdHJpbmcpLT5zdHJpbmcoKTsKIH0KKworYm9vbCBXS1N0cmluZ0lzRXF1YWxUb1VU
RjhDU3RyaW5nKFdLU3RyaW5nUmVmIGEsIGNvbnN0IGNoYXIqIGIpCit7CisgICAgUmVmUHRyPFdl
YlN0cmluZz4gYldLID0gdG9XSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhiKSk7Cisg
ICAgYm9vbCByZXN1bHQgPSAodG9XSyhhKS0+c3RyaW5nKCkgPT0gYldLLT5zdHJpbmcoKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworc2l6ZV90IFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3Ry
aW5nU2l6ZShXS1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgLy8gQW55IFVURjggY2hhcmFjdGVy
ID4gMyBieXRlcyBlbmNvZGVzIGFzIGEgVVRGMTYgc3Vycm9nYXRlIHBhaXIuCisgICAgcmV0dXJu
IHRvV0soc3RyaW5nKS0+c3RyaW5nKCkubGVuZ3RoKCkgKiAzICsgMTsgLy8gKyAxIGZvciB0ZXJt
aW5hdGluZyAnXDAnCit9CisKK3NpemVfdCBXS1N0cmluZ0dldFVURjhDU3RyaW5nKFdLU3RyaW5n
UmVmIHN0cmluZywgY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkKK3sKKyAgICBjaGFy
KiBwID0gYnVmZmVyOworICAgIGNvbnN0IFN0cmluZyYgd3RmU3RyaW5nID0gdG9XSyhzdHJpbmcp
LT5zdHJpbmcoKTsKKyAgICBjb25zdCBVQ2hhciogZCA9IHd0ZlN0cmluZy5jaGFyYWN0ZXJzKCk7
CisgICAgV1RGOjpVbmljb2RlOjpDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IFdURjo6VW5pY29k
ZTo6Y29udmVydFVURjE2VG9VVEY4KCZkLCBkICsgd3RmU3RyaW5nLmxlbmd0aCgpLCAmcCwgcCAr
IGJ1ZmZlclNpemUgLSAxLCB0cnVlKTsKKyAgICAqcCsrID0gJ1wwJzsKKyAgICBpZiAocmVzdWx0
ICE9IFdURjo6VW5pY29kZTo6Y29udmVyc2lvbk9LICYmIHJlc3VsdCAhPSBXVEY6OlVuaWNvZGU6
OnRhcmdldEV4aGF1c3RlZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcCAtIGJ1
ZmZlcjsKK30KZGlmZiAtLWdpdCBhL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmggYi9X
ZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5oCmluZGV4IDE5NDUwNDUuLmQ0NDVlYTAgMTAw
NjQ0Ci0tLSBhL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmgKKysrIGIvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvV0tTdHJpbmcuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNiwxMCArMzcsMjcgQEAKIGV4dGVybiAiQyIg
ewogI2VuZGlmCiAKKyNpZiAhZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoX1dJTjMyKSAmJiAh
ZGVmaW5lZChfX1dJTlNDV19fKSBcCisgICAgJiYgISgoZGVmaW5lZChfX0NDX0FSTSkgfHwgZGVm
aW5lZChfX0FSTUNDX18pKSAmJiAhZGVmaW5lZChfX2xpbnV4X18pKSAvKiBSVkNUICovCisgICAg
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBXS0NoYXI7CisjZWxzZQorICAgIHR5cGVkZWYgd2NoYXJf
dCBXS0NoYXI7CisjZW5kaWYKKwogV0tfRVhQT1JUIFdLVHlwZUlEIFdLU3RyaW5nR2V0VHlwZUlE
KCk7CiAKK1dLX0VYUE9SVCBXS1N0cmluZ1JlZiBXS1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJz
KGNvbnN0IFdLQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCk7CitXS19FWFBPUlQgV0tT
dHJpbmdSZWYgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29uc3QgY2hhciogc3RyaW5n
KTsKKworV0tfRVhQT1JUIGNvbnN0IFdLQ2hhciogV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKFdL
U3RyaW5nUmVmIHN0cmluZyk7CitXS19FWFBPUlQgc2l6ZV90IFdLU3RyaW5nR2V0TGVuZ3RoKFdL
U3RyaW5nUmVmIHN0cmluZyk7CisKIFdLX0VYUE9SVCBib29sIFdLU3RyaW5nSXNFbXB0eShXS1N0
cmluZ1JlZiBzdHJpbmcpOwogV0tfRVhQT1JUIGJvb2wgV0tTdHJpbmdJc0VxdWFsKFdLU3RyaW5n
UmVmIGZpcnN0U3RyaW5nLCBXS1N0cmluZ1JlZiBzZWNvbmRTdHJpbmcpOworV0tfRVhQT1JUIGJv
b2wgV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhXS1N0cmluZ1JlZiBhLCBjb25zdCBjaGFy
KiBiKTsKKworV0tfRVhQT1JUIHNpemVfdCBXS1N0cmluZ0dldE1heGltdW1VVEY4Q1N0cmluZ1Np
emUoV0tTdHJpbmdSZWYgc3RyaW5nKTsKK1dLX0VYUE9SVCBzaXplX3QgV0tTdHJpbmdHZXRVVEY4
Q1N0cmluZyhXS1N0cmluZ1JlZiBzdHJpbmcsIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNp
emUpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL1dlYktpdDIvU2hhcmVk
L0FQSS9jL1dLVVJMLmNwcCBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmNwcAppbmRleCBi
NTI1ODMzLi42MDJmYWFiIDEwMDY0NAotLS0gYS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5j
cHAKKysrIGIvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuY3BwCkBAIC0zMywzICszMywxMyBA
QCBXS1R5cGVJRCBXS1VSTEdldFR5cGVJRCgpCiB7CiAgICAgcmV0dXJuIHRvUmVmKFdlYlVSTDo6
QVBJVHlwZSk7CiB9CisKK1dLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnN0
IGNoYXIqIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9SZWYoV2ViVVJMOjpjcmVhdGUoU3RyaW5n
Ojpmcm9tVVRGOChzdHJpbmcpKS5sZWFrUmVmKCkpOworfQorCitib29sIFdLVVJMSXNFcXVhbChX
S1VSTFJlZiBhLCBXS1VSTFJlZiBiKQoreworICAgIHJldHVybiB0b1dLKGEpLT5zdHJpbmcoKSA9
PSB0b1dLKGIpLT5zdHJpbmcoKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdDIvU2hhcmVkL0FQSS9j
L1dLVVJMLmggYi9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5oCmluZGV4IGUxMmY1NWMuLjZl
YjQ2YTEgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmgKKysrIGIvV2Vi
S2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuaApAQCAtMzQsNiArMzQsMTAgQEAgZXh0ZXJuICJDIiB7
CiAKIFdLX0VYUE9SVCBXS1R5cGVJRCBXS1VSTEdldFR5cGVJRCgpOwogCitXS19FWFBPUlQgV0tV
UkxSZWYgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKTsKKwor
V0tfRVhQT1JUIGJvb2wgV0tVUkxJc0VxdWFsKFdLVVJMUmVmIGEsIFdLVVJMUmVmIGIpOworCiAj
aWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQ2Y2M3ODkuLjViNzZkMzIgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNCBAQAorMjAxMC0xMC0wMSAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpz
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9ydGFibGUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MzkzCisKKyAgICAgICAgVXNlIHRo
ZSBuZXcgV2ViS2l0MiBBUEktcyBmb3Igd29ya2luZyB3aXRoIHN0cmluZ3MgYW5kIHVybHMuCisg
ICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdU
Ujo6YmxhbmtVUkwpOgorICAgICAgICAoV1RSOjp0b1dLKToKKyAgICAgICAgKFdUUjo6dG9KUyk6
CisgICAgICAgIChXVFI6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIv
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRT
dGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpk
aWRGaW5pc2hMb2FkRm9yRnJhbWUpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdElu
dm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6VGVzdEludm9jYXRp
b24pOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tlKToKKyAgICAgICAgKFdU
Ujo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToK
KwogMjAxMC0wOS0zMCAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5u
ZXIvU3RyaW5nRnVuY3Rpb25zLmgKaW5kZXggODE5NTYwNi4uMGFhYzIzMSAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAorKysgYi9XZWJL
aXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDU0ICsy
OCw0MCBAQAogI2RlZmluZSBTdHJpbmdGdW5jdGlvbnNfaAogCiAjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRl
IDxzc3RyZWFtPgogI2luY2x1ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxX
ZWJLaXQyL1dLU3RyaW5nLmg+Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZ0NGLmg+CiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS1VSTC5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tVUkxDRi5oPgotI2lu
Y2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdUUiB7
CiAKLS8vIENvbnZlcnNpb24gZnVuY3Rpb25zCi0KLWlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHRvQ0YoSlNTdHJpbmdSZWYgc3RyaW5nKQotewotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZT
dHJpbmdSZWY+KEFkb3B0Q0YsIEpTU3RyaW5nQ29weUNGU3RyaW5nKDAsIHN0cmluZykpOwotfQot
Ci1pbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVmPiB0b0NGKFdLU3RyaW5nUmVmIHN0cmluZykK
LXsKLSAgICByZXR1cm4gUmV0YWluUHRyPENGU3RyaW5nUmVmPihBZG9wdENGLCBXS1N0cmluZ0Nv
cHlDRlN0cmluZygwLCBzdHJpbmcpKTsKLX0KLQotaW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4g
dG9DRihXS1VSTFJlZiB1cmwpCitpbmxpbmUgV0tVUkxSZWYgYmxhbmtVUkwoKQogewotICAgIHJl
dHVybiBSZXRhaW5QdHI8Q0ZVUkxSZWY+KEFkb3B0Q0YsIFdLVVJMQ29weUNGVVJMKDAsIHVybCkp
OworICAgIHN0YXRpYyBXS1VSTFJlZiBzdGF0aWNCbGFua1VSTCA9IFdLVVJMQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJhYm91dDpibGFuayIpOworICAgIHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0K
IAotaW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4gdG9DRihjb25zdCBXS1JldGFpblB0cjxXS1VS
TFJlZj4mIHVybCkKLXsKLSAgICByZXR1cm4gdG9DRih1cmwuZ2V0KCkpOwotfQorLy8gQ29udmVy
c2lvbiBmdW5jdGlvbnMKIAogaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpT
U3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICByZXR1cm4gV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkp
OworICAgIGNvbnN0IEpTQ2hhciogY2hhcmFjdGVycyA9IEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0
cihzdHJpbmcpOworICAgIHNpemVfdCBsZW5ndGggPSBKU1N0cmluZ0dldExlbmd0aChzdHJpbmcp
OworICAgIHJldHVybiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oQWRvcHRXSywgV0tTdHJpbmdD
cmVhdGVXaXRoQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKIH0KIAotaW5saW5lIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJp
bmcpCitpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJpbmdSZWYgc3Ry
aW5nKQogewotICAgIHJldHVybiBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oQWRvcHRXSywgV0tT
dHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcodG9DRihzdHJpbmcuZ2V0KCkpLmdldCgpKSk7CisgICAg
Y29uc3QgV0tDaGFyKiBjaGFyYWN0ZXJzID0gV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHN0cmlu
Zyk7CisgICAgc2l6ZV90IGxlbmd0aCA9IFdLU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAg
cmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRo
Q2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKIH0KIAotaW5saW5lIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiB0b0pTKFdLU3RyaW5nUmVmIHN0cmluZykKK2lubGluZSBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKQogewot
ICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRl
V2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkpOworICAgIHJldHVybiB0b1dLKHN0cmlu
Zy5nZXQoKSk7CiB9CiAKIGlubGluZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdG9KUyhjb25z
dCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZykKQEAgLTg0LDI3ICs3MSwxNyBAQCBp
bmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoY29uc3QgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+JiBzdHJpbmcpCiAKIC8vIFN0cmVhbWluZyBmdW5jdGlvbnMKIAotaW5saW5lIHN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgQ0ZTdHJpbmdSZWYgc3Ry
aW5nUmVmKQoraW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91
dCwgV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQogewogICAgIGlmICghc3RyaW5nUmVmKQogICAgICAg
ICByZXR1cm4gb3V0OwotICAgIENGSW5kZXggYnVmZmVyTGVuZ3RoID0gQ0ZTdHJpbmdHZXRNYXhp
bXVtU2l6ZUZvckVuY29kaW5nKENGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZ1JlZiksIGtDRlN0cmlu
Z0VuY29kaW5nVVRGOCkgKyAxOwotICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3Ro
KTsKLSAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmluZyhzdHJpbmdSZWYsIGJ1ZmZlci5kYXRhKCks
IGJ1ZmZlckxlbmd0aCwga0NGU3RyaW5nRW5jb2RpbmdVVEY4KSkKLSAgICAgICAgcmV0dXJuIG91
dDsKLSAgICByZXR1cm4gb3V0IDw8IGJ1ZmZlci5kYXRhKCk7Ci19CiAKLWlubGluZSBzdGQ6Om9z
dHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFJldGFpblB0cjxDRlN0
cmluZ1JlZj4mIHN0cmluZ1JlZikKLXsKLSAgICByZXR1cm4gb3V0IDw8IHN0cmluZ1JlZi5nZXQo
KTsKLX0KKyAgICBzdGF0aWMgVmVjdG9yPGNoYXIsIDEwMjQ+IHN0YXRpY0J1ZmZlcjsKKyAgICBz
dGF0aWNCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5n
U2l6ZShzdHJpbmdSZWYpKTsKKyAgICBpZiAoV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmdS
ZWYsIHN0YXRpY0J1ZmZlci5kYXRhKCksIHN0YXRpY0J1ZmZlci5jYXBhY2l0eSgpKSkKKyAgICAg
ICAgb3V0IDw8IHN0YXRpY0J1ZmZlci5kYXRhKCk7CiAKLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9w
ZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIFdLU3RyaW5nUmVmIHN0cmluZ1JlZikKLXsKLSAg
ICBpZiAoIXN0cmluZ1JlZikKLSAgICAgICAgcmV0dXJuIG91dDsKLSAgICByZXR1cm4gb3V0IDw8
IHRvQ0Yoc3RyaW5nUmVmKTsKKyAgICByZXR1cm4gb3V0OwogfQogCiBpbmxpbmUgc3RkOjpvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4mIHN0cmluZ1JlZikKQEAgLTExMiwyNCArODksNiBAQCBpbmxpbmUgc3RkOjpvc3Ry
ZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZgogICAgIHJldHVybiBvdXQgPDwgc3RyaW5nUmVmLmdldCgpOwogfQogCi0vLyBVUkwg
Y3JlYXRpb24KLQotaW5saW5lIFdLVVJMUmVmIGNyZWF0ZVdLVVJMKGNvbnN0IGNoYXIqIHBhdGhP
clVSTCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhPclVSTENGU3RyaW5nKEFk
b3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLCBrQ0ZTdHJpbmdF
bmNvZGluZ1VURjgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMOwotICAgIGlmIChD
RlN0cmluZ0hhc1ByZWZpeChwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwgQ0ZTVFIoImh0dHA6Ly8i
KSkgfHwgQ0ZTdHJpbmdIYXNQcmVmaXgocGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RSKCJo
dHRwczovLyIpKSkKLSAgICAgICAgY2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhTdHJpbmco
MCwgcGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIDApKTsKLSAgICBlbHNlCi0jaWYgUExBVEZPUk0o
V0lOKQotICAgICAgICBjZlVSTC5hZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRo
KDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBrQ0ZVUkxXaW5kb3dzUGF0aFN0eWxlLCBmYWxz
ZSkpOwotI2Vsc2UKLSAgICAgICAgY2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lz
dGVtUGF0aCgwLCBwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUs
IGZhbHNlKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoY2ZVUkwu
Z2V0KCkpOwotfQotCi0KIH0gLy8gbmFtZXNwYWNlIFdUUgogCiAjZW5kaWYgLy8gU3RyaW5nRnVu
Y3Rpb25zX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENv
bnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxl
ci5jcHAKaW5kZXggZWZkODkzZC4uNDdmNTExOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKQEAgLTIwOCwxMiArMjA4LDEyIEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKQogICAgIFdLUHJl
ZmVyZW5jZXNTZXRGb250U21vb3RoaW5nTGV2ZWwocHJlZmVyZW5jZXMsIGtXS0ZvbnRTbW9vdGhp
bmdMZXZlbE5vU3VicGl4ZWxBbnRpQWxpYXNpbmcpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRYU1NB
dWRpdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgZmFsc2UpOwogCi0gICAgc3RhdGljIFdLU3RyaW5n
UmVmIHN0YW5kYXJkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RS
KCJUaW1lcyIpKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgY3Vyc2l2ZUZvbnRGYW1pbHkgPSBX
S1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlNUUigiQXBwbGUgQ2hhbmNlcnkiKSk7Ci0gICAg
c3RhdGljIFdLU3RyaW5nUmVmIGZhbnRhc3lGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRo
Q0ZTdHJpbmcoQ0ZTVFIoIlBhcHlydXMiKSk7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZpeGVk
Rm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RSKCJDb3VyaWVyIikp
OwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzYW5zU2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdD
cmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIkhlbHZldGljYSIpKTsKLSAgICBzdGF0aWMgV0tTdHJp
bmdSZWYgc2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIo
IlRpbWVzIikpOworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBX
S1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZXMiKTsKKyAgICBzdGF0aWMgV0tTdHJp
bmdSZWYgY3Vyc2l2ZUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
QXBwbGUgQ2hhbmNlcnkiKTsKKyAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZmFudGFzeUZvbnRGYW1p
bHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiUGFweXJ1cyIpOworICAgIHN0YXRp
YyBXS1N0cmluZ1JlZiBmaXhlZEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiQ291cmllciIpOworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzYW5zU2VyaWZGb250RmFt
aWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIkhlbHZldGljYSIpOworICAgIHN0
YXRpYyBXS1N0cmluZ1JlZiBzZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZygiVGltZXMiKTsKIAogICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1p
bHkocHJlZmVyZW5jZXMsIHN0YW5kYXJkRm9udEZhbWlseSk7CiAgICAgV0tQcmVmZXJlbmNlc1Nl
dEN1cnNpdmVGb250RmFtaWx5KHByZWZlcmVuY2VzLCBjdXJzaXZlRm9udEZhbWlseSk7CkBAIC0y
MjcsOCArMjI3LDcgQEAgdm9pZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVu
dFZhbHVlcygpCiAgICAgLy8gUmVzZXQgbWFpbiBwYWdlIGJhY2sgdG8gYWJvdXQ6YmxhbmsKICAg
ICBtX2RvbmVSZXNldHRpbmcgPSBmYWxzZTsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1
cmwoQWRvcHRXSywgY3JlYXRlV0tVUkwoImFib3V0OmJsYW5rIikpOwotICAgIFdLUGFnZUxvYWRV
UkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCB1cmwuZ2V0KCkpOworICAgIFdLUGFnZUxvYWRVUkwo
bV9tYWluV2ViVmlldy0+cGFnZSgpLCBibGFua1VSTCgpKTsKICAgICBUZXN0Q29udHJvbGxlcjo6
cnVuVW50aWwobV9kb25lUmVzZXR0aW5nKTsKIH0KIApAQCAtMjk1LDkgKzI5NCw3IEBAIHZvaWQg
VGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tG
cmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxS
ZWY+IHdrVVJMKEFkb3B0V0ssIFdLRnJhbWVDb3B5VVJMKGZyYW1lKSk7Ci0gICAgUmV0YWluUHRy
PENGVVJMUmVmPiBjZlVSTD0gdG9DRih3a1VSTCk7Ci0gICAgQ0ZTdHJpbmdSZWYgY2ZVUkxTdHJp
bmcgPSBDRlVSTEdldFN0cmluZyhjZlVSTC5nZXQoKSk7Ci0gICAgaWYgKCFDRkVxdWFsKGNmVVJM
U3RyaW5nLCBDRlNUUigiYWJvdXQ6YmxhbmsiKSkpCisgICAgaWYgKCFXS1VSTElzRXF1YWwod2tV
UkwuZ2V0KCksIGJsYW5rVVJMKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNl
dHRpbmcgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9U
ZXN0SW52b2NhdGlvbi5jcHAgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZv
Y2F0aW9uLmNwcAppbmRleCA0N2RmNjZiLi5lZjM3MjQyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9XZWJLaXRUb29scy9X
ZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2lu
Y2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHRQcml2
YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9S
ZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CkBAIC0zOCw3ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgV1RS
IHsKIAogVGVzdEludm9jYXRpb246OlRlc3RJbnZvY2F0aW9uKGNvbnN0IGNoYXIqIHBhdGhPclVS
TCkKLSAgICA6IG1fdXJsKEFkb3B0V0ssIGNyZWF0ZVdLVVJMKHBhdGhPclVSTCkpCisgICAgOiBt
X3VybChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpKQogICAg
ICwgbV9wYXRoT3JVUkwoZmFzdFN0ckR1cChwYXRoT3JVUkwpKQogICAgICwgbV9nb3RJbml0aWFs
UmVzcG9uc2UoZmFsc2UpCiAgICAgLCBtX2dvdEZpbmFsTWVzc2FnZShmYWxzZSkKQEAgLTcwLDgg
KzY5LDggQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6aW52b2tlKCkKIHsKICAgICBzaXplV2ViVmll
d0ZvckN1cnJlbnRUZXN0KG1fcGF0aE9yVVJMKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlNU
UigiQmVnaW5UZXN0IikpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJv
ZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIiIpKSk7CisgICAg
V0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3QiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCIiKSk7CiAgICAgV0tDb250ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250
cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9k
eS5nZXQoKSk7CiAKICAgICBUZXN0Q29udHJvbGxlcjo6cnVuVW50aWwobV9nb3RJbml0aWFsUmVz
cG9uc2UpOwpAQCAtMTA0LDggKzEwMyw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXAoY29u
c3QgY2hhciogc3RyaW5nVG9EdW1wKQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZl
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBl
UmVmIG1lc3NhZ2VCb2R5KQogewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZNZXNzYWdl
TmFtZShBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBtZXNzYWdlTmFtZSkpOwotICAg
IGlmIChDRkVxdWFsKGNmTWVzc2FnZU5hbWUuZ2V0KCksIENGU1RSKCJFcnJvciIpKSkgeworICAg
IGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRXJyb3IiKSkg
ewogICAgICAgICAvLyBTZXQgYWxsIHN0YXRlcyB0byB0cnVlIHRvIHN0b3Agc3Bpbm5pbmcgdGhl
IHJ1bmxvb3AuCiAgICAgICAgIG1fZ290SW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAg
bV9nb3RGaW5hbE1lc3NhZ2UgPSB0cnVlOwpAQCAtMTEzLDExICsxMTEsMTAgQEAgdm9pZCBUZXN0
SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdS
ZWYgbWVzc2FnZU5hbWUKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChDRkVxdWFs
KGNmTWVzc2FnZU5hbWUuZ2V0KCksIENGU1RSKCJBY2siKSkpIHsKKyAgICBpZiAoV0tTdHJpbmdJ
c0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFtZSwgIkFjayIpKSB7CiAgICAgICAgIEFTU0VS
VChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAg
ICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZNZXNzYWdlQm9keShBZG9wdENGLCBXS1N0cmlu
Z0NvcHlDRlN0cmluZygwLCBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpKSk7
CiAKLSAgICAgICAgaWYgKENGRXF1YWwoY2ZNZXNzYWdlQm9keS5nZXQoKSwgQ0ZTVFIoIkJlZ2lu
VGVzdCIpKSkgeworICAgICAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdGF0
aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpLCAiQmVnaW5UZXN0IikpIHsKICAgICAg
ICAgICAgIG1fZ290SW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtMTI1LDcgKzEyMiw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJl
Y2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAotICAgIGlmIChDRkVxdWFsKGNm
TWVzc2FnZU5hbWUuZ2V0KCksIENGU1RSKCJEb25lIikpKSB7CisgICAgaWYgKFdLU3RyaW5nSXNF
cXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUsICJEb25lIikpIHsKICAgICAgICAgQVNTRVJU
KFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAg
ICAgb3N0cmluZ3N0cmVhbSBvdXQ7CiAgICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxXS1N0cmlu
Z1JlZj4obWVzc2FnZUJvZHkpOwotLSAKMS42LjUKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69546</attachid>
            <date>2010-10-01 17:18:19 -0700</date>
            <delta_ts>2010-10-02 01:01:30 -0700</delta_ts>
            <desc>rebased patch</desc>
            <filename>land_wtr_porting.diff</filename>
            <type>text/plain</type>
            <size>19154</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
NzNmZjA1Mi4uNTU4MDUxZiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0xMC0wMSAgQmFsYXpzIEtlbGVt
ZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9ydGFibGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MzkzCisKKyAg
ICAgICAgQWRkIEFQSSBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBzdHJpbmdzIGFuZCB1
cmxzLgorICAgICAgICBOb3cgd2UgY2FuIGNyZWF0aW5nIGEgSlNTdHJpbmcgZnJvbSBhIFdLU3Ry
aW5nIGFuZCB2aWNhCisgICAgICAgIHZlcnNhIHdpdGhvdXQgcmVkdW5kYW50IGNvcGllcy4KKyAg
ICAgICAgKiBTaGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwOgorICAgICAgICAoV0tTdHJpbmdDcmVh
dGVXaXRoQ2hhcmFjdGVycyk6IEZvciBXS1N0cmluZyAtPiBKU1N0cmluZyBjb252ZXJzaW9uLgor
ICAgICAgICAoV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKTogRm9yIEpTU3RyaW5nIC0+IFdLU3Ry
aW5nIGNvbnZlcnNpb24uCisgICAgICAgIChXS1N0cmluZ0dldExlbmd0aCk6IEZvciBXS1N0cmlu
ZyAtPiBKU1N0cmluZyBjb252ZXJzaW9uLgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1N0cmlu
Zy5oOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1VSTC5jcHA6CisgICAgICAgIChXS1VSTENy
ZWF0ZVdpdGhVVEY4Q1N0cmluZyk6CisgICAgICAgIChXS1VSTElzRXF1YWwpOgorICAgICAgICAq
IFNoYXJlZC9BUEkvYy9XS1VSTC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJTdHJpbmcuaDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViU3RyaW5nOjpjcmVhdGVXaXRoQ2hhcmFjdGVycyk6IEZpeGVkIGNv
bnN0bmVzcyAobWFrZSBpdCBjb25zdCkuCisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6Z2V0
VVRGOENTdHJpbmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmdldENoYXJhY3RlcnNQ
dHIpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmdldExlbmd0aCk6CisgICAgICAgIChX
ZWJLaXQ6OldlYlN0cmluZzo6ZXF1YWwpOiBGaXhlZCBjb25zdG5lc3MgKG1ha2UgaXQgY29uc3Qp
LgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFsVG9VVEY4U3RyaW5nKTogRml4ZWQg
Y29uc3RuZXNzIChtYWtlIGl0IGNvbnN0KS4KKyAgICAgICAgKiBTaGFyZWQvV2ViVVJMLmg6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlVSTDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJM
OjplcXVhbCk6CisKIDIwMTAtMTAtMDEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdp
dCBhL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNwcCBiL1dlYktpdDIvU2hhcmVkL0FQ
SS9jL1dLU3RyaW5nLmNwcAppbmRleCBlYWZlZDNjLi4wN2I1M2MyIDEwMDY0NAotLS0gYS9XZWJL
aXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHAKKysrIGIvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mv
V0tTdHJpbmcuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5p
dmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQxLDIyIEBAIFdLU3RyaW5nUmVmIFdLU3RyaW5nQ3Jl
YXRlV2l0aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKICAgICByZXR1cm4gdG9SZWYo
d2ViU3RyaW5nLnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQogCitXS19FWFBPUlQgV0tTdHJpbmdS
ZWYgV0tTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhjb25zdCBXS0NoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCit7CisgICAgUmVmUHRyPFdlYlN0cmluZz4gd2ViU3RyaW5nID0gV2Vi
U3RyaW5nOjpjcmVhdGUoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1cm4gdG9SZWYod2Vi
U3RyaW5nLnJlbGVhc2UoKS5sZWFrUmVmKCkpOworfQorCitjb25zdCBXS0NoYXIqIFdLU3RyaW5n
R2V0Q2hhcmFjdGVyc1B0cihXS1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV0so
c3RyaW5nKS0+Z2V0Q2hhcmFjdGVyc1B0cigpOworfQorCitzaXplX3QgV0tTdHJpbmdHZXRMZW5n
dGgoV0tTdHJpbmdSZWYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dLKHN0cmluZyktPmdldExl
bmd0aCgpOworfQorCiBib29sIFdLU3RyaW5nSXNFbXB0eShXS1N0cmluZ1JlZiBzdHJpbmdSZWYp
CiB7CiAgICAgcmV0dXJuIHRvV0soc3RyaW5nUmVmKS0+aXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcuaCBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dL
U3RyaW5nLmgKaW5kZXggZTc5ODM5ZS4uNzMwNmMzNyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9TaGFy
ZWQvQVBJL2MvV0tTdHJpbmcuaAorKysgYi9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5o
CkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBT
emVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM2LDEyICszNywyMyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI2lmICFkZWZp
bmVkKFdJTjMyKSAmJiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fV0lOU0NXX18pIFwK
KyAgICAmJiAhKChkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfXykpICYmICFk
ZWZpbmVkKF9fbGludXhfXykpIC8qIFJWQ1QgKi8KKyAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IFdLQ2hhcjsKKyNlbHNlCisgICAgdHlwZWRlZiB3Y2hhcl90IFdLQ2hhcjsKKyNlbmRpZgorCiBX
S19FWFBPUlQgV0tUeXBlSUQgV0tTdHJpbmdHZXRUeXBlSUQoKTsKIAogV0tfRVhQT1JUIFdLU3Ry
aW5nUmVmIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZyk7
CitXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhjb25z
dCBXS0NoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwogCiBXS19FWFBPUlQgYm9vbCBX
S1N0cmluZ0lzRW1wdHkoV0tTdHJpbmdSZWYgc3RyaW5nKTsKIAorV0tfRVhQT1JUIGNvbnN0IFdL
Q2hhciogV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKFdLU3RyaW5nUmVmIHN0cmluZyk7CitXS19F
WFBPUlQgc2l6ZV90IFdLU3RyaW5nR2V0TGVuZ3RoKFdLU3RyaW5nUmVmIHN0cmluZyk7CisKIFdL
X0VYUE9SVCBzaXplX3QgV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKFdLU3RyaW5n
UmVmIHN0cmluZyk7CiBXS19FWFBPUlQgc2l6ZV90IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoV0tT
dHJpbmdSZWYgc3RyaW5nLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIApkaWZm
IC0tZ2l0IGEvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuY3BwIGIvV2ViS2l0Mi9TaGFyZWQv
QVBJL2MvV0tVUkwuY3BwCmluZGV4IGI1MjU4MzMuLmMxY2YwNTYgMTAwNjQ0Ci0tLSBhL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLVVJMLmNwcAorKysgYi9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VS
TC5jcHAKQEAgLTMzLDMgKzMzLDE0IEBAIFdLVHlwZUlEIFdLVVJMR2V0VHlwZUlEKCkKIHsKICAg
ICByZXR1cm4gdG9SZWYoV2ViVVJMOjpBUElUeXBlKTsKIH0KKworV0tVUkxSZWYgV0tVUkxDcmVh
dGVXaXRoVVRGOENTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIFJlZlB0cjxXZWJV
Ukw+IHdlYlVSTCA9IFdlYlVSTDo6Y3JlYXRlKHN0cmluZyk7CisgICAgcmV0dXJuIHRvUmVmKHdl
YlVSTC5yZWxlYXNlKCkubGVha1JlZigpKTsKK30KKworYm9vbCBXS1VSTElzRXF1YWwoV0tVUkxS
ZWYgYSwgV0tVUkxSZWYgYikKK3sKKyAgICByZXR1cm4gdG9XSyhhKS0+ZXF1YWwodG9XSyhiKSk7
Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5oIGIvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvV0tVUkwuaAppbmRleCBlMTJmNTVjLi42ZWI0NmExIDEwMDY0NAotLS0gYS9X
ZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5oCisrKyBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dL
VVJMLmgKQEAgLTM0LDYgKzM0LDEwIEBAIGV4dGVybiAiQyIgewogCiBXS19FWFBPUlQgV0tUeXBl
SUQgV0tVUkxHZXRUeXBlSUQoKTsKIAorV0tfRVhQT1JUIFdLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZyk7CisKK1dLX0VYUE9SVCBib29sIFdLVVJM
SXNFcXVhbChXS1VSTFJlZiBhLCBXS1VSTFJlZiBiKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdDIvU2hhcmVkL1dlYlN0cmluZy5oIGIvV2ViS2l0
Mi9TaGFyZWQvV2ViU3RyaW5nLmgKaW5kZXggYWEzNmE2ZC4uZjQwOTdiNCAxMDA2NDQKLS0tIGEv
V2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgKKysrIGIvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5n
LmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIFdlYlN0cmlu
ZyAtIEFuIHN0cmluZyBhcnJheSB0eXBlIHN1aXRhYmxlIGZvciB2ZW5kaW5nIHRvIGFuIEFQSS4K
Ky8vIFdlYlN0cmluZyAtIEEgc3RyaW5nIHR5cGUgc3VpdGFibGUgZm9yIHZlbmRpbmcgdG8gYW4g
QVBJLgogCiBjbGFzcyBXZWJTdHJpbmcgOiBwdWJsaWMgQVBJT2JqZWN0IHsKIHB1YmxpYzoKQEAg
LTQ5LDExICs0OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2Vi
U3RyaW5nKFN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYlN0cmluZz4gY3JlYXRlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXpl
X3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTdHJpbmco
U3RyaW5nKGNoYXJhY3RlcnMsIGxlbmd0aCkpKTsKKyAgICB9CisKICAgICBib29sIGlzTnVsbCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAKICAgICBzaXplX3QgbWF4aW11
bVVURjhDU3RyaW5nU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpICogMyAr
IDE7IH0KLSAgICBzaXplX3QgZ2V0VVRGOENTdHJpbmcoY2hhciogYnVmZmVyLCBzaXplX3QgYnVm
ZmVyU2l6ZSkKKyAgICBzaXplX3QgZ2V0VVRGOENTdHJpbmcoY2hhciogYnVmZmVyLCBzaXplX3Qg
YnVmZmVyU2l6ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghYnVmZmVyU2l6ZSkKICAgICAg
ICAgICAgIHJldHVybiAwOwpAQCAtNjYsOCArNzEsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gcCAtIGJ1ZmZlcjsKICAgICB9CiAKLSAgICBib29sIGVxdWFsKFdlYlN0cmluZyogb3RoZXIp
IHsgcmV0dXJuIG1fc3RyaW5nID09IG90aGVyLT5tX3N0cmluZzsgfQotICAgIGJvb2wgZXF1YWxU
b1VURjhTdHJpbmcoY29uc3QgY2hhciogb3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IFN0cmlu
Zzo6ZnJvbVVURjgob3RoZXIpOyB9CisgICAgY29uc3QgVUNoYXIqIGdldENoYXJhY3RlcnNQdHIo
KSBjb25zdCB7IHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzKCk7IH0KKyAgICBzaXplX3QgZ2V0
TGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KKworICAgIGJvb2wg
ZXF1YWwoV2ViU3RyaW5nKiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcgPT0gb3RoZXIt
Pm1fc3RyaW5nOyB9CisgICAgYm9vbCBlcXVhbFRvVVRGOFN0cmluZyhjb25zdCBjaGFyKiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcgPT0gU3RyaW5nOjpmcm9tVVRGOChvdGhlcik7IH0K
IAogICAgIGNvbnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0K
IApkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9TaGFyZWQvV2ViVVJMLmggYi9XZWJLaXQyL1NoYXJlZC9X
ZWJVUkwuaAppbmRleCA3YjQxM2UwLi5mZmMwOWMyIDEwMDY0NAotLS0gYS9XZWJLaXQyL1NoYXJl
ZC9XZWJVUkwuaAorKysgYi9XZWJLaXQyL1NoYXJlZC9XZWJVUkwuaApAQCAtMzIsNyArMzIsNyBA
QAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotLy8gV2ViVVJMIC0gQW4gc3RyaW5nIGFycmF5IHR5
cGUgc3VpdGFibGUgZm9yIHZlbmRpbmcgdG8gYW4gQVBJLgorLy8gV2ViVVJMIC0gQSB1cmwgdHlw
ZSBzdWl0YWJsZSBmb3IgdmVuZGluZyB0byBhbiBBUEkuCiAKIGNsYXNzIFdlYlVSTCA6IHB1Ymxp
YyBBUElPYmplY3QgewogcHVibGljOgpAQCAtNDMsOSArNDMsMTYgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlVSTChzdHJpbmcpKTsKICAgICB9CiAKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJVUkw+IGNyZWF0ZShjb25zdCBjaGFyKiBzdHJpbmcpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlVSTChTdHJpbmc6OmZyb21VVEY4KHN0cmlu
ZykpKTsKKyAgICB9CisKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5n
LmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcu
aXNFbXB0eSgpOyB9CiAKKyAgICBib29sIGVxdWFsKFdlYlN0cmluZyogb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nID09IG90aGVyLT5tX3N0cmluZzsgfQorCiAgICAgY29uc3QgU3RyaW5n
JiBzdHJpbmcoKSBjb25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGQ5MDJjOGIuLjFkMTQwYmUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysg
Yi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0xMC0wMSAgQmFs
YXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9y
dGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
MzkzCisKKyAgICAgICAgVXNlIG9ubHkgdGhlIFdlYktpdCBBUEkgZm9yIGNyZWF0aW5nIGFuZAor
ICAgICAgICBtYW5pcHVsYXRpbmcgc3RyaW5ncyBhbmQgdXJscy4gRG8gbm90IHVzZQorICAgICAg
ICBwbGF0Zm9ybSBzcGVjaWZpYyBBUEkuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9TdHJp
bmdGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdUUjo6YmxhbmtVUkwpOgorICAgICAgICAoV1RSOjp0
b1dLKToKKyAgICAgICAgKFdUUjo6dG9KUyk6CisgICAgICAgIChXVFI6Om9wZXJhdG9yPDwpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAo
V1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAg
ICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUpOgorICAgICAg
ICAqIFdlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpU
ZXN0SW52b2NhdGlvbjo6VGVzdEludm9jYXRpb24pOgorICAgICAgICAoV1RSOjpUZXN0SW52b2Nh
dGlvbjo6aW52b2tlKToKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKwogMjAxMC0xMC0wMSAgU2FtIFdlaW5pZyAgPHNh
bUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0
aWFuc2VuLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdG
dW5jdGlvbnMuaCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25z
LmgKaW5kZXggODE5NTYwNi4uMGFhYzIzMSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0
UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDU0ICsyOCw0MCBAQAogI2RlZmluZSBT
dHJpbmdGdW5jdGlvbnNfaAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIu
aD4KLSNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1
ZGUgPFdlYktpdDIvV0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+
Ci0jaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZ0NGLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1VS
TC5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tVUkxDRi5oPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0j
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKLS8vIENvbnZlcnNpb24g
ZnVuY3Rpb25zCi0KLWlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRvQ0YoSlNTdHJpbmdS
ZWYgc3RyaW5nKQotewotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+KEFkb3B0Q0Ys
IEpTU3RyaW5nQ29weUNGU3RyaW5nKDAsIHN0cmluZykpOwotfQotCi1pbmxpbmUgUmV0YWluUHRy
PENGU3RyaW5nUmVmPiB0b0NGKFdLU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICByZXR1cm4gUmV0
YWluUHRyPENGU3RyaW5nUmVmPihBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdHJp
bmcpKTsKLX0KLQotaW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4gdG9DRihXS1VSTFJlZiB1cmwp
CitpbmxpbmUgV0tVUkxSZWYgYmxhbmtVUkwoKQogewotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZV
UkxSZWY+KEFkb3B0Q0YsIFdLVVJMQ29weUNGVVJMKDAsIHVybCkpOworICAgIHN0YXRpYyBXS1VS
TFJlZiBzdGF0aWNCbGFua1VSTCA9IFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhYm91dDpi
bGFuayIpOworICAgIHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0KIAotaW5saW5lIFJldGFpblB0
cjxDRlVSTFJlZj4gdG9DRihjb25zdCBXS1JldGFpblB0cjxXS1VSTFJlZj4mIHVybCkKLXsKLSAg
ICByZXR1cm4gdG9DRih1cmwuZ2V0KCkpOwotfQorLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMKIAog
aW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTU3RyaW5nUmVmIHN0cmluZykK
IHsKLSAgICByZXR1cm4gV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KEFkb3B0V0ssIFdLU3RyaW5n
Q3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkpOworICAgIGNvbnN0IEpTQ2hh
ciogY2hhcmFjdGVycyA9IEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHJpbmcpOworICAgIHNp
emVfdCBsZW5ndGggPSBKU1N0cmluZ0dldExlbmd0aChzdHJpbmcpOworICAgIHJldHVybiBXS1Jl
dGFpblB0cjxXS1N0cmluZ1JlZj4oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVy
cyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKIH0KIAotaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5n
UmVmPiB0b1dLKEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmcpCitpbmxpbmUgSlNSZXRh
aW5QdHI8SlNTdHJpbmdSZWY+IHRvSlMoV0tTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVy
biBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZT
dHJpbmcodG9DRihzdHJpbmcuZ2V0KCkpLmdldCgpKSk7CisgICAgY29uc3QgV0tDaGFyKiBjaGFy
YWN0ZXJzID0gV0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHN0cmluZyk7CisgICAgc2l6ZV90IGxl
bmd0aCA9IFdLU3RyaW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAgcmV0dXJuIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhjaGFyYWN0
ZXJzLCBsZW5ndGgpKTsKIH0KIAotaW5saW5lIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pT
KFdLU3RyaW5nUmVmIHN0cmluZykKK2lubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9X
SyhKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3RyaW5nKQogewotICAgIHJldHVybiBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yo
c3RyaW5nKS5nZXQoKSkpOworICAgIHJldHVybiB0b1dLKHN0cmluZy5nZXQoKSk7CiB9CiAKIGlu
bGluZSBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gdG9KUyhjb25zdCBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4mIHN0cmluZykKQEAgLTg0LDI3ICs3MSwxNyBAQCBpbmxpbmUgSlNSZXRhaW5QdHI8
SlNTdHJpbmdSZWY+IHRvSlMoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmcp
CiAKIC8vIFN0cmVhbWluZyBmdW5jdGlvbnMKIAotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0
b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgQ0ZTdHJpbmdSZWYgc3RyaW5nUmVmKQoraW5saW5lIHN0
ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgV0tTdHJpbmdSZWYgc3Ry
aW5nUmVmKQogewogICAgIGlmICghc3RyaW5nUmVmKQogICAgICAgICByZXR1cm4gb3V0OwotICAg
IENGSW5kZXggYnVmZmVyTGVuZ3RoID0gQ0ZTdHJpbmdHZXRNYXhpbXVtU2l6ZUZvckVuY29kaW5n
KENGU3RyaW5nR2V0TGVuZ3RoKHN0cmluZ1JlZiksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkgKyAx
OwotICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoIUNGU3Ry
aW5nR2V0Q1N0cmluZyhzdHJpbmdSZWYsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlckxlbmd0aCwga0NG
U3RyaW5nRW5jb2RpbmdVVEY4KSkKLSAgICAgICAgcmV0dXJuIG91dDsKLSAgICByZXR1cm4gb3V0
IDw8IGJ1ZmZlci5kYXRhKCk7Ci19CiAKLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwo
c3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFJldGFpblB0cjxDRlN0cmluZ1JlZj4mIHN0cmluZ1Jl
ZikKLXsKLSAgICByZXR1cm4gb3V0IDw8IHN0cmluZ1JlZi5nZXQoKTsKLX0KKyAgICBzdGF0aWMg
VmVjdG9yPGNoYXIsIDEwMjQ+IHN0YXRpY0J1ZmZlcjsKKyAgICBzdGF0aWNCdWZmZXIucmVzZXJ2
ZUNhcGFjaXR5KFdLU3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmdSZWYpKTsK
KyAgICBpZiAoV0tTdHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmdSZWYsIHN0YXRpY0J1ZmZlci5k
YXRhKCksIHN0YXRpY0J1ZmZlci5jYXBhY2l0eSgpKSkKKyAgICAgICAgb3V0IDw8IHN0YXRpY0J1
ZmZlci5kYXRhKCk7CiAKLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3Ry
ZWFtJiBvdXQsIFdLU3RyaW5nUmVmIHN0cmluZ1JlZikKLXsKLSAgICBpZiAoIXN0cmluZ1JlZikK
LSAgICAgICAgcmV0dXJuIG91dDsKLSAgICByZXR1cm4gb3V0IDw8IHRvQ0Yoc3RyaW5nUmVmKTsK
KyAgICByZXR1cm4gb3V0OwogfQogCiBpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0
ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZ1Jl
ZikKQEAgLTExMiwyNCArODksNiBAQCBpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0
ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZgogICAgIHJldHVy
biBvdXQgPDwgc3RyaW5nUmVmLmdldCgpOwogfQogCi0vLyBVUkwgY3JlYXRpb24KLQotaW5saW5l
IFdLVVJMUmVmIGNyZWF0ZVdLVVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKLXsKLSAgICBSZXRh
aW5QdHI8Q0ZTdHJpbmdSZWY+IHBhdGhPclVSTENGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5nQ3Jl
YXRlV2l0aENTdHJpbmcoMCwgcGF0aE9yVVJMLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAg
ICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNmVVJMOwotICAgIGlmIChDRlN0cmluZ0hhc1ByZWZpeChw
YXRoT3JVUkxDRlN0cmluZy5nZXQoKSwgQ0ZTVFIoImh0dHA6Ly8iKSkgfHwgQ0ZTdHJpbmdIYXNQ
cmVmaXgocGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RSKCJodHRwczovLyIpKSkKLSAgICAg
ICAgY2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhTdHJpbmcoMCwgcGF0aE9yVVJMQ0ZTdHJp
bmcuZ2V0KCksIDApKTsKLSAgICBlbHNlCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBjZlVS
TC5hZG9wdENGKENGVVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhPclVSTENGU3Ry
aW5nLmdldCgpLCBrQ0ZVUkxXaW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOwotI2Vsc2UKLSAgICAg
ICAgY2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBwYXRoT3JV
UkxDRlN0cmluZy5nZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0jZW5kaWYK
LSAgICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoQ0ZVUkwoY2ZVUkwuZ2V0KCkpOwotfQotCi0KIH0g
Ly8gbmFtZXNwYWNlIFdUUgogCiAjZW5kaWYgLy8gU3RyaW5nRnVuY3Rpb25zX2gKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZWZkODkz
ZC4uNDdmNTExOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0
Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29u
dHJvbGxlci5jcHAKQEAgLTIwOCwxMiArMjA4LDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJl
c2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKQogICAgIFdLUHJlZmVyZW5jZXNTZXRGb250U21v
b3RoaW5nTGV2ZWwocHJlZmVyZW5jZXMsIGtXS0ZvbnRTbW9vdGhpbmdMZXZlbE5vU3VicGl4ZWxB
bnRpQWxpYXNpbmcpOwogICAgIFdLUHJlZmVyZW5jZXNTZXRYU1NBdWRpdG9yRW5hYmxlZChwcmVm
ZXJlbmNlcywgZmFsc2UpOwogCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHN0YW5kYXJkRm9udEZh
bWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RSKCJUaW1lcyIpKTsKLSAgICBz
dGF0aWMgV0tTdHJpbmdSZWYgY3Vyc2l2ZUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhD
RlN0cmluZyhDRlNUUigiQXBwbGUgQ2hhbmNlcnkiKSk7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVm
IGZhbnRhc3lGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIlBh
cHlydXMiKSk7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZpeGVkRm9udEZhbWlseSA9IFdLU3Ry
aW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RSKCJDb3VyaWVyIikpOwotICAgIHN0YXRpYyBXS1N0
cmluZ1JlZiBzYW5zU2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmco
Q0ZTVFIoIkhlbHZldGljYSIpKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc2VyaWZGb250RmFt
aWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIlRpbWVzIikpOworICAgIHN0
YXRpYyBXS1N0cmluZ1JlZiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhV
VEY4Q1N0cmluZygiVGltZXMiKTsKKyAgICBzdGF0aWMgV0tTdHJpbmdSZWYgY3Vyc2l2ZUZvbnRG
YW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGUgQ2hhbmNlcnkiKTsK
KyAgICBzdGF0aWMgV0tTdHJpbmdSZWYgZmFudGFzeUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZygiUGFweXJ1cyIpOworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBmaXhl
ZEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ291cmllciIpOwor
ICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzYW5zU2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVh
dGVXaXRoVVRGOENTdHJpbmcoIkhlbHZldGljYSIpOworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBz
ZXJpZkZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZXMiKTsK
IAogICAgIFdLUHJlZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHN0
YW5kYXJkRm9udEZhbWlseSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250RmFtaWx5
KHByZWZlcmVuY2VzLCBjdXJzaXZlRm9udEZhbWlseSk7CkBAIC0yMjcsOCArMjI3LDcgQEAgdm9p
ZCBUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgLy8g
UmVzZXQgbWFpbiBwYWdlIGJhY2sgdG8gYWJvdXQ6YmxhbmsKICAgICBtX2RvbmVSZXNldHRpbmcg
PSBmYWxzZTsKIAotICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwoQWRvcHRXSywgY3JlYXRl
V0tVUkwoImFib3V0OmJsYW5rIikpOwotICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+
cGFnZSgpLCB1cmwuZ2V0KCkpOworICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFn
ZSgpLCBibGFua1VSTCgpKTsKICAgICBUZXN0Q29udHJvbGxlcjo6cnVuVW50aWwobV9kb25lUmVz
ZXR0aW5nKTsKIH0KIApAQCAtMjk1LDkgKzI5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRp
ZEZpbmlzaExvYWRGb3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMKEFkb3B0V0ss
IFdLRnJhbWVDb3B5VVJMKGZyYW1lKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTD0g
dG9DRih3a1VSTCk7Ci0gICAgQ0ZTdHJpbmdSZWYgY2ZVUkxTdHJpbmcgPSBDRlVSTEdldFN0cmlu
ZyhjZlVSTC5nZXQoKSk7Ci0gICAgaWYgKCFDRkVxdWFsKGNmVVJMU3RyaW5nLCBDRlNUUigiYWJv
dXQ6YmxhbmsiKSkpCisgICAgaWYgKCFXS1VSTElzRXF1YWwod2tVUkwuZ2V0KCksIGJsYW5rVVJM
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNldHRpbmcgPSB0cnVlOwpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAg
Yi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCA0
N2RmNjZiLi5lZjM3MjQyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVy
L1Rlc3RJbnZvY2F0aW9uLmNwcAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rl
c3RJbnZvY2F0aW9uLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlRlc3RDb250cm9s
bGVyLmgiCiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHRQcml2YXRlLmg+CiAjaW5jbHVkZSA8
V2ViS2l0Mi9XS1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0zOCw3ICszNyw3
IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgV1RSIHsKIAogVGVzdEludm9jYXRp
b246OlRlc3RJbnZvY2F0aW9uKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKLSAgICA6IG1fdXJsKEFk
b3B0V0ssIGNyZWF0ZVdLVVJMKHBhdGhPclVSTCkpCisgICAgOiBtX3VybChBZG9wdFdLLCBXS1VS
TENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpKQogICAgICwgbV9wYXRoT3JVUkwoZmFz
dFN0ckR1cChwYXRoT3JVUkwpKQogICAgICwgbV9nb3RJbml0aWFsUmVzcG9uc2UoZmFsc2UpCiAg
ICAgLCBtX2dvdEZpbmFsTWVzc2FnZShmYWxzZSkKQEAgLTcwLDggKzY5LDggQEAgdm9pZCBUZXN0
SW52b2NhdGlvbjo6aW52b2tlKCkKIHsKICAgICBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KG1f
cGF0aE9yVVJMKTsKIAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShB
ZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlNUUigiQmVnaW5UZXN0IikpKTsK
LSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJp
bmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIiIpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KCJCZWdpblRlc3QiKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5
KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CiAgICAgV0tDb250
ZXh0UG9zdE1lc3NhZ2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5j
b250ZXh0KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiAKICAgICBU
ZXN0Q29udHJvbGxlcjo6cnVuVW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UpOwpAQCAtMTA0LDgg
KzEwMyw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmR1bXAoY29uc3QgY2hhciogc3RyaW5nVG9E
dW1wKQogCiB2b2lkIFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3Rl
ZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQog
ewotICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZNZXNzYWdlTmFtZShBZG9wdENGLCBXS1N0
cmluZ0NvcHlDRlN0cmluZygwLCBtZXNzYWdlTmFtZSkpOwotICAgIGlmIChDRkVxdWFsKGNmTWVz
c2FnZU5hbWUuZ2V0KCksIENGU1RSKCJFcnJvciIpKSkgeworICAgIGlmIChXS1N0cmluZ0lzRXF1
YWxUb1VURjhDU3RyaW5nKG1lc3NhZ2VOYW1lLCAiRXJyb3IiKSkgewogICAgICAgICAvLyBTZXQg
YWxsIHN0YXRlcyB0byB0cnVlIHRvIHN0b3Agc3Bpbm5pbmcgdGhlIHJ1bmxvb3AuCiAgICAgICAg
IG1fZ290SW5pdGlhbFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAgbV9nb3RGaW5hbE1lc3NhZ2Ug
PSB0cnVlOwpAQCAtMTEzLDExICsxMTEsMTAgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVj
ZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChDRkVxdWFsKGNmTWVzc2FnZU5hbWUuZ2V0
KCksIENGU1RSKCJBY2siKSkpIHsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmlu
ZyhtZXNzYWdlTmFtZSwgIkFjayIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNz
YWdlQm9keSkgPT0gV0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0
cmluZ1JlZj4gY2ZNZXNzYWdlQm9keShBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBz
dGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpKSk7CiAKLSAgICAgICAgaWYgKENG
RXF1YWwoY2ZNZXNzYWdlQm9keS5nZXQoKSwgQ0ZTVFIoIkJlZ2luVGVzdCIpKSkgeworICAgICAg
ICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1Jl
Zj4obWVzc2FnZUJvZHkpLCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgICAgIG1fZ290SW5pdGlh
bFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTI1
LDcgKzEyMiw3IEBAIHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIH0KIAotICAgIGlmIChDRkVxdWFsKGNmTWVzc2FnZU5hbWUuZ2V0KCks
IENGU1RSKCJEb25lIikpKSB7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmco
bWVzc2FnZU5hbWUsICJEb25lIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3Nh
Z2VCb2R5KSA9PSBXS1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgb3N0cmluZ3N0cmVhbSBv
dXQ7CiAgICAgICAgIG91dCA8PCBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69569</attachid>
            <date>2010-10-02 01:01:30 -0700</date>
            <delta_ts>2010-10-06 06:52:51 -0700</delta_ts>
            <desc>patch v9</desc>
            <filename>0001-WebKitTestRunner-should-be-portable.patch</filename>
            <type>text/plain</type>
            <size>20122</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">RnJvbSBmNmE4NjczMzI4NDU0YWQ4ZGE3NDk3MzFlM2M3YWNmZGIyODI5YzRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBCYWxhenMgS2VsZW1lbiA8a2JhbGF6c0B3ZWJraXQub3JnPgpE
YXRlOiBTYXQsIDIgT2N0IDIwMTAgMDk6NTA6NDQgKzAyMDAKU3ViamVjdDogW1BBVENIIDEvMl0g
V2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9ydGFibGUKCi0tLQogV2ViS2l0Mi9DaGFuZ2VM
b2cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMwICsrKysrKysrCiBXZWJLaXQy
L1NoYXJlZC9BUEkvYy9XS1N0cmluZy5jcHAgICAgICAgICAgICAgICB8ICAgMTcgKysrKysKIFdl
YktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmggICAgICAgICAgICAgICAgIHwgICAxMiArKysK
IFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmNwcCAgICAgICAgICAgICAgICAgIHwgICAxMSAr
KysKIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmggICAgICAgICAgICAgICAgICAgIHwgICAg
NCArCiBXZWJLaXQyL1NoYXJlZC9XZWJTdHJpbmcuaCAgICAgICAgICAgICAgICAgICAgICB8ICAg
MTYgKysrLQogV2ViS2l0Mi9TaGFyZWQvV2ViVVJMLmggICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICA5ICsrLQogV2ViS2l0VG9vbHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCAgIDIzICsrKysrKwogV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5j
dGlvbnMuaCAgfCAgIDg1ICsrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiBXZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcCB8ICAgMTkgKystLS0KIFdlYktpdFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwIHwgICAxNyArKy0tLQogMTEgZmls
ZXMgY2hhbmdlZCwgMTU0IGluc2VydGlvbnMoKyksIDg5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdp
dCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzNmZjA1Mi4u
NTU4MDUxZiAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0Mi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwzMyBAQAorMjAxMC0xMC0wMSAgQmFsYXpzIEtlbGVtZW4gIDxrYmFs
YXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9ydGFibGUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MzkzCisKKyAgICAgICAgQWRk
IEFQSSBmb3IgY3JlYXRpbmcgYW5kIG1hbmlwdWxhdGluZyBzdHJpbmdzIGFuZCB1cmxzLgorICAg
ICAgICBOb3cgd2UgY2FuIGNyZWF0aW5nIGEgSlNTdHJpbmcgZnJvbSBhIFdLU3RyaW5nIGFuZCB2
aWNhCisgICAgICAgIHZlcnNhIHdpdGhvdXQgcmVkdW5kYW50IGNvcGllcy4KKyAgICAgICAgKiBT
aGFyZWQvQVBJL2MvV0tTdHJpbmcuY3BwOgorICAgICAgICAoV0tTdHJpbmdDcmVhdGVXaXRoQ2hh
cmFjdGVycyk6IEZvciBXS1N0cmluZyAtPiBKU1N0cmluZyBjb252ZXJzaW9uLgorICAgICAgICAo
V0tTdHJpbmdHZXRDaGFyYWN0ZXJzUHRyKTogRm9yIEpTU3RyaW5nIC0+IFdLU3RyaW5nIGNvbnZl
cnNpb24uCisgICAgICAgIChXS1N0cmluZ0dldExlbmd0aCk6IEZvciBXS1N0cmluZyAtPiBKU1N0
cmluZyBjb252ZXJzaW9uLgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9XS1N0cmluZy5oOgorICAg
ICAgICAqIFNoYXJlZC9BUEkvYy9XS1VSTC5jcHA6CisgICAgICAgIChXS1VSTENyZWF0ZVdpdGhV
VEY4Q1N0cmluZyk6CisgICAgICAgIChXS1VSTElzRXF1YWwpOgorICAgICAgICAqIFNoYXJlZC9B
UEkvYy9XS1VSTC5oOgorICAgICAgICAqIFNoYXJlZC9XZWJTdHJpbmcuaDoKKyAgICAgICAgKFdl
YktpdDo6V2ViU3RyaW5nOjpjcmVhdGVXaXRoQ2hhcmFjdGVycyk6IEZpeGVkIGNvbnN0bmVzcyAo
bWFrZSBpdCBjb25zdCkuCisgICAgICAgIChXZWJLaXQ6OldlYlN0cmluZzo6Z2V0VVRGOENTdHJp
bmcpOgorICAgICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmdldENoYXJhY3RlcnNQdHIpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJTdHJpbmc6OmdldExlbmd0aCk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlN0cmluZzo6ZXF1YWwpOiBGaXhlZCBjb25zdG5lc3MgKG1ha2UgaXQgY29uc3QpLgorICAgICAg
ICAoV2ViS2l0OjpXZWJTdHJpbmc6OmVxdWFsVG9VVEY4U3RyaW5nKTogRml4ZWQgY29uc3RuZXNz
IChtYWtlIGl0IGNvbnN0KS4KKyAgICAgICAgKiBTaGFyZWQvV2ViVVJMLmg6CisgICAgICAgIChX
ZWJLaXQ6OldlYlVSTDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVVJMOjplcXVhbCk6
CisKIDIwMTAtMTAtMDEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmNwcCBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3Ry
aW5nLmNwcAppbmRleCBlYWZlZDNjLi4wN2I1M2MyIDEwMDY0NAotLS0gYS9XZWJLaXQyL1NoYXJl
ZC9BUEkvYy9XS1N0cmluZy5jcHAKKysrIGIvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tTdHJpbmcu
Y3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBv
ZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQwLDYgKzQxLDIyIEBAIFdLU3RyaW5nUmVmIFdLU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKICAgICByZXR1cm4gdG9SZWYod2ViU3RyaW5n
LnJlbGVhc2UoKS5sZWFrUmVmKCkpOwogfQogCitXS19FWFBPUlQgV0tTdHJpbmdSZWYgV0tTdHJp
bmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhjb25zdCBXS0NoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpCit7CisgICAgUmVmUHRyPFdlYlN0cmluZz4gd2ViU3RyaW5nID0gV2ViU3RyaW5nOjpj
cmVhdGUoY2hhcmFjdGVycywgbGVuZ3RoKTsKKyAgICByZXR1cm4gdG9SZWYod2ViU3RyaW5nLnJl
bGVhc2UoKS5sZWFrUmVmKCkpOworfQorCitjb25zdCBXS0NoYXIqIFdLU3RyaW5nR2V0Q2hhcmFj
dGVyc1B0cihXS1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgcmV0dXJuIHRvV0soc3RyaW5nKS0+
Z2V0Q2hhcmFjdGVyc1B0cigpOworfQorCitzaXplX3QgV0tTdHJpbmdHZXRMZW5ndGgoV0tTdHJp
bmdSZWYgc3RyaW5nKQoreworICAgIHJldHVybiB0b1dLKHN0cmluZyktPmdldExlbmd0aCgpOwor
fQorCiBib29sIFdLU3RyaW5nSXNFbXB0eShXS1N0cmluZ1JlZiBzdHJpbmdSZWYpCiB7CiAgICAg
cmV0dXJuIHRvV0soc3RyaW5nUmVmKS0+aXNFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0Mi9T
aGFyZWQvQVBJL2MvV0tTdHJpbmcuaCBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLU3RyaW5nLmgK
aW5kZXggZTc5ODM5ZS4uNzMwNmMzNyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9TaGFyZWQvQVBJL2Mv
V0tTdHJpbmcuaAorKysgYi9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1N0cmluZy5oCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM2
LDEyICszNywyMyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFdJTjMy
KSAmJiAhZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fV0lOU0NXX18pIFwKKyAgICAmJiAh
KChkZWZpbmVkKF9fQ0NfQVJNKSB8fCBkZWZpbmVkKF9fQVJNQ0NfXykpICYmICFkZWZpbmVkKF9f
bGludXhfXykpIC8qIFJWQ1QgKi8KKyAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IFdLQ2hhcjsK
KyNlbHNlCisgICAgdHlwZWRlZiB3Y2hhcl90IFdLQ2hhcjsKKyNlbmRpZgorCiBXS19FWFBPUlQg
V0tUeXBlSUQgV0tTdHJpbmdHZXRUeXBlSUQoKTsKIAogV0tfRVhQT1JUIFdLU3RyaW5nUmVmIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZyk7CitXS19FWFBP
UlQgV0tTdHJpbmdSZWYgV0tTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhjb25zdCBXS0NoYXIq
IGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpOwogCiBXS19FWFBPUlQgYm9vbCBXS1N0cmluZ0lz
RW1wdHkoV0tTdHJpbmdSZWYgc3RyaW5nKTsKIAorV0tfRVhQT1JUIGNvbnN0IFdLQ2hhciogV0tT
dHJpbmdHZXRDaGFyYWN0ZXJzUHRyKFdLU3RyaW5nUmVmIHN0cmluZyk7CitXS19FWFBPUlQgc2l6
ZV90IFdLU3RyaW5nR2V0TGVuZ3RoKFdLU3RyaW5nUmVmIHN0cmluZyk7CisKIFdLX0VYUE9SVCBz
aXplX3QgV0tTdHJpbmdHZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKFdLU3RyaW5nUmVmIHN0cmlu
Zyk7CiBXS19FWFBPUlQgc2l6ZV90IFdLU3RyaW5nR2V0VVRGOENTdHJpbmcoV0tTdHJpbmdSZWYg
c3RyaW5nLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKTsKIApkaWZmIC0tZ2l0IGEv
V2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuY3BwIGIvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tV
UkwuY3BwCmluZGV4IGI1MjU4MzMuLmMxY2YwNTYgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvU2hhcmVk
L0FQSS9jL1dLVVJMLmNwcAorKysgYi9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5jcHAKQEAg
LTMzLDMgKzMzLDE0IEBAIFdLVHlwZUlEIFdLVVJMR2V0VHlwZUlEKCkKIHsKICAgICByZXR1cm4g
dG9SZWYoV2ViVVJMOjpBUElUeXBlKTsKIH0KKworV0tVUkxSZWYgV0tVUkxDcmVhdGVXaXRoVVRG
OENTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKQoreworICAgIFJlZlB0cjxXZWJVUkw+IHdlYlVS
TCA9IFdlYlVSTDo6Y3JlYXRlKHN0cmluZyk7CisgICAgcmV0dXJuIHRvUmVmKHdlYlVSTC5yZWxl
YXNlKCkubGVha1JlZigpKTsKK30KKworYm9vbCBXS1VSTElzRXF1YWwoV0tVUkxSZWYgYSwgV0tV
UkxSZWYgYikKK3sKKyAgICByZXR1cm4gdG9XSyhhKS0+ZXF1YWwodG9XSyhiKSk7Cit9CmRpZmYg
LS1naXQgYS9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5oIGIvV2ViS2l0Mi9TaGFyZWQvQVBJ
L2MvV0tVUkwuaAppbmRleCBlMTJmNTVjLi42ZWI0NmExIDEwMDY0NAotLS0gYS9XZWJLaXQyL1No
YXJlZC9BUEkvYy9XS1VSTC5oCisrKyBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmgKQEAg
LTM0LDYgKzM0LDEwIEBAIGV4dGVybiAiQyIgewogCiBXS19FWFBPUlQgV0tUeXBlSUQgV0tVUkxH
ZXRUeXBlSUQoKTsKIAorV0tfRVhQT1JUIFdLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKGNvbnN0IGNoYXIqIHN0cmluZyk7CisKK1dLX0VYUE9SVCBib29sIFdLVVJMSXNFcXVhbChX
S1VSTFJlZiBhLCBXS1VSTFJlZiBiKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1dlYktpdDIvU2hhcmVkL1dlYlN0cmluZy5oIGIvV2ViS2l0Mi9TaGFyZWQv
V2ViU3RyaW5nLmgKaW5kZXggYWEzNmE2ZC4uZjQwOTdiNCAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9T
aGFyZWQvV2ViU3RyaW5nLmgKKysrIGIvV2ViS2l0Mi9TaGFyZWQvV2ViU3RyaW5nLmgKQEAgLTMz
LDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLS8vIFdlYlN0cmluZyAtIEFuIHN0
cmluZyBhcnJheSB0eXBlIHN1aXRhYmxlIGZvciB2ZW5kaW5nIHRvIGFuIEFQSS4KKy8vIFdlYlN0
cmluZyAtIEEgc3RyaW5nIHR5cGUgc3VpdGFibGUgZm9yIHZlbmRpbmcgdG8gYW4gQVBJLgogCiBj
bGFzcyBXZWJTdHJpbmcgOiBwdWJsaWMgQVBJT2JqZWN0IHsKIHB1YmxpYzoKQEAgLTQ5LDExICs0
OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViU3RyaW5nKFN0
cmluZzo6ZnJvbVVURjgoc3RyaW5nKSkpOwogICAgIH0KIAorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFdlYlN0cmluZz4gY3JlYXRlKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3Ro
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTdHJpbmcoU3RyaW5nKGNo
YXJhY3RlcnMsIGxlbmd0aCkpKTsKKyAgICB9CisKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgpOyB9CiAKICAgICBzaXplX3QgbWF4aW11bVVURjhDU3Ry
aW5nU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmxlbmd0aCgpICogMyArIDE7IH0KLSAg
ICBzaXplX3QgZ2V0VVRGOENTdHJpbmcoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6ZSkK
KyAgICBzaXplX3QgZ2V0VVRGOENTdHJpbmcoY2hhciogYnVmZmVyLCBzaXplX3QgYnVmZmVyU2l6
ZSkgY29uc3QKICAgICB7CiAgICAgICAgIGlmICghYnVmZmVyU2l6ZSkKICAgICAgICAgICAgIHJl
dHVybiAwOwpAQCAtNjYsOCArNzEsMTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcCAtIGJ1
ZmZlcjsKICAgICB9CiAKLSAgICBib29sIGVxdWFsKFdlYlN0cmluZyogb3RoZXIpIHsgcmV0dXJu
IG1fc3RyaW5nID09IG90aGVyLT5tX3N0cmluZzsgfQotICAgIGJvb2wgZXF1YWxUb1VURjhTdHJp
bmcoY29uc3QgY2hhciogb3RoZXIpIHsgcmV0dXJuIG1fc3RyaW5nID09IFN0cmluZzo6ZnJvbVVU
Rjgob3RoZXIpOyB9CisgICAgY29uc3QgVUNoYXIqIGdldENoYXJhY3RlcnNQdHIoKSBjb25zdCB7
IHJldHVybiBtX3N0cmluZy5jaGFyYWN0ZXJzKCk7IH0KKyAgICBzaXplX3QgZ2V0TGVuZ3RoKCkg
Y29uc3QgeyByZXR1cm4gbV9zdHJpbmcubGVuZ3RoKCk7IH0KKworICAgIGJvb2wgZXF1YWwoV2Vi
U3RyaW5nKiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcgPT0gb3RoZXItPm1fc3RyaW5n
OyB9CisgICAgYm9vbCBlcXVhbFRvVVRGOFN0cmluZyhjb25zdCBjaGFyKiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmcgPT0gU3RyaW5nOjpmcm9tVVRGOChvdGhlcik7IH0KIAogICAgIGNv
bnN0IFN0cmluZyYgc3RyaW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmc7IH0KIApkaWZmIC0t
Z2l0IGEvV2ViS2l0Mi9TaGFyZWQvV2ViVVJMLmggYi9XZWJLaXQyL1NoYXJlZC9XZWJVUkwuaApp
bmRleCA3YjQxM2UwLi5iNjczY2I2IDEwMDY0NAotLS0gYS9XZWJLaXQyL1NoYXJlZC9XZWJVUkwu
aAorKysgYi9XZWJLaXQyL1NoYXJlZC9XZWJVUkwuaApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1l
c3BhY2UgV2ViS2l0IHsKIAotLy8gV2ViVVJMIC0gQW4gc3RyaW5nIGFycmF5IHR5cGUgc3VpdGFi
bGUgZm9yIHZlbmRpbmcgdG8gYW4gQVBJLgorLy8gV2ViVVJMIC0gQSBVUkwgdHlwZSBzdWl0YWJs
ZSBmb3IgdmVuZGluZyB0byBhbiBBUEkuCiAKIGNsYXNzIFdlYlVSTCA6IHB1YmxpYyBBUElPYmpl
Y3QgewogcHVibGljOgpAQCAtNDMsOSArNDMsMTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYlVSTChzdHJpbmcpKTsKICAgICB9CiAKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxXZWJVUkw+IGNyZWF0ZShjb25zdCBjaGFyKiBzdHJpbmcpCisgICAgeworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IFdlYlVSTChTdHJpbmc6OmZyb21VVEY4KHN0cmluZykpKTsKKyAg
ICB9CisKICAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyaW5nLmlzTnVsbCgp
OyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9zdHJpbmcuaXNFbXB0eSgp
OyB9CiAKKyAgICBib29sIGVxdWFsKFdlYlVSTCogb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fc3Ry
aW5nID09IG90aGVyLT5tX3N0cmluZzsgfQorCiAgICAgY29uc3QgU3RyaW5nJiBzdHJpbmcoKSBj
b25zdCB7IHJldHVybiBtX3N0cmluZzsgfQogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGQ5MDJjOGIuLjFk
MTQwYmUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMC0xMC0wMSAgQmFsYXpzIEtlbGVtZW4g
IDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9ydGFibGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1MzkzCisKKyAgICAg
ICAgVXNlIG9ubHkgdGhlIFdlYktpdCBBUEkgZm9yIGNyZWF0aW5nIGFuZAorICAgICAgICBtYW5p
cHVsYXRpbmcgc3RyaW5ncyBhbmQgdXJscy4gRG8gbm90IHVzZQorICAgICAgICBwbGF0Zm9ybSBz
cGVjaWZpYyBBUEkuCisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMu
aDoKKyAgICAgICAgKFdUUjo6YmxhbmtVUkwpOgorICAgICAgICAoV1RSOjp0b1dLKToKKyAgICAg
ICAgKFdUUjo6dG9KUyk6CisgICAgICAgIChXVFI6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV1RSOjpUZXN0Q29u
dHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcyk6CisgICAgICAgIChXVFI6OlRl
c3RDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUpOgorICAgICAgICAqIFdlYktpdFRl
c3RSdW5uZXIvVGVzdEludm9jYXRpb24uY3BwOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlv
bjo6VGVzdEludm9jYXRpb24pOgorICAgICAgICAoV1RSOjpUZXN0SW52b2NhdGlvbjo6aW52b2tl
KToKKyAgICAgICAgKFdUUjo6VGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKToKKwogMjAxMC0xMC0wMSAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZm
IC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9TdHJpbmdGdW5jdGlvbnMuaCBi
L1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKaW5kZXggODE5
NTYwNi4uMGFhYzIzMSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9T
dHJpbmdGdW5jdGlvbnMuaAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmlu
Z0Z1bmN0aW9ucy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVW5p
dmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDU0ICsyOCw0MCBAQAogI2RlZmluZSBTdHJpbmdGdW5jdGlv
bnNfaAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KLSNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5oPgorI2luY2x1ZGUgPEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxzc3RyZWFtPgogI2luY2x1ZGUgPFdlYktpdDIv
V0tSZXRhaW5QdHIuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
V2ViS2l0Mi9XS1N0cmluZ0NGLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1VSTC5oPgotI2luY2x1
ZGUgPFdlYktpdDIvV0tVUkxDRi5oPgotI2luY2x1ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+Ci0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdUUiB7CiAKLS8vIENvbnZlcnNpb24gZnVuY3Rpb25zCi0K
LWlubGluZSBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IHRvQ0YoSlNTdHJpbmdSZWYgc3RyaW5nKQot
ewotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+KEFkb3B0Q0YsIEpTU3RyaW5nQ29w
eUNGU3RyaW5nKDAsIHN0cmluZykpOwotfQotCi1pbmxpbmUgUmV0YWluUHRyPENGU3RyaW5nUmVm
PiB0b0NGKFdLU3RyaW5nUmVmIHN0cmluZykKLXsKLSAgICByZXR1cm4gUmV0YWluUHRyPENGU3Ry
aW5nUmVmPihBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdHJpbmcpKTsKLX0KLQot
aW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4gdG9DRihXS1VSTFJlZiB1cmwpCitpbmxpbmUgV0tV
UkxSZWYgYmxhbmtVUkwoKQogewotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZVUkxSZWY+KEFkb3B0
Q0YsIFdLVVJMQ29weUNGVVJMKDAsIHVybCkpOworICAgIHN0YXRpYyBXS1VSTFJlZiBzdGF0aWNC
bGFua1VSTCA9IFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJhYm91dDpibGFuayIpOworICAg
IHJldHVybiBzdGF0aWNCbGFua1VSTDsKIH0KIAotaW5saW5lIFJldGFpblB0cjxDRlVSTFJlZj4g
dG9DRihjb25zdCBXS1JldGFpblB0cjxXS1VSTFJlZj4mIHVybCkKLXsKLSAgICByZXR1cm4gdG9D
Rih1cmwuZ2V0KCkpOwotfQorLy8gQ29udmVyc2lvbiBmdW5jdGlvbnMKIAogaW5saW5lIFdLUmV0
YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpTU3RyaW5nUmVmIHN0cmluZykKIHsKLSAgICByZXR1
cm4gV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aENG
U3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQoKSkpOworICAgIGNvbnN0IEpTQ2hhciogY2hhcmFjdGVy
cyA9IEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihzdHJpbmcpOworICAgIHNpemVfdCBsZW5ndGgg
PSBKU1N0cmluZ0dldExlbmd0aChzdHJpbmcpOworICAgIHJldHVybiBXS1JldGFpblB0cjxXS1N0
cmluZ1JlZj4oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhjaGFyYWN0ZXJz
LCBsZW5ndGgpKTsKIH0KIAotaW5saW5lIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB0b1dLKEpT
UmV0YWluUHRyPEpTU3RyaW5nUmVmPiBzdHJpbmcpCitpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJp
bmdSZWY+IHRvSlMoV0tTdHJpbmdSZWYgc3RyaW5nKQogewotICAgIHJldHVybiBXS1JldGFpblB0
cjxXS1N0cmluZ1JlZj4oQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcodG9DRihz
dHJpbmcuZ2V0KCkpLmdldCgpKSk7CisgICAgY29uc3QgV0tDaGFyKiBjaGFyYWN0ZXJzID0gV0tT
dHJpbmdHZXRDaGFyYWN0ZXJzUHRyKHN0cmluZyk7CisgICAgc2l6ZV90IGxlbmd0aCA9IFdLU3Ry
aW5nR2V0TGVuZ3RoKHN0cmluZyk7CisgICAgcmV0dXJuIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PihBZG9wdCwgSlNTdHJpbmdDcmVhdGVXaXRoQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgp
KTsKIH0KIAotaW5saW5lIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiB0b0pTKFdLU3RyaW5nUmVm
IHN0cmluZykKK2lubGluZSBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gdG9XSyhKU1JldGFpblB0
cjxKU1N0cmluZ1JlZj4gc3RyaW5nKQogewotICAgIHJldHVybiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4oQWRvcHQsIEpTU3RyaW5nQ3JlYXRlV2l0aENGU3RyaW5nKHRvQ0Yoc3RyaW5nKS5nZXQo
KSkpOworICAgIHJldHVybiB0b1dLKHN0cmluZy5nZXQoKSk7CiB9CiAKIGlubGluZSBKU1JldGFp
blB0cjxKU1N0cmluZ1JlZj4gdG9KUyhjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0
cmluZykKQEAgLTg0LDI3ICs3MSwxNyBAQCBpbmxpbmUgSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+
IHRvSlMoY29uc3QgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+JiBzdHJpbmcpCiAKIC8vIFN0cmVh
bWluZyBmdW5jdGlvbnMKIAotaW5saW5lIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9z
dHJlYW0mIG91dCwgQ0ZTdHJpbmdSZWYgc3RyaW5nUmVmKQoraW5saW5lIHN0ZDo6b3N0cmVhbSYg
b3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgV0tTdHJpbmdSZWYgc3RyaW5nUmVmKQogewog
ICAgIGlmICghc3RyaW5nUmVmKQogICAgICAgICByZXR1cm4gb3V0OwotICAgIENGSW5kZXggYnVm
ZmVyTGVuZ3RoID0gQ0ZTdHJpbmdHZXRNYXhpbXVtU2l6ZUZvckVuY29kaW5nKENGU3RyaW5nR2V0
TGVuZ3RoKHN0cmluZ1JlZiksIGtDRlN0cmluZ0VuY29kaW5nVVRGOCkgKyAxOwotICAgIFZlY3Rv
cjxjaGFyPiBidWZmZXIoYnVmZmVyTGVuZ3RoKTsKLSAgICBpZiAoIUNGU3RyaW5nR2V0Q1N0cmlu
ZyhzdHJpbmdSZWYsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZlckxlbmd0aCwga0NGU3RyaW5nRW5jb2Rp
bmdVVEY4KSkKLSAgICAgICAgcmV0dXJuIG91dDsKLSAgICByZXR1cm4gb3V0IDw8IGJ1ZmZlci5k
YXRhKCk7Ci19CiAKLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFt
JiBvdXQsIGNvbnN0IFJldGFpblB0cjxDRlN0cmluZ1JlZj4mIHN0cmluZ1JlZikKLXsKLSAgICBy
ZXR1cm4gb3V0IDw8IHN0cmluZ1JlZi5nZXQoKTsKLX0KKyAgICBzdGF0aWMgVmVjdG9yPGNoYXIs
IDEwMjQ+IHN0YXRpY0J1ZmZlcjsKKyAgICBzdGF0aWNCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KFdL
U3RyaW5nR2V0TWF4aW11bVVURjhDU3RyaW5nU2l6ZShzdHJpbmdSZWYpKTsKKyAgICBpZiAoV0tT
dHJpbmdHZXRVVEY4Q1N0cmluZyhzdHJpbmdSZWYsIHN0YXRpY0J1ZmZlci5kYXRhKCksIHN0YXRp
Y0J1ZmZlci5jYXBhY2l0eSgpKSkKKyAgICAgICAgb3V0IDw8IHN0YXRpY0J1ZmZlci5kYXRhKCk7
CiAKLWlubGluZSBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvdXQsIFdL
U3RyaW5nUmVmIHN0cmluZ1JlZikKLXsKLSAgICBpZiAoIXN0cmluZ1JlZikKLSAgICAgICAgcmV0
dXJuIG91dDsKLSAgICByZXR1cm4gb3V0IDw8IHRvQ0Yoc3RyaW5nUmVmKTsKKyAgICByZXR1cm4g
b3V0OwogfQogCiBpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYg
b3V0LCBjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4mIHN0cmluZ1JlZikKQEAgLTExMiwy
NCArODksNiBAQCBpbmxpbmUgc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYg
b3V0LCBjb25zdCBXS1JldGFpblB0cjxXS1N0cmluZ1JlZgogICAgIHJldHVybiBvdXQgPDwgc3Ry
aW5nUmVmLmdldCgpOwogfQogCi0vLyBVUkwgY3JlYXRpb24KLQotaW5saW5lIFdLVVJMUmVmIGNy
ZWF0ZVdLVVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKLXsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJp
bmdSZWY+IHBhdGhPclVSTENGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENTdHJp
bmcoMCwgcGF0aE9yVVJMLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAgICBSZXRhaW5QdHI8
Q0ZVUkxSZWY+IGNmVVJMOwotICAgIGlmIChDRlN0cmluZ0hhc1ByZWZpeChwYXRoT3JVUkxDRlN0
cmluZy5nZXQoKSwgQ0ZTVFIoImh0dHA6Ly8iKSkgfHwgQ0ZTdHJpbmdIYXNQcmVmaXgocGF0aE9y
VVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RSKCJodHRwczovLyIpKSkKLSAgICAgICAgY2ZVUkwuYWRv
cHRDRihDRlVSTENyZWF0ZVdpdGhTdHJpbmcoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIDAp
KTsKLSAgICBlbHNlCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBjZlVSTC5hZG9wdENGKENG
VVJMQ3JlYXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBr
Q0ZVUkxXaW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOwotI2Vsc2UKLSAgICAgICAgY2ZVUkwuYWRv
cHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxDRlN0cmluZy5n
ZXQoKSwga0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4g
V0tVUkxDcmVhdGVXaXRoQ0ZVUkwoY2ZVUkwuZ2V0KCkpOwotfQotCi0KIH0gLy8gbmFtZXNwYWNl
IFdUUgogCiAjZW5kaWYgLy8gU3RyaW5nRnVuY3Rpb25zX2gKZGlmZiAtLWdpdCBhL1dlYktpdFRv
b2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvV2Vi
S2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZWZkODkzZC4uNDdmNTExOCAx
MDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5j
cHAKKysrIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0Q29udHJvbGxlci5jcHAK
QEAgLTIwOCwxMiArMjA4LDEyIEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OnJlc2V0U3RhdGVUb0Nv
bnNpc3RlbnRWYWx1ZXMoKQogICAgIFdLUHJlZmVyZW5jZXNTZXRGb250U21vb3RoaW5nTGV2ZWwo
cHJlZmVyZW5jZXMsIGtXS0ZvbnRTbW9vdGhpbmdMZXZlbE5vU3VicGl4ZWxBbnRpQWxpYXNpbmcp
OwogICAgIFdLUHJlZmVyZW5jZXNTZXRYU1NBdWRpdG9yRW5hYmxlZChwcmVmZXJlbmNlcywgZmFs
c2UpOwogCi0gICAgc3RhdGljIFdLU3RyaW5nUmVmIHN0YW5kYXJkRm9udEZhbWlseSA9IFdLU3Ry
aW5nQ3JlYXRlV2l0aENGU3RyaW5nKENGU1RSKCJUaW1lcyIpKTsKLSAgICBzdGF0aWMgV0tTdHJp
bmdSZWYgY3Vyc2l2ZUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlNU
UigiQXBwbGUgQ2hhbmNlcnkiKSk7Ci0gICAgc3RhdGljIFdLU3RyaW5nUmVmIGZhbnRhc3lGb250
RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIlBhcHlydXMiKSk7Ci0g
ICAgc3RhdGljIFdLU3RyaW5nUmVmIGZpeGVkRm9udEZhbWlseSA9IFdLU3RyaW5nQ3JlYXRlV2l0
aENGU3RyaW5nKENGU1RSKCJDb3VyaWVyIikpOwotICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzYW5z
U2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIkhlbHZl
dGljYSIpKTsKLSAgICBzdGF0aWMgV0tTdHJpbmdSZWYgc2VyaWZGb250RmFtaWx5ID0gV0tTdHJp
bmdDcmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZTVFIoIlRpbWVzIikpOworICAgIHN0YXRpYyBXS1N0cmlu
Z1JlZiBzdGFuZGFyZEZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygi
VGltZXMiKTsKKyAgICBzdGF0aWMgV0tTdHJpbmdSZWYgY3Vyc2l2ZUZvbnRGYW1pbHkgPSBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQXBwbGUgQ2hhbmNlcnkiKTsKKyAgICBzdGF0aWMg
V0tTdHJpbmdSZWYgZmFudGFzeUZvbnRGYW1pbHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiUGFweXJ1cyIpOworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBmaXhlZEZvbnRGYW1pbHkg
PSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiQ291cmllciIpOworICAgIHN0YXRpYyBX
S1N0cmluZ1JlZiBzYW5zU2VyaWZGb250RmFtaWx5ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENT
dHJpbmcoIkhlbHZldGljYSIpOworICAgIHN0YXRpYyBXS1N0cmluZ1JlZiBzZXJpZkZvbnRGYW1p
bHkgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygiVGltZXMiKTsKIAogICAgIFdLUHJl
ZmVyZW5jZXNTZXRTdGFuZGFyZEZvbnRGYW1pbHkocHJlZmVyZW5jZXMsIHN0YW5kYXJkRm9udEZh
bWlseSk7CiAgICAgV0tQcmVmZXJlbmNlc1NldEN1cnNpdmVGb250RmFtaWx5KHByZWZlcmVuY2Vz
LCBjdXJzaXZlRm9udEZhbWlseSk7CkBAIC0yMjcsOCArMjI3LDcgQEAgdm9pZCBUZXN0Q29udHJv
bGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgLy8gUmVzZXQgbWFpbiBw
YWdlIGJhY2sgdG8gYWJvdXQ6YmxhbmsKICAgICBtX2RvbmVSZXNldHRpbmcgPSBmYWxzZTsKIAot
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwoQWRvcHRXSywgY3JlYXRlV0tVUkwoImFib3V0
OmJsYW5rIikpOwotICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCB1cmwu
Z2V0KCkpOworICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCBibGFua1VS
TCgpKTsKICAgICBUZXN0Q29udHJvbGxlcjo6cnVuVW50aWwobV9kb25lUmVzZXR0aW5nKTsKIH0K
IApAQCAtMjk1LDkgKzI5NCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRG
b3JGcmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMKEFkb3B0V0ssIFdLRnJhbWVDb3B5
VVJMKGZyYW1lKSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTD0gdG9DRih3a1VSTCk7
Ci0gICAgQ0ZTdHJpbmdSZWYgY2ZVUkxTdHJpbmcgPSBDRlVSTEdldFN0cmluZyhjZlVSTC5nZXQo
KSk7Ci0gICAgaWYgKCFDRkVxdWFsKGNmVVJMU3RyaW5nLCBDRlNUUigiYWJvdXQ6YmxhbmsiKSkp
CisgICAgaWYgKCFXS1VSTElzRXF1YWwod2tVUkwuZ2V0KCksIGJsYW5rVVJMKCkpKQogICAgICAg
ICByZXR1cm47CiAKICAgICBtX2RvbmVSZXNldHRpbmcgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9UZXN0SW52b2NhdGlvbi5jcHAgYi9XZWJLaXRUb29s
cy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9uLmNwcAppbmRleCA0N2RmNjZiLi5lZjM3
MjQyIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0
aW9uLmNwcAorKysgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RJbnZvY2F0aW9u
LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlRlc3RDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSA8V2ViS2l0Mi9XS0NvbnRleHRQcml2YXRlLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1Jl
dGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYktpdDsKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0zOCw3ICszNyw3IEBAIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiBuYW1lc3BhY2UgV1RSIHsKIAogVGVzdEludm9jYXRpb246OlRlc3RJbnZv
Y2F0aW9uKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKLSAgICA6IG1fdXJsKEFkb3B0V0ssIGNyZWF0
ZVdLVVJMKHBhdGhPclVSTCkpCisgICAgOiBtX3VybChBZG9wdFdLLCBXS1VSTENyZWF0ZVdpdGhV
VEY4Q1N0cmluZyhwYXRoT3JVUkwpKQogICAgICwgbV9wYXRoT3JVUkwoZmFzdFN0ckR1cChwYXRo
T3JVUkwpKQogICAgICwgbV9nb3RJbml0aWFsUmVzcG9uc2UoZmFsc2UpCiAgICAgLCBtX2dvdEZp
bmFsTWVzc2FnZShmYWxzZSkKQEAgLTcwLDggKzY5LDggQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6
aW52b2tlKCkKIHsKICAgICBzaXplV2ViVmlld0ZvckN1cnJlbnRUZXN0KG1fcGF0aE9yVVJMKTsK
IAotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhDRlN0cmluZyhDRlNUUigiQmVnaW5UZXN0IikpKTsKLSAgICBXS1JldGFp
blB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRXSywgV0tTdHJpbmdDcmVhdGVXaXRo
Q0ZTdHJpbmcoQ0ZTVFIoIiIpKSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3Nh
Z2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCJCZWdpblRlc3Qi
KSk7CisgICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VCb2R5KEFkb3B0V0ssIFdL
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKSk7CiAgICAgV0tDb250ZXh0UG9zdE1lc3Nh
Z2VUb0luamVjdGVkQnVuZGxlKFRlc3RDb250cm9sbGVyOjpzaGFyZWQoKS5jb250ZXh0KCksIG1l
c3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CiAKICAgICBUZXN0Q29udHJvbGxl
cjo6cnVuVW50aWwobV9nb3RJbml0aWFsUmVzcG9uc2UpOwpAQCAtMTA0LDggKzEwMyw3IEBAIHZv
aWQgVGVzdEludm9jYXRpb246OmR1bXAoY29uc3QgY2hhciogc3RyaW5nVG9EdW1wKQogCiB2b2lk
IFRlc3RJbnZvY2F0aW9uOjpkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0
cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewotICAgIFJldGFp
blB0cjxDRlN0cmluZ1JlZj4gY2ZNZXNzYWdlTmFtZShBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0
cmluZygwLCBtZXNzYWdlTmFtZSkpOwotICAgIGlmIChDRkVxdWFsKGNmTWVzc2FnZU5hbWUuZ2V0
KCksIENGU1RSKCJFcnJvciIpKSkgeworICAgIGlmIChXS1N0cmluZ0lzRXF1YWxUb1VURjhDU3Ry
aW5nKG1lc3NhZ2VOYW1lLCAiRXJyb3IiKSkgewogICAgICAgICAvLyBTZXQgYWxsIHN0YXRlcyB0
byB0cnVlIHRvIHN0b3Agc3Bpbm5pbmcgdGhlIHJ1bmxvb3AuCiAgICAgICAgIG1fZ290SW5pdGlh
bFJlc3BvbnNlID0gdHJ1ZTsKICAgICAgICAgbV9nb3RGaW5hbE1lc3NhZ2UgPSB0cnVlOwpAQCAt
MTEzLDExICsxMTEsMTAgQEAgdm9pZCBUZXN0SW52b2NhdGlvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIGlmIChDRkVxdWFsKGNmTWVzc2FnZU5hbWUuZ2V0KCksIENGU1RSKCJB
Y2siKSkpIHsKKyAgICBpZiAoV0tTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhtZXNzYWdlTmFt
ZSwgIkFjayIpKSB7CiAgICAgICAgIEFTU0VSVChXS0dldFR5cGVJRChtZXNzYWdlQm9keSkgPT0g
V0tTdHJpbmdHZXRUeXBlSUQoKSk7Ci0gICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gY2ZN
ZXNzYWdlQm9keShBZG9wdENGLCBXS1N0cmluZ0NvcHlDRlN0cmluZygwLCBzdGF0aWNfY2FzdDxX
S1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpKSk7CiAKLSAgICAgICAgaWYgKENGRXF1YWwoY2ZNZXNz
YWdlQm9keS5nZXQoKSwgQ0ZTVFIoIkJlZ2luVGVzdCIpKSkgeworICAgICAgICBpZiAoV0tTdHJp
bmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJv
ZHkpLCAiQmVnaW5UZXN0IikpIHsKICAgICAgICAgICAgIG1fZ290SW5pdGlhbFJlc3BvbnNlID0g
dHJ1ZTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTI1LDcgKzEyMiw3IEBA
IHZvaWQgVGVzdEludm9jYXRpb246OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
KFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIH0KIAotICAgIGlmIChDRkVxdWFsKGNmTWVzc2FnZU5hbWUuZ2V0KCksIENGU1RSKCJEb25l
IikpKSB7CisgICAgaWYgKFdLU3RyaW5nSXNFcXVhbFRvVVRGOENTdHJpbmcobWVzc2FnZU5hbWUs
ICJEb25lIikpIHsKICAgICAgICAgQVNTRVJUKFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSA9PSBX
S1N0cmluZ0dldFR5cGVJRCgpKTsKICAgICAgICAgb3N0cmluZ3N0cmVhbSBvdXQ7CiAgICAgICAg
IG91dCA8PCBzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkpOwotLSAKMS42LjUK
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69932</attachid>
            <date>2010-10-06 06:53:00 -0700</date>
            <delta_ts>2010-10-06 06:56:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45393-20101006155258.patch</filename>
            <type>text/plain</type>
            <size>6759</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
MTI1MWY5MWIxZDMyOTQ0OGQ3MmM0NDZhZDY3OTdlYjBhYTRkZDA3MC4uNDMxYWM3ZTBmNGY1NWE4
YjU1OTdmMWZjN2JmYjg3NTA2ZTE4MjAxYyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMC0wNiAgQmFs
YXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9y
dGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
MzkzCisKKyAgICAgICAgSW50cm9kdWNpbmcgYWRkaXRpb25hbCBVUkwgQVBJLgorICAgICAgICAq
IFNoYXJlZC9BUEkvYy9XS1VSTC5jcHA6CisgICAgICAgIChXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0
cmluZyk6CisgICAgICAgIChXS1VSTElzRXF1YWwpOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9X
S1VSTC5oOgorCiAyMDEwLTEwLTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLVVJMLmNwcCBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmNw
cAppbmRleCBiNTI1ODMzMjE0YTc3NDQzNTRhNGVkMWU2YjU3YmNkNmRhYmI0YmIzLi42MDJmYWFi
NzE3ZjY2Y2I4NWI1YmUyOWI4ZjFjZWQ0YjAwZjQ0YjczIDEwMDY0NAotLS0gYS9XZWJLaXQyL1No
YXJlZC9BUEkvYy9XS1VSTC5jcHAKKysrIGIvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuY3Bw
CkBAIC0zMywzICszMywxMyBAQCBXS1R5cGVJRCBXS1VSTEdldFR5cGVJRCgpCiB7CiAgICAgcmV0
dXJuIHRvUmVmKFdlYlVSTDo6QVBJVHlwZSk7CiB9CisKK1dLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9SZWYoV2Vi
VVJMOjpjcmVhdGUoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKS5sZWFrUmVmKCkpOworfQorCiti
b29sIFdLVVJMSXNFcXVhbChXS1VSTFJlZiBhLCBXS1VSTFJlZiBiKQoreworICAgIHJldHVybiB0
b1dLKGEpLT5zdHJpbmcoKSA9PSB0b1dLKGIpLT5zdHJpbmcoKTsKK30KZGlmZiAtLWdpdCBhL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmggYi9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5o
CmluZGV4IGUxMmY1NWMxZTQ2ODM2NzVmMDUyMjMyZTNmYWNiNzNmOWJmNjZhMmMuLjZlYjQ2YTE1
OTUzMWE4ZWNjN2YyNzBhNGI3NjlkYTEzNmEwOTIyNTAgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvU2hh
cmVkL0FQSS9jL1dLVVJMLmgKKysrIGIvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuaApAQCAt
MzQsNiArMzQsMTAgQEAgZXh0ZXJuICJDIiB7CiAKIFdLX0VYUE9SVCBXS1R5cGVJRCBXS1VSTEdl
dFR5cGVJRCgpOwogCitXS19FWFBPUlQgV0tVUkxSZWYgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJp
bmcoY29uc3QgY2hhciogc3RyaW5nKTsKKworV0tfRVhQT1JUIGJvb2wgV0tVUkxJc0VxdWFsKFdL
VVJMUmVmIGEsIFdLVVJMUmVmIGIpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDJhMzE2MjE1OWVjNGUyNGFkMDlkZTg5ZGUzZTA5ZDIyZTljMzU2YWMuLjllNjRmNDZl
ZDYxMmQ0MzhiYjM3NTY4ZjIyMzhiYWIwZDU5MjNjZjkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxMC0xMC0wNiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0VGVzdFJ1bm5l
ciBzaG91bGQgYmUgcG9ydGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ1MzkzCisKKyAgICAgICAgVXNlIG9ubHkgdGhlIFdlYktpdCBBUEkgZm9y
IHdvcmtpbmcgd2l0aCB1cmxzLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVu
Y3Rpb25zLmg6CisgICAgICAgIChXVFI6OmNyZWF0ZVdLVVJMKToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6YmxhbmtVUkwpOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVl
cyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUp
OgorCiAyMDEwLTEwLTA1ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAcmltLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9TdHJpbmdGdW5jdGlvbnMuaAppbmRleCBiYTA0OGVhMzk5NzI3NmE3MDdmYjNiZTVjNjU0
NTJiMWYyMjEzMjg4Li5iZDMyZDk4ZTY3ZDAwMTlmODVjMzVhZjY1MjVlODgyYmI1YTIwOGEzIDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5o
CisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsMTggKzI5LDE1IEBACiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxz
c3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRy
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tT
dHJpbmdDRi5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmdQcml2YXRlLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS1VSTC5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tVUkxDRi5oPgotI2luY2x1
ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV1RSIHsKQEAgLTk0LDI3ICs5MiwyMCBAQCBpbmxpbmUgc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZgogICAgIHJldHVybiBvdXQgPDwgc3RyaW5nUmVmLmdldCgpOwogfQogCi0vLyBV
UkwgRnVuY3Rpb25zCi0KLWlubGluZSBXS1VSTFJlZiBjcmVhdGVXS1VSTChjb25zdCBjaGFyKiBw
YXRoT3JVUkwpCi17Ci0gICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBwYXRoT3JVUkxDRlN0cmlu
ZyhBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhDU3RyaW5nKDAsIHBhdGhPclVSTCwga0NGU3Ry
aW5nRW5jb2RpbmdVVEY4KSk7Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVSTDsKLSAgICBp
ZiAoQ0ZTdHJpbmdIYXNQcmVmaXgocGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIENGU1RSKCJodHRw
Oi8vIikpIHx8IENGU3RyaW5nSGFzUHJlZml4KHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBDRlNU
UigiaHR0cHM6Ly8iKSkpCi0gICAgICAgIGNmVVJMLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoU3Ry
aW5nKDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCAwKSk7Ci0gICAgZWxzZQotI2lmIFBMQVRG
T1JNKFdJTikKLSAgICAgICAgY2ZVUkwuYWRvcHRDRihDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVt
UGF0aCgwLCBwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwga0NGVVJMV2luZG93c1BhdGhTdHlsZSwg
ZmFsc2UpKTsKLSNlbHNlCi0gICAgICAgIGNmVVJMLmFkb3B0Q0YoQ0ZVUkxDcmVhdGVXaXRoRmls
ZVN5c3RlbVBhdGgoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIGtDRlVSTFBPU0lYUGF0aFN0
eWxlLCBmYWxzZSkpOwotI2VuZGlmCi0gICAgcmV0dXJuIFdLVVJMQ3JlYXRlV2l0aENGVVJMKGNm
VVJMLmdldCgpKTsKLX0KKy8vIFVSTCBjcmVhdGlvbgogCi1pbmxpbmUgV0tTdHJpbmdSZWYgY29w
eVVSTFN0cmluZyhXS1VSTFJlZiB1cmwpCitzdGF0aWMgaW5saW5lIFdLVVJMUmVmIGNyZWF0ZVdL
VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxSZWY+IGNm
VVJMKEFkb3B0Q0YsIFdLVVJMQ29weUNGVVJMKDAsIHVybCkpOwotICAgIHJldHVybiBXS1N0cmlu
Z0NyZWF0ZVdpdGhDRlN0cmluZyhDRlVSTEdldFN0cmluZyhjZlVSTC5nZXQoKSkpOworICAgIGlm
IChzdHJzdHIocGF0aE9yVVJMLCAiaHR0cDovLyIpIHx8IHN0cnN0cihwYXRoT3JVUkwsICJodHRw
cyIpIHx8IHN0cnN0cihwYXRoT3JVUkwsICJmaWxlOi8vIikpCisgICAgICAgIHJldHVybiBXS1VS
TENyZWF0ZVdpdGhVVEY4Q1N0cmluZyhwYXRoT3JVUkwpOworCisgICAgY29uc3QgY2hhciogZmls
ZVByZWZpeCA9ICJmaWxlOi8vIjsKKyAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHByZWZpeExlbmd0
aCA9IHN0cmxlbihmaWxlUHJlZml4KTsKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKHBhdGhP
clVSTCk7CisgICAgT3duQXJyYXlQdHI8Y2hhcj4gYnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcg
Y2hhcltsZW5ndGggKyBwcmVmaXhMZW5ndGggKyAxXSk7CisgICAgc3RyY3B5KGJ1ZmZlci5nZXQo
KSwgZmlsZVByZWZpeCk7CisgICAgc3RyY2F0KGJ1ZmZlci5nZXQoKSwgcGF0aE9yVVJMKTsKKyAg
ICByZXR1cm4gV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJpbmcoYnVmZmVyLmdldCgpKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV1RSCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVu
bmVyL1Rlc3RDb250cm9sbGVyLmNwcCBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVz
dENvbnRyb2xsZXIuY3BwCmluZGV4IDczOWQ0MDVmZTlmMTk1NDZkZGE5NDc2YTEyYTRhYWQ3MzQ2
ZTgxYjQuLjk2MDgyMzU5YzJkYTc2OWMxNWU0NjRiMmQxYzM5ODAyMWRkMTIzOTAgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCisrKyBi
L1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvVGVzdENvbnRyb2xsZXIuY3BwCkBAIC0zNCw2
ICszNCwxMiBAQAogCiBuYW1lc3BhY2UgV1RSIHsKIAorc3RhdGljIFdLVVJMUmVmIGJsYW5rVVJM
KCkKK3sKKyAgICBzdGF0aWMgc3RhdGljQmxhbmtVUkwgPSBXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0
cmluZygiYWJvdXQ6YmxhbmsiKTsKKyAgICByZXR1biBzdGF0aWNCbGFua1VSTDsKK30KKwogc3Rh
dGljIFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyOwogCiBUZXN0Q29udHJvbGxlciYgVGVzdENv
bnRyb2xsZXI6OnNoYXJlZCgpCkBAIC0yMjcsOCArMjMzLDcgQEAgdm9pZCBUZXN0Q29udHJvbGxl
cjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVlcygpCiAgICAgLy8gUmVzZXQgbWFpbiBwYWdl
IGJhY2sgdG8gYWJvdXQ6YmxhbmsKICAgICBtX2RvbmVSZXNldHRpbmcgPSBmYWxzZTsKIAotICAg
IFdLUmV0YWluUHRyPFdLVVJMUmVmPiB1cmwoQWRvcHRXSywgY3JlYXRlV0tVUkwoImFib3V0OmJs
YW5rIikpOwotICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCB1cmwuZ2V0
KCkpOworICAgIFdLUGFnZUxvYWRVUkwobV9tYWluV2ViVmlldy0+cGFnZSgpLCBibGFua1VSTCgp
KTsKICAgICBUZXN0Q29udHJvbGxlcjo6cnVuVW50aWwobV9kb25lUmVzZXR0aW5nKTsKIH0KIApA
QCAtMjk1LDggKzMwMCw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6OmRpZEZpbmlzaExvYWRGb3JG
cmFtZShXS1BhZ2VSZWYgcGFnZSwgV0tGcmFtZVJlZiBmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgV0tSZXRhaW5QdHI8V0tVUkxSZWY+IHdrVVJMKEFkb3B0V0ssIFdLRnJhbWVDb3B5VVJM
KGZyYW1lKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IHdrVVJMU3RyaW5nKEFkb3B0
V0ssIGNvcHlVUkxTdHJpbmcod2tVUkwuZ2V0KCkpKTsKLSAgICBpZiAoIVdLU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcod2tVUkxTdHJpbmcuZ2V0KCksICJhYm91dDpibGFuayIpKQorICAgIGlm
ICghV0tVUkxJc0VxdWFsKHdrVVJMLmdldCgpLCBibGFua1VSTCgpKSkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV9kb25lUmVzZXR0aW5nID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69933</attachid>
            <date>2010-10-06 06:56:49 -0700</date>
            <delta_ts>2010-10-07 05:49:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-45393-20101006155647.patch</filename>
            <type>text/plain</type>
            <size>6700</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdDIvQ2hhbmdlTG9nIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXgg
MTI1MWY5MWIxZDMyOTQ0OGQ3MmM0NDZhZDY3OTdlYjBhYTRkZDA3MC4uNDMxYWM3ZTBmNGY1NWE4
YjU1OTdmMWZjN2JmYjg3NTA2ZTE4MjAxYyAxMDA2NDQKLS0tIGEvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0xMC0wNiAgQmFs
YXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0VGVzdFJ1bm5lciBzaG91bGQgYmUgcG9y
dGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1
MzkzCisKKyAgICAgICAgSW50cm9kdWNpbmcgYWRkaXRpb25hbCBVUkwgQVBJLgorICAgICAgICAq
IFNoYXJlZC9BUEkvYy9XS1VSTC5jcHA6CisgICAgICAgIChXS1VSTENyZWF0ZVdpdGhVVEY4Q1N0
cmluZyk6CisgICAgICAgIChXS1VSTElzRXF1YWwpOgorICAgICAgICAqIFNoYXJlZC9BUEkvYy9X
S1VSTC5oOgorCiAyMDEwLTEwLTA1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KZGlmZiAtLWdpdCBhL1dlYktp
dDIvU2hhcmVkL0FQSS9jL1dLVVJMLmNwcCBiL1dlYktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmNw
cAppbmRleCBiNTI1ODMzMjE0YTc3NDQzNTRhNGVkMWU2YjU3YmNkNmRhYmI0YmIzLi42MDJmYWFi
NzE3ZjY2Y2I4NWI1YmUyOWI4ZjFjZWQ0YjAwZjQ0YjczIDEwMDY0NAotLS0gYS9XZWJLaXQyL1No
YXJlZC9BUEkvYy9XS1VSTC5jcHAKKysrIGIvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuY3Bw
CkBAIC0zMywzICszMywxMyBAQCBXS1R5cGVJRCBXS1VSTEdldFR5cGVJRCgpCiB7CiAgICAgcmV0
dXJuIHRvUmVmKFdlYlVSTDo6QVBJVHlwZSk7CiB9CisKK1dLVVJMUmVmIFdLVVJMQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykKK3sKKyAgICByZXR1cm4gdG9SZWYoV2Vi
VVJMOjpjcmVhdGUoU3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpKS5sZWFrUmVmKCkpOworfQorCiti
b29sIFdLVVJMSXNFcXVhbChXS1VSTFJlZiBhLCBXS1VSTFJlZiBiKQoreworICAgIHJldHVybiB0
b1dLKGEpLT5zdHJpbmcoKSA9PSB0b1dLKGIpLT5zdHJpbmcoKTsKK30KZGlmZiAtLWdpdCBhL1dl
YktpdDIvU2hhcmVkL0FQSS9jL1dLVVJMLmggYi9XZWJLaXQyL1NoYXJlZC9BUEkvYy9XS1VSTC5o
CmluZGV4IGUxMmY1NWMxZTQ2ODM2NzVmMDUyMjMyZTNmYWNiNzNmOWJmNjZhMmMuLjZlYjQ2YTE1
OTUzMWE4ZWNjN2YyNzBhNGI3NjlkYTEzNmEwOTIyNTAgMTAwNjQ0Ci0tLSBhL1dlYktpdDIvU2hh
cmVkL0FQSS9jL1dLVVJMLmgKKysrIGIvV2ViS2l0Mi9TaGFyZWQvQVBJL2MvV0tVUkwuaApAQCAt
MzQsNiArMzQsMTAgQEAgZXh0ZXJuICJDIiB7CiAKIFdLX0VYUE9SVCBXS1R5cGVJRCBXS1VSTEdl
dFR5cGVJRCgpOwogCitXS19FWFBPUlQgV0tVUkxSZWYgV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJp
bmcoY29uc3QgY2hhciogc3RyaW5nKTsKKworV0tfRVhQT1JUIGJvb2wgV0tVUkxJc0VxdWFsKFdL
VVJMUmVmIGEsIFdLVVJMUmVmIGIpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDJhMzE2MjE1OWVjNGUyNGFkMDlkZTg5ZGUzZTA5ZDIyZTljMzU2YWMuLjllNjRmNDZl
ZDYxMmQ0MzhiYjM3NTY4ZjIyMzhiYWIwZDU5MjNjZjkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xz
L0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAor
MjAxMC0xMC0wNiAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0VGVzdFJ1bm5l
ciBzaG91bGQgYmUgcG9ydGFibGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTQ1MzkzCisKKyAgICAgICAgVXNlIG9ubHkgdGhlIFdlYktpdCBBUEkgZm9y
IHdvcmtpbmcgd2l0aCB1cmxzLgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVu
Y3Rpb25zLmg6CisgICAgICAgIChXVFI6OmNyZWF0ZVdLVVJMKToKKyAgICAgICAgKiBXZWJLaXRU
ZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdUUjo6YmxhbmtVUkwpOgor
ICAgICAgICAoV1RSOjpUZXN0Q29udHJvbGxlcjo6cmVzZXRTdGF0ZVRvQ29uc2lzdGVudFZhbHVl
cyk6CisgICAgICAgIChXVFI6OlRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkRm9yRnJhbWUp
OgorCiAyMDEwLTEwLTA1ICBEYW5pZWwgQmF0ZXMgIDxkYmF0ZXNAcmltLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXZpZCBLaWx6ZXIuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9XZWJL
aXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5oIGIvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9TdHJpbmdGdW5jdGlvbnMuaAppbmRleCBiYTA0OGVhMzk5NzI3NmE3MDdmYjNiZTVjNjU0
NTJiMWYyMjEzMjg4Li44NjJkZGVlYjU2NWQxYmYzNjg2OWNiNDY1MTZjMDIyMjc2MGQ3Y2I3IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1N0cmluZ0Z1bmN0aW9ucy5o
CisrKyBiL1dlYktpdFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvU3RyaW5nRnVuY3Rpb25zLmgKQEAg
LTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjgsMTggKzI5LDE1IEBACiAKICNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0
ci5oPgogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaD4KKyNpbmNsdWRlIDxz
c3RyZWFtPgorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRy
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1N0cmluZy5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tT
dHJpbmdDRi5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tTdHJpbmdQcml2YXRlLmg+CiAjaW5jbHVk
ZSA8V2ViS2l0Mi9XS1VSTC5oPgotI2luY2x1ZGUgPFdlYktpdDIvV0tVUkxDRi5oPgotI2luY2x1
ZGUgPHNzdHJlYW0+Ci0jaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0
ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KLSNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgogCiBuYW1lc3BhY2UgV1RSIHsKQEAgLTk0LDI3ICs5MiwyMCBAQCBpbmxpbmUgc3RkOjpv
c3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBjb25zdCBXS1JldGFpblB0cjxX
S1N0cmluZ1JlZgogICAgIHJldHVybiBvdXQgPDwgc3RyaW5nUmVmLmdldCgpOwogfQogCi0vLyBV
UkwgRnVuY3Rpb25zCisvLyBVUkwgY3JlYXRpb24KIAogaW5saW5lIFdLVVJMUmVmIGNyZWF0ZVdL
VVJMKGNvbnN0IGNoYXIqIHBhdGhPclVSTCkKIHsKLSAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+
IHBhdGhPclVSTENGU3RyaW5nKEFkb3B0Q0YsIENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmcoMCwg
cGF0aE9yVVJMLCBrQ0ZTdHJpbmdFbmNvZGluZ1VURjgpKTsKLSAgICBSZXRhaW5QdHI8Q0ZVUkxS
ZWY+IGNmVVJMOwotICAgIGlmIChDRlN0cmluZ0hhc1ByZWZpeChwYXRoT3JVUkxDRlN0cmluZy5n
ZXQoKSwgQ0ZTVFIoImh0dHA6Ly8iKSkgfHwgQ0ZTdHJpbmdIYXNQcmVmaXgocGF0aE9yVVJMQ0ZT
dHJpbmcuZ2V0KCksIENGU1RSKCJodHRwczovLyIpKSkKLSAgICAgICAgY2ZVUkwuYWRvcHRDRihD
RlVSTENyZWF0ZVdpdGhTdHJpbmcoMCwgcGF0aE9yVVJMQ0ZTdHJpbmcuZ2V0KCksIDApKTsKLSAg
ICBlbHNlCi0jaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBjZlVSTC5hZG9wdENGKENGVVJMQ3Jl
YXRlV2l0aEZpbGVTeXN0ZW1QYXRoKDAsIHBhdGhPclVSTENGU3RyaW5nLmdldCgpLCBrQ0ZVUkxX
aW5kb3dzUGF0aFN0eWxlLCBmYWxzZSkpOwotI2Vsc2UKLSAgICAgICAgY2ZVUkwuYWRvcHRDRihD
RlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aCgwLCBwYXRoT3JVUkxDRlN0cmluZy5nZXQoKSwg
a0NGVVJMUE9TSVhQYXRoU3R5bGUsIGZhbHNlKSk7Ci0jZW5kaWYKLSAgICByZXR1cm4gV0tVUkxD
cmVhdGVXaXRoQ0ZVUkwoY2ZVUkwuZ2V0KCkpOwotfQotCi1pbmxpbmUgV0tTdHJpbmdSZWYgY29w
eVVSTFN0cmluZyhXS1VSTFJlZiB1cmwpCi17Ci0gICAgUmV0YWluUHRyPENGVVJMUmVmPiBjZlVS
TChBZG9wdENGLCBXS1VSTENvcHlDRlVSTCgwLCB1cmwpKTsKLSAgICByZXR1cm4gV0tTdHJpbmdD
cmVhdGVXaXRoQ0ZTdHJpbmcoQ0ZVUkxHZXRTdHJpbmcoY2ZVUkwuZ2V0KCkpKTsKKyAgICBpZiAo
c3Ryc3RyKHBhdGhPclVSTCwgImh0dHA6Ly8iKSB8fCBzdHJzdHIocGF0aE9yVVJMLCAiaHR0cHMi
KSB8fCBzdHJzdHIocGF0aE9yVVJMLCAiZmlsZTovLyIpKQorICAgICAgICByZXR1cm4gV0tVUkxD
cmVhdGVXaXRoVVRGOENTdHJpbmcocGF0aE9yVVJMKTsKKworICAgIGNvbnN0IGNoYXIqIGZpbGVQ
cmVmaXggPSAiZmlsZTovLyI7CisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBwcmVmaXhMZW5ndGgg
PSBzdHJsZW4oZmlsZVByZWZpeCk7CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihwYXRoT3JV
UkwpOworICAgIE93bkFycmF5UHRyPGNoYXI+IGJ1ZmZlciA9IGFkb3B0QXJyYXlQdHIobmV3IGNo
YXJbbGVuZ3RoICsgcHJlZml4TGVuZ3RoICsgMV0pOworICAgIHN0cmNweShidWZmZXIuZ2V0KCks
IGZpbGVQcmVmaXgpOworICAgIHN0cmNhdChidWZmZXIuZ2V0KCksIHBhdGhPclVSTCk7CisgICAg
cmV0dXJuIFdLVVJMQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJ1ZmZlci5nZXQoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdUUgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9UZXN0Q29udHJvbGxlci5jcHAgYi9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RD
b250cm9sbGVyLmNwcAppbmRleCA3MzlkNDA1ZmU5ZjE5NTQ2ZGRhOTQ3NmExMmE0YWFkNzM0NmU4
MWI0Li45NjA4MjM1OWMyZGE3NjljMTVlNDY0YjJkMWMzOTgwMjFkZDEyMzkwIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcAorKysgYi9X
ZWJLaXRUb29scy9XZWJLaXRUZXN0UnVubmVyL1Rlc3RDb250cm9sbGVyLmNwcApAQCAtMzQsNiAr
MzQsMTIgQEAKIAogbmFtZXNwYWNlIFdUUiB7CiAKK3N0YXRpYyBXS1VSTFJlZiBibGFua1VSTCgp
Cit7CisgICAgc3RhdGljIHN0YXRpY0JsYW5rVVJMID0gV0tVUkxDcmVhdGVXaXRoVVRGOENTdHJp
bmcoImFib3V0OmJsYW5rIik7CisgICAgcmV0dW4gc3RhdGljQmxhbmtVUkw7Cit9CisKIHN0YXRp
YyBUZXN0Q29udHJvbGxlciogY29udHJvbGxlcjsKIAogVGVzdENvbnRyb2xsZXImIFRlc3RDb250
cm9sbGVyOjpzaGFyZWQoKQpAQCAtMjI3LDggKzIzMyw3IEBAIHZvaWQgVGVzdENvbnRyb2xsZXI6
OnJlc2V0U3RhdGVUb0NvbnNpc3RlbnRWYWx1ZXMoKQogICAgIC8vIFJlc2V0IG1haW4gcGFnZSBi
YWNrIHRvIGFib3V0OmJsYW5rCiAgICAgbV9kb25lUmVzZXR0aW5nID0gZmFsc2U7CiAKLSAgICBX
S1JldGFpblB0cjxXS1VSTFJlZj4gdXJsKEFkb3B0V0ssIGNyZWF0ZVdLVVJMKCJhYm91dDpibGFu
ayIpKTsKLSAgICBXS1BhZ2VMb2FkVVJMKG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgdXJsLmdldCgp
KTsKKyAgICBXS1BhZ2VMb2FkVVJMKG1fbWFpbldlYlZpZXctPnBhZ2UoKSwgYmxhbmtVUkwoKSk7
CiAgICAgVGVzdENvbnRyb2xsZXI6OnJ1blVudGlsKG1fZG9uZVJlc2V0dGluZyk7CiB9CiAKQEAg
LTI5NSw4ICszMDAsNyBAQCB2b2lkIFRlc3RDb250cm9sbGVyOjpkaWRGaW5pc2hMb2FkRm9yRnJh
bWUoV0tQYWdlUmVmIHBhZ2UsIFdLRnJhbWVSZWYgZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFdLUmV0YWluUHRyPFdLVVJMUmVmPiB3a1VSTChBZG9wdFdLLCBXS0ZyYW1lQ29weVVSTChm
cmFtZSkpOwotICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiB3a1VSTFN0cmluZyhBZG9wdFdL
LCBjb3B5VVJMU3RyaW5nKHdrVVJMLmdldCgpKSk7Ci0gICAgaWYgKCFXS1N0cmluZ0lzRXF1YWxU
b1VURjhDU3RyaW5nKHdrVVJMU3RyaW5nLmdldCgpLCAiYWJvdXQ6YmxhbmsiKSkKKyAgICBpZiAo
IVdLVVJMSXNFcXVhbCh3a1VSTC5nZXQoKSwgYmxhbmtVUkwoKSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1fZG9uZVJlc2V0dGluZyA9IHRydWU7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>