<?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>47691</bug_id>
          
          <creation_ts>2010-10-14 13:47:36 -0700</creation_ts>
          <short_desc>Support readAsArrayBuffer in FileReader and FileReaderSync</short_desc>
          <delta_ts>2010-10-29 11:25:53 -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>WebCore JavaScript</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>dimich</cc>
    
    <cc>ericu</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>294335</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-14 13:47:36 -0700</bug_when>
    <thetext>We need to support readAsArrayBuffer in FileReader and FileReaderSync per the latest File API spec:
  http://dev.w3.org/2006/webapi/FileAPI/#dfn-readAsArrayBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294461</commentid>
    <comment_count>1</comment_count>
      <attachid>70797</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-14 16:43:45 -0700</bug_when>
    <thetext>Created attachment 70797
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>294992</commentid>
    <comment_count>2</comment_count>
      <attachid>70911</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-15 16:13:08 -0700</bug_when>
    <thetext>Created attachment 70911
Proposed Patch

Updated the patch to make it work for commit-queue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296494</commentid>
    <comment_count>3</comment_count>
      <attachid>70911</attachid>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-10-19 16:06:02 -0700</bug_when>
    <thetext>Comment on attachment 70911
Proposed Patch

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

&gt; WebCore/fileapi/FileReader.cpp:335
&gt; +    // If an error occur, return an empty result.

nit: If an error occur -&gt; occurs or has occured

&gt; WebCore/fileapi/FileReader.cpp:340
&gt; +    if (m_state == Completed &amp;&amp; !m_isRawDataConverted &amp;&amp; m_readType != ReadFileAsBinaryString) {

Early exit might be better.

Does this mean we no longer support returning partial result for ReadAsText?

&gt; WebCore/fileapi/FileReaderSync.cpp:188
&gt; +        convertToText(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), m_builder);

Don&apos;t we need to set isRawDataConverted here (and below)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296507</commentid>
    <comment_count>4</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-19 16:18:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 70911 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=70911&amp;action=review
&gt; 
&gt; &gt; WebCore/fileapi/FileReader.cpp:335
&gt; &gt; +    // If an error occur, return an empty result.
&gt; 
&gt; nit: If an error occur -&gt; occurs or has occured

Will fix and upload a new patch.

&gt; 
&gt; &gt; WebCore/fileapi/FileReader.cpp:340
&gt; &gt; +    if (m_state == Completed &amp;&amp; !m_isRawDataConverted &amp;&amp; m_readType != ReadFileAsBinaryString) {
&gt; 
&gt; Early exit might be better.

I prefer not use exit earlier since otherwise we will have to duplicate the return code &quot;return m_build.toSting().

&gt; 
&gt; Does this mean we no longer support returning partial result for ReadAsText?

Yes, this is to be consistent with the latest spec and FF implementation.
&gt; 
&gt; &gt; WebCore/fileapi/FileReaderSync.cpp:188
&gt; &gt; +        convertToText(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), m_builder);
&gt; 
&gt; Don&apos;t we need to set isRawDataConverted here (and below)?

No, we do not need to use a flag as in FileReader where delay-conversion is intended. We will do the conversion right when FileReaderSync::didReceiveData is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296574</commentid>
    <comment_count>5</comment_count>
      <attachid>71236</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-19 18:04:46 -0700</bug_when>
    <thetext>Created attachment 71236
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297102</commentid>
    <comment_count>6</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-10-20 16:25:42 -0700</bug_when>
    <thetext>&gt; &gt; Does this mean we no longer support returning partial result for ReadAsText?
&gt; 
&gt; Yes, this is to be consistent with the latest spec and FF implementation.

I may need to refresh my memory... I vaguely remember that Jonus mentioned that it&apos;d be a bug in FF, though it was sometime ago.  The Oct 19 version of spec still seems to have the notion about partial result for readAsText?
http://dev.w3.org/2006/webapi/FileAPI/#filedata-attr

&gt; &gt; &gt; WebCore/fileapi/FileReaderSync.cpp:188
&gt; &gt; &gt; +        convertToText(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), m_builder);
&gt; &gt; 
&gt; &gt; Don&apos;t we need to set isRawDataConverted here (and below)?
&gt; 
&gt; No, we do not need to use a flag as in FileReader where delay-conversion is intended. We will do the conversion right when FileReaderSync::didReceiveData is called.

I got it, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297663</commentid>
    <comment_count>7</comment_count>
      <attachid>71496</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-21 14:54:21 -0700</bug_when>
    <thetext>Created attachment 71496
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297665</commentid>
    <comment_count>8</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-21 14:57:10 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; &gt; Does this mean we no longer support returning partial result for ReadAsText?
&gt; &gt; 
&gt; &gt; Yes, this is to be consistent with the latest spec and FF implementation.
&gt; 
&gt; I may need to refresh my memory... I vaguely remember that Jonus mentioned that it&apos;d be a bug in FF, though it was sometime ago.  The Oct 19 version of spec still seems to have the notion about partial result for readAsText?
&gt; http://dev.w3.org/2006/webapi/FileAPI/#filedata-attr

I read other part of the spec which does not say such thing clearly. I fixed readAsText plus readAsArrayBuffer to support returning partial data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298689</commentid>
    <comment_count>9</comment_count>
      <attachid>71496</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-10-24 18:58:42 -0700</bug_when>
    <thetext>Comment on attachment 71496
Proposed Patch

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

I may have more comments later, but there are enough issues here to sort out first.

&gt; WebCore/ChangeLog:34
&gt; +        functionalities to FileReaderSync.

Why?

&gt; WebCore/fileapi/FileReader.cpp:99
&gt; +

What happens if FileReader::start is called a second time (while the first call is still proceeding)?

&gt; WebCore/fileapi/FileReader.cpp:215
&gt; +    if (static_cast&lt;unsigned long long&gt;(m_totalBytes) &gt;  static_cast&lt;unsigned long long&gt;(std::numeric_limits&lt;unsigned&gt;::max())) {

Why is this cast needed &quot;static_cast&lt;unsigned long long&gt;(std::numeric_limits&lt;unsigned&gt;::max())&quot;?

&gt; WebCore/fileapi/FileReader.cpp:222
&gt; +        m_rawData = ArrayBuffer::create(static_cast&lt;unsigned&gt;(m_totalBytes), 1);

static_cast&lt;unsigned&gt;(m_totalBytes)

(Given the number of casts of m_totalBytes) Why not make m_totalBytes unsigned?

You&apos;ll need to store the initial assignment of response.expectedContentLength(); in another variable but after the if check, you can store the result in m_totalBytes.

&gt; WebCore/fileapi/FileReader.cpp:@
&gt;  void FileReader::didReceiveData(const char* data, int lengthReceived)

It looks like a fair amount of code is duplicated between FileReader and FilereaderSync can this be reduced?

&gt; WebCore/fileapi/FileReader.cpp:322
&gt; +PassRefPtr&lt;ArrayBuffer&gt; FileReader::arrayBufferResult() const

This should be a ArrayBuffer* since it isn&apos;t return ownership.

&gt; WebCore/fileapi/FileReader.cpp:342
&gt; +    // Do the coversion if not yet.

typo: coversion

&gt; WebCore/fileapi/FileReader.h:157
&gt; +    // We have to keep track of all the raw data for all readings other than binary string.

s/readings/encodings/

&gt; WebCore/fileapi/FileReaderSync.cpp:50
&gt; +#include &lt;wtf/RefPtr.h&gt;

I don&apos;t think you have any test to verify that using a FileReaderSync twice in a row (using the binary string works) because it doesn&apos;t appear to at the moment.

It looks like the second call will get its result appended to the results from the first call.

Please add this test.

&gt; WebCore/fileapi/FileReaderSync.cpp:61
&gt; +PassRefPtr&lt;ArrayBuffer&gt; FileReaderSync::readAsArrayBuffer(ScriptExecutionContext* scriptExecutionContext, Blob* blob, ExceptionCode&amp; ec)

This shouldn&apos;t be a PassRefPtr because it isn&apos;t returning ownership.

Actually, why not return ownership?
Just do
 return m_rawData.release();

&gt; WebCore/fileapi/FileReaderSync.cpp:100
&gt;  {

ASSERT(!m_rawData.get());  (or set it to 0).

Actually there is a lot of state to be reset here that doesn&apos;t appear to be.

This would happen nearly automatically if FileReaderSyncLoader existed. Why did that go away?

&gt; WebCore/fileapi/FileReaderSync.cpp:153
&gt; +        m_rawData = ArrayBuffer::create(static_cast&lt;unsigned&gt;(totalBytes), 1);

Why not use m_rawData for all cases?

&gt; WebCore/fileapi/FileReaderSync.cpp:188
&gt; +        convertToText(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), m_builder);

Why isn&apos;t m_rawData cleared here?

&gt; WebCore/fileapi/FileReaderSync.cpp:191
&gt; +        FileReader::convertToDataURL(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), m_blobType, m_builder);

Why isn&apos;t m_rawData cleared here?

&gt; WebCore/fileapi/FileReaderSync.h:89
&gt; +    // We have to keep track of all the raw data for all readings other than binary string.

This comment doesn&apos;t explain to me the need to keep m_rawData. After all, the code previously supported other encodings without the need to keep around m_rawData.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299217</commentid>
    <comment_count>10</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-25 17:40:08 -0700</bug_when>
    <thetext>&gt; &gt; WebCore/ChangeLog:34
&gt; &gt; +        functionalities to FileReaderSync.
&gt; 
&gt; Why?
To simplify the logic. I think embedding the loading logic in the FileReaderSync seems to be simpler. Updated the comment in ChangeLog.

&gt; 
&gt; &gt; WebCore/fileapi/FileReader.cpp:99
&gt; &gt; +
&gt; 
&gt; What happens if FileReader::start is called a second time (while the first call is still proceeding)?
FileReader::start will not be called 2nd time because FileReader::readInternal will only schedule delayedStart to be called once when m_state is None though readInternal could be called multiple times.

&gt; &gt; WebCore/fileapi/FileReader.cpp:215
&gt; &gt; +    if (static_cast&lt;unsigned long long&gt;(m_totalBytes) &gt;  static_cast&lt;unsigned long long&gt;(std::numeric_limits&lt;unsigned&gt;::max())) {
&gt; 
&gt; Why is this cast needed &quot;static_cast&lt;unsigned long long&gt;(std::numeric_limits&lt;unsigned&gt;::max())&quot;?
Removed.

&gt; &gt; WebCore/fileapi/FileReader.cpp:222
&gt; &gt; +        m_rawData = ArrayBuffer::create(static_cast&lt;unsigned&gt;(m_totalBytes), 1);
&gt; 
&gt; static_cast&lt;unsigned&gt;(m_totalBytes)
&gt; 
&gt; (Given the number of casts of m_totalBytes) Why not make m_totalBytes unsigned?
&gt; 
&gt; You&apos;ll need to store the initial assignment of response.expectedContentLength(); in another variable but after the if check, you can store the result in m_totalBytes.
Done.

&gt; &gt; WebCore/fileapi/FileReader.cpp:@
&gt; &gt;  void FileReader::didReceiveData(const char* data, int lengthReceived)
&gt; 
&gt; It looks like a fair amount of code is duplicated between FileReader and FilereaderSync can this be reduced?
Good thought. However, I rather do it in a separate patch because otherwise it will make the patch too big. I added a FIXME for it.

&gt; &gt; WebCore/fileapi/FileReader.cpp:322
&gt; &gt; +PassRefPtr&lt;ArrayBuffer&gt; FileReader::arrayBufferResult() const
&gt; 
&gt; This should be a ArrayBuffer* since it isn&apos;t return ownership.
I think we want to return PassRefPtr&lt;ArrayBuffer&gt; so that ArrayBuffer object can still live after FileReader object is GC-ed.

&gt; &gt; WebCore/fileapi/FileReader.cpp:342
&gt; &gt; +    // Do the coversion if not yet.
&gt; 
&gt; typo: coversion
Done.

&gt; &gt; WebCore/fileapi/FileReader.h:157
&gt; &gt; +    // We have to keep track of all the raw data for all readings other than binary string.
&gt; 
&gt; s/readings/encodings/
I think I mean reading for all other scenarios, like as text, as data URL, and as array buffer.

&gt; &gt; WebCore/fileapi/FileReaderSync.cpp:50
&gt; &gt; +#include &lt;wtf/RefPtr.h&gt;
&gt; 
&gt; I don&apos;t think you have any test to verify that using a FileReaderSync twice in a row (using the binary string works) because it doesn&apos;t appear to at the moment.
&gt; 
&gt; It looks like the second call will get its result appended to the results from the first call.
&gt; 
&gt; Please add this test.
Done.

&gt; &gt; WebCore/fileapi/FileReaderSync.cpp:61
&gt; &gt; +PassRefPtr&lt;ArrayBuffer&gt; FileReaderSync::readAsArrayBuffer(ScriptExecutionContext* scriptExecutionContext, Blob* blob, ExceptionCode&amp; ec)
&gt; 
&gt; This shouldn&apos;t be a PassRefPtr because it isn&apos;t returning ownership.
&gt; 
&gt; Actually, why not return ownership?
&gt; Just do
&gt;  return m_rawData.release();
Done.

&gt; &gt; WebCore/fileapi/FileReaderSync.cpp:100
&gt; &gt;  {
&gt; 
&gt; ASSERT(!m_rawData.get());  (or set it to 0).
&gt; 
&gt; Actually there is a lot of state to be reset here that doesn&apos;t appear to be.
&gt; 
&gt; This would happen nearly automatically if FileReaderSyncLoader existed. Why did that go away?
Fixed. I removed FileReaderSyncLoader to simplify the logic. Yes, it bring up other complexity. I am thinking of introducing FileReaderLoader that can be used by FileReader and FileReaderSync to compact the similar logic. I will do it in another patch.

&gt; &gt; WebCore/fileapi/FileReaderSync.cpp:153
&gt; &gt; +        m_rawData = ArrayBuffer::create(static_cast&lt;unsigned&gt;(totalBytes), 1);
&gt; 
&gt; Why not use m_rawData for all cases?
Because I want to avoid having 2 buffers at one moment when reading as binary string.

&gt; &gt; WebCore/fileapi/FileReaderSync.cpp:188
&gt; &gt; +        convertToText(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), m_builder);
&gt; 
&gt; Why isn&apos;t m_rawData cleared here?
Done.

&gt; &gt; WebCore/fileapi/FileReaderSync.cpp:191
&gt; &gt; +        FileReader::convertToDataURL(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), m_blobType, m_builder);
&gt; 
&gt; Why isn&apos;t m_rawData cleared here?
Done.

&gt; &gt; WebCore/fileapi/FileReaderSync.h:89
&gt; &gt; +    // We have to keep track of all the raw data for all readings other than binary string.
&gt; 
&gt; This comment doesn&apos;t explain to me the need to keep m_rawData. After all, the code previously supported other encodings without the need to keep around m_rawData.
Removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299218</commentid>
    <comment_count>11</comment_count>
      <attachid>71826</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-25 17:40:45 -0700</bug_when>
    <thetext>Created attachment 71826
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299389</commentid>
    <comment_count>12</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-10-26 05:04:40 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; This should be a ArrayBuffer* since it isn&apos;t return ownership.
&gt; I think we want to return PassRefPtr&lt;ArrayBuffer&gt; so that ArrayBuffer object can still live after FileReader object is GC-ed.

The point out ArrayBuffer living on should be managed by the caller not the function.

The function should return an ArrayBuffer*. The caller may then stuff that into a RefPtr (to ensure that the item lives on for as long as it wishes to hold it).

Basically, there is no need to return a PassRefPtr *unless* a function is letting go of its reference. (This return value is about what the function is doing. It is not about what the caller is doing.)


&gt; &gt; &gt; WebCore/fileapi/FileReaderSync.cpp:153
&gt; &gt; &gt; +        m_rawData = ArrayBuffer::create(static_cast&lt;unsigned&gt;(totalBytes), 1);
&gt; &gt; 
&gt; &gt; Why not use m_rawData for all cases?
&gt; Because I want to avoid having 2 buffers at one moment when reading as binary string.

I don&apos;t understand this.


Let me sketch out something:
 void FileReaderSync::didReceiveResponse(const ResourceResponse&amp; response)
 {
...
     m_rawData = ArrayBuffer::create(static_cast&lt;unsigned&gt;(totalBytes), 1);
 }

 void FileReaderSync::didReceiveData(const char* data, int lengthReceived)
 {
...
     memcpy(static_cast&lt;char*&gt;(m_rawData-&gt;data()) + m_totalLoaded, data, lengthReceived);
     m_totalLoaded += static_cast&lt;unsigned&gt;(lengthReceived);
 }
 void FileReaderSync::didFinishLoading(unsigned long)
 {
...
     StringBuilder builder;
     switch (m_readType) {
     case ReadAsArrayBuffer:
         // Nothing to do since we need no conversion.
         return;
     case ReadAsBinaryString:
         m_string = String(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength());         
         return;
     case ReadAsText: {
         convertToText(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), builder);
         m_rawData = 0;
         m_stringResult = build.toString();
         return;
     }
     case ReadAsDataURL:
         FileReader::convertToDataURL(static_cast&lt;const char*&gt;(m_rawData-&gt;data()), m_rawData-&gt;byteLength(), m_blobType, m_builder);
         m_rawData = 0;
         m_stringResult = builder.toString();
         return;
     }
 
     ASSERT_NOT_REACHED();
 }

I omitted the error checking (with ...) for brevity.


Then you get rid of the member variable StringBuilder m_builder and add the member variable String m_stringResult ;

This gets rid of several special cases and concentrated them in the didFinishLoading stage.

In fact you could probably change of didFinishLoading to 
   if (hasError())
       m_rawData = 0;

and move the conversion logic into each read function since there is no sharing of logic here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299390</commentid>
    <comment_count>13</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-10-26 05:05:10 -0700</bug_when>
    <thetext>s/In fact you could probably change of didFinishLoading to/In fact you could probably change didFinishLoading to/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299391</commentid>
    <comment_count>14</comment_count>
      <attachid>71826</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-10-26 05:15:04 -0700</bug_when>
    <thetext>Comment on attachment 71826
Proposed Patch

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

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21224
&gt; -			developmentRegion = English;

Why did this line get removed? (Are you using the xcode version which removes this and someone else will add it?)

&gt; WebCore/bindings/js/JSFileReaderCustom.cpp:48
&gt; +    switch (imp-&gt;readType()) {

A switch for a since case just seems odd (with a default -- it looks like an if/else to me) but ok.

&gt; WebCore/fileapi/FileReader.cpp:229
&gt; +    if (static_cast&lt;unsigned long long&gt;(response.expectedContentLength()) &gt;  std::numeric_limits&lt;unsigned&gt;::max()) {

Why is this code different from the exact same code in the FileReaderSync which stores the value of expectedContentLength in a variable?

Please make this one look the same (and in a subsequent patch make them the same function).

&gt; WebCore/fileapi/FileReaderSync.cpp:185
&gt; +    if (hasError())

m_rawData = 0;

Here as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299393</commentid>
    <comment_count>15</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-10-26 05:20:52 -0700</bug_when>
    <thetext>I&apos;m having a really hard time reviewing this due to the duplication of code between FileReader and FileReaderSync.

The problem is that I&apos;ll make suggestions for FileReaderSync but the ideas may not be applicable when the logic is de-duplicated.

Also the duplication means that I&apos;m reviewing similar code twice but it isn&apos;t quite the same and it becomes harder to review in this fashion. I would do a much better job if I only had to focus on one set of logic changes.

In short, it would be much, much better if the de-duplication happened before this additional functionality was added. Otherwise, I&apos;m not going to do as good of a job with understanding this code. I&apos;m sorry to put this in the way of landing the patch but I think it will lead to better code in the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299920</commentid>
    <comment_count>16</comment_count>
      <attachid>71973</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-26 18:17:37 -0700</bug_when>
    <thetext>Created attachment 71973
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299922</commentid>
    <comment_count>17</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-26 18:22:28 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I&apos;m having a really hard time reviewing this due to the duplication of code between FileReader and FileReaderSync.
&gt; 
&gt; The problem is that I&apos;ll make suggestions for FileReaderSync but the ideas may not be applicable when the logic is de-duplicated.
&gt; 
&gt; Also the duplication means that I&apos;m reviewing similar code twice but it isn&apos;t quite the same and it becomes harder to review in this fashion. I would do a much better job if I only had to focus on one set of logic changes.
&gt; 
&gt; In short, it would be much, much better if the de-duplication happened before this additional functionality was added. Otherwise, I&apos;m not going to do as good of a job with understanding this code. I&apos;m sorry to put this in the way of landing the patch but I think it will lead to better code in the end.

I&apos;ve refactored the code to merge the similar code into FileReaderLoader.

Also, I&apos;ve addressed all the issues except PassRefPtr&lt;ArrayBuffer&gt;. I understand why we could return the pointer directly. However, when I tried it, I got the problem because the JS generated code assume PassRefPtr&lt;ArrayBuffer&gt;. Unless we want to introduce custom code for FileReaderSync::readAsArrayBuffer, we have to keep using PassRefPtr&lt;ArrayBuffer&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299924</commentid>
    <comment_count>18</comment_count>
      <attachid>71975</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-26 18:26:32 -0700</bug_when>
    <thetext>Created attachment 71975
Proposed Patch

Fixed style error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299956</commentid>
    <comment_count>19</comment_count>
      <attachid>71975</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-10-26 20:52:01 -0700</bug_when>
    <thetext>Comment on attachment 71975
Proposed Patch

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

First impression is that this is awesome.  Thanks for doing this!

Ok, I only had a few comments. Several are simple enough to just handle quickly and commit. If any require significant changes (and you want another review on them), then please submit without the change and create another bug for the extra change.

&gt; WebCore/WebCore.xcodeproj/project.pbxproj:-21238
&gt; -			developmentRegion = English;

Why is this line deleted?

&gt; WebCore/bindings/js/JSFileReaderCustom.cpp:50
&gt; +    else

No else here due to return in if condition.

&gt; WebCore/bindings/v8/custom/V8FileReaderCustom.cpp:69
&gt; +    switch (imp-&gt;readType()) {

You didn&apos;t need to convert the switch to an if in the jsc code. You can go either way, but it would be nice to do the same thing in the jsc bindings and v8 bindings, so pick one and do the same in both.

&gt; WebCore/fileapi/FileReaderLoader.cpp:111
&gt; +    m_loader = 0;

please double check that it is ok to do to this when you get called from didFail. (That somehow the loader doesn&apos;t try to do something after that call and it already destroyed.)

&gt; WebCore/fileapi/FileReaderLoader.cpp:145
&gt; +    // Bail out if we encounetr an error.

typo: encounetr

&gt; WebCore/fileapi/FileReaderLoader.cpp:204
&gt; +    return m_rawData;

What does it mean to return this when m_rawData keeps changing as we get more data (in the async case)?

Is the caller able to modify it?

Do we need to make a copy here?

&gt; WebCore/fileapi/FileReaderLoader.cpp:219
&gt; +    if (m_readType == ReadAsBinaryString)

switch on m_readType?

&gt; WebCore/fileapi/FileReaderLoader.cpp:293
&gt; +

Extra returns.

&gt; WebCore/fileapi/FileReaderLoaderClient.h:38
&gt; +class FileReaderLoaderClient {

Since FileReader is the only thing to implement FileReaderLoaderClient, why not get rid of this interface and just pass in FileReader?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299957</commentid>
    <comment_count>20</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-10-26 20:52:52 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; WebCore/fileapi/FileReaderLoader.cpp:293
&gt; &gt; +
&gt; 
&gt; Extra returns.
&gt; 
I should have said extra blank lines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301899</commentid>
    <comment_count>21</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-29 11:24:59 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/70904.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301901</commentid>
    <comment_count>22</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-10-29 11:25:53 -0700</bug_when>
    <thetext>All fixed except:

(In reply to comment #19)

&gt; &gt; WebCore/fileapi/FileReaderLoaderClient.h:38
&gt; &gt; +class FileReaderLoaderClient {
&gt; 
&gt; Since FileReader is the only thing to implement FileReaderLoaderClient, why not get rid of this interface and just pass in FileReader?

I will address this in another patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70797</attachid>
            <date>2010-10-14 16:43:45 -0700</date>
            <delta_ts>2010-10-15 16:13:08 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47691</filename>
            <type>text/plain</type>
            <size>46108</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwZDk1MzI2Li5hYTNjYTJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMTAt
MTQgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4g
RmlsZVJlYWRlciBhbmQgRmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NjkxCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3JlYWQt
ZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1jb21tb24uanM6CisgICAgICAgIChyZWFkQmxvYkFzQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQXJy
YXlCdWZmZXJTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nU3luYyk6Cisg
ICAgICAgIChfcmVhZEJsb2JBc1RleHRTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzRGF0YVVS
TFN5bmMpOgorICAgICAgICAobG9nUmVzdWx0KToKKyAgICAgICAgKGxvYWRlZCk6CisgICAgICAg
IChfdG9TdHJpbmcpOgorICAgICAgICAoX2lzQVNDSUlTdHJpbmcpOgorICAgICAgICAoX3RvSGV4
YWRlY2ltYWwpOgorICAgICAgICAoX2dldEVsZW1lbnRBdCk6CisgICAgICAgICogZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanM6CisgICAgICAgICh0ZXN0UmVhZGlu
Z05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIpOgorICAgICAgICAodGVzdFJlYWRpbmdFbXB0
eUZpbGVBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxl
QXNBcnJheUJ1ZmZlcik6CisgICAgICAgICh0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVm
ZmVyKToKKyAgICAgICAgKHRlc3RNdWx0aXBsZVJlYWRzKToKKyAgICAgICAgKiBmYXN0L2ZpbGVz
L3dvcmtlcnMvd29ya2VyLXJlYWQtYmxvYi1zeW5jLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3Rl
ZC50eHQ6CisKIDIwMTAtMTAtMTQgIE5pa29sYXMgWmltbWVybWFubiAgPG56aW1tZXJtYW5uQHJp
bS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKaW5k
ZXggNzZmZDU1Zi4uMGRlZjA2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9y
ZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMv
cmVhZC1maWxlLWFzeW5jLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDEwIEBACiAKK1Rlc3QgcmVh
ZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAor
UmVjZWl2ZWQgZXJyb3IgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK2Vycm9yIGNvZGU6IDgKK1JlY2Vp
dmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJp
bmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGVycm9yIGV2ZW50CkBAIC0xNyw2
ICsyMywxNSBAQCBSZWNlaXZlZCBlcnJvciBldmVudAogcmVhZHlTdGF0ZTogMgogZXJyb3IgY29k
ZTogOAogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUg
YXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQK
K3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3Vs
dCBzaXplOiAwCityZXN1bHQ6IAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5n
IGFuIGVtcHR5IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQg
bG9hZHN0YXJ0IGV2ZW50CkBAIC00NCw2ICs1OSwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQg
c2l6ZTogNQogcmVzdWx0OiBkYXRhOgogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFk
aW5nIGEgVVRGLTggZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVk
IGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVh
ZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRl
bmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVh
ZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CkBAIC01Myw2ICs3NywxNSBAQCBy
ZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9h
ZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCity
ZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1Jl
Y2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA5CityZXN1bHQ6
IDB4MCAweDEgMHgyIDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCitSZWNlaXZlZCBsb2Fk
ZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiBy
ZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKaW5kZXggMDNiY2I2Zi4uNmYwZTI1
OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21t
b24uanMKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24u
anMKQEAgLTEwLDYgKzEwLDE0IEBAIGZ1bmN0aW9uIGJ1aWxkQmxvYihpdGVtcywgYnVpbGRlcikK
IH0KIAogLy8gUmVhZHMgYSBibG9iIGVpdGhlciBhc3luY2hyb25vdXNseSBvciBzeW5jaHJvbm91
c2x5LgorZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVyKHRlc3RGaWxlcywgYmxvYikKK3sK
KyAgICBpZiAoaXNSZWFkQXNBc3luYygpKQorICAgICAgICBfcmVhZEJsb2JBc0FycmF5QnVmZmVy
QXN5bmModGVzdEZpbGVzLCBibG9iKTsKKyAgICBlbHNlCisgICAgICAgIF9yZWFkQmxvYkFzQXJy
YXlCdWZmZXJTeW5jKHRlc3RGaWxlcywgYmxvYik7Cit9CisKIGZ1bmN0aW9uIHJlYWRCbG9iQXNC
aW5hcnlTdHJpbmcodGVzdEZpbGVzLCBibG9iKQogewogICAgIGlmIChpc1JlYWRBc0FzeW5jKCkp
CkBAIC0zNSw2ICs0MywxMiBAQCBmdW5jdGlvbiByZWFkQmxvYkFzRGF0YVVSTCh0ZXN0RmlsZXMs
IGJsb2IpCiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBhc3luY2hyb25vdXNseS4KK2Z1bmN0aW9uIF9y
ZWFkQmxvYkFzQXJyYXlCdWZmZXJBc3luYyh0ZXN0RmlsZXMsIGJsb2IpCit7CisgICAgdmFyIHJl
YWRlciA9IGNyZWF0ZVJlYWRlckFzeW5jKHRlc3RGaWxlcyk7CisgICAgcmVhZGVyLnJlYWRBc0Fy
cmF5QnVmZmVyKGJsb2IpCit9CisKIGZ1bmN0aW9uIF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nQXN5
bmModGVzdEZpbGVzLCBibG9iKQogewogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJBc3lu
Yyh0ZXN0RmlsZXMpOwpAQCAtNTQsMTIgKzY4LDI1IEBAIGZ1bmN0aW9uIF9yZWFkQmxvYkFzRGF0
YVVSTEFzeW5jKHRlc3RGaWxlcywgYmxvYikKIH0KIAogLy8gUmVhZHMgYSBibG9iIHN5bmNocm9u
b3VzbHkuCitmdW5jdGlvbiBfcmVhZEJsb2JBc0FycmF5QnVmZmVyU3luYyh0ZXN0RmlsZXMsIGJs
b2IpCit7CisgICAgdmFyIHJlYWRlciA9IGNyZWF0ZVJlYWRlclN5bmMoKTsKKyAgICB0cnkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpOworICAg
ICAgICBsb2dSZXN1bHQocmVzdWx0KTsKKyAgICB9IGNhdGNoIChlcnJvcikgeworICAgICAgICBs
b2coIlJlY2VpdmVkIGV4Y2VwdGlvbiAiICsgZXJyb3IuY29kZSArICI6ICIgKyBlcnJvci5uYW1l
KTsKKyAgICB9CisKKyAgICBydW5OZXh0VGVzdCh0ZXN0RmlsZXMpOworfQorCiBmdW5jdGlvbiBf
cmVhZEJsb2JBc0JpbmFyeVN0cmluZ1N5bmModGVzdEZpbGVzLCBibG9iKQogewogICAgIHZhciBy
ZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CiAgICAgdHJ5IHsKICAgICAgICAgdmFyIHJlc3Vs
dCA9IHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoYmxvYik7Ci0gICAgICAgIGxvZyhyZXN1bHQp
OworICAgICAgICBsb2dSZXN1bHQocmVzdWx0KTsKICAgICB9IGNhdGNoIChlcnJvcikgewogICAg
ICAgICBsb2coIlJlY2VpdmVkIGV4Y2VwdGlvbiAiICsgZXJyb3IuY29kZSArICI6ICIgKyBlcnJv
ci5uYW1lKTsKICAgICB9CkBAIC03Miw3ICs5OSw3IEBAIGZ1bmN0aW9uIF9yZWFkQmxvYkFzVGV4
dFN5bmModGVzdEZpbGVzLCBibG9iLCBlbmNvZGluZykKICAgICB2YXIgcmVhZGVyID0gY3JlYXRl
UmVhZGVyU3luYygpOwogICAgIHRyeSB7CiAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVh
ZEFzVGV4dChibG9iLCBlbmNvZGluZyk7Ci0gICAgICAgIGxvZyhyZXN1bHQpOworICAgICAgICBs
b2dSZXN1bHQocmVzdWx0KTsKICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICBsb2coIlJl
Y2VpdmVkIGV4Y2VwdGlvbiAiICsgZXJyb3IuY29kZSArICI6ICIgKyBlcnJvci5uYW1lKTsKICAg
ICB9CkBAIC04NSw3ICsxMTIsNyBAQCBmdW5jdGlvbiBfcmVhZEJsb2JBc0RhdGFVUkxTeW5jKHRl
c3RGaWxlcywgYmxvYikKICAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyU3luYygpOwogICAg
IHRyeSB7CiAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVhZEFzRGF0YVVSTChibG9iKTsK
LSAgICAgICAgbG9nKHJlc3VsdCk7CisgICAgICAgIGxvZ1Jlc3VsdChyZXN1bHQpOwogICAgIH0g
Y2F0Y2ggKGVycm9yKSB7CiAgICAgICAgIGxvZygiUmVjZWl2ZWQgZXhjZXB0aW9uICIgKyBlcnJv
ci5jb2RlICsgIjogIiArIGVycm9yLm5hbWUpOwogICAgIH0KQEAgLTExNCw2ICsxNDEsMTkgQEAg
ZnVuY3Rpb24gY3JlYXRlUmVhZGVyU3luYygpCiAgICAgcmV0dXJuIG5ldyBGaWxlUmVhZGVyU3lu
YygpOwogfQogCisvLyAncmVzdWx0JyBjYW4gYmUgZWl0aGVyIGFuIEFycmF5QnVmZmVyIG9iamVj
dCBvciBhIHN0cmluZy4KK2Z1bmN0aW9uIGxvZ1Jlc3VsdChyZXN1bHQpCit7CisgICAgaWYgKHR5
cGVvZiByZXN1bHQgPT0gJ29iamVjdCcpIHsKKyAgICAgICAgbG9nKCJyZXN1bHQgc2l6ZTogIiAr
IHJlc3VsdC5ieXRlTGVuZ3RoKTsKKyAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkocmVz
dWx0LCAwLCByZXN1bHQuYnl0ZUxlbmd0aCk7CisgICAgfSBlbHNlCisgICAgICAgIGxvZygicmVz
dWx0IHNpemU6ICIgKyByZXN1bHQubGVuZ3RoKTsKKworICAgIHZhciByZXN1bHRPdXRwdXQgPSBf
aXNBU0NJSVN0cmluZyhyZXN1bHQpID8gX3RvU3RyaW5nKHJlc3VsdCkgOiBfdG9IZXhhZGVjaW1h
bChyZXN1bHQpOworICAgIGxvZygicmVzdWx0OiAiICsgcmVzdWx0T3V0cHV0KTsKK30KKwogZnVu
Y3Rpb24gbG9nRXZlbnQoZXZlbnQpCiB7CiAgICAgbG9nKCJSZWNlaXZlZCAiICsgZXZlbnQudHlw
ZSArICIgZXZlbnQiKTsKQEAgLTEyOSwxMSArMTY5LDkgQEAgZnVuY3Rpb24gbG9hZGVkKGV2ZW50
KQogewogICAgIGxvZ0V2ZW50KGV2ZW50KTsKICAgICBsb2coInJlYWR5U3RhdGU6ICIgKyBldmVu
dC50YXJnZXQucmVhZHlTdGF0ZSk7Ci0gICAgbG9nKCJyZXN1bHQgc2l6ZTogIiArIGV2ZW50LnRh
cmdldC5yZXN1bHQubGVuZ3RoKTsKIAogICAgIHZhciByZXN1bHQgPSBldmVudC50YXJnZXQucmVz
dWx0OwotICAgIHZhciByZXN1bHRPdXRwdXQgPSBfaXNBU0NJSVN0cmluZyhyZXN1bHQpID8gcmVz
dWx0IDogX3RvSGV4YWRlY2ltYWwocmVzdWx0KTsKLSAgICBsb2coInJlc3VsdDogIiArIHJlc3Vs
dE91dHB1dCk7CisgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiB9CiAKIGZ1bmN0aW9uIGxvYWRGYWls
ZWQoZXZlbnQpCkBAIC0xNTAsMjMgKzE4OCw0MiBAQCBmdW5jdGlvbiBsb2FkRW5kZWQodGVzdEZp
bGVzLCBldmVudCkKIH0KIAogLy8gSGVscGVyIGZ1bmN0aW9ucy4KLWZ1bmN0aW9uIF9pc0FTQ0lJ
U3RyaW5nKHN0cikKKworLy8gJ3ZhbHVlJyBjYW4gYmUgZWl0aGVyIGFuIEFycmF5QnVmZmVyVmll
dyBvYmplY3Qgb3IgYSBzdHJpbmcuCitmdW5jdGlvbiBfdG9TdHJpbmcodmFsdWUpCiB7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0ci5j
aGFyQ29kZUF0KGkpID49IDEyOCkKKyAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKQor
ICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgdmFyIHJlc3VsdCA9ICIiOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBTdHJpbmcu
ZnJvbUNoYXJDb2RlKHZhbHVlW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyAndmFs
dWUnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXJWaWV3IG9iamVjdCBvciBhIHN0cmluZy4K
K2Z1bmN0aW9uIF9pc0FTQ0lJU3RyaW5nKHZhbHVlKQoreworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdmFsdWUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKF9nZXRFbGVtZW50QXQodmFsdWUs
IGkpID49IDEyOCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLWZ1bmN0aW9uIF90b0hleGFkZWNpbWFsKHN0cikKKy8vICd2YWx1ZScgY2Fu
IGJlIGVpdGhlciBhbiBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0IG9yIGEgc3RyaW5nLgorZnVuY3Rp
b24gX3RvSGV4YWRlY2ltYWwodmFsdWUpCiB7CiAgICAgdmFyIHJlc3VsdCA9ICIiOwotICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBoZXggPSAi
MHgiICsgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRikudG9TdHJpbmcoMTYpOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGhleCA9ICIw
eCIgKyAoX2dldEVsZW1lbnRBdCh2YWx1ZSwgaSkgJiAweEZGKS50b1N0cmluZygxNik7CiAgICAg
ICAgIGlmIChpID4gMCkKICAgICAgICAgICAgIHJlc3VsdCArPSAiICI7CiAgICAgICAgIHJlc3Vs
dCArPSBoZXg7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK2Z1bmN0aW9uIF9nZXRF
bGVtZW50QXQodmFsdWUsIGkpCit7CisgICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmlu
ZycpID8gdmFsdWUuY2hhckNvZGVBdChpKSA6IHZhbHVlW2ldOworfQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcwpp
bmRleCBlOGIyYzljLi4zOGVlMTIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcwpAQCAtMSwxMSArMSwxNSBA
QAogdmFyIHRlc3RDYXNlcyA9IFsKKyAgICAidGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc0Fy
cmF5QnVmZmVyIiwKICAgICAidGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc0JpbmFyeVN0cmlu
ZyIsCiAgICAgInRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNUZXh0IiwKICAgICAidGVzdFJl
YWRpbmdOb25FeGlzdGVudEZpbGVBc0RhdGFVUkwiLAorICAgICJ0ZXN0UmVhZGluZ0VtcHR5Rmls
ZUFzQXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzQmluYXJ5U3RyaW5n
IiwKICAgICAidGVzdFJlYWRpbmdFbXB0eUZpbGVBc1RleHQiLAogICAgICJ0ZXN0UmVhZGluZ0Vt
cHR5RmlsZUFzRGF0YVVSTCIsCisgICAgInRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNBcnJh
eUJ1ZmZlciIsCiAgICAgInRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNCaW5hcnlTdHJpbmci
LAorICAgICJ0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVmZmVyIiwKICAgICAidGVzdFJl
YWRpbmdCaW5hcnlGaWxlQXNCaW5hcnlTdHJpbmciLAogICAgICJ0ZXN0UmVhZGluZ1VURjhFbmNv
ZGVkRmlsZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5nVVRGMTZCRUJPTUVuY29kZWRGaWxlQXNU
ZXh0IiwKQEAgLTI5LDYgKzMzLDEyIEBAIGZ1bmN0aW9uIHJ1bk5leHRUZXN0KHRlc3RGaWxlcykK
ICAgICB9CiB9CiAKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNBcnJheUJ1
ZmZlcih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQg
ZmlsZSBhcyBhcnJheSBidWZmZXIiKTsKKyAgICByZWFkQmxvYkFzQXJyYXlCdWZmZXIodGVzdEZp
bGVzLCB0ZXN0RmlsZXNbJ25vbi1leGlzdGVudCddKTsKK30KKwogZnVuY3Rpb24gdGVzdFJlYWRp
bmdOb25FeGlzdGVudEZpbGVBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAgICAgbG9nKCJU
ZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CkBAIC00
Nyw2ICs1NywxMiBAQCBmdW5jdGlvbiB0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzRGF0YVVS
TCh0ZXN0RmlsZXMpCiAgICAgcmVhZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVzLCB0ZXN0RmlsZXNb
J25vbi1leGlzdGVudCddKTsKIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRpbmdFbXB0eUZpbGVBc0Fy
cmF5QnVmZmVyKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhbiBlbXB0eSBm
aWxlIGFzIGFycmF5IGJ1ZmZlciIpOworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0Rmls
ZXMsIHRlc3RGaWxlc1snZW1wdHktZmlsZSddKTsKK30KKwogZnVuY3Rpb24gdGVzdFJlYWRpbmdF
bXB0eUZpbGVBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAgICAgbG9nKCJUZXN0IHJlYWRp
bmcgYW4gZW1wdHkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CkBAIC02NSwxMiArODEsMjQgQEAg
ZnVuY3Rpb24gdGVzdFJlYWRpbmdFbXB0eUZpbGVBc0RhdGFVUkwodGVzdEZpbGVzKQogICAgIHJl
YWRCbG9iQXNEYXRhVVJMKHRlc3RGaWxlcywgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10pOwogfQog
CitmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzQXJyYXlCdWZmZXIodGVzdEZp
bGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBhcnJheSBidWZm
ZXIiKTsKKyAgICByZWFkQmxvYkFzQXJyYXlCdWZmZXIodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ1VU
RjgtZmlsZSddKTsKK30KKwogZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0Jp
bmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtOCBm
aWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKICAgICByZWFkQmxvYkFzQmluYXJ5U3RyaW5nKHRlc3RG
aWxlcywgdGVzdEZpbGVzWydVVEY4LWZpbGUnXSk7CiB9CiAKK2Z1bmN0aW9uIHRlc3RSZWFkaW5n
QmluYXJ5RmlsZUFzQXJyYXlCdWZmZXIodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFk
aW5nIGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyIik7CisgICAgcmVhZEJsb2JBc0FycmF5
QnVmZmVyKHRlc3RGaWxlcywgdGVzdEZpbGVzWydiaW5hcnktZmlsZSddKTsKK30KKwogZnVuY3Rp
b24gdGVzdFJlYWRpbmdCaW5hcnlGaWxlQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzKQogewogICAg
IGxvZygiVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0cmluZyIpOwpAQCAt
MTM1LDYgKzE2Myw3IEBAIGZ1bmN0aW9uIHRlc3RNdWx0aXBsZVJlYWRzKHRlc3RGaWxlcykKIAog
ICAgIGxvZygiVGVzdCBjYWxsaW5nIG11bHRpcGxlIHJlYWQgbWV0aG9kcyBhbmQgb25seSBsYXN0
IG9uZSBpcyBwcm9jZXNzZWQiKTsKICAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyQXN5bmMo
KTsKKyAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIodGVzdEZpbGVzWydVVEY4LWZpbGUnXSk7
CiAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsK
ICAgICByZWFkZXIucmVhZEFzVGV4dCh0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKICAgICByZWFk
ZXIucmVhZEFzRGF0YVVSTCh0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1ibG9iLXN5bmMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2It
c3luYy1leHBlY3RlZC50eHQKaW5kZXggNzdmNTQxNC4uZDlhMWYxNiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBlY3Rl
ZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJs
b2Itc3luYy1leHBlY3RlZC50eHQKQEAgLTUsMjggKzUsNDAgQEAgUmVjZWl2ZWQgZXhjZXB0aW9u
IDg6IE5PVF9GT1VORF9FUlIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBleGlzdGVu
dCBhbmQgbm9uLWV4aXN0ZW50IGZpbGUKIFJlY2VpdmVkIGV4Y2VwdGlvbiA4OiBOT1RfRk9VTkRf
RVJSCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgZW1wdHkgZmlsZQotCityZXN1bHQg
c2l6ZTogMAorcmVzdWx0OiAKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBlbXB0eSB0
ZXh0Ci0KK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250
YWluaW5nIGVtcHR5IGZpbGVzIGFuZCBlbXB0eSB0ZXh0cwotCityZXN1bHQgc2l6ZTogMAorcmVz
dWx0OiAKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgZmlsZQotSGVsbG8K
K3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6IEhlbGxvCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRh
aW5pbmcgc2luZ2xlIHRleHQKLUZpcnN0CityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBGaXJzdAog
VGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNsaWNlZCBmaWxlCi1vbmRlcgorcmVzdWx0
IHNpemU6IDUKK3Jlc3VsdDogb25kZXIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBz
bGljZWQgdGV4dAotaXJzdAorcmVzdWx0IHNpemU6IDQKK3Jlc3VsdDogaXJzdAogVGVzdCByZWFk
aW5nIGEgYmxvYiBjb250YWluaW5nIG11bHRpcGxlIGZpbGVzCi1IZWxsb1dvbmRlcmZ1bFdvcmxk
CityZXN1bHQgc2l6ZTogMTkKK3Jlc3VsdDogSGVsbG9Xb25kZXJmdWxXb3JsZAogVGVzdCByZWFk
aW5nIGEgYmxvYiBjb250YWluaW5nIG11bHRpcGxlIHRleHRzCi1GaXJzdFNlY29uZFRoaXJkCity
ZXN1bHQgc2l6ZTogMTYKK3Jlc3VsdDogRmlyc3RTZWNvbmRUaGlyZAogVGVzdCByZWFkaW5nIGEg
aHlicmlkIGJsb2IKLUZpcnN0SGVsbG9TZWNvbmRXb25kZXJmdWxXb3JsZFRoaXJkCityZXN1bHQg
c2l6ZTogMzUKK3Jlc3VsdDogRmlyc3RIZWxsb1NlY29uZFdvbmRlcmZ1bFdvcmxkVGhpcmQKIFRl
c3QgcmVhZGluZyBhIHNsaWNlZCBoeWJyaWQgYmxvYgotbGxvU2Vjb25kV29uCityZXN1bHQgc2l6
ZTogMTIKK3Jlc3VsdDogbGxvU2Vjb25kV29uCiBUZXN0IHJlYWRpbmcgYSB0cmlwbGUtc2xpY2Vk
IGh5YnJpZCBibG9iCi1vbmRXb25kZXJmdWxXb3JsZFRoaXJkRm9vbG9TZWMKK3Jlc3VsdCBzaXpl
OiAzMAorcmVzdWx0OiBvbmRXb25kZXJmdWxXb3JsZFRoaXJkRm9vbG9TZWMKIERPTkUKIApkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUt
YXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtl
ci1yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0CmluZGV4IGE0OTc2NTguLjJmZDc3NjcgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxl
LWFzeW5jLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMv
d29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKQEAgLTEsNSArMSwxMSBAQAogCiBS
ZWNlaXZlZCBmaWxlcyBpbiB3b3JrZXIKK1Rlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxl
IGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgZXJyb3IgZXZlbnQKK3Jl
YWR5U3RhdGU6IDIKK2Vycm9yIGNvZGU6IDgKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3Qg
cmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6
IDAKIFJlY2VpdmVkIGVycm9yIGV2ZW50CkBAIC0xOCw2ICsyNCwxNSBAQCBSZWNlaXZlZCBlcnJv
ciBldmVudAogcmVhZHlTdGF0ZTogMgogZXJyb3IgY29kZTogOAogUmVjZWl2ZWQgbG9hZGVuZCBl
dmVudAorVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0
YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVk
IGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAorUmVj
ZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYmluYXJ5
IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CkBAIC00NSw2
ICs2MCwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBkYXRhOgog
UmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBhcnJh
eSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlT
dGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6
IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBh
IFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9h
ZHN0YXJ0IGV2ZW50CkBAIC01NCw2ICs3OCwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6
ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5n
IGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBs
b2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5
U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA5CityZXN1bHQ6IDB4MCAweDEgMHgyIDB4ODAgMHg4MSAw
eDgyIDB4ZmQgMHhmZSAweGZmCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcg
YSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBs
b2Fkc3RhcnQgZXZlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vy
cy93b3JrZXItcmVhZC1maWxlLXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9m
aWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3RlZC50eHQKaW5kZXggMzY5
MWE1OC4uYTA0ZDdkNCAxMDA2NDQKQmluYXJ5IGZpbGVzIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxl
cy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3RlZC50eHQgYW5kIGIvTGF5b3V0
VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3RlZC50
eHQgZGlmZmVyCmRpZmYgLS1naXQgYS9XZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsgYi9X
ZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsKaW5kZXggMDgxNjExMy4uYjM5MjFmZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCisrKyBiL1dlYkNvcmUvQW5k
cm9pZC5qc2NiaW5kaW5ncy5tawpAQCAtMTAwLDYgKzEwMCw3IEBAIExPQ0FMX1NSQ19GSUxFUyAr
PSBcCiAJYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBcCiAJYmluZGluZ3MvanMvSlNF
dmVudFRhcmdldC5jcHAgXAogCWJpbmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFzZS5jcHAgXAorCWJp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL2pzL0pTR2VvbG9j
YXRpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9t
LmNwcCBcCiAJYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAgXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggNThkNDNkMC4uYmVkNWNmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC02MTcsNiArNjE3LDcgQEAgU0VUKFdl
YkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20uY3BwCiAg
ICAgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0V4Y2Vw
dGlvbkJhc2UuY3BwCisgICAgYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcAogICAg
IGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNwcApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMDc3
MDE0Li44ZTc0MTI2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEwLTEwLTE0ICBKaWFuIExpICA8amlhbmxp
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBTdXBwb3J0IHJlYWRBc0FycmF5QnVmZmVyIGluIEZpbGVSZWFkZXIgYW5kIEZpbGVS
ZWFkZXJTeW5jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NzY5MQorCisgICAgICAgIFRlc3QgY2FzZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHJlYWQtZmls
ZS10ZXN0LWNhc2VzLmpzLgorCisgICAgICAgICogQW5kcm9pZC5qc2NiaW5kaW5ncy5tazoKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2Vi
Q29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3Rv
bS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGaWxlUmVhZGVyOjpyZXN1bHRBY2Nlc3Nv
ckdldHRlcik6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDogQWxzbyBjaGFuZ2Vk
IG5vdCB0byByZXR1cm4gaW5jb21wbGV0ZSByZXN1bHQKKyAgICAgICAgd2hlbiByZWFkaW5nIGFz
IHRleHQuIFRoaXMgaXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBzcGVjLgorICAgICAgICAo
V2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVJlYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6
OmFycmF5QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnN0cmlu
Z1Jlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwpOgorICAgICAg
ICAqIGZpbGVhcGkvRmlsZVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6
ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZFR5cGUpOgorICAgICAg
ICAqIGZpbGVhcGkvRmlsZVJlYWRlci5pZGw6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVy
U3luYy5jcHA6IFJlbW92ZWQgRmlsZVJlYWRlclN5bmNMb2FkZXIgYW5kIG1vdmUgaXRzCisgICAg
ICAgIGZ1bmN0aW9uYWxpdGllcyB0byBGaWxlUmVhZGVyU3luYy4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVSZWFkZXJTeW5jOjpGaWxlUmVhZGVyU3luYyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxl
UmVhZGVyU3luYzo6cmVhZEFzQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlclN5bmM6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5
bmM6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6OmRpZFJlY2VpdmVS
ZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6ZGlkUmVjZWl2ZURh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6OmRpZEZpbmlzaExvYWRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6OmRpZEZhaWwpOgorICAgICAgICAq
IGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJT
eW5jOjpoYXNFcnJvcik6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5pZGw6Cisg
ICAgICAgICogbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaDoKKwogMjAxMC0xMC0xNCAg
WXVyeSBTZW1pa2hhdHNreSAgPHl1cnlzQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBQYXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBi
L1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggYjEzYTg5MC4uY2I1MWRjMCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBA
IC03MjQsNiArNzI0LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRUYXJnZXQuaCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJh
c2UuY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFzZS5oIFwKKwlXZWJD
b3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGlu
Z3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNI
aXN0b3J5Q3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20u
aCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGI2ZmIwNzYuLjllZjI1NTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC02MDEsNiArNjAxLDcgQEAKICAgICAg
ICAgICAgICdiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmgnLAogICAgICAgICAgICAgJ2JpbmRp
bmdzL2pzL0pTRXhjZXB0aW9uQmFzZS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pT
RXhjZXB0aW9uQmFzZS5oJywKKyAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJD
dXN0b20uY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9t
LmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcCcsCiAg
ICAgICAgICAgICAnYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmgnLApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYTAwNjVlYy4u
ZDFmYjdlYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dl
YkNvcmUucHJvCkBAIC00MTgsNiArNDE4LDcgQEAgdjggewogICAgICAgICBiaW5kaW5ncy92OC9j
dXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEV2ZW50Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50U291
cmNlQ29uc3RydWN0b3IuY3BwIFwKKyAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJl
YWRlckN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29s
bGVjdGlvbkN1c3RvbS5jcHAKIAogICAgIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0x
KSB7CkBAIC01MTcsNiArNTE4LDcgQEAgdjggewogICAgICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50
U291cmNlQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3Bw
IFwKICAgICAgICAgYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCBcCisgICAgICAgIGJp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9K
U0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1
c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9t
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
IGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3MjM3ODA5Li5j
ODFlN2NhIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9q
CisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTU1ODk4LDYg
KzU1ODk4LDEwIEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVs
YXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU0ZpbGVSZWFkZXJDdXN0b20uY3BwIg0KKwkJCQkJ
Pg0KKwkJCQk8L0ZpbGU+DQorCQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGJpbmRp
bmdzXGpzXEpTR2VvbG9jYXRpb25DdXN0b20uY3BwIg0KIAkJCQkJPg0KIAkJCQkJPEZpbGVDb25m
aWd1cmF0aW9uDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBlMTBiZWYwLi41ODFmMGJmIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNzUxLDYgKzc1MSw3IEBACiAJCTJFREYzNjlDMTIyQzk0QjQwMDJGN0Q0RSAv
KiBGaWxlUmVhZGVyU3luYy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAyRURGMzY5QTEyMkM5NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMuY3Bw
ICovOyB9OwogCQkyRURGMzY5RDEyMkM5NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREYzNjlCMTIy
Qzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5oICovOyB9OwogCQkyRURGMzY5RjEyMkM5
NEM4MDAyRjdENEUgLyogRmlsZUV4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERjM2OUUxMjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNl
cHRpb24uaCAqLzsgfTsKKwkJMkVFQjIwMUYxMjY3QjY1MTAwOTUzODEwIC8qIEpTRmlsZVJlYWRl
ckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAyRUVCMjAxRTEyNjdCNjUxMDA5NTM4MTAgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCAqLzsg
fTsKIAkJMkVGMUJGRUExMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVGMUJGRTgxMjFDOUY0MjAw
QzI3NjI3IC8qIEZpbGVTdHJlYW0uY3BwICovOyB9OwogCQkyRUYxQkZFQjEyMUM5RjQyMDBDMjc2
MjcgLyogRmlsZVN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkVGMUJGRTkxMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRUYxQkZGNzEyMUNC
MEJEMDBDMjc2MjcgLyogQXN5bmNGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUYxQkZGNjEyMUNCMEJEMDBDMjc2MjcgLyogQXN5bmNG
aWxlU3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTY3NjIsNiArNjc2Myw3IEBACiAJCTJFREYzNjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBG
aWxlUmVhZGVyU3luYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
aWxlUmVhZGVyU3luYy5jcHA7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVERjM2OUIxMjJDOTRCNDAwMkY3RDRFIC8qIEZp
bGVSZWFkZXJTeW5jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVSZWFk
ZXJTeW5jLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTJFREYzNjlFMTIyQzk0QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZpbGVFeGNlcHRpb24uaDsgcGF0
aCA9IGZpbGVhcGkvRmlsZUV4Y2VwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkyRUVCMjAxRTEyNjdCNjUxMDA5NTM4MTAgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTRmlsZVJlYWRlckN1c3RvbS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRjFCRkU4MTIxQzlGNDIwMEMyNzYyNyAv
KiBGaWxlU3RyZWFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZp
bGVTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUYxQkZFOTEyMUM5
RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBGaWxlU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRjFCRkY2
MTIxQ0IwQkQwMEMyNzYyNyAvKiBBc3luY0ZpbGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXN5bmNGaWxlU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xNjg0Myw2ICsxNjg0NSw3IEBACiAJCQkJODkzQzQ4NTIxMjQ5OUIwNjAwMkIzRDg2
IC8qIEpTRW50cnlTeW5jQ3VzdG9tLmNwcCAqLywKIAkJCQlCQ0VGQUY0RDBDMzE3RTY5MDBGQTgx
RjYgLyogSlNFdmVudEN1c3RvbS5jcHAgKi8sCiAJCQkJQkMyNzVCODAxMUM1RDJCNDAwQzkyMDZD
IC8qIEpTRXZlbnRTb3VyY2VDdXN0b20uY3BwICovLAorCQkJCTJFRUIyMDFFMTI2N0I2NTEwMDk1
MzgxMCAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwICovLAogCQkJCTQ5RUVDRjcyMTA1MDhEOUMw
MDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJheUN1c3RvbS5jcHAgKi8sCiAJCQkJRkU4MEQ3QTYwRTlD
MUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9jYXRpb25DdXN0b20uY3BwICovLAogCQkJCUJDRTdCMTky
MEQ0RTg2OTYwMDc1QTUzOSAvKiBKU0hpc3RvcnlDdXN0b20uY3BwICovLApAQCAtMjM2MTUsNiAr
MjM2MTgsNyBAQAogCQkJCTkzRjE5QjA1MDgyNDVFNTkwMDFFOUFCQyAvKiBYU0xUUHJvY2Vzc29y
TGlieHNsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMUJFNTEyRDBDRjZDNTEyMDAyRUE5NTkg
LyogWFNMVFVuaWNvZGVTb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3REQ0RDg2MEZERjRE
NkUwMEVDRjlBNCAvKiBYU1NBdWRpdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJFRUIyMDFG
MTI2N0I2NTEwMDk1MzgxMCAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0MzJjMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcApAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJKU0ZpbGVS
ZWFkZXIuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiRmlsZVJlYWRl
ci5oIgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTRmlsZVJlYWRlcjo6cmVzdWx0KEV4
ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBGaWxlUmVhZGVyKiBpbXAgPSBpbXBsKCk7Cisg
ICAgc3dpdGNoIChpbXAtPnJlYWRUeXBlKCkpIHsKKyAgICBjYXNlIEZpbGVSZWFkZXI6OlJlYWRG
aWxlQXNBcnJheUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIFdURjo6Z2V0UHRyKGltcC0+YXJyYXlCdWZmZXJSZXN1bHQoKSkpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBqc093bmVkU3RyaW5nT3JOdWxsKGV4ZWMsIGltcC0+c3RyaW5nUmVz
dWx0KCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKEJMT0IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEZp
bGVSZWFkZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVh
ZGVyQ3VzdG9tLmNwcAppbmRleCA1ZjRmYjU3Li4wZjU2ZTcwIDEwMDc1NQotLS0gYS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1c3RvbS5jcHAKQEAgLTI5LDkgKzI5LDEz
IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKICNp
bmNsdWRlICJWOEZpbGVSZWFkZXIuaCIKIAogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJWOEFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiVjhCaW5kaW5nLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU3LDQgKzYxLDE5IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEZpbGVSZWFkZXI6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJnCiAgICAgcmV0dXJuIGFyZ3MuSG9sZGVyKCk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEZpbGVSZWFkZXI6OnJlc3VsdEFjY2Vzc29yR2V0dGVyKHY4OjpMb2NhbDx2ODo6
U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIElOQ19T
VEFUUygiRE9NLkZpbGVSZWFkZXIucmVzdWx0Ll9nZXQiKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7CisgICAgRmlsZVJlYWRlciogaW1wID0gVjhG
aWxlUmVhZGVyOjp0b05hdGl2ZShob2xkZXIpOworICAgIHN3aXRjaCAoaW1wLT5yZWFkVHlwZSgp
KSB7CisgICAgY2FzZSBGaWxlUmVhZGVyOjpSZWFkRmlsZUFzQXJyYXlCdWZmZXI6CisgICAgICAg
IHJldHVybiB0b1Y4KGltcC0+YXJyYXlCdWZmZXJSZXN1bHQoKSk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKGltcC0+c3RyaW5nUmVzdWx0KCkpOworICAgIH0K
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAgYi9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVJlYWRlci5jcHAKaW5kZXggMGI3YjQ2ZC4uNWQ4YTk5OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiRmlsZVJlYWRlci5oIgogCisj
aW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJC
bG9iLmgiCiAjaW5jbHVkZSAiQmxvYlVSTC5oIgpAQCAtODYsNiArODcsMTYgQEAgdm9pZCBGaWxl
UmVhZGVyOjpzdG9wKCkKICAgICB0ZXJtaW5hdGUoKTsKIH0KIAordm9pZCBGaWxlUmVhZGVyOjpy
ZWFkQXNBcnJheUJ1ZmZlcihCbG9iKiBibG9iKQoreworICAgIGlmICghYmxvYikKKyAgICAgICAg
cmV0dXJuOworCisgICAgTE9HKEZpbGVBUEksICJGaWxlUmVhZGVyOiByZWFkaW5nIGFzIGFycmF5
IGJ1ZmZlcjogJXMgJXNcbiIsIGJsb2ItPnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIGJs
b2ItPmlzRmlsZSgpID8gc3RhdGljX2Nhc3Q8RmlsZSo+KGJsb2IpLT5wYXRoKCkudXRmOCgpLmRh
dGEoKSA6ICIiKTsKKworICAgIHJlYWRJbnRlcm5hbChibG9iLCBSZWFkRmlsZUFzQXJyYXlCdWZm
ZXIpOworfQorCiB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKiBibG9i
KQogewogICAgIGlmICghYmxvYikKQEAgLTIwMCw2ICsyMTEsMTYgQEAgdm9pZCBGaWxlUmVhZGVy
OjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiAg
ICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCk7CiAKICAgICBtX3RvdGFs
Qnl0ZXMgPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKKworICAgIGlmIChzdGF0
aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KG1fdG90YWxCeXRlcykgPiAgc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkp
KSB7CisgICAgICAgIGZhaWxlZCg1MDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKG1fcmVhZFR5cGUgIT0gUmVhZEZpbGVBc0JpbmFyeVN0cmluZykgeworICAgICAgICBBU1NF
UlQoIW1fcmF3RGF0YSk7CisgICAgICAgIG1fcmF3RGF0YSA9IEFycmF5QnVmZmVyOjpjcmVhdGUo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdG90YWxCeXRlcyksIDEpOworICAgIH0KIH0KIAogdm9p
ZCBGaWxlUmVhZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
UmVjZWl2ZWQpCkBAIC0yMTQsMTAgKzIzNSwxMCBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2Vp
dmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKICAgICBjYXNlIFJl
YWRGaWxlQXNCaW5hcnlTdHJpbmc6CiAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoZGF0YSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUmVhZEZpbGVBc0FycmF5QnVmZmVyOgogICAgIGNhc2UgUmVhZEZpbGVBc1RleHQ6CiAg
ICAgY2FzZSBSZWFkRmlsZUFzRGF0YVVSTDoKLSAgICAgICAgbV9yYXdEYXRhLmFwcGVuZChkYXRh
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKLSAgICAgICAgbV9pc1Jh
d0RhdGFDb252ZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIq
PihtX3Jhd0RhdGEtPmRhdGEoKSkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ieXRlc0xvYWRl
ZCksIGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOwogICAgICAg
ICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAg
LTI5NiwyOSArMzE3LDQzIEBAIEZpbGVSZWFkZXI6OlJlYWR5U3RhdGUgRmlsZVJlYWRlcjo6cmVh
ZHlTdGF0ZSgpIGNvbnN0CiAgICAgcmV0dXJuIEVNUFRZOwogfQogCi1TdHJpbmcgRmlsZVJlYWRl
cjo6cmVzdWx0KCkKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEZpbGVSZWFkZXI6OmFycmF5QnVm
ZmVyUmVzdWx0KCkgY29uc3QKIHsKLSAgICAvLyBJZiByZWFkaW5nIGFzIGJpbmFyeSBzdHJpbmcs
IHdlIGNhbiByZXR1cm4gdGhlIHJlc3VsdCBpbW1lZGlhdGVseS4KLSAgICBpZiAobV9yZWFkVHlw
ZSA9PSBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nKQotICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRv
U3RyaW5nKCk7CisgICAgQVNTRVJUKG1fcmVhZFR5cGUgPT0gUmVhZEZpbGVBc0FycmF5QnVmZmVy
KTsKIAotICAgIC8vIElmIHdlIGFscmVhZHkgY29udmVydCB0aGUgcmF3IGRhdGEgcmVjZWl2ZWQg
c28gZmFyLCB3ZSBjYW4gcmV0dXJuIHRoZSByZXN1bHQgbm93LgotICAgIGlmIChtX2lzUmF3RGF0
YUNvbnZlcnRlZCkKLSAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwotICAgIG1f
aXNSYXdEYXRhQ29udmVydGVkID0gdHJ1ZTsKKyAgICAvLyBBcnJheSBidWZmZXIgcmVzdWx0IGlz
IG9ubHkgc2VydmVkIHdoZW4gd2UgcmVjZWl2ZSBhbGwgdGhlIGRhdGEgc3VjY2Vzc2Z1bGx5Lgor
ICAgIGlmIChtX3N0YXRlICE9IENvbXBsZXRlZCB8fCBtX2Vycm9yKQorICAgICAgICByZXR1cm4g
MDsKIAotICAgIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNUZXh0KQotICAgICAgICBjb252
ZXJ0VG9UZXh0KCk7Ci0gICAgLy8gRm9yIGRhdGEgVVJMLCB3ZSBvbmx5IGRvIHRoZSBjb3ZlcnNp
b24gdW50aWwgd2UgcmVjZWl2ZSBhbGwgdGhlIHJhdyBkYXRhLgotICAgIGVsc2UgaWYgKG1fcmVh
ZFR5cGUgPT0gUmVhZEZpbGVBc0RhdGFVUkwgJiYgbV9zdGF0ZSA9PSBDb21wbGV0ZWQpCi0gICAg
ICAgIGNvbnZlcnRUb0RhdGFVUkwobV9yYXdEYXRhLCBtX2ZpbGVUeXBlLCBtX2J1aWxkZXIpOwor
ICAgIHJldHVybiBtX3Jhd0RhdGE7Cit9CisKK1N0cmluZyBGaWxlUmVhZGVyOjpzdHJpbmdSZXN1
bHQoKQoreworICAgIEFTU0VSVChtX3JlYWRUeXBlICE9IFJlYWRGaWxlQXNBcnJheUJ1ZmZlcik7
CisKKyAgICAvLyBJZiBhbiBlcnJvciBvY2N1ciwgcmV0dXJuIGFuIGVtcHR5IHJlc3VsdC4KKyAg
ICBpZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gRG8gdGhl
IGNvdmVyc2lvbiBpZiBub3QgeWV0IGFuZCB3ZSByZWNlaXZlIGFsbCB0aGUgcmF3IGRhdGEuCisg
ICAgaWYgKG1fc3RhdGUgPT0gQ29tcGxldGVkICYmICFtX2lzUmF3RGF0YUNvbnZlcnRlZCAmJiBt
X3JlYWRUeXBlICE9IFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpIHsKKyAgICAgICAgaWYgKG1fcmVh
ZFR5cGUgPT0gUmVhZEZpbGVBc1RleHQpCisgICAgICAgICAgICBjb252ZXJ0VG9UZXh0KCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgQVNTRVJUKG1fcmVhZFR5cGUgPT0gUmVhZEZpbGVB
c0RhdGFVUkwpOworICAgICAgICAgICAgY29udmVydFRvRGF0YVVSTChzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX3Jhd0RhdGEtPmJ5dGVMZW5ndGgoKSwgbV9m
aWxlVHlwZSwgbV9idWlsZGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIG1faXNSYXdEYXRhQ29u
dmVydGVkID0gdHJ1ZTsKKyAgICB9CiAKICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7
CiB9CiAKIHZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvVGV4dCgpCiB7Ci0gICAgaWYgKCFtX3Jh
d0RhdGEuc2l6ZSgpKSB7CisgICAgaWYgKCFtX3Jhd0RhdGEtPmJ5dGVMZW5ndGgoKSkgewogICAg
ICAgICBtX2J1aWxkZXIuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMzMSwx
OCArMzY2LDE4IEBAIHZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvVGV4dCgpCiAgICAgaWYgKCFt
X2RlY29kZXIpCiAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0
ZSgidGV4dC9wbGFpbiIsIG1fZW5jb2RpbmcuaXNWYWxpZCgpID8gbV9lbmNvZGluZyA6IFVURjhF
bmNvZGluZygpKTsKICAgICBtX2J1aWxkZXIuY2xlYXIoKTsKLSAgICBtX2J1aWxkZXIuYXBwZW5k
KG1fZGVjb2Rlci0+ZGVjb2RlKCZtX3Jhd0RhdGEuYXQoMCksIG1fcmF3RGF0YS5zaXplKCkpKTsK
KyAgICBtX2J1aWxkZXIuYXBwZW5kKG1fZGVjb2Rlci0+ZGVjb2RlKHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihtX3Jhd0RhdGEtPmRhdGEoKSksIG1fcmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKSk7CiAK
ICAgICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYgIW1fZXJyb3IpCiAgICAgICAgIG1fYnVp
bGRlci5hcHBlbmQobV9kZWNvZGVyLT5mbHVzaCgpKTsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpj
b252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5n
JiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3ZvaWQgRmlsZVJlYWRlcjo6Y29u
dmVydFRvRGF0YVVSTChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuLCBjb25zdCBTdHJpbmcm
IGZpbGVUeXBlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQogewogICAgIGJ1aWxkZXIuY2xlYXIo
KTsKICAgICBidWlsZGVyLmFwcGVuZCgiZGF0YToiKTsKIAotICAgIGlmICghcmF3RGF0YS5zaXpl
KCkpCisgICAgaWYgKCFsZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghZmlsZVR5cGUu
aXNFbXB0eSgpKSB7CkBAIC0zNTIsNyArMzg3LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0
VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5nJiBmaWwK
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoImJhc2U2NCwiKTsKIAogICAgIFZlY3RvcjxjaGFyPiBv
dXQ7Ci0gICAgYmFzZTY0RW5jb2RlKHJhd0RhdGEsIG91dCk7CisgICAgYmFzZTY0RW5jb2RlKGRh
dGEsIGxlbiwgb3V0KTsKICAgICBvdXQuYXBwZW5kKCdcMCcpOwogICAgIGJ1aWxkZXIuYXBwZW5k
KG91dC5kYXRhKCkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIu
aCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKaW5kZXggZjkxNGRhZC4uNGJlNGM3MSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAorKysgYi9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVJlYWRlci5oCkBAIC00OCw2ICs0OCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorY2xhc3MgQXJyYXlCdWZmZXI7CiBjbGFzcyBCbG9iOwogY2xhc3MgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CkBAIC02OCw2ICs2OSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIERPTkUgPSAyCiAgICAgfTsKIAorICAgIGVudW0gUmVhZFR5cGUg
eworICAgICAgICBSZWFkRmlsZUFzQXJyYXlCdWZmZXIsCisgICAgICAgIFJlYWRGaWxlQXNCaW5h
cnlTdHJpbmcsCisgICAgICAgIFJlYWRGaWxlQXNUZXh0LAorICAgICAgICBSZWFkRmlsZUFzRGF0
YVVSTAorICAgIH07CisKKyAgICB2b2lkIHJlYWRBc0FycmF5QnVmZmVyKEJsb2IqKTsKICAgICB2
b2lkIHJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKik7CiAgICAgdm9pZCByZWFkQXNUZXh0KEJsb2Iq
LCBjb25zdCBTdHJpbmcmIGVuY29kaW5nID0gIiIpOwogICAgIHZvaWQgcmVhZEFzRGF0YVVSTChC
bG9iKik7CkBAIC03NiwxMiArODUsMTQgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnQoKTsKIAog
ICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8RmlsZUVy
cm9yPiBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3I7IH0KLSAgICBTdHJpbmcgcmVzdWx0KCk7Cisg
ICAgUGFzc1JlZlB0cjxGaWxlRXJyb3I+IGVycm9yKCkgY29uc3QgeyByZXR1cm4gbV9lcnJvcjsg
fQorICAgIFJlYWRUeXBlIHJlYWRUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkVHlwZTsgfQor
ICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyUmVzdWx0KCkgY29uc3Q7Cisg
ICAgU3RyaW5nIHN0cmluZ1Jlc3VsdCgpOwogCiAgICAgLy8gSGVscGVyIG1ldGhvZHMsIGFsc28g
dXNlZCBieSBGaWxlUmVhZGVyU3luYy4KICAgICBzdGF0aWMgRXhjZXB0aW9uQ29kZSBodHRwU3Rh
dHVzQ29kZVRvRXhjZXB0aW9uQ29kZShpbnQgaHR0cFN0YXR1c0NvZGUpOwotICAgIHN0YXRpYyB2
b2lkIGNvbnZlcnRUb0RhdGFVUkwoY29uc3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhLCBjb25zdCBT
dHJpbmcmIGZpbGVUeXBlLCBTdHJpbmdCdWlsZGVyJik7CisgICAgc3RhdGljIHZvaWQgY29udmVy
dFRvRGF0YVVSTChjb25zdCBjaGFyKiwgc2l6ZV90LCBjb25zdCBTdHJpbmcmIGZpbGVUeXBlLCBT
dHJpbmdCdWlsZGVyJik7CiAKICAgICAvLyBBY3RpdmVET01PYmplY3QKICAgICB2aXJ0dWFsIGJv
b2wgY2FuU3VzcGVuZCgpIGNvbnN0OwpAQCAtMTA5LDExICsxMjAsNiBAQCBwdWJsaWM6CiAgICAg
REVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihsb2FkZW5kKTsKIAogcHJpdmF0ZToKLSAg
ICBlbnVtIFJlYWRUeXBlIHsKLSAgICAgICAgUmVhZEZpbGVBc0JpbmFyeVN0cmluZywKLSAgICAg
ICAgUmVhZEZpbGVBc1RleHQsCi0gICAgICAgIFJlYWRGaWxlQXNEYXRhVVJMCi0gICAgfTsKICAg
ICBlbnVtIEludGVybmFsU3RhdGUgewogICAgICAgICBOb25lLAogICAgICAgICBTdGFydGluZywK
QEAgLTEzNyw3ICsxNDMsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgZmlyZUVycm9yRXZlbnQoaW50
IGh0dHBTdGF0dXNDb2RlKTsKICAgICB2b2lkIGZpcmVFdmVudChjb25zdCBBdG9taWNTdHJpbmcm
IHR5cGUpOwogICAgIHZvaWQgY29udmVydFRvVGV4dCgpOwotICAgIHZvaWQgY29udmVydFRvRGF0
YVVSTCgpOwogCiAgICAgSW50ZXJuYWxTdGF0ZSBtX3N0YXRlOwogICAgIEV2ZW50VGFyZ2V0RGF0
YSBtX2V2ZW50VGFyZ2V0RGF0YTsKQEAgLTE0OSw4ICsxNTQsOCBAQCBwcml2YXRlOgogCiAgICAg
U3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7CiAKLSAgICAvLyBUaGUgcmF3IGRhdGEuIFdlIGhhdmUg
dG8ga2VlcCB0cmFjayBvZiBhbGwgdGhlIHJhdyBkYXRhIGZvciBpdCB0byBiZSBjb252ZXJ0ZWQg
dG8gdGV4dCBvciBkYXRhIFVSTCBkYXRhLgotICAgIFZlY3RvcjxjaGFyPiBtX3Jhd0RhdGE7Cisg
ICAgLy8gV2UgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIGFsbCB0aGUgcmF3IGRhdGEgZm9yIGFsbCBy
ZWFkaW5ncyBvdGhlciB0aGFuIGJpbmFyeSBzdHJpbmcuCisgICAgUmVmUHRyPEFycmF5QnVmZmVy
PiBtX3Jhd0RhdGE7CiAgICAgYm9vbCBtX2lzUmF3RGF0YUNvbnZlcnRlZDsKIAogICAgIC8vIFRo
ZSBkZWNvZGVyIHVzZWQgdG8gZGVjb2RlIHRoZSB0ZXh0IGRhdGEuCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5p
ZGwKaW5kZXggNzIzZDI0Mi4uZWVjZGU0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuaWRsCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmlkbApAQCAtNDQs
NiArNDQsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBzaG9ydCByZWFkeVN0YXRlOwogCiAgICAgICAgIC8vIGFzeW5jIHJlYWQgbWV0aG9kcwor
ICAgICAgICB2b2lkIHJlYWRBc0FycmF5QnVmZmVyKGluIEJsb2IgYmxvYik7CiAgICAgICAgIHZv
aWQgcmVhZEFzQmluYXJ5U3RyaW5nKGluIEJsb2IgZmlsZUJsb2IpOwogICAgICAgICB2b2lkIHJl
YWRBc1RleHQoaW4gQmxvYiBmaWxlQmxvYiwgaW4gW09wdGlvbmFsXSBET01TdHJpbmcgZW5jb2Rp
bmcpOwogICAgICAgICB2b2lkIHJlYWRBc0RhdGFVUkwoaW4gRmlsZSBmaWxlKTsKQEAgLTUxLDcg
KzUyLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkIGFib3J0KCk7CiAKICAgICAgICAg
Ly8gZmlsZSBkYXRhCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydFNjcmlwdFN0
cmluZ10gRE9NU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0
b21dIERPTU9iamVjdCByZXN1bHQ7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZpbGVF
cnJvciBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5j
LmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKaW5kZXggNjQyNWJjZi4u
ZTliNDQ2NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAor
KysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCkBAIC0zNCw2ICszNCw3IEBA
CiAKICNpbmNsdWRlICJGaWxlUmVhZGVyU3luYy5oIgogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIu
aCIKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQmxv
YlVSTC5oIgpAQCAtNDUsNzYgKzQ2LDI1IEBACiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJUaHJl
YWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmlsZVJlYWRlclN5
bmNMb2FkZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAg
Ly8gSWYgdGhlIG91dHB1dCByZXN1bHQgaXMgcHJvdmlkZWQsIHVzZSBpdC4gT3RoZXJ3aXNlLCBz
YXZlIGl0IGFzIHRoZSByYXcgZGF0YS4KLSAgICBGaWxlUmVhZGVyU3luY0xvYWRlcihTdHJpbmdC
dWlsZGVyKik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBodHRwIHN0YXR1cyBjb2RlLgotICAgIHZv
aWQgc3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIFRocmVhZGFibGVMb2FkZXJDbGllbnQKLSAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7Ci0gICAg
dmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0KLSAgICBj
b25zdCBWZWN0b3I8Y2hhcj4mIHJhd0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jhd0RhdGE7IH0K
LQotcHJpdmF0ZToKLSAgICAvLyBUaGUgb3V0cHV0IHJlc3VsdC4gVGhlIGNhbGxlciBwcm92aWRl
cyB0aGlzIGluIG9yZGVyIHRvIGxvYWQgdGhlIGJpbmFyeSBkYXRhIGRpcmVjdGx5LgotICAgIFN0
cmluZ0J1aWxkZXIqIG1fYnVpbGRlcjsKLQotICAgIC8vIFRoZSByYXcgZGF0YS4gVGhlIGNhbGxl
ciBkb2VzIG5vdCBwcm92aWRlIHRoZSBhYm92ZSBvdXRwdXQgcmVzdWx0IGFuZCB3ZSBuZWVkIHRv
IHNhdmUgaXQgaGVyZS4KLSAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOwotCi0gICAgaW50IG1f
aHR0cFN0YXR1c0NvZGU7ICAgIAotfTsKLQotRmlsZVJlYWRlclN5bmNMb2FkZXI6OkZpbGVSZWFk
ZXJTeW5jTG9hZGVyKFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpCi0gICAgOiBtX2J1aWxkZXIoYnVp
bGRlcikKK0ZpbGVSZWFkZXJTeW5jOjpGaWxlUmVhZGVyU3luYygpCisgICAgOiBtX3JlYWRUeXBl
KFJlYWRBc0JpbmFyeVN0cmluZykKKyAgICAsIG1fdG90YWxMb2FkZWQoMCkKICAgICAsIG1faHR0
cFN0YXR1c0NvZGUoMCkKIHsKIH0KIAotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6c3RhcnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IEZpbGVSZWFkZXJTeW5jOjpyZWFkQXNBcnJheUJ1ZmZlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOwotICAgIG9w
dGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVlOwotICAgIG9wdGlvbnMuc25pZmZDb250ZW50
ID0gZmFsc2U7Ci0gICAgb3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOwotICAgIG9wdGlv
bnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7Ci0gICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVl
c3RQb2xpY3kgPSBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKLQotICAgIFRocmVhZGFibGVMb2Fk
ZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVx
dWVzdCwgKnRoaXMsIG9wdGlvbnMpOwotCi0gICAgZWMgPSAobV9odHRwU3RhdHVzQ29kZSA9PSAy
MDApID8gMCA6IEZpbGVSZWFkZXI6Omh0dHBTdGF0dXNDb2RlVG9FeGNlcHRpb25Db2RlKG1faHR0
cFN0YXR1c0NvZGUpOwotfQotCi12b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRSZWNlaXZl
UmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgbV9odHRw
U3RhdHVzQ29kZSA9IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCk7Ci19Ci0KLXZvaWQgRmlsZVJl
YWRlclN5bmNMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGhSZWNlaXZlZCkKLXsKLSAgICBpZiAobV9idWlsZGVyKQotICAgICAgICBtX2J1aWxkZXItPmFw
cGVuZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKLSAgICBl
bHNlCi0gICAgICAgIG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxlbmd0aFJlY2VpdmVkKSk7Ci19Ci0KLXZvaWQgRmlsZVJlYWRlclN5bmNMb2FkZXI6OmRpZEZp
bmlzaExvYWRpbmcodW5zaWduZWQgbG9uZykKLXsKLX0KKyAgICBpZiAoIWJsb2IpCisgICAgICAg
IHJldHVybiAwOwogCi12b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJl
c291cmNlRXJyb3ImKQotewotICAgIC8vIFRyZWF0IGFzIGludGVybmFsIGVycm9yLgotICAgIG1f
aHR0cFN0YXR1c0NvZGUgPSA1MDA7CisgICAgcmVhZChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBi
bG9iLCBSZWFkQXNBcnJheUJ1ZmZlciwgZWMpOworICAgIHJldHVybiBtX3Jhd0RhdGE7CiB9CiAK
IFN0cmluZyBGaWxlUmVhZGVyU3luYzo6cmVhZEFzQmluYXJ5U3RyaW5nKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMTQxLDEyICs5MSwxNSBAQCBTdHJpbmcgRmlsZVJlYWRlclN5bmM6OnJlYWRB
c0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udAogICAg
IGlmICghYmxvYikKICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwogCisgICAg
bV9ibG9iVHlwZSA9IGJsb2ItPnR5cGUoKTsKICAgICByZWFkKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIGJsb2IsIFJlYWRBc0RhdGFVUkwsIGVjKTsKICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3Ry
aW5nKCk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgUmVhZFR5cGUgcmVhZFR5
cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIG1fcmVhZFR5cGUgPSByZWFkVHlwZTsKKwog
ICAgIC8vIFRoZSBibG9iIGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhh
bmRsaW5nIGxheWVyIGdpdmVuIHRoZSB0ZW1wb3JhcnkgcHVibGljIHVybC4KICAgICBLVVJMIHVy
bEZvclJlYWRpbmcgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC0+c2VjdXJpdHlPcmlnaW4oKSk7CiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVn
aXN0ZXJCbG9iVVJMKHVybEZvclJlYWRpbmcsIGJsb2ItPnVybCgpKTsKQEAgLTE1NCwyNSArMTA3
LDE4IEBAIHZvaWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYioKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVz
dCh1cmxGb3JSZWFkaW5nKTsKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOwogCi0g
ICAgRmlsZVJlYWRlclN5bmNMb2FkZXIgbG9hZGVyKChyZWFkVHlwZSA9PSBSZWFkQXNCaW5hcnlT
dHJpbmcpID8gJm1fYnVpbGRlciA6IDApOwotICAgIGxvYWRlci5zdGFydChzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCByZXF1ZXN0LCBlYyk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5y
ZWdpc3RlckJsb2JVUkwodXJsRm9yUmVhZGluZyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1
cm47CisgICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNl
bmRMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNl
OworICAgIG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmFsbG93
Q3JlZGVudGlhbHMgPSB0cnVlOworICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5
ID0gRGVueUNyb3NzT3JpZ2luUmVxdWVzdHM7CiAKLSAgICBzd2l0Y2ggKHJlYWRUeXBlKSB7Ci0g
ICAgY2FzZSBSZWFkQXNCaW5hcnlTdHJpbmc6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gc2lu
Y2Ugd2UgbmVlZCBubyBjb252ZXJzaW9uLgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBSZWFk
QXNUZXh0OgotICAgICAgICBjb252ZXJ0VG9UZXh0KGxvYWRlci5yYXdEYXRhKCkuZGF0YSgpLCBs
b2FkZXIucmF3RGF0YSgpLnNpemUoKSwgbV9idWlsZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgUmVhZEFzRGF0YVVSTDoKLSAgICAgICAgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVS
TChsb2FkZXIucmF3RGF0YSgpLCBibG9iLT50eXBlKCksIG1fYnVpbGRlcik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9CisgICAgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25v
dXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZXF1ZXN0LCAqdGhpcywgb3B0aW9ucyk7Cisg
CisgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodXJsRm9yUmVh
ZGluZyk7CiAKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlYyA9IChtX2h0dHBTdGF0
dXNDb2RlID09IDIwMCkgPyAwIDogRmlsZVJlYWRlcjo6aHR0cFN0YXR1c0NvZGVUb0V4Y2VwdGlv
bkNvZGUobV9odHRwU3RhdHVzQ29kZSk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlclN5bmM6OmNvbnZl
cnRUb1RleHQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUsIFN0cmluZ0J1aWxkZXImIGJ1aWxk
ZXIpCkBAIC0xOTEsNiArMTM3LDcwIEBAIHZvaWQgRmlsZVJlYWRlclN5bmM6OmNvbnZlcnRUb1Rl
eHQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUsIFN0cmluZ0J1aWxkZXImIGJ1CiAgICAgYnVp
bGRlci5hcHBlbmQoZGVjb2Rlci0+Zmx1c2goKSk7CiB9CiAKK3ZvaWQgRmlsZVJlYWRlclN5bmM6
OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sK
KyAgICBtX2h0dHBTdGF0dXNDb2RlID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKKworICAg
IGxvbmcgbG9uZyB0b3RhbEJ5dGVzID0gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7
CisKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih0b3RhbEJ5dGVzKSA+
ICBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5z
aWduZWQ+OjptYXgoKSkpIHsKKyAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IDUwMDsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3JlYWRUeXBlICE9IFJlYWRBc0JpbmFyeVN0
cmluZykgeworICAgICAgICBBU1NFUlQoIW1fcmF3RGF0YSk7CisgICAgICAgIG1fcmF3RGF0YSA9
IEFycmF5QnVmZmVyOjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvdGFsQnl0ZXMpLCAx
KTsKKyAgICB9Cit9CisKK3ZvaWQgRmlsZVJlYWRlclN5bmM6OmRpZFJlY2VpdmVEYXRhKGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBpZiAoaGFzRXJyb3IoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChtX3JlYWRUeXBlKSB7CisgICAgY2FzZSBS
ZWFkQXNCaW5hcnlTdHJpbmc6CisgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoZGF0YSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFJlYWRBc0FycmF5QnVmZmVyOgorICAgIGNhc2UgUmVhZEFzVGV4dDoKKyAgICBjYXNlIFJl
YWRBc0RhdGFVUkw6CisgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9yYXdEYXRh
LT5kYXRhKCkpICsgbV90b3RhbExvYWRlZCwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOworICAgICAg
ICBtX3RvdGFsTG9hZGVkICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
Kwordm9pZCBGaWxlUmVhZGVyU3luYzo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQor
eworICAgIGlmIChoYXNFcnJvcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1f
cmVhZFR5cGUpIHsKKyAgICBjYXNlIFJlYWRBc0FycmF5QnVmZmVyOgorICAgIGNhc2UgUmVhZEFz
QmluYXJ5U3RyaW5nOgorICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIHNpbmNlIHdlIG5lZWQgbm8g
Y29udmVyc2lvbi4KKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVhZEFzVGV4dDoKKyAgICAg
ICAgY29udmVydFRvVGV4dChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9yYXdEYXRhLT5kYXRh
KCkpLCBtX3Jhd0RhdGEtPmJ5dGVMZW5ndGgoKSwgbV9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgUmVhZEFzRGF0YVVSTDoKKyAgICAgICAgRmlsZVJlYWRlcjo6Y29udmVydFRv
RGF0YVVSTChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX3Jh
d0RhdGEtPmJ5dGVMZW5ndGgoKSwgbV9ibG9iVHlwZSwgbV9idWlsZGVyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEZpbGVS
ZWFkZXJTeW5jOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIC8vIFRyZWF0
IGFzIGludGVybmFsIGVycm9yLgorICAgIG1faHR0cFN0YXR1c0NvZGUgPSA1MDA7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKICAKICNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oIGIvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJTeW5jLmgKaW5kZXggY2IwZTAwZC4uNDQ0Y2FmOSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmgKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFk
ZXJTeW5jLmgKQEAgLTM0LDE2ICszNCwxOCBAQAogI2lmIEVOQUJMRShCTE9CKQogCiAjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXJyYXlCdWZmZXI7CiBjbGFz
cyBCbG9iOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAotY2xhc3MgRmlsZVJlYWRl
clN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlUmVhZGVyU3luYz4geworY2xhc3MgRmlsZVJl
YWRlclN5bmMgOiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlUmVhZGVyU3luYz4sIHB1YmxpYyBUaHJl
YWRhYmxlTG9hZGVyQ2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxl
UmVhZGVyU3luYz4gY3JlYXRlKCkKICAgICB7CkBAIC01Miw2ICs1NCwxMyBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIH5GaWxlUmVhZGVyU3luYygpIHsgfQogCisgICAgLy8gVGhyZWFkYWJsZUxv
YWRlckNsaWVudAorICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBj
aGFyKiwgaW50KTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBs
b25nIGlkZW50aWZpZXIpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNl
RXJyb3ImKTsKKworICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHJlYWRBc0FycmF5QnVmZmVy
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0
cmluZyByZWFkQXNCaW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiAgICAgewpAQCAtNjAsMjEgKzY5LDMxIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcmVhZEFz
VGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIGNvbnN0IFN0cmluZyYgZW5jb2Rp
bmcsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgcmVhZEFzRGF0YVVSTChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgQmxvYiosIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIGJvb2wgaGFzRXJy
b3IoKSBjb25zdCB7IHJldHVybiBtX2h0dHBTdGF0dXNDb2RlICYmIG1faHR0cFN0YXR1c0NvZGUg
IT0gMjAwOyB9CisKIHByaXZhdGU6CiAgICAgZW51bSBSZWFkVHlwZSB7CisgICAgICAgIFJlYWRB
c0FycmF5QnVmZmVyLAogICAgICAgICBSZWFkQXNCaW5hcnlTdHJpbmcsCiAgICAgICAgIFJlYWRB
c1RleHQsCiAgICAgICAgIFJlYWRBc0RhdGFVUkwKICAgICB9OwogCi0gICAgRmlsZVJlYWRlclN5
bmMoKSB7IH0KKyAgICBGaWxlUmVhZGVyU3luYygpOwogCiAgICAgdm9pZCByZWFkKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgUmVhZFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGNvbnZlcnRUb1RleHQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUsIFN0cmluZ0J1aWxk
ZXImKTsKIAogICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwogCisgICAgLy8gV2UgaGF2ZSB0
byBrZWVwIHRyYWNrIG9mIGFsbCB0aGUgcmF3IGRhdGEgZm9yIGFsbCByZWFkaW5ncyBvdGhlciB0
aGFuIGJpbmFyeSBzdHJpbmcuCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3Jhd0RhdGE7CisK
ICAgICBTdHJpbmcgbV9lbmNvZGluZzsKKyAgICBTdHJpbmcgbV9ibG9iVHlwZTsKKyAgICBSZWFk
VHlwZSBtX3JlYWRUeXBlOworICAgIHVuc2lnbmVkIG1fdG90YWxMb2FkZWQ7CisgICAgaW50IG1f
aHR0cFN0YXR1c0NvZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsIGIvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJTeW5jLmlkbAppbmRleCA3MjgxOGIxLi4zODFkNDgzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxl
UmVhZGVyU3luYy5pZGwKQEAgLTM0LDYgKzM0LDggQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBD
YW5CZUNvbnN0cnVjdGVkLAogICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gRmlsZVJlYWRl
clN5bmMgeworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gQXJyYXlC
dWZmZXIgcmVhZEFzQXJyYXlCdWZmZXIoaW4gQmxvYiBibG9iKQorICAgICAgICAgICAgcmFpc2Vz
KEZpbGVFeGNlcHRpb24pOwogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgQ29udmVydFNjcmlwdFN0cmluZ10gRE9NU3RyaW5nIHJlYWRBc0JpbmFyeVN0cmluZyhpbiBC
bG9iIGJsb2IpCiAgICAgICAgICAgICByYWlzZXMoRmlsZUV4Y2VwdGlvbik7CiAgICAgICAgIFtD
YWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBDb252ZXJ0U2NyaXB0U3RyaW5nXSBET01T
dHJpbmcgcmVhZEFzVGV4dChpbiBCbG9iIGJsb2IsIGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIGVu
Y29kaW5nKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVu
dC5oIGIvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oCmluZGV4IGI4YTY1
ODQuLmJjZjY4YmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJD
bGllbnQuaAorKysgYi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgKQEAg
LTMxLDYgKzMxLDggQEAKICNpZm5kZWYgVGhyZWFkYWJsZUxvYWRlckNsaWVudF9oCiAjZGVmaW5l
IFRocmVhZGFibGVMb2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFJlc291cmNlRXJyb3I7Cg==
</data>
<flag name="commit-queue"
          id="60706"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70911</attachid>
            <date>2010-10-15 16:13:08 -0700</date>
            <delta_ts>2010-10-19 18:04:46 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47691_2</filename>
            <type>text/plain</type>
            <size>46950</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1ODZiYWRjLi4xZmFkMzhjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMTAt
MTUgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4g
RmlsZVJlYWRlciBhbmQgRmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NjkxCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3JlYWQt
ZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1jb21tb24uanM6CisgICAgICAgIChyZWFkQmxvYkFzQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQXJy
YXlCdWZmZXJTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nU3luYyk6Cisg
ICAgICAgIChfcmVhZEJsb2JBc1RleHRTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzRGF0YVVS
TFN5bmMpOgorICAgICAgICAobG9nUmVzdWx0KToKKyAgICAgICAgKGxvYWRlZCk6CisgICAgICAg
IChfdG9TdHJpbmcpOgorICAgICAgICAoX2lzQVNDSUlTdHJpbmcpOgorICAgICAgICAoX3RvSGV4
YWRlY2ltYWwpOgorICAgICAgICAoX2dldEVsZW1lbnRBdCk6CisgICAgICAgICogZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanM6CisgICAgICAgICh0ZXN0UmVhZGlu
Z05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIpOgorICAgICAgICAodGVzdFJlYWRpbmdFbXB0
eUZpbGVBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxl
QXNBcnJheUJ1ZmZlcik6CisgICAgICAgICh0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVm
ZmVyKToKKyAgICAgICAgKHRlc3RNdWx0aXBsZVJlYWRzKToKKyAgICAgICAgKiBmYXN0L2ZpbGVz
L3dvcmtlcnMvd29ya2VyLXJlYWQtYmxvYi1zeW5jLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3Rl
ZC50eHQ6CisKIDIwMTAtMTAtMTUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKaW5kZXggNzZmZDU1Zi4u
MGRlZjA2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5
bmMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFz
eW5jLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDEwIEBACiAKK1Rlc3QgcmVhZGluZyBhIG5vbi1l
eGlzdGVudCBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgZXJy
b3IgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK2Vycm9yIGNvZGU6IDgKK1JlY2VpdmVkIGxvYWRlbmQg
ZXZlbnQKIFRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcK
IHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGVycm9yIGV2ZW50CkBAIC0xNyw2ICsyMywxNSBAQCBS
ZWNlaXZlZCBlcnJvciBldmVudAogcmVhZHlTdGF0ZTogMgogZXJyb3IgY29kZTogOAogUmVjZWl2
ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJyYXkgYnVm
ZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6
IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiAwCity
ZXN1bHQ6IAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZp
bGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2
ZW50CkBAIC00NCw2ICs1OSwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVz
dWx0OiBkYXRhOgogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTgg
ZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBl
dmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgor
cmVzdWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRl
c3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAog
UmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CkBAIC01Myw2ICs3NywxNSBAQCByZWFkeVN0YXRlOiAy
CiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAor
VGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAw
CitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQg
ZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA5CityZXN1bHQ6IDB4MCAweDEgMHgy
IDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBU
ZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAw
CiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9y
ZXNvdXJjZXMvcmVhZC1jb21tb24uanMKaW5kZXggYWJlMzI0Zi4uM2I3NDQ3YSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKQEAgLTExLDYg
KzExLDE0IEBAIGZ1bmN0aW9uIGJ1aWxkQmxvYihpdGVtcywgY29udGVudFR5cGUsIGJ1aWxkZXIp
CiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBlaXRoZXIgYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25v
dXNseS4KK2Z1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIGJsb2IpCit7
CisgICAgaWYgKGlzUmVhZEFzQXN5bmMoKSkKKyAgICAgICAgX3JlYWRCbG9iQXNBcnJheUJ1ZmZl
ckFzeW5jKHRlc3RGaWxlcywgYmxvYik7CisgICAgZWxzZQorICAgICAgICBfcmVhZEJsb2JBc0Fy
cmF5QnVmZmVyU3luYyh0ZXN0RmlsZXMsIGJsb2IpOworfQorCiBmdW5jdGlvbiByZWFkQmxvYkFz
QmluYXJ5U3RyaW5nKHRlc3RGaWxlcywgYmxvYikKIHsKICAgICBpZiAoaXNSZWFkQXNBc3luYygp
KQpAQCAtMzYsNiArNDQsMTIgQEAgZnVuY3Rpb24gcmVhZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVz
LCBibG9iKQogfQogCiAvLyBSZWFkcyBhIGJsb2IgYXN5bmNocm9ub3VzbHkuCitmdW5jdGlvbiBf
cmVhZEJsb2JBc0FycmF5QnVmZmVyQXN5bmModGVzdEZpbGVzLCBibG9iKQoreworICAgIHZhciBy
ZWFkZXIgPSBjcmVhdGVSZWFkZXJBc3luYyh0ZXN0RmlsZXMpOworICAgIHJlYWRlci5yZWFkQXNB
cnJheUJ1ZmZlcihibG9iKQorfQorCiBmdW5jdGlvbiBfcmVhZEJsb2JBc0JpbmFyeVN0cmluZ0Fz
eW5jKHRlc3RGaWxlcywgYmxvYikKIHsKICAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyQXN5
bmModGVzdEZpbGVzKTsKQEAgLTU1LDEyICs2OSwyNSBAQCBmdW5jdGlvbiBfcmVhZEJsb2JBc0Rh
dGFVUkxBc3luYyh0ZXN0RmlsZXMsIGJsb2IpCiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBzeW5jaHJv
bm91c2x5LgorZnVuY3Rpb24gX3JlYWRCbG9iQXNBcnJheUJ1ZmZlclN5bmModGVzdEZpbGVzLCBi
bG9iKQoreworICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CisgICAgdHJ5IHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTsKKyAg
ICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAg
bG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAiOiAiICsgZXJyb3IubmFt
ZSk7CisgICAgfQorCisgICAgcnVuTmV4dFRlc3QodGVzdEZpbGVzKTsKK30KKwogZnVuY3Rpb24g
X3JlYWRCbG9iQXNCaW5hcnlTdHJpbmdTeW5jKHRlc3RGaWxlcywgYmxvYikKIHsKICAgICB2YXIg
cmVhZGVyID0gY3JlYXRlUmVhZGVyU3luYygpOwogICAgIHRyeSB7CiAgICAgICAgIHZhciByZXN1
bHQgPSByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpOwotICAgICAgICBsb2cocmVzdWx0
KTsKKyAgICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAg
ICAgICAgbG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAiOiAiICsgZXJy
b3IubmFtZSk7CiAgICAgfQpAQCAtNzMsNyArMTAwLDcgQEAgZnVuY3Rpb24gX3JlYWRCbG9iQXNU
ZXh0U3luYyh0ZXN0RmlsZXMsIGJsb2IsIGVuY29kaW5nKQogICAgIHZhciByZWFkZXIgPSBjcmVh
dGVSZWFkZXJTeW5jKCk7CiAgICAgdHJ5IHsKICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5y
ZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKTsKLSAgICAgICAgbG9nKHJlc3VsdCk7CisgICAgICAg
IGxvZ1Jlc3VsdChyZXN1bHQpOwogICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgIGxvZygi
UmVjZWl2ZWQgZXhjZXB0aW9uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm5hbWUpOwog
ICAgIH0KQEAgLTg2LDcgKzExMyw3IEBAIGZ1bmN0aW9uIF9yZWFkQmxvYkFzRGF0YVVSTFN5bmMo
dGVzdEZpbGVzLCBibG9iKQogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CiAg
ICAgdHJ5IHsKICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2Ip
OwotICAgICAgICBsb2cocmVzdWx0KTsKKyAgICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiAgICAg
fSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgbG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVy
cm9yLmNvZGUgKyAiOiAiICsgZXJyb3IubmFtZSk7CiAgICAgfQpAQCAtMTE1LDYgKzE0MiwxOSBA
QCBmdW5jdGlvbiBjcmVhdGVSZWFkZXJTeW5jKCkKICAgICByZXR1cm4gbmV3IEZpbGVSZWFkZXJT
eW5jKCk7CiB9CiAKKy8vICdyZXN1bHQnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXIgb2Jq
ZWN0IG9yIGEgc3RyaW5nLgorZnVuY3Rpb24gbG9nUmVzdWx0KHJlc3VsdCkKK3sKKyAgICBpZiAo
dHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JykgeworICAgICAgICBsb2coInJlc3VsdCBzaXplOiAi
ICsgcmVzdWx0LmJ5dGVMZW5ndGgpOworICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShy
ZXN1bHQsIDAsIHJlc3VsdC5ieXRlTGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbG9nKCJy
ZXN1bHQgc2l6ZTogIiArIHJlc3VsdC5sZW5ndGgpOworCisgICAgdmFyIHJlc3VsdE91dHB1dCA9
IF9pc0FTQ0lJU3RyaW5nKHJlc3VsdCkgPyBfdG9TdHJpbmcocmVzdWx0KSA6IF90b0hleGFkZWNp
bWFsKHJlc3VsdCk7CisgICAgbG9nKCJyZXN1bHQ6ICIgKyByZXN1bHRPdXRwdXQpOworfQorCiBm
dW5jdGlvbiBsb2dFdmVudChldmVudCkKIHsKICAgICBsb2coIlJlY2VpdmVkICIgKyBldmVudC50
eXBlICsgIiBldmVudCIpOwpAQCAtMTMwLDExICsxNzAsOSBAQCBmdW5jdGlvbiBsb2FkZWQoZXZl
bnQpCiB7CiAgICAgbG9nRXZlbnQoZXZlbnQpOwogICAgIGxvZygicmVhZHlTdGF0ZTogIiArIGV2
ZW50LnRhcmdldC5yZWFkeVN0YXRlKTsKLSAgICBsb2coInJlc3VsdCBzaXplOiAiICsgZXZlbnQu
dGFyZ2V0LnJlc3VsdC5sZW5ndGgpOwogCiAgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7Ci0gICAgdmFyIHJlc3VsdE91dHB1dCA9IF9pc0FTQ0lJU3RyaW5nKHJlc3VsdCkgPyBy
ZXN1bHQgOiBfdG9IZXhhZGVjaW1hbChyZXN1bHQpOwotICAgIGxvZygicmVzdWx0OiAiICsgcmVz
dWx0T3V0cHV0KTsKKyAgICBsb2dSZXN1bHQocmVzdWx0KTsKIH0KIAogZnVuY3Rpb24gbG9hZEZh
aWxlZChldmVudCkKQEAgLTE1MSwyMyArMTg5LDQyIEBAIGZ1bmN0aW9uIGxvYWRFbmRlZCh0ZXN0
RmlsZXMsIGV2ZW50KQogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb25zLgotZnVuY3Rpb24gX2lzQVND
SUlTdHJpbmcoc3RyKQorCisvLyAndmFsdWUnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXJW
aWV3IG9iamVjdCBvciBhIHN0cmluZy4KK2Z1bmN0aW9uIF90b1N0cmluZyh2YWx1ZSkKIHsKLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3Ry
LmNoYXJDb2RlQXQoaSkgPj0gMTI4KQorICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycp
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IFN0cmlu
Zy5mcm9tQ2hhckNvZGUodmFsdWVbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vICd2
YWx1ZScgY2FuIGJlIGVpdGhlciBhbiBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0IG9yIGEgc3RyaW5n
LgorZnVuY3Rpb24gX2lzQVNDSUlTdHJpbmcodmFsdWUpCit7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoX2dldEVsZW1lbnRBdCh2YWx1
ZSwgaSkgPj0gMTI4KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotZnVuY3Rpb24gX3RvSGV4YWRlY2ltYWwoc3RyKQorLy8gJ3ZhbHVlJyBj
YW4gYmUgZWl0aGVyIGFuIEFycmF5QnVmZmVyVmlldyBvYmplY3Qgb3IgYSBzdHJpbmcuCitmdW5j
dGlvbiBfdG9IZXhhZGVjaW1hbCh2YWx1ZSkKIHsKICAgICB2YXIgcmVzdWx0ID0gIiI7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGhleCA9
ICIweCIgKyAoc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKS50b1N0cmluZygxNik7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgaGV4ID0g
IjB4IiArIChfZ2V0RWxlbWVudEF0KHZhbHVlLCBpKSAmIDB4RkYpLnRvU3RyaW5nKDE2KTsKICAg
ICAgICAgaWYgKGkgPiAwKQogICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKICAgICAgICAgcmVz
dWx0ICs9IGhleDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKworZnVuY3Rpb24gX2dl
dEVsZW1lbnRBdCh2YWx1ZSwgaSkKK3sKKyAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PSAnc3Ry
aW5nJykgPyB2YWx1ZS5jaGFyQ29kZUF0KGkpIDogdmFsdWVbaV07Cit9CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcyBi
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpz
CmluZGV4IGU4YjJjOWMuLjM4ZWUxMjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCkBAIC0xLDExICsxLDE1
IEBACiB2YXIgdGVzdENhc2VzID0gWworICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFz
QXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzQmluYXJ5U3Ry
aW5nIiwKICAgICAidGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc1RleHQiLAogICAgICJ0ZXN0
UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzRGF0YVVSTCIsCisgICAgInRlc3RSZWFkaW5nRW1wdHlG
aWxlQXNBcnJheUJ1ZmZlciIsCiAgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNCaW5hcnlTdHJp
bmciLAogICAgICJ0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5n
RW1wdHlGaWxlQXNEYXRhVVJMIiwKKyAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0Fy
cmF5QnVmZmVyIiwKICAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0JpbmFyeVN0cmlu
ZyIsCisgICAgInRlc3RSZWFkaW5nQmluYXJ5RmlsZUFzQXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0
UmVhZGluZ0JpbmFyeUZpbGVBc0JpbmFyeVN0cmluZyIsCiAgICAgInRlc3RSZWFkaW5nVVRGOEVu
Y29kZWRGaWxlQXNUZXh0IiwKICAgICAidGVzdFJlYWRpbmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVB
c1RleHQiLApAQCAtMjksNiArMzMsMTIgQEAgZnVuY3Rpb24gcnVuTmV4dFRlc3QodGVzdEZpbGVz
KQogICAgIH0KIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc0FycmF5
QnVmZmVyKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVu
dCBmaWxlIGFzIGFycmF5IGJ1ZmZlciIpOworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0
RmlsZXMsIHRlc3RGaWxlc1snbm9uLWV4aXN0ZW50J10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVh
ZGluZ05vbkV4aXN0ZW50RmlsZUFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2co
IlRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKQEAg
LTQ3LDYgKzU3LDEyIEBAIGZ1bmN0aW9uIHRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNEYXRh
VVJMKHRlc3RGaWxlcykKICAgICByZWFkQmxvYkFzRGF0YVVSTCh0ZXN0RmlsZXMsIHRlc3RGaWxl
c1snbm9uLWV4aXN0ZW50J10pOwogfQogCitmdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFz
QXJyYXlCdWZmZXIodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGFuIGVtcHR5
IGZpbGUgYXMgYXJyYXkgYnVmZmVyIik7CisgICAgcmVhZEJsb2JBc0FycmF5QnVmZmVyKHRlc3RG
aWxlcywgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGlu
Z0VtcHR5RmlsZUFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVh
ZGluZyBhbiBlbXB0eSBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKQEAgLTY1LDEyICs4MSwyNCBA
QCBmdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzRGF0YVVSTCh0ZXN0RmlsZXMpCiAgICAg
cmVhZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ2VtcHR5LWZpbGUnXSk7CiB9
CiAKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNBcnJheUJ1ZmZlcih0ZXN0
RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGFycmF5IGJ1
ZmZlciIpOworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIHRlc3RGaWxlc1sn
VVRGOC1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFz
QmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVURi04
IGZpbGUgYXMgYmluYXJ5IHN0cmluZyIpOwogICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVz
dEZpbGVzLCB0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRp
bmdCaW5hcnlGaWxlQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJl
YWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBhcnJheSBidWZmZXIiKTsKKyAgICByZWFkQmxvYkFzQXJy
YXlCdWZmZXIodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ2JpbmFyeS1maWxlJ10pOworfQorCiBmdW5j
dGlvbiB0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAg
ICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CkBA
IC0xMzUsNiArMTYzLDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVhZHModGVzdEZpbGVzKQog
CiAgICAgbG9nKCJUZXN0IGNhbGxpbmcgbXVsdGlwbGUgcmVhZCBtZXRob2RzIGFuZCBvbmx5IGxh
c3Qgb25lIGlzIHByb2Nlc3NlZCIpOwogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJBc3lu
YygpOworICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXNbJ1VURjgtZmlsZSdd
KTsKICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlc1snVVRGOC1maWxlJ10p
OwogICAgIHJlYWRlci5yZWFkQXNUZXh0KHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwogICAgIHJl
YWRlci5yZWFkQXNEYXRhVVJMKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtYmxv
Yi1zeW5jLWV4cGVjdGVkLnR4dAppbmRleCAzZDkwNThiLi45ZTdjNDc5IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtYmxvYi1zeW5jLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQt
YmxvYi1zeW5jLWV4cGVjdGVkLnR4dApAQCAtNSwzMiArNSw0NiBAQCBSZWNlaXZlZCBleGNlcHRp
b24gODogTk9UX0ZPVU5EX0VSUgogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIGV4aXN0
ZW50IGFuZCBub24tZXhpc3RlbnQgZmlsZQogUmVjZWl2ZWQgZXhjZXB0aW9uIDg6IE5PVF9GT1VO
RF9FUlIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBlbXB0eSBmaWxlCi0KK3Jlc3Vs
dCBzaXplOiAwCityZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIGVtcHR5
IHRleHQKLQorcmVzdWx0IHNpemU6IDAKK3Jlc3VsdDogCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNv
bnRhaW5pbmcgZW1wdHkgZmlsZXMgYW5kIGVtcHR5IHRleHRzCi0KK3Jlc3VsdCBzaXplOiAwCity
ZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNpbmdsZSBmaWxlCi1IZWxs
bworcmVzdWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KIFRlc3QgcmVhZGluZyBhIGJsb2IgY29u
dGFpbmluZyBzaW5nbGUgdGV4dAotRmlyc3QKK3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6IEZpcnN0
CiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xlIHRleHQgYXMgZGF0YSBVUkwK
LWRhdGE6YmFzZTY0LFJtbHljM1E9CityZXN1bHQgc2l6ZTogMjAKK3Jlc3VsdDogZGF0YTpiYXNl
NjQsUm1seWMzUT0KIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgdGV4dCBh
cyBkYXRhIFVSTCAob3B0aW9uYWwgY29udGVudCB0eXBlIHByb3ZpZGVkKQorcmVzdWx0IHNpemU6
IDI5CiByZXN1bHQ6IGRhdGE6dHlwZS9mb287YmFzZTY0LFJtbHljM1E9CiBUZXN0IHJlYWRpbmcg
YSBibG9iIGNvbnRhaW5pbmcgc2xpY2VkIGZpbGUKLW9uZGVyCityZXN1bHQgc2l6ZTogNQorcmVz
dWx0OiBvbmRlcgogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNsaWNlZCB0ZXh0Ci1p
cnN0CityZXN1bHQgc2l6ZTogNAorcmVzdWx0OiBpcnN0CiBUZXN0IHJlYWRpbmcgYSBibG9iIGNv
bnRhaW5pbmcgbXVsdGlwbGUgZmlsZXMKLUhlbGxvV29uZGVyZnVsV29ybGQKK3Jlc3VsdCBzaXpl
OiAxOQorcmVzdWx0OiBIZWxsb1dvbmRlcmZ1bFdvcmxkCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNv
bnRhaW5pbmcgbXVsdGlwbGUgdGV4dHMKLUZpcnN0U2Vjb25kVGhpcmQKK3Jlc3VsdCBzaXplOiAx
NgorcmVzdWx0OiBGaXJzdFNlY29uZFRoaXJkCiBUZXN0IHJlYWRpbmcgYSBoeWJyaWQgYmxvYgot
Rmlyc3RIZWxsb1NlY29uZFdvbmRlcmZ1bFdvcmxkVGhpcmQKK3Jlc3VsdCBzaXplOiAzNQorcmVz
dWx0OiBGaXJzdEhlbGxvU2Vjb25kV29uZGVyZnVsV29ybGRUaGlyZAogVGVzdCByZWFkaW5nIGEg
c2xpY2VkIGh5YnJpZCBibG9iCi1sbG9TZWNvbmRXb24KK3Jlc3VsdCBzaXplOiAxMgorcmVzdWx0
OiBsbG9TZWNvbmRXb24KIFRlc3QgcmVhZGluZyBhIHRyaXBsZS1zbGljZWQgaHlicmlkIGJsb2IK
LW9uZFdvbmRlcmZ1bFdvcmxkVGhpcmRGb29sb1NlYworcmVzdWx0IHNpemU6IDMwCityZXN1bHQ6
IG9uZFdvbmRlcmZ1bFdvcmxkVGhpcmRGb29sb1NlYwogRE9ORQogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1h
c3luYy1leHBlY3RlZC50eHQKaW5kZXggYTQ5NzY1OC4uMmZkNzc2NyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1m
aWxlLWFzeW5jLWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDExIEBACiAKIFJlY2VpdmVkIGZpbGVz
IGluIHdvcmtlcgorVGVzdCByZWFkaW5nIGEgbm9uLWV4aXN0ZW50IGZpbGUgYXMgYXJyYXkgYnVm
ZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBlcnJvciBldmVudAorcmVhZHlTdGF0ZTogMgor
ZXJyb3IgY29kZTogOAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgbm9u
LWV4aXN0ZW50IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQg
ZXJyb3IgZXZlbnQKQEAgLTE4LDYgKzI0LDE1IEBAIFJlY2VpdmVkIGVycm9yIGV2ZW50CiByZWFk
eVN0YXRlOiAyCiBlcnJvciBjb2RlOiA4CiBSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJl
YWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2Vp
dmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAor
cmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDAKK3Jlc3VsdDogCitSZWNlaXZlZCBsb2FkZW5k
IGV2ZW50CiBUZXN0IHJlYWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFk
eVN0YXRlOiAwCiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKQEAgLTQ1LDYgKzYwLDE1IEBAIHJl
YWR5U3RhdGU6IDIKIHJlc3VsdCBzaXplOiA1CiByZXN1bHQ6IGRhdGE6CiBSZWNlaXZlZCBsb2Fk
ZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVh
ZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNl
aXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBI
ZWxsbworUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBh
cyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQK
QEAgLTU0LDYgKzc4LDE1IEBAIHJlYWR5U3RhdGU6IDIKIHJlc3VsdCBzaXplOiA1CiByZXN1bHQ6
IEhlbGxvCiBSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmls
ZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVu
dAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVz
dWx0IHNpemU6IDkKK3Jlc3VsdDogMHgwIDB4MSAweDIgMHg4MCAweDgxIDB4ODIgMHhmZCAweGZl
IDB4ZmYKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxl
IGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGxvYWRzdGFydCBldmVu
dApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFk
LWZpbGUtc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMv
d29ya2VyLXJlYWQtZmlsZS1zeW5jLWV4cGVjdGVkLnR4dAppbmRleCAzNjkxYTU4Zjk2NmJiNjNh
YTU4MWE1YWFhZjRjMmIyMWZmNDQ1N2JhLi5hMDRkN2Q0NzM2M2MxMjJiMzQzNTIxOWQzZjY3YjFk
NWE0MjE4YjFmIDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTYxNwp6Y21jSlAmMkVE
KjQ5RCswZyYkem09c3YyOVhfdTxCSjlJXjJ1eGt+SCpgbCNmQzIzM2ReZHBSPWY+eUxiPzJ0JVMK
ekBYeismSGtPWW9XTHUwT1ZKUypyOUNuJWJMfTNMZTYkcXA7PExeTCRYTUJKO2xNMTtpelhkOVIz
UEpZfVpJWXlMCnpGZUo9WnhLPUZWS3BhP2ohRSkrX2lePGFVe2ZuUng8NWNXSERwNXI0ampBd0x5
fUBGdEQxYHBKMUNSckx0PTBhdAp6Z2FZTHpSVXB8bkkkJkdCclVNUHhudXhrIS01OH1qLUNUX3JI
VFFkeXk/JUVaQnxzUVYyamxffjR3ej81KTJ0b1MKekJFJVVePCo5ZXpYcyZCekooI2xXK3kqLXo3
VSFsb0w+b2p+TTRMJmhGVnQ3ayUoKVMoQ0Z2ZjUpcGI3WkApPSNVCnpgKjFYTlZlR3dfWmdyJjBk
IVVkJDUtSDAwWXFUeH1jMShTZzE2ZnZ6ZTNqe2NVZSlNbzhOMkZhLX58MnklPW5oMwpzRWJoKWU/
Qk1BJno4I3VARlpXbXJjRCt0MTxCdClRSUomIWZveFJDdU14THlSd3tSYCUyWmJVYV95N09eCgpk
ZWx0YSAxNTgKemNtY2J9YkFXdzwtTmVjN18+d2E3NXtvSm9pYzUrel5VfUV7emhxUGFWdEt4bCNG
OWpYJj4kWiE1V3tObjEhbFIpCnpYUE5qVzJlNjF2V0BxTT9NYipXPyRhSlhUUH4pTWQhK1FfIUpH
PnZMU3tiTlBkYV5JOEZlNFhgcjRQaUNsaD9CZApjZ0dJbHZzNiVDOHdCK1JkdGIhbWxsaH1rT1lx
T35WME94QnB4Y35xRgoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5t
ayBiL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawppbmRleCAwODE2MTEzLi5iMzkyMWZl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsKKysrIGIvV2ViQ29y
ZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCkBAIC0xMDAsNiArMTAwLDcgQEAgTE9DQUxfU1JDX0ZJ
TEVTICs9IFwKIAliaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwIFwKIAliaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0LmNwcCBcCiAJYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCBc
CisJYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvanMvSlNH
ZW9sb2NhdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25D
dXN0b20uY3BwIFwKIAliaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAyZTFiYWM3Li44MTU1OWNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTYxNyw2ICs2MTcsNyBAQCBT
RVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5j
cHAKICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAogICAgIGJpbmRpbmdzL2pzL0pT
RXhjZXB0aW9uQmFzZS5jcHAKKyAgICBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3Bw
CiAgICAgYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3Bw
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDg2YWEzMGEuLjkzNGFmODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMTAtMTUgIEppYW4gTGkgIDxq
aWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4gRmlsZVJlYWRlciBhbmQg
RmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3NjkxCisKKyAgICAgICAgVGVzdCBjYXNlcyBoYXZlIGJlZW4gYWRkZWQgdG8gcmVh
ZC1maWxlLXRlc3QtY2FzZXMuanMuCisKKyAgICAgICAgKiBBbmRyb2lkLmpzY2JpbmRpbmdzLm1r
OgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNGaWxlUmVhZGVy
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJl
YWRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEZpbGVSZWFkZXI6OnJlc3VsdEFj
Y2Vzc29yR2V0dGVyKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOiBBbHNvIGNo
YW5nZWQgbm90IHRvIHJldHVybiBpbmNvbXBsZXRlIHJlc3VsdAorICAgICAgICB3aGVuIHJlYWRp
bmcgYXMgdGV4dC4gVGhpcyBpcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHNwZWMuCisgICAg
ICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNBcnJheUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlUmVhZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVJlYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6
c3RyaW5nUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmNvbnZlcnRUb1Rl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTCk6Cisg
ICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVh
ZGVyOjplcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkVHlwZSk6Cisg
ICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmlkbDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVS
ZWFkZXJTeW5jLmNwcDogUmVtb3ZlZCBGaWxlUmVhZGVyU3luY0xvYWRlciBhbmQgbW92ZSBpdHMK
KyAgICAgICAgZnVuY3Rpb25hbGl0aWVzIHRvIEZpbGVSZWFkZXJTeW5jLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVJlYWRlclN5bmM6OkZpbGVSZWFkZXJTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVSZWFkZXJTeW5jOjpyZWFkQXNBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlUmVhZGVyU3luYzo6cmVhZEFzRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVh
ZGVyU3luYzo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJTeW5jOjpkaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6ZGlkRmluaXNoTG9h
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6ZGlkRmFpbCk6CisgICAg
ICAgICogZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlclN5bmM6Omhhc0Vycm9yKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlk
bDoKKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oOgorCiAyMDEwLTEw
LTE1ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRlbGUgUGV0ZXJzb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3YjhjMTYxLi42YjUwOTZlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAg
LTcyNCw2ICs3MjQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFz
ZS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmggXAorCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5o
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggOGQ3MDI4My4uNDM4MmM1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTYwMSw2ICs2MDEsNyBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNF
eGNlcHRpb25CYXNlLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uaCcsCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmYTczNDUwLi5j
MmRkNDEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTQxOCw2ICs0MTgsNyBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RXZlbnRDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRTb3Vy
Y2VDb25zdHJ1Y3Rvci5jcHAgXAorICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVh
ZGVyQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAogCiAgICAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEp
IHsKQEAgLTUxNyw2ICs1MTgsNyBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRT
b3VyY2VDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAg
XAogICAgICAgICBiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwIFwKKyAgICAgICAgYmlu
ZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pT
R2VvbG9jYXRpb25DdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNIaXN0b3J5Q3Vz
dG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20u
Y3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGVjMjBhZmYuLmU5
MGVkY2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNTU5NTQsNiAr
NTU5NTQsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRmlsZVJlYWRlckN1c3RvbS5jcHAiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGMzMjNjOTQuLmYyMzk3MzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC03NTEsNiArNzUxLDcgQEAKIAkJMkVERjM2OUMxMjJDOTRCNDAwMkY3RDRFIC8q
IEZpbGVSZWFkZXJTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFREYzNjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAg
Ki87IH07CiAJCTJFREYzNjlEMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERjM2OUIxMjJD
OTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi87IH07CiAJCTJFREYzNjlGMTIyQzk0
QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRURGMzY5RTEyMkM5NEM4MDAyRjdENEUgLyogRmlsZUV4Y2Vw
dGlvbi5oICovOyB9OworCQkyRUVCMjA2QzEyNjkxNEYxMDA5NTM4MTAgLyogSlNGaWxlUmVhZGVy
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFRUIyMDZCMTI2OTE0RjEwMDk1MzgxMCAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwICovOyB9
OwogCQkyRUYxQkZFQTEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUYxQkZFODEyMUM5RjQyMDBD
Mjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgKi87IH07CiAJCTJFRjFCRkVCMTIxQzlGNDIwMEMyNzYy
NyAvKiBGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRUYxQkZFOTEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJFRjFCRkY3MTIxQ0Iw
QkQwMEMyNzYyNyAvKiBBc3luY0ZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRjFCRkY2MTIxQ0IwQkQwMEMyNzYyNyAvKiBBc3luY0Zp
bGVTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNjc2Niw2ICs2NzY3LDcgQEAKIAkJMkVERjM2OUExMjJDOTRCNDAwMkY3RDRFIC8qIEZp
bGVSZWFkZXJTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZp
bGVSZWFkZXJTeW5jLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRURGMzY5QjEyMkM5NEI0MDAyRjdENEUgLyogRmls
ZVJlYWRlclN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVJlYWRl
clN5bmMuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkVERjM2OUUxMjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNlcHRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZUV4Y2VwdGlvbi5oOyBwYXRo
ID0gZmlsZWFwaS9GaWxlRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJFRUIyMDZCMTI2OTE0RjEwMDk1MzgxMCAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVGMUJGRTgxMjFDOUY0MjAwQzI3NjI3IC8q
IEZpbGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmls
ZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRjFCRkU5MTIxQzlG
NDIwMEMyNzYyNyAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVGMUJGRjYx
MjFDQjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBc3luY0ZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2ODU1LDYgKzE2ODU3LDcgQEAKIAkJCQk4OTNDNDg1MjEyNDk5QjA2MDAyQjNEODYg
LyogSlNFbnRyeVN5bmNDdXN0b20uY3BwICovLAogCQkJCUJDRUZBRjREMEMzMTdFNjkwMEZBODFG
NiAvKiBKU0V2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzI3NUI4MDExQzVEMkI0MDBDOTIwNkMg
LyogSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgKi8sCisJCQkJMkVFQjIwNkIxMjY5MTRGMTAwOTUz
ODEwIC8qIEpTRmlsZVJlYWRlckN1c3RvbS5jcHAgKi8sCiAJCQkJNDlFRUNGNzIxMDUwOEQ5QzAw
MDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5Q3VzdG9tLmNwcCAqLywKIAkJCQlGRTgwRDdBNjBFOUMx
RUQyMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFN0IxOTIw
RDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgKi8sCkBAIC0yMzYzMSw2ICsy
MzYzNCw3IEBACiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNEZBM0I5MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3Rv
clN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MjhDMzEzMTI2OEU0MzkwMDQxRTg5QiAv
KiBNYXJrdXBBY2N1bXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRUVCMjA2QzEyNjkx
NEYxMDA5NTM4MTAgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjg0NDMyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiSlNGaWxlUmVhZGVy
LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIK
KyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZSBKU0ZpbGVSZWFkZXI6OnJlc3VsdChFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgRmlsZVJlYWRlciogaW1wID0gaW1wbCgpOworICAgIHN3
aXRjaCAoaW1wLT5yZWFkVHlwZSgpKSB7CisgICAgY2FzZSBGaWxlUmVhZGVyOjpSZWFkRmlsZUFz
QXJyYXlCdWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBX
VEY6OmdldFB0cihpbXAtPmFycmF5QnVmZmVyUmVzdWx0KCkpKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4ganNPd25lZFN0cmluZ09yTnVsbChleGVjLCBpbXAtPnN0cmluZ1Jlc3VsdCgp
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShCTE9CKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVh
ZGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1
c3RvbS5jcHAKaW5kZXggNWY0ZmI1Ny4uMGY1NmU3MCAxMDA3NTUKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwCkBAIC0yOSw5ICsyOSwxMyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCTE9CKQorCiAjaW5jbHVk
ZSAiVjhGaWxlUmVhZGVyLmgiCiAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiVjhBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw0ICs2MSwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhGaWxlUmVhZGVyOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZwogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhGaWxlUmVhZGVyOjpyZXN1bHRBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5GaWxlUmVhZGVyLnJlc3VsdC5fZ2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgIEZpbGVSZWFkZXIqIGltcCA9IFY4RmlsZVJl
YWRlcjo6dG9OYXRpdmUoaG9sZGVyKTsKKyAgICBzd2l0Y2ggKGltcC0+cmVhZFR5cGUoKSkgewor
ICAgIGNhc2UgRmlsZVJlYWRlcjo6UmVhZEZpbGVBc0FycmF5QnVmZmVyOgorICAgICAgICByZXR1
cm4gdG9WOChpbXAtPmFycmF5QnVmZmVyUmVzdWx0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiB2OFN0cmluZ09yTnVsbChpbXAtPnN0cmluZ1Jlc3VsdCgpKTsKKyAgICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuY3BwCmluZGV4IDBiN2I0NmQuLjVkOGE5OTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5j
cHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIKIAorI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5jbHVkZSAiQmxvYi5o
IgogI2luY2x1ZGUgIkJsb2JVUkwuaCIKQEAgLTg2LDYgKzg3LDE2IEBAIHZvaWQgRmlsZVJlYWRl
cjo6c3RvcCgpCiAgICAgdGVybWluYXRlKCk7CiB9CiAKK3ZvaWQgRmlsZVJlYWRlcjo6cmVhZEFz
QXJyYXlCdWZmZXIoQmxvYiogYmxvYikKK3sKKyAgICBpZiAoIWJsb2IpCisgICAgICAgIHJldHVy
bjsKKworICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBhcnJheSBidWZm
ZXI6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5p
c0ZpbGUoKSA/IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkg
OiAiIik7CisKKyAgICByZWFkSW50ZXJuYWwoYmxvYiwgUmVhZEZpbGVBc0FycmF5QnVmZmVyKTsK
K30KKwogdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogYmxvYikKIHsK
ICAgICBpZiAoIWJsb2IpCkBAIC0yMDAsNiArMjExLDE2IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkubG9hZHN0YXJ0RXZlbnQpOwogCiAgICAgbV90b3RhbEJ5dGVz
ID0gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7CisKKyAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3RvdGFsQnl0ZXMpID4gIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4oc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSkgewor
ICAgICAgICBmYWlsZWQoNTAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3JlYWRUeXBlICE9IFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFt
X3Jhd0RhdGEpOworICAgICAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX3RvdGFsQnl0ZXMpLCAxKTsKKyAgICB9CiB9CiAKIHZvaWQgRmls
ZVJlYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2Vp
dmVkKQpAQCAtMjE0LDEwICsyMzUsMTAgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiAgICAgY2FzZSBSZWFkRmls
ZUFzQmluYXJ5U3RyaW5nOgogICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGRhdGEsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFJlYWRGaWxlQXNBcnJheUJ1ZmZlcjoKICAgICBjYXNlIFJlYWRGaWxlQXNUZXh0OgogICAgIGNh
c2UgUmVhZEZpbGVBc0RhdGFVUkw6Ci0gICAgICAgIG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7Ci0gICAgICAgIG1faXNSYXdEYXRh
Q29udmVydGVkID0gZmFsc2U7CisgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9y
YXdEYXRhLT5kYXRhKCkpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fYnl0ZXNMb2FkZWQpLCBk
YXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yOTYs
MjkgKzMxNyw0MyBAQCBGaWxlUmVhZGVyOjpSZWFkeVN0YXRlIEZpbGVSZWFkZXI6OnJlYWR5U3Rh
dGUoKSBjb25zdAogICAgIHJldHVybiBFTVBUWTsKIH0KIAotU3RyaW5nIEZpbGVSZWFkZXI6OnJl
c3VsdCgpCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBGaWxlUmVhZGVyOjphcnJheUJ1ZmZlclJl
c3VsdCgpIGNvbnN0CiB7Ci0gICAgLy8gSWYgcmVhZGluZyBhcyBiaW5hcnkgc3RyaW5nLCB3ZSBj
YW4gcmV0dXJuIHRoZSByZXN1bHQgaW1tZWRpYXRlbHkuCi0gICAgaWYgKG1fcmVhZFR5cGUgPT0g
UmVhZEZpbGVBc0JpbmFyeVN0cmluZykKLSAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmlu
ZygpOworICAgIEFTU0VSVChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNBcnJheUJ1ZmZlcik7CiAK
LSAgICAvLyBJZiB3ZSBhbHJlYWR5IGNvbnZlcnQgdGhlIHJhdyBkYXRhIHJlY2VpdmVkIHNvIGZh
ciwgd2UgY2FuIHJldHVybiB0aGUgcmVzdWx0IG5vdy4KLSAgICBpZiAobV9pc1Jhd0RhdGFDb252
ZXJ0ZWQpCi0gICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKLSAgICBtX2lzUmF3
RGF0YUNvbnZlcnRlZCA9IHRydWU7CisgICAgLy8gQXJyYXkgYnVmZmVyIHJlc3VsdCBpcyBvbmx5
IHNlcnZlZCB3aGVuIHdlIHJlY2VpdmUgYWxsIHRoZSBkYXRhIHN1Y2Nlc3NmdWxseS4KKyAgICBp
ZiAobV9zdGF0ZSAhPSBDb21wbGV0ZWQgfHwgbV9lcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBpZiAobV9yZWFkVHlwZSA9PSBSZWFkRmlsZUFzVGV4dCkKLSAgICAgICAgY29udmVydFRv
VGV4dCgpOwotICAgIC8vIEZvciBkYXRhIFVSTCwgd2Ugb25seSBkbyB0aGUgY292ZXJzaW9uIHVu
dGlsIHdlIHJlY2VpdmUgYWxsIHRoZSByYXcgZGF0YS4KLSAgICBlbHNlIGlmIChtX3JlYWRUeXBl
ID09IFJlYWRGaWxlQXNEYXRhVVJMICYmIG1fc3RhdGUgPT0gQ29tcGxldGVkKQotICAgICAgICBj
b252ZXJ0VG9EYXRhVVJMKG1fcmF3RGF0YSwgbV9maWxlVHlwZSwgbV9idWlsZGVyKTsKKyAgICBy
ZXR1cm4gbV9yYXdEYXRhOworfQorCitTdHJpbmcgRmlsZVJlYWRlcjo6c3RyaW5nUmVzdWx0KCkK
K3sKKyAgICBBU1NFUlQobV9yZWFkVHlwZSAhPSBSZWFkRmlsZUFzQXJyYXlCdWZmZXIpOworCisg
ICAgLy8gSWYgYW4gZXJyb3Igb2NjdXIsIHJldHVybiBhbiBlbXB0eSByZXN1bHQuCisgICAgaWYg
KG1fZXJyb3IpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIC8vIERvIHRoZSBjb3Zl
cnNpb24gaWYgbm90IHlldCBhbmQgd2UgcmVjZWl2ZSBhbGwgdGhlIHJhdyBkYXRhLgorICAgIGlm
IChtX3N0YXRlID09IENvbXBsZXRlZCAmJiAhbV9pc1Jhd0RhdGFDb252ZXJ0ZWQgJiYgbV9yZWFk
VHlwZSAhPSBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nKSB7CisgICAgICAgIGlmIChtX3JlYWRUeXBl
ID09IFJlYWRGaWxlQXNUZXh0KQorICAgICAgICAgICAgY29udmVydFRvVGV4dCgpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNEYXRh
VVJMKTsKKyAgICAgICAgICAgIGNvbnZlcnRUb0RhdGFVUkwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KG1fcmF3RGF0YS0+ZGF0YSgpKSwgbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCksIG1fZmlsZVR5
cGUsIG1fYnVpbGRlcik7CisgICAgICAgIH0KKworICAgICAgICBtX2lzUmF3RGF0YUNvbnZlcnRl
ZCA9IHRydWU7CisgICAgfQogCiAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwogfQog
CiB2b2lkIEZpbGVSZWFkZXI6OmNvbnZlcnRUb1RleHQoKQogewotICAgIGlmICghbV9yYXdEYXRh
LnNpemUoKSkgeworICAgIGlmICghbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCkpIHsKICAgICAgICAg
bV9idWlsZGVyLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0zMzEsMTggKzM2
NiwxOCBAQCB2b2lkIEZpbGVSZWFkZXI6OmNvbnZlcnRUb1RleHQoKQogICAgIGlmICghbV9kZWNv
ZGVyKQogICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRl
eHQvcGxhaW4iLCBtX2VuY29kaW5nLmlzVmFsaWQoKSA/IG1fZW5jb2RpbmcgOiBVVEY4RW5jb2Rp
bmcoKSk7CiAgICAgbV9idWlsZGVyLmNsZWFyKCk7Ci0gICAgbV9idWlsZGVyLmFwcGVuZChtX2Rl
Y29kZXItPmRlY29kZSgmbV9yYXdEYXRhLmF0KDApLCBtX3Jhd0RhdGEuc2l6ZSgpKSk7CisgICAg
bV9idWlsZGVyLmFwcGVuZChtX2RlY29kZXItPmRlY29kZShzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX3Jhd0RhdGEtPmJ5dGVMZW5ndGgoKSkpOwogCiAgICAg
aWYgKG1fc3RhdGUgPT0gQ29tcGxldGVkICYmICFtX2Vycm9yKQogICAgICAgICBtX2J1aWxkZXIu
YXBwZW5kKG1fZGVjb2Rlci0+Zmx1c2goKSk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6Y29udmVy
dFRvRGF0YVVSTChjb25zdCBWZWN0b3I8Y2hhcj4mIHJhd0RhdGEsIGNvbnN0IFN0cmluZyYgZmls
ZVR5cGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCit2b2lkIEZpbGVSZWFkZXI6OmNvbnZlcnRU
b0RhdGFVUkwoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IGxlbiwgY29uc3QgU3RyaW5nJiBmaWxl
VHlwZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKIHsKICAgICBidWlsZGVyLmNsZWFyKCk7CiAg
ICAgYnVpbGRlci5hcHBlbmQoImRhdGE6Iik7CiAKLSAgICBpZiAoIXJhd0RhdGEuc2l6ZSgpKQor
ICAgIGlmICghbGVuKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIWZpbGVUeXBlLmlzRW1w
dHkoKSkgewpAQCAtMzUyLDcgKzM4Nyw3IEBAIHZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0
YVVSTChjb25zdCBWZWN0b3I8Y2hhcj4mIHJhd0RhdGEsIGNvbnN0IFN0cmluZyYgZmlsCiAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCJiYXNlNjQsIik7CiAKICAgICBWZWN0b3I8Y2hhcj4gb3V0Owot
ICAgIGJhc2U2NEVuY29kZShyYXdEYXRhLCBvdXQpOworICAgIGJhc2U2NEVuY29kZShkYXRhLCBs
ZW4sIG91dCk7CiAgICAgb3V0LmFwcGVuZCgnXDAnKTsKICAgICBidWlsZGVyLmFwcGVuZChvdXQu
ZGF0YSgpKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmggYi9X
ZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCmluZGV4IGY5MTRkYWQuLjRiZTRjNzEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKKysrIGIvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXIuaApAQCAtNDgsNiArNDgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQmxvYjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CiBjbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwpAQCAtNjgsNiArNjksMTQgQEAgcHVi
bGljOgogICAgICAgICBET05FID0gMgogICAgIH07CiAKKyAgICBlbnVtIFJlYWRUeXBlIHsKKyAg
ICAgICAgUmVhZEZpbGVBc0FycmF5QnVmZmVyLAorICAgICAgICBSZWFkRmlsZUFzQmluYXJ5U3Ry
aW5nLAorICAgICAgICBSZWFkRmlsZUFzVGV4dCwKKyAgICAgICAgUmVhZEZpbGVBc0RhdGFVUkwK
KyAgICB9OworCisgICAgdm9pZCByZWFkQXNBcnJheUJ1ZmZlcihCbG9iKik7CiAgICAgdm9pZCBy
ZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiopOwogICAgIHZvaWQgcmVhZEFzVGV4dChCbG9iKiwgY29u
c3QgU3RyaW5nJiBlbmNvZGluZyA9ICIiKTsKICAgICB2b2lkIHJlYWRBc0RhdGFVUkwoQmxvYiop
OwpAQCAtNzYsMTIgKzg1LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0KCk7CiAKICAgICBS
ZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsKLSAgICBQYXNzUmVmUHRyPEZpbGVFcnJvcj4g
ZXJyb3IoKSB7IHJldHVybiBtX2Vycm9yOyB9Ci0gICAgU3RyaW5nIHJlc3VsdCgpOworICAgIFBh
c3NSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KKyAg
ICBSZWFkVHlwZSByZWFkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZFR5cGU7IH0KKyAgICBQ
YXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlclJlc3VsdCgpIGNvbnN0OworICAgIFN0
cmluZyBzdHJpbmdSZXN1bHQoKTsKIAogICAgIC8vIEhlbHBlciBtZXRob2RzLCBhbHNvIHVzZWQg
YnkgRmlsZVJlYWRlclN5bmMuCiAgICAgc3RhdGljIEV4Y2VwdGlvbkNvZGUgaHR0cFN0YXR1c0Nv
ZGVUb0V4Y2VwdGlvbkNvZGUoaW50IGh0dHBTdGF0dXNDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCBj
b252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5n
JiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYpOworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRUb0Rh
dGFVUkwoY29uc3QgY2hhciosIHNpemVfdCwgY29uc3QgU3RyaW5nJiBmaWxlVHlwZSwgU3RyaW5n
QnVpbGRlciYpOwogCiAgICAgLy8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBib29sIGNh
blN1c3BlbmQoKSBjb25zdDsKQEAgLTEwOSwxMSArMTIwLDYgQEAgcHVibGljOgogICAgIERFRklO
RV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZGVuZCk7CiAKIHByaXZhdGU6Ci0gICAgZW51
bSBSZWFkVHlwZSB7Ci0gICAgICAgIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcsCi0gICAgICAgIFJl
YWRGaWxlQXNUZXh0LAotICAgICAgICBSZWFkRmlsZUFzRGF0YVVSTAotICAgIH07CiAgICAgZW51
bSBJbnRlcm5hbFN0YXRlIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgU3RhcnRpbmcsCkBAIC0x
MzcsNyArMTQzLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGZpcmVFcnJvckV2ZW50KGludCBodHRw
U3RhdHVzQ29kZSk7CiAgICAgdm9pZCBmaXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBl
KTsKICAgICB2b2lkIGNvbnZlcnRUb1RleHQoKTsKLSAgICB2b2lkIGNvbnZlcnRUb0RhdGFVUkwo
KTsKIAogICAgIEludGVybmFsU3RhdGUgbV9zdGF0ZTsKICAgICBFdmVudFRhcmdldERhdGEgbV9l
dmVudFRhcmdldERhdGE7CkBAIC0xNDksOCArMTU0LDggQEAgcHJpdmF0ZToKIAogICAgIFN0cmlu
Z0J1aWxkZXIgbV9idWlsZGVyOwogCi0gICAgLy8gVGhlIHJhdyBkYXRhLiBXZSBoYXZlIHRvIGtl
ZXAgdHJhY2sgb2YgYWxsIHRoZSByYXcgZGF0YSBmb3IgaXQgdG8gYmUgY29udmVydGVkIHRvIHRl
eHQgb3IgZGF0YSBVUkwgZGF0YS4KLSAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOworICAgIC8v
IFdlIGhhdmUgdG8ga2VlcCB0cmFjayBvZiBhbGwgdGhlIHJhdyBkYXRhIGZvciBhbGwgcmVhZGlu
Z3Mgb3RoZXIgdGhhbiBiaW5hcnkgc3RyaW5nLgorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9y
YXdEYXRhOwogICAgIGJvb2wgbV9pc1Jhd0RhdGFDb252ZXJ0ZWQ7CiAKICAgICAvLyBUaGUgZGVj
b2RlciB1c2VkIHRvIGRlY29kZSB0aGUgdGV4dCBkYXRhLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXIuaWRsIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaWRsCmlu
ZGV4IGZlYmIyMzEuLmViYzZmZmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyLmlkbAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwKQEAgLTQ0LDYgKzQ0
LDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
c2hvcnQgcmVhZHlTdGF0ZTsKIAogICAgICAgICAvLyBhc3luYyByZWFkIG1ldGhvZHMKKyAgICAg
ICAgdm9pZCByZWFkQXNBcnJheUJ1ZmZlcihpbiBCbG9iIGJsb2IpOwogICAgICAgICB2b2lkIHJl
YWRBc0JpbmFyeVN0cmluZyhpbiBCbG9iIGJsb2IpOwogICAgICAgICB2b2lkIHJlYWRBc1RleHQo
aW4gQmxvYiBibG9iLCBpbiBbT3B0aW9uYWxdIERPTVN0cmluZyBlbmNvZGluZyk7CiAgICAgICAg
IHZvaWQgcmVhZEFzRGF0YVVSTChpbiBCbG9iIGJsb2IpOwpAQCAtNTEsNyArNTIsNyBAQCBtb2R1
bGUgaHRtbCB7CiAgICAgICAgIHZvaWQgYWJvcnQoKTsKIAogICAgICAgICAvLyBmaWxlIGRhdGEK
LSAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDb252ZXJ0U2NyaXB0U3RyaW5nXSBET01TdHJp
bmcgcmVzdWx0OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgW0N1c3RvbV0gRE9NT2JqZWN0
IHJlc3VsdDsKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgRmlsZUVycm9yIGVycm9yOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwIGIvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAppbmRleCA2NDI1YmNmLi5lOWI0NDY3IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCisrKyBiL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUg
IkZpbGVSZWFkZXJTeW5jLmgiCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUg
IkJhc2U2NC5oIgogI2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJCbG9iVVJMLmgiCkBAIC00
NSw3NiArNDYsMjUgQEAKICNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVk
ZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXIu
aCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGaWxlUmVhZGVyU3luY0xvYWRlciA6IHB1
YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKLXB1YmxpYzoKLSAgICAvLyBJZiB0aGUgb3V0
cHV0IHJlc3VsdCBpcyBwcm92aWRlZCwgdXNlIGl0LiBPdGhlcndpc2UsIHNhdmUgaXQgYXMgdGhl
IHJhdyBkYXRhLgotICAgIEZpbGVSZWFkZXJTeW5jTG9hZGVyKFN0cmluZ0J1aWxkZXIqKTsKLQot
ICAgIC8vIFJldHVybnMgdGhlIGh0dHAgc3RhdHVzIGNvZGUuCi0gICAgdm9pZCBzdGFydChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgRXhjZXB0aW9uQ29k
ZSYpOwotCi0gICAgLy8gVGhyZWFkYWJsZUxvYWRlckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KTsKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwotICAgIHZpcnR1YWwg
dm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLQotICAgIGNvbnN0IFZlY3Rvcjxj
aGFyPiYgcmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fcmF3RGF0YTsgfQotCi1wcml2YXRlOgot
ICAgIC8vIFRoZSBvdXRwdXQgcmVzdWx0LiBUaGUgY2FsbGVyIHByb3ZpZGVzIHRoaXMgaW4gb3Jk
ZXIgdG8gbG9hZCB0aGUgYmluYXJ5IGRhdGEgZGlyZWN0bHkuCi0gICAgU3RyaW5nQnVpbGRlciog
bV9idWlsZGVyOwotCi0gICAgLy8gVGhlIHJhdyBkYXRhLiBUaGUgY2FsbGVyIGRvZXMgbm90IHBy
b3ZpZGUgdGhlIGFib3ZlIG91dHB1dCByZXN1bHQgYW5kIHdlIG5lZWQgdG8gc2F2ZSBpdCBoZXJl
LgotICAgIFZlY3RvcjxjaGFyPiBtX3Jhd0RhdGE7Ci0KLSAgICBpbnQgbV9odHRwU3RhdHVzQ29k
ZTsgICAgCi19OwotCi1GaWxlUmVhZGVyU3luY0xvYWRlcjo6RmlsZVJlYWRlclN5bmNMb2FkZXIo
U3RyaW5nQnVpbGRlciogYnVpbGRlcikKLSAgICA6IG1fYnVpbGRlcihidWlsZGVyKQorRmlsZVJl
YWRlclN5bmM6OkZpbGVSZWFkZXJTeW5jKCkKKyAgICA6IG1fcmVhZFR5cGUoUmVhZEFzQmluYXJ5
U3RyaW5nKQorICAgICwgbV90b3RhbExvYWRlZCgwKQogICAgICwgbV9odHRwU3RhdHVzQ29kZSgw
KQogewogfQogCi12b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpzdGFydChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gRmls
ZVJlYWRlclN5bmM6OnJlYWRBc0FycmF5QnVmZmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewot
ICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7Ci0gICAgb3B0aW9ucy5zZW5kTG9h
ZENhbGxiYWNrcyA9IHRydWU7Ci0gICAgb3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKLSAg
ICBvcHRpb25zLmZvcmNlUHJlZmxpZ2h0ID0gZmFsc2U7Ci0gICAgb3B0aW9ucy5hbGxvd0NyZWRl
bnRpYWxzID0gdHJ1ZTsKLSAgICBvcHRpb25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IERl
bnlDcm9zc09yaWdpblJlcXVlc3RzOwotCi0gICAgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291
cmNlU3luY2hyb25vdXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZXF1ZXN0LCAqdGhpcywg
b3B0aW9ucyk7Ci0KLSAgICBlYyA9IChtX2h0dHBTdGF0dXNDb2RlID09IDIwMCkgPyAwIDogRmls
ZVJlYWRlcjo6aHR0cFN0YXR1c0NvZGVUb0V4Y2VwdGlvbkNvZGUobV9odHRwU3RhdHVzQ29kZSk7
Ci19Ci0KLXZvaWQgRmlsZVJlYWRlclN5bmNMb2FkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKLXsKLSAgICBtX2h0dHBTdGF0dXNDb2RlID0g
cmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKLX0KLQotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRl
cjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQot
ewotICAgIGlmIChtX2J1aWxkZXIpCi0gICAgICAgIG1fYnVpbGRlci0+YXBwZW5kKGRhdGEsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOwotICAgIGVsc2UKLSAgICAgICAg
bV9yYXdEYXRhLmFwcGVuZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2
ZWQpKTsKLX0KLQotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1
bnNpZ25lZCBsb25nKQotewotfQorICAgIGlmICghYmxvYikKKyAgICAgICAgcmV0dXJuIDA7CiAK
LXZvaWQgRmlsZVJlYWRlclN5bmNMb2FkZXI6OmRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYp
Ci17Ci0gICAgLy8gVHJlYXQgYXMgaW50ZXJuYWwgZXJyb3IuCi0gICAgbV9odHRwU3RhdHVzQ29k
ZSA9IDUwMDsKKyAgICByZWFkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2IsIFJlYWRBc0Fy
cmF5QnVmZmVyLCBlYyk7CisgICAgcmV0dXJuIG1fcmF3RGF0YTsKIH0KIAogU3RyaW5nIEZpbGVS
ZWFkZXJTeW5jOjpyZWFkQXNCaW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCkBAIC0x
NDEsMTIgKzkxLDE1IEBAIFN0cmluZyBGaWxlUmVhZGVyU3luYzo6cmVhZEFzRGF0YVVSTChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250CiAgICAgaWYgKCFibG9iKQog
ICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiAKKyAgICBtX2Jsb2JUeXBlID0g
YmxvYi0+dHlwZSgpOwogICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYiwgUmVh
ZEFzRGF0YVVSTCwgZWMpOwogICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAog
dm9pZCBGaWxlUmVhZGVyU3luYzo6cmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBSZWFkVHlwZSByZWFkVHlwZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CisgICAgbV9yZWFkVHlwZSA9IHJlYWRUeXBlOworCiAgICAgLy8gVGhlIGJs
b2IgaXMgcmVhZCBieSByb3V0aW5nIHRocm91Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIg
Z2l2ZW4gdGhlIHRlbXBvcmFyeSBwdWJsaWMgdXJsLgogICAgIEtVUkwgdXJsRm9yUmVhZGluZyA9
IEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChzY3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0
eU9yaWdpbigpKTsKICAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwo
dXJsRm9yUmVhZGluZywgYmxvYi0+dXJsKCkpOwpAQCAtMTU0LDI1ICsxMDcsMTggQEAgdm9pZCBG
aWxlUmVhZGVyU3luYzo6cmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRp
b25Db250ZXh0LCBCbG9iKgogICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KHVybEZvclJlYWRp
bmcpOwogICAgIHJlcXVlc3Quc2V0SFRUUE1ldGhvZCgiR0VUIik7CiAKLSAgICBGaWxlUmVhZGVy
U3luY0xvYWRlciBsb2FkZXIoKHJlYWRUeXBlID09IFJlYWRBc0JpbmFyeVN0cmluZykgPyAmbV9i
dWlsZGVyIDogMCk7Ci0gICAgbG9hZGVyLnN0YXJ0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHJl
cXVlc3QsIGVjKTsKLSAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVS
TCh1cmxGb3JSZWFkaW5nKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybjsKKyAgICBUaHJl
YWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOworICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFj
a3MgPSB0cnVlOworICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7CisgICAgb3B0aW9u
cy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOworICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9
IHRydWU7CisgICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBEZW55Q3Jvc3NP
cmlnaW5SZXF1ZXN0czsKIAotICAgIHN3aXRjaCAocmVhZFR5cGUpIHsKLSAgICBjYXNlIFJlYWRB
c0JpbmFyeVN0cmluZzoKLSAgICAgICAgLy8gTm90aGluZyB0byBkbyBzaW5jZSB3ZSBuZWVkIG5v
IGNvbnZlcnNpb24uCi0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFJlYWRBc1RleHQ6Ci0gICAg
ICAgIGNvbnZlcnRUb1RleHQobG9hZGVyLnJhd0RhdGEoKS5kYXRhKCksIGxvYWRlci5yYXdEYXRh
KCkuc2l6ZSgpLCBtX2J1aWxkZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBSZWFkQXNE
YXRhVVJMOgotICAgICAgICBGaWxlUmVhZGVyOjpjb252ZXJ0VG9EYXRhVVJMKGxvYWRlci5yYXdE
YXRhKCksIGJsb2ItPnR5cGUoKSwgbV9idWlsZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
KyAgICBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIHJlcXVlc3QsICp0aGlzLCBvcHRpb25zKTsKKyAKKyAgICBUaHJlYWRh
YmxlQmxvYlJlZ2lzdHJ5Ojp1bnJlZ2lzdGVyQmxvYlVSTCh1cmxGb3JSZWFkaW5nKTsKIAotICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIGVjID0gKG1faHR0cFN0YXR1c0NvZGUgPT0gMjAw
KSA/IDAgOiBGaWxlUmVhZGVyOjpodHRwU3RhdHVzQ29kZVRvRXhjZXB0aW9uQ29kZShtX2h0dHBT
dGF0dXNDb2RlKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyU3luYzo6Y29udmVydFRvVGV4dChjb25z
dCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKQEAgLTE5MSw2
ICsxMzcsNzAgQEAgdm9pZCBGaWxlUmVhZGVyU3luYzo6Y29udmVydFRvVGV4dChjb25zdCBjaGFy
KiBkYXRhLCBpbnQgc2l6ZSwgU3RyaW5nQnVpbGRlciYgYnUKICAgICBidWlsZGVyLmFwcGVuZChk
ZWNvZGVyLT5mbHVzaCgpKTsKIH0KIAordm9pZCBGaWxlUmVhZGVyU3luYzo6ZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIG1faHR0cFN0
YXR1c0NvZGUgPSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOworCisgICAgbG9uZyBsb25nIHRv
dGFsQnl0ZXMgPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKKworICAgIGlmIChz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHRvdGFsQnl0ZXMpID4gIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgp
KSkgeworICAgICAgICBtX2h0dHBTdGF0dXNDb2RlID0gNTAwOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKG1fcmVhZFR5cGUgIT0gUmVhZEFzQmluYXJ5U3RyaW5nKSB7CisgICAg
ICAgIEFTU0VSVCghbV9yYXdEYXRhKTsKKyAgICAgICAgbV9yYXdEYXRhID0gQXJyYXlCdWZmZXI6
OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4odG90YWxCeXRlcyksIDEpOworICAgIH0KK30K
Kwordm9pZCBGaWxlUmVhZGVyU3luYzo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwg
aW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIGlmIChoYXNFcnJvcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBzd2l0Y2ggKG1fcmVhZFR5cGUpIHsKKyAgICBjYXNlIFJlYWRBc0JpbmFyeVN0
cmluZzoKKyAgICAgICAgbV9idWlsZGVyLmFwcGVuZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4obGVuZ3RoUmVjZWl2ZWQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVhZEFzQXJy
YXlCdWZmZXI6CisgICAgY2FzZSBSZWFkQXNUZXh0OgorICAgIGNhc2UgUmVhZEFzRGF0YVVSTDoK
KyAgICAgICAgbWVtY3B5KHN0YXRpY19jYXN0PGNoYXIqPihtX3Jhd0RhdGEtPmRhdGEoKSkgKyBt
X3RvdGFsTG9hZGVkLCBkYXRhLCBsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIG1fdG90YWxMb2Fk
ZWQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEZpbGVS
ZWFkZXJTeW5jOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpCit7CisgICAgaWYgKGhh
c0Vycm9yKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAobV9yZWFkVHlwZSkgewor
ICAgIGNhc2UgUmVhZEFzQXJyYXlCdWZmZXI6CisgICAgY2FzZSBSZWFkQXNCaW5hcnlTdHJpbmc6
CisgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gc2luY2Ugd2UgbmVlZCBubyBjb252ZXJzaW9uLgor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWFkQXNUZXh0OgorICAgICAgICBjb252ZXJ0VG9U
ZXh0KHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX3Jhd0RhdGEtPmRhdGEoKSksIG1fcmF3RGF0
YS0+Ynl0ZUxlbmd0aCgpLCBtX2J1aWxkZXIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBS
ZWFkQXNEYXRhVVJMOgorICAgICAgICBGaWxlUmVhZGVyOjpjb252ZXJ0VG9EYXRhVVJMKHN0YXRp
Y19jYXN0PGNvbnN0IGNoYXIqPihtX3Jhd0RhdGEtPmRhdGEoKSksIG1fcmF3RGF0YS0+Ynl0ZUxl
bmd0aCgpLCBtX2Jsb2JUeXBlLCBtX2J1aWxkZXIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgRmlsZVJlYWRlclN5bmM6OmRp
ZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgLy8gVHJlYXQgYXMgaW50ZXJuYWwg
ZXJyb3IuCisgICAgbV9odHRwU3RhdHVzQ29kZSA9IDUwMDsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogIAogI2VuZGlmIC8vIEVOQUJMRShCTE9CKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9m
aWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmggYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMu
aAppbmRleCBjYjBlMDBkLi40NDRjYWY5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVJlYWRlclN5bmMuaAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaApAQCAt
MzQsMTYgKzM0LDE4IEBACiAjaWYgRU5BQkxFKEJMT0IpCiAKICNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlICJUaHJlYWRhYmxl
TG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEJsb2I7CiBjbGFz
cyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCi1jbGFzcyBGaWxlUmVhZGVyU3luYyA6IHB1Ymxp
YyBSZWZDb3VudGVkPEZpbGVSZWFkZXJTeW5jPiB7CitjbGFzcyBGaWxlUmVhZGVyU3luYyA6IHB1
YmxpYyBSZWZDb3VudGVkPEZpbGVSZWFkZXJTeW5jPiwgcHVibGljIFRocmVhZGFibGVMb2FkZXJD
bGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZpbGVSZWFkZXJTeW5jPiBj
cmVhdGUoKQogICAgIHsKQEAgLTUyLDYgKzU0LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
fkZpbGVSZWFkZXJTeW5jKCkgeyB9CiAKKyAgICAvLyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Cisg
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNl
Jik7CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
cik7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworCisg
ICAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gcmVhZEFzQXJyYXlCdWZmZXIoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlYWRBc0Jp
bmFyeVN0cmluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICBTdHJpbmcgcmVhZEFzVGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB7CkBA
IC02MCwyMSArNjksMzEgQEAgcHVibGljOgogICAgIFN0cmluZyByZWFkQXNUZXh0KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZywgRXhjZXB0aW9u
Q29kZSYpOwogICAgIFN0cmluZyByZWFkQXNEYXRhVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBCbG9iKiwgRXhjZXB0aW9uQ29kZSYpOwogCisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0IHsg
cmV0dXJuIG1faHR0cFN0YXR1c0NvZGUgJiYgbV9odHRwU3RhdHVzQ29kZSAhPSAyMDA7IH0KKwog
cHJpdmF0ZToKICAgICBlbnVtIFJlYWRUeXBlIHsKKyAgICAgICAgUmVhZEFzQXJyYXlCdWZmZXIs
CiAgICAgICAgIFJlYWRBc0JpbmFyeVN0cmluZywKICAgICAgICAgUmVhZEFzVGV4dCwKICAgICAg
ICAgUmVhZEFzRGF0YVVSTAogICAgIH07CiAKLSAgICBGaWxlUmVhZGVyU3luYygpIHsgfQorICAg
IEZpbGVSZWFkZXJTeW5jKCk7CiAKICAgICB2b2lkIHJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEJsb2IqLCBSZWFkVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY29udmVydFRv
VGV4dChjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwgU3RyaW5nQnVpbGRlciYpOwogCiAgICAg
U3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7CiAKKyAgICAvLyBXZSBoYXZlIHRvIGtlZXAgdHJhY2sg
b2YgYWxsIHRoZSByYXcgZGF0YSBmb3IgYWxsIHJlYWRpbmdzIG90aGVyIHRoYW4gYmluYXJ5IHN0
cmluZy4KKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1fcmF3RGF0YTsKKwogICAgIFN0cmluZyBt
X2VuY29kaW5nOworICAgIFN0cmluZyBtX2Jsb2JUeXBlOworICAgIFJlYWRUeXBlIG1fcmVhZFR5
cGU7CisgICAgdW5zaWduZWQgbV90b3RhbExvYWRlZDsKKyAgICBpbnQgbV9odHRwU3RhdHVzQ29k
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyU3luYy5pZGwgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMu
aWRsCmluZGV4IDcyODE4YjEuLjM4MWQ0ODMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9G
aWxlUmVhZGVyU3luYy5pZGwKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlk
bApAQCAtMzQsNiArMzQsOCBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIENhbkJlQ29uc3RydWN0
ZWQsCiAgICAgICAgIE5vU3RhdGljVGFibGVzCiAgICAgXSBGaWxlUmVhZGVyU3luYyB7CisgICAg
ICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0XSBBcnJheUJ1ZmZlciByZWFkQXNB
cnJheUJ1ZmZlcihpbiBCbG9iIGJsb2IpCisgICAgICAgICAgICByYWlzZXMoRmlsZUV4Y2VwdGlv
bik7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBDb252ZXJ0U2Ny
aXB0U3RyaW5nXSBET01TdHJpbmcgcmVhZEFzQmluYXJ5U3RyaW5nKGluIEJsb2IgYmxvYikKICAg
ICAgICAgICAgIHJhaXNlcyhGaWxlRXhjZXB0aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIENvbnZlcnRTY3JpcHRTdHJpbmddIERPTVN0cmluZyByZWFkQXNU
ZXh0KGluIEJsb2IgYmxvYiwgaW4gW09wdGlvbmFsXSBET01TdHJpbmcgZW5jb2RpbmcpCmRpZmYg
LS1naXQgYS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmggYi9XZWJDb3Jl
L2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgKaW5kZXggYjhhNjU4NC4uYmNmNjhiZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oCisrKyBi
L1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaApAQCAtMzEsNiArMzEsOCBA
QAogI2lmbmRlZiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKICNkZWZpbmUgVGhyZWFkYWJsZUxv
YWRlckNsaWVudF9oCiAKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsK
</data>
<flag name="commit-queue"
          id="60845"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71236</attachid>
            <date>2010-10-19 18:04:46 -0700</date>
            <delta_ts>2010-10-21 14:54:21 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47691_3</filename>
            <type>text/plain</type>
            <size>46951</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1ODZiYWRjLi4xZmFkMzhjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMTAt
MTUgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4g
RmlsZVJlYWRlciBhbmQgRmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NjkxCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3JlYWQt
ZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1jb21tb24uanM6CisgICAgICAgIChyZWFkQmxvYkFzQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQXJy
YXlCdWZmZXJTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nU3luYyk6Cisg
ICAgICAgIChfcmVhZEJsb2JBc1RleHRTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzRGF0YVVS
TFN5bmMpOgorICAgICAgICAobG9nUmVzdWx0KToKKyAgICAgICAgKGxvYWRlZCk6CisgICAgICAg
IChfdG9TdHJpbmcpOgorICAgICAgICAoX2lzQVNDSUlTdHJpbmcpOgorICAgICAgICAoX3RvSGV4
YWRlY2ltYWwpOgorICAgICAgICAoX2dldEVsZW1lbnRBdCk6CisgICAgICAgICogZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanM6CisgICAgICAgICh0ZXN0UmVhZGlu
Z05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIpOgorICAgICAgICAodGVzdFJlYWRpbmdFbXB0
eUZpbGVBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxl
QXNBcnJheUJ1ZmZlcik6CisgICAgICAgICh0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVm
ZmVyKToKKyAgICAgICAgKHRlc3RNdWx0aXBsZVJlYWRzKToKKyAgICAgICAgKiBmYXN0L2ZpbGVz
L3dvcmtlcnMvd29ya2VyLXJlYWQtYmxvYi1zeW5jLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3Rl
ZC50eHQ6CisKIDIwMTAtMTAtMTUgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9mYXN0L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKaW5kZXggNzZmZDU1Zi4u
MGRlZjA2NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5
bmMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFz
eW5jLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDEwIEBACiAKK1Rlc3QgcmVhZGluZyBhIG5vbi1l
eGlzdGVudCBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgZXJy
b3IgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK2Vycm9yIGNvZGU6IDgKK1JlY2VpdmVkIGxvYWRlbmQg
ZXZlbnQKIFRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcK
IHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGVycm9yIGV2ZW50CkBAIC0xNyw2ICsyMywxNSBAQCBS
ZWNlaXZlZCBlcnJvciBldmVudAogcmVhZHlTdGF0ZTogMgogZXJyb3IgY29kZTogOAogUmVjZWl2
ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJyYXkgYnVm
ZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6
IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiAwCity
ZXN1bHQ6IAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZp
bGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2
ZW50CkBAIC00NCw2ICs1OSwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVz
dWx0OiBkYXRhOgogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTgg
ZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBl
dmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgor
cmVzdWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRl
c3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAog
UmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CkBAIC01Myw2ICs3NywxNSBAQCByZWFkeVN0YXRlOiAy
CiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAor
VGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAw
CitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQg
ZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA5CityZXN1bHQ6IDB4MCAweDEgMHgy
IDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBU
ZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAw
CiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9y
ZXNvdXJjZXMvcmVhZC1jb21tb24uanMKaW5kZXggYWJlMzI0Zi4uM2I3NDQ3YSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKQEAgLTExLDYg
KzExLDE0IEBAIGZ1bmN0aW9uIGJ1aWxkQmxvYihpdGVtcywgY29udGVudFR5cGUsIGJ1aWxkZXIp
CiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBlaXRoZXIgYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25v
dXNseS4KK2Z1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIGJsb2IpCit7
CisgICAgaWYgKGlzUmVhZEFzQXN5bmMoKSkKKyAgICAgICAgX3JlYWRCbG9iQXNBcnJheUJ1ZmZl
ckFzeW5jKHRlc3RGaWxlcywgYmxvYik7CisgICAgZWxzZQorICAgICAgICBfcmVhZEJsb2JBc0Fy
cmF5QnVmZmVyU3luYyh0ZXN0RmlsZXMsIGJsb2IpOworfQorCiBmdW5jdGlvbiByZWFkQmxvYkFz
QmluYXJ5U3RyaW5nKHRlc3RGaWxlcywgYmxvYikKIHsKICAgICBpZiAoaXNSZWFkQXNBc3luYygp
KQpAQCAtMzYsNiArNDQsMTIgQEAgZnVuY3Rpb24gcmVhZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVz
LCBibG9iKQogfQogCiAvLyBSZWFkcyBhIGJsb2IgYXN5bmNocm9ub3VzbHkuCitmdW5jdGlvbiBf
cmVhZEJsb2JBc0FycmF5QnVmZmVyQXN5bmModGVzdEZpbGVzLCBibG9iKQoreworICAgIHZhciBy
ZWFkZXIgPSBjcmVhdGVSZWFkZXJBc3luYyh0ZXN0RmlsZXMpOworICAgIHJlYWRlci5yZWFkQXNB
cnJheUJ1ZmZlcihibG9iKQorfQorCiBmdW5jdGlvbiBfcmVhZEJsb2JBc0JpbmFyeVN0cmluZ0Fz
eW5jKHRlc3RGaWxlcywgYmxvYikKIHsKICAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyQXN5
bmModGVzdEZpbGVzKTsKQEAgLTU1LDEyICs2OSwyNSBAQCBmdW5jdGlvbiBfcmVhZEJsb2JBc0Rh
dGFVUkxBc3luYyh0ZXN0RmlsZXMsIGJsb2IpCiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBzeW5jaHJv
bm91c2x5LgorZnVuY3Rpb24gX3JlYWRCbG9iQXNBcnJheUJ1ZmZlclN5bmModGVzdEZpbGVzLCBi
bG9iKQoreworICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CisgICAgdHJ5IHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTsKKyAg
ICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAg
bG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAiOiAiICsgZXJyb3IubmFt
ZSk7CisgICAgfQorCisgICAgcnVuTmV4dFRlc3QodGVzdEZpbGVzKTsKK30KKwogZnVuY3Rpb24g
X3JlYWRCbG9iQXNCaW5hcnlTdHJpbmdTeW5jKHRlc3RGaWxlcywgYmxvYikKIHsKICAgICB2YXIg
cmVhZGVyID0gY3JlYXRlUmVhZGVyU3luYygpOwogICAgIHRyeSB7CiAgICAgICAgIHZhciByZXN1
bHQgPSByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpOwotICAgICAgICBsb2cocmVzdWx0
KTsKKyAgICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAg
ICAgICAgbG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAiOiAiICsgZXJy
b3IubmFtZSk7CiAgICAgfQpAQCAtNzMsNyArMTAwLDcgQEAgZnVuY3Rpb24gX3JlYWRCbG9iQXNU
ZXh0U3luYyh0ZXN0RmlsZXMsIGJsb2IsIGVuY29kaW5nKQogICAgIHZhciByZWFkZXIgPSBjcmVh
dGVSZWFkZXJTeW5jKCk7CiAgICAgdHJ5IHsKICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5y
ZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKTsKLSAgICAgICAgbG9nKHJlc3VsdCk7CisgICAgICAg
IGxvZ1Jlc3VsdChyZXN1bHQpOwogICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgIGxvZygi
UmVjZWl2ZWQgZXhjZXB0aW9uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm5hbWUpOwog
ICAgIH0KQEAgLTg2LDcgKzExMyw3IEBAIGZ1bmN0aW9uIF9yZWFkQmxvYkFzRGF0YVVSTFN5bmMo
dGVzdEZpbGVzLCBibG9iKQogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CiAg
ICAgdHJ5IHsKICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2Ip
OwotICAgICAgICBsb2cocmVzdWx0KTsKKyAgICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiAgICAg
fSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgbG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVy
cm9yLmNvZGUgKyAiOiAiICsgZXJyb3IubmFtZSk7CiAgICAgfQpAQCAtMTE1LDYgKzE0MiwxOSBA
QCBmdW5jdGlvbiBjcmVhdGVSZWFkZXJTeW5jKCkKICAgICByZXR1cm4gbmV3IEZpbGVSZWFkZXJT
eW5jKCk7CiB9CiAKKy8vICdyZXN1bHQnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXIgb2Jq
ZWN0IG9yIGEgc3RyaW5nLgorZnVuY3Rpb24gbG9nUmVzdWx0KHJlc3VsdCkKK3sKKyAgICBpZiAo
dHlwZW9mIHJlc3VsdCA9PSAnb2JqZWN0JykgeworICAgICAgICBsb2coInJlc3VsdCBzaXplOiAi
ICsgcmVzdWx0LmJ5dGVMZW5ndGgpOworICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShy
ZXN1bHQsIDAsIHJlc3VsdC5ieXRlTGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbG9nKCJy
ZXN1bHQgc2l6ZTogIiArIHJlc3VsdC5sZW5ndGgpOworCisgICAgdmFyIHJlc3VsdE91dHB1dCA9
IF9pc0FTQ0lJU3RyaW5nKHJlc3VsdCkgPyBfdG9TdHJpbmcocmVzdWx0KSA6IF90b0hleGFkZWNp
bWFsKHJlc3VsdCk7CisgICAgbG9nKCJyZXN1bHQ6ICIgKyByZXN1bHRPdXRwdXQpOworfQorCiBm
dW5jdGlvbiBsb2dFdmVudChldmVudCkKIHsKICAgICBsb2coIlJlY2VpdmVkICIgKyBldmVudC50
eXBlICsgIiBldmVudCIpOwpAQCAtMTMwLDExICsxNzAsOSBAQCBmdW5jdGlvbiBsb2FkZWQoZXZl
bnQpCiB7CiAgICAgbG9nRXZlbnQoZXZlbnQpOwogICAgIGxvZygicmVhZHlTdGF0ZTogIiArIGV2
ZW50LnRhcmdldC5yZWFkeVN0YXRlKTsKLSAgICBsb2coInJlc3VsdCBzaXplOiAiICsgZXZlbnQu
dGFyZ2V0LnJlc3VsdC5sZW5ndGgpOwogCiAgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5y
ZXN1bHQ7Ci0gICAgdmFyIHJlc3VsdE91dHB1dCA9IF9pc0FTQ0lJU3RyaW5nKHJlc3VsdCkgPyBy
ZXN1bHQgOiBfdG9IZXhhZGVjaW1hbChyZXN1bHQpOwotICAgIGxvZygicmVzdWx0OiAiICsgcmVz
dWx0T3V0cHV0KTsKKyAgICBsb2dSZXN1bHQocmVzdWx0KTsKIH0KIAogZnVuY3Rpb24gbG9hZEZh
aWxlZChldmVudCkKQEAgLTE1MSwyMyArMTg5LDQyIEBAIGZ1bmN0aW9uIGxvYWRFbmRlZCh0ZXN0
RmlsZXMsIGV2ZW50KQogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb25zLgotZnVuY3Rpb24gX2lzQVND
SUlTdHJpbmcoc3RyKQorCisvLyAndmFsdWUnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXJW
aWV3IG9iamVjdCBvciBhIHN0cmluZy4KK2Z1bmN0aW9uIF90b1N0cmluZyh2YWx1ZSkKIHsKLSAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3Ry
LmNoYXJDb2RlQXQoaSkgPj0gMTI4KQorICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycp
CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IFN0cmlu
Zy5mcm9tQ2hhckNvZGUodmFsdWVbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vICd2
YWx1ZScgY2FuIGJlIGVpdGhlciBhbiBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0IG9yIGEgc3RyaW5n
LgorZnVuY3Rpb24gX2lzQVNDSUlTdHJpbmcodmFsdWUpCit7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoX2dldEVsZW1lbnRBdCh2YWx1
ZSwgaSkgPj0gMTI4KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotZnVuY3Rpb24gX3RvSGV4YWRlY2ltYWwoc3RyKQorLy8gJ3ZhbHVlJyBj
YW4gYmUgZWl0aGVyIGFuIEFycmF5QnVmZmVyVmlldyBvYmplY3Qgb3IgYSBzdHJpbmcuCitmdW5j
dGlvbiBfdG9IZXhhZGVjaW1hbCh2YWx1ZSkKIHsKICAgICB2YXIgcmVzdWx0ID0gIiI7Ci0gICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGhleCA9
ICIweCIgKyAoc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKS50b1N0cmluZygxNik7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgaGV4ID0g
IjB4IiArIChfZ2V0RWxlbWVudEF0KHZhbHVlLCBpKSAmIDB4RkYpLnRvU3RyaW5nKDE2KTsKICAg
ICAgICAgaWYgKGkgPiAwKQogICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKICAgICAgICAgcmVz
dWx0ICs9IGhleDsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKworZnVuY3Rpb24gX2dl
dEVsZW1lbnRBdCh2YWx1ZSwgaSkKK3sKKyAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PSAnc3Ry
aW5nJykgPyB2YWx1ZS5jaGFyQ29kZUF0KGkpIDogdmFsdWVbaV07Cit9CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcyBi
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpz
CmluZGV4IGU4YjJjOWMuLjM4ZWUxMjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmls
ZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCkBAIC0xLDExICsxLDE1
IEBACiB2YXIgdGVzdENhc2VzID0gWworICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFz
QXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzQmluYXJ5U3Ry
aW5nIiwKICAgICAidGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc1RleHQiLAogICAgICJ0ZXN0
UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzRGF0YVVSTCIsCisgICAgInRlc3RSZWFkaW5nRW1wdHlG
aWxlQXNBcnJheUJ1ZmZlciIsCiAgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNCaW5hcnlTdHJp
bmciLAogICAgICJ0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5n
RW1wdHlGaWxlQXNEYXRhVVJMIiwKKyAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0Fy
cmF5QnVmZmVyIiwKICAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0JpbmFyeVN0cmlu
ZyIsCisgICAgInRlc3RSZWFkaW5nQmluYXJ5RmlsZUFzQXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0
UmVhZGluZ0JpbmFyeUZpbGVBc0JpbmFyeVN0cmluZyIsCiAgICAgInRlc3RSZWFkaW5nVVRGOEVu
Y29kZWRGaWxlQXNUZXh0IiwKICAgICAidGVzdFJlYWRpbmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVB
c1RleHQiLApAQCAtMjksNiArMzMsMTIgQEAgZnVuY3Rpb24gcnVuTmV4dFRlc3QodGVzdEZpbGVz
KQogICAgIH0KIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc0FycmF5
QnVmZmVyKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVu
dCBmaWxlIGFzIGFycmF5IGJ1ZmZlciIpOworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0
RmlsZXMsIHRlc3RGaWxlc1snbm9uLWV4aXN0ZW50J10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVh
ZGluZ05vbkV4aXN0ZW50RmlsZUFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2co
IlRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKQEAg
LTQ3LDYgKzU3LDEyIEBAIGZ1bmN0aW9uIHRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNEYXRh
VVJMKHRlc3RGaWxlcykKICAgICByZWFkQmxvYkFzRGF0YVVSTCh0ZXN0RmlsZXMsIHRlc3RGaWxl
c1snbm9uLWV4aXN0ZW50J10pOwogfQogCitmdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFz
QXJyYXlCdWZmZXIodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGFuIGVtcHR5
IGZpbGUgYXMgYXJyYXkgYnVmZmVyIik7CisgICAgcmVhZEJsb2JBc0FycmF5QnVmZmVyKHRlc3RG
aWxlcywgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGlu
Z0VtcHR5RmlsZUFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVh
ZGluZyBhbiBlbXB0eSBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKQEAgLTY1LDEyICs4MSwyNCBA
QCBmdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzRGF0YVVSTCh0ZXN0RmlsZXMpCiAgICAg
cmVhZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ2VtcHR5LWZpbGUnXSk7CiB9
CiAKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNBcnJheUJ1ZmZlcih0ZXN0
RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGFycmF5IGJ1
ZmZlciIpOworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIHRlc3RGaWxlc1sn
VVRGOC1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFz
QmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVURi04
IGZpbGUgYXMgYmluYXJ5IHN0cmluZyIpOwogICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVz
dEZpbGVzLCB0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRp
bmdCaW5hcnlGaWxlQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJl
YWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBhcnJheSBidWZmZXIiKTsKKyAgICByZWFkQmxvYkFzQXJy
YXlCdWZmZXIodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ2JpbmFyeS1maWxlJ10pOworfQorCiBmdW5j
dGlvbiB0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAg
ICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CkBA
IC0xMzUsNiArMTYzLDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVhZHModGVzdEZpbGVzKQog
CiAgICAgbG9nKCJUZXN0IGNhbGxpbmcgbXVsdGlwbGUgcmVhZCBtZXRob2RzIGFuZCBvbmx5IGxh
c3Qgb25lIGlzIHByb2Nlc3NlZCIpOwogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJBc3lu
YygpOworICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXNbJ1VURjgtZmlsZSdd
KTsKICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlc1snVVRGOC1maWxlJ10p
OwogICAgIHJlYWRlci5yZWFkQXNUZXh0KHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwogICAgIHJl
YWRlci5yZWFkQXNEYXRhVVJMKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtYmxv
Yi1zeW5jLWV4cGVjdGVkLnR4dAppbmRleCAzZDkwNThiLi45ZTdjNDc5IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtYmxvYi1zeW5jLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQt
YmxvYi1zeW5jLWV4cGVjdGVkLnR4dApAQCAtNSwzMiArNSw0NiBAQCBSZWNlaXZlZCBleGNlcHRp
b24gODogTk9UX0ZPVU5EX0VSUgogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIGV4aXN0
ZW50IGFuZCBub24tZXhpc3RlbnQgZmlsZQogUmVjZWl2ZWQgZXhjZXB0aW9uIDg6IE5PVF9GT1VO
RF9FUlIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBlbXB0eSBmaWxlCi0KK3Jlc3Vs
dCBzaXplOiAwCityZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIGVtcHR5
IHRleHQKLQorcmVzdWx0IHNpemU6IDAKK3Jlc3VsdDogCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNv
bnRhaW5pbmcgZW1wdHkgZmlsZXMgYW5kIGVtcHR5IHRleHRzCi0KK3Jlc3VsdCBzaXplOiAwCity
ZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNpbmdsZSBmaWxlCi1IZWxs
bworcmVzdWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KIFRlc3QgcmVhZGluZyBhIGJsb2IgY29u
dGFpbmluZyBzaW5nbGUgdGV4dAotRmlyc3QKK3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6IEZpcnN0
CiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xlIHRleHQgYXMgZGF0YSBVUkwK
LWRhdGE6YmFzZTY0LFJtbHljM1E9CityZXN1bHQgc2l6ZTogMjAKK3Jlc3VsdDogZGF0YTpiYXNl
NjQsUm1seWMzUT0KIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgdGV4dCBh
cyBkYXRhIFVSTCAob3B0aW9uYWwgY29udGVudCB0eXBlIHByb3ZpZGVkKQorcmVzdWx0IHNpemU6
IDI5CiByZXN1bHQ6IGRhdGE6dHlwZS9mb287YmFzZTY0LFJtbHljM1E9CiBUZXN0IHJlYWRpbmcg
YSBibG9iIGNvbnRhaW5pbmcgc2xpY2VkIGZpbGUKLW9uZGVyCityZXN1bHQgc2l6ZTogNQorcmVz
dWx0OiBvbmRlcgogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNsaWNlZCB0ZXh0Ci1p
cnN0CityZXN1bHQgc2l6ZTogNAorcmVzdWx0OiBpcnN0CiBUZXN0IHJlYWRpbmcgYSBibG9iIGNv
bnRhaW5pbmcgbXVsdGlwbGUgZmlsZXMKLUhlbGxvV29uZGVyZnVsV29ybGQKK3Jlc3VsdCBzaXpl
OiAxOQorcmVzdWx0OiBIZWxsb1dvbmRlcmZ1bFdvcmxkCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNv
bnRhaW5pbmcgbXVsdGlwbGUgdGV4dHMKLUZpcnN0U2Vjb25kVGhpcmQKK3Jlc3VsdCBzaXplOiAx
NgorcmVzdWx0OiBGaXJzdFNlY29uZFRoaXJkCiBUZXN0IHJlYWRpbmcgYSBoeWJyaWQgYmxvYgot
Rmlyc3RIZWxsb1NlY29uZFdvbmRlcmZ1bFdvcmxkVGhpcmQKK3Jlc3VsdCBzaXplOiAzNQorcmVz
dWx0OiBGaXJzdEhlbGxvU2Vjb25kV29uZGVyZnVsV29ybGRUaGlyZAogVGVzdCByZWFkaW5nIGEg
c2xpY2VkIGh5YnJpZCBibG9iCi1sbG9TZWNvbmRXb24KK3Jlc3VsdCBzaXplOiAxMgorcmVzdWx0
OiBsbG9TZWNvbmRXb24KIFRlc3QgcmVhZGluZyBhIHRyaXBsZS1zbGljZWQgaHlicmlkIGJsb2IK
LW9uZFdvbmRlcmZ1bFdvcmxkVGhpcmRGb29sb1NlYworcmVzdWx0IHNpemU6IDMwCityZXN1bHQ6
IG9uZFdvbmRlcmZ1bFdvcmxkVGhpcmRGb29sb1NlYwogRE9ORQogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1h
c3luYy1leHBlY3RlZC50eHQKaW5kZXggYTQ5NzY1OC4uMmZkNzc2NyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhwZWN0
ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1m
aWxlLWFzeW5jLWV4cGVjdGVkLnR4dApAQCAtMSw1ICsxLDExIEBACiAKIFJlY2VpdmVkIGZpbGVz
IGluIHdvcmtlcgorVGVzdCByZWFkaW5nIGEgbm9uLWV4aXN0ZW50IGZpbGUgYXMgYXJyYXkgYnVm
ZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBlcnJvciBldmVudAorcmVhZHlTdGF0ZTogMgor
ZXJyb3IgY29kZTogOAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgbm9u
LWV4aXN0ZW50IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQg
ZXJyb3IgZXZlbnQKQEAgLTE4LDYgKzI0LDE1IEBAIFJlY2VpdmVkIGVycm9yIGV2ZW50CiByZWFk
eVN0YXRlOiAyCiBlcnJvciBjb2RlOiA4CiBSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJl
YWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2Vp
dmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAor
cmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDAKK3Jlc3VsdDogCitSZWNlaXZlZCBsb2FkZW5k
IGV2ZW50CiBUZXN0IHJlYWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFk
eVN0YXRlOiAwCiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKQEAgLTQ1LDYgKzYwLDE1IEBAIHJl
YWR5U3RhdGU6IDIKIHJlc3VsdCBzaXplOiA1CiByZXN1bHQ6IGRhdGE6CiBSZWNlaXZlZCBsb2Fk
ZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVh
ZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNl
aXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBI
ZWxsbworUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBh
cyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQK
QEAgLTU0LDYgKzc4LDE1IEBAIHJlYWR5U3RhdGU6IDIKIHJlc3VsdCBzaXplOiA1CiByZXN1bHQ6
IEhlbGxvCiBSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmls
ZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVu
dAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVz
dWx0IHNpemU6IDkKK3Jlc3VsdDogMHgwIDB4MSAweDIgMHg4MCAweDgxIDB4ODIgMHhmZCAweGZl
IDB4ZmYKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxl
IGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGxvYWRzdGFydCBldmVu
dApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFk
LWZpbGUtc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMv
d29ya2VyLXJlYWQtZmlsZS1zeW5jLWV4cGVjdGVkLnR4dAppbmRleCAzNjkxYTU4Zjk2NmJiNjNh
YTU4MWE1YWFhZjRjMmIyMWZmNDQ1N2JhLi5hMDRkN2Q0NzM2M2MxMjJiMzQzNTIxOWQzZjY3YjFk
NWE0MjE4YjFmIDEwMDY0NApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTYxNwp6Y21jSlAmMkVE
KjQ5RCswZyYkem09c3YyOVhfdTxCSjlJXjJ1eGt+SCpgbCNmQzIzM2ReZHBSPWY+eUxiPzJ0JVMK
ekBYeismSGtPWW9XTHUwT1ZKUypyOUNuJWJMfTNMZTYkcXA7PExeTCRYTUJKO2xNMTtpelhkOVIz
UEpZfVpJWXlMCnpGZUo9WnhLPUZWS3BhP2ohRSkrX2lePGFVe2ZuUng8NWNXSERwNXI0ampBd0x5
fUBGdEQxYHBKMUNSckx0PTBhdAp6Z2FZTHpSVXB8bkkkJkdCclVNUHhudXhrIS01OH1qLUNUX3JI
VFFkeXk/JUVaQnxzUVYyamxffjR3ej81KTJ0b1MKekJFJVVePCo5ZXpYcyZCekooI2xXK3kqLXo3
VSFsb0w+b2p+TTRMJmhGVnQ3ayUoKVMoQ0Z2ZjUpcGI3WkApPSNVCnpgKjFYTlZlR3dfWmdyJjBk
IVVkJDUtSDAwWXFUeH1jMShTZzE2ZnZ6ZTNqe2NVZSlNbzhOMkZhLX58MnklPW5oMwpzRWJoKWU/
Qk1BJno4I3VARlpXbXJjRCt0MTxCdClRSUomIWZveFJDdU14THlSd3tSYCUyWmJVYV95N09eCgpk
ZWx0YSAxNTgKemNtY2J9YkFXdzwtTmVjN18+d2E3NXtvSm9pYzUrel5VfUV7emhxUGFWdEt4bCNG
OWpYJj4kWiE1V3tObjEhbFIpCnpYUE5qVzJlNjF2V0BxTT9NYipXPyRhSlhUUH4pTWQhK1FfIUpH
PnZMU3tiTlBkYV5JOEZlNFhgcjRQaUNsaD9CZApjZ0dJbHZzNiVDOHdCK1JkdGIhbWxsaH1rT1lx
T35WME94QnB4Y35xRgoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5t
ayBiL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawppbmRleCAwODE2MTEzLi5iMzkyMWZl
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsKKysrIGIvV2ViQ29y
ZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCkBAIC0xMDAsNiArMTAwLDcgQEAgTE9DQUxfU1JDX0ZJ
TEVTICs9IFwKIAliaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwIFwKIAliaW5kaW5ncy9q
cy9KU0V2ZW50VGFyZ2V0LmNwcCBcCiAJYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCBc
CisJYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvanMvSlNH
ZW9sb2NhdGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25D
dXN0b20uY3BwIFwKIAliaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcCBc
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAyZTFiYWM3Li44MTU1OWNkIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTYxNyw2ICs2MTcsNyBAQCBT
RVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5j
cHAKICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAogICAgIGJpbmRpbmdzL2pzL0pT
RXhjZXB0aW9uQmFzZS5jcHAKKyAgICBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3Bw
CiAgICAgYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9q
cy9KU0hpc3RvcnlDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3Bw
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDg2YWEzMGEuLjkzNGFmODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTAtMTAtMTUgIEppYW4gTGkgIDxq
aWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4gRmlsZVJlYWRlciBhbmQg
RmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ3NjkxCisKKyAgICAgICAgVGVzdCBjYXNlcyBoYXZlIGJlZW4gYWRkZWQgdG8gcmVh
ZC1maWxlLXRlc3QtY2FzZXMuanMuCisKKyAgICAgICAgKiBBbmRyb2lkLmpzY2JpbmRpbmdzLm1r
OgorICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgor
ICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAg
KiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNGaWxlUmVhZGVy
Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJl
YWRlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEZpbGVSZWFkZXI6OnJlc3VsdEFj
Y2Vzc29yR2V0dGVyKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOiBBbHNvIGNo
YW5nZWQgbm90IHRvIHJldHVybiBpbmNvbXBsZXRlIHJlc3VsdAorICAgICAgICB3aGVuIHJlYWRp
bmcgYXMgdGV4dC4gVGhpcyBpcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHNwZWMuCisgICAg
ICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNBcnJheUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpGaWxlUmVhZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVJlYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6
c3RyaW5nUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmNvbnZlcnRUb1Rl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTCk6Cisg
ICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVh
ZGVyOjplcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkVHlwZSk6Cisg
ICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmlkbDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVS
ZWFkZXJTeW5jLmNwcDogUmVtb3ZlZCBGaWxlUmVhZGVyU3luY0xvYWRlciBhbmQgbW92ZSBpdHMK
KyAgICAgICAgZnVuY3Rpb25hbGl0aWVzIHRvIEZpbGVSZWFkZXJTeW5jLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVJlYWRlclN5bmM6OkZpbGVSZWFkZXJTeW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGVSZWFkZXJTeW5jOjpyZWFkQXNBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpG
aWxlUmVhZGVyU3luYzo6cmVhZEFzRGF0YVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVh
ZGVyU3luYzo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6ZGlkUmVj
ZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJTeW5jOjpkaWRSZWNl
aXZlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6ZGlkRmluaXNoTG9h
ZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6ZGlkRmFpbCk6CisgICAg
ICAgICogZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlclN5bmM6Omhhc0Vycm9yKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlk
bDoKKyAgICAgICAgKiBsb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oOgorCiAyMDEwLTEw
LTE1ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRlbGUgUGV0ZXJzb24uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIv
V2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA3YjhjMTYxLi42YjUwOTZlIDEwMDY0NAotLS0g
YS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAg
LTcyNCw2ICs3MjQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFz
ZS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmggXAorCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5o
IFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKaW5kZXggOGQ3MDI4My4uNDM4MmM1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTYwMSw2ICs2MDEsNyBAQAogICAgICAg
ICAgICAgJ2JpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuaCcsCiAgICAgICAgICAgICAnYmluZGlu
Z3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNF
eGNlcHRpb25CYXNlLmgnLAorICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1
c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20u
Y3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uaCcsCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBmYTczNDUwLi5j
MmRkNDEyIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTQxOCw2ICs0MTgsNyBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RXZlbnRDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRTb3Vy
Y2VDb25zdHJ1Y3Rvci5jcHAgXAorICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVh
ZGVyQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxBbGxDb2xs
ZWN0aW9uQ3VzdG9tLmNwcAogCiAgICAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1ZJREVPPTEp
IHsKQEAgLTUxNyw2ICs1MTgsNyBAQCB2OCB7CiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRT
b3VyY2VDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAg
XAogICAgICAgICBiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwIFwKKyAgICAgICAgYmlu
ZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pT
R2VvbG9jYXRpb25DdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNIaXN0b3J5Q3Vz
dG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSFRNTEFwcGxldEVsZW1lbnRDdXN0b20u
Y3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2og
Yi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGVjMjBhZmYuLmU5
MGVkY2QgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNTU5NTQsNiAr
NTU5NTQsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRmlsZVJlYWRlckN1c3RvbS5jcHAiDQorCQkJCQk+
DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGlu
Z3NcanNcSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCQk8RmlsZUNvbmZp
Z3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IGMzMjNjOTQuLmYyMzk3MzMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC03NTEsNiArNzUxLDcgQEAKIAkJMkVERjM2OUMxMjJDOTRCNDAwMkY3RDRFIC8q
IEZpbGVSZWFkZXJTeW5jLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFREYzNjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAg
Ki87IH07CiAJCTJFREYzNjlEMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERjM2OUIxMjJD
OTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi87IH07CiAJCTJFREYzNjlGMTIyQzk0
QzgwMDJGN0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRURGMzY5RTEyMkM5NEM4MDAyRjdENEUgLyogRmlsZUV4Y2Vw
dGlvbi5oICovOyB9OworCQkyRUVCMjA2QzEyNjkxNEYxMDA5NTM4MTAgLyogSlNGaWxlUmVhZGVy
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDJFRUIyMDZCMTI2OTE0RjEwMDk1MzgxMCAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwICovOyB9
OwogCQkyRUYxQkZFQTEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRUYxQkZFODEyMUM5RjQyMDBD
Mjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgKi87IH07CiAJCTJFRjFCRkVCMTIxQzlGNDIwMEMyNzYy
NyAvKiBGaWxlU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRUYxQkZFOTEyMUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTJFRjFCRkY3MTIxQ0Iw
QkQwMEMyNzYyNyAvKiBBc3luY0ZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRjFCRkY2MTIxQ0IwQkQwMEMyNzYyNyAvKiBBc3luY0Zp
bGVTdHJlYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtNjc2Niw2ICs2NzY3LDcgQEAKIAkJMkVERjM2OUExMjJDOTRCNDAwMkY3RDRFIC8qIEZp
bGVSZWFkZXJTeW5jLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZp
bGVSZWFkZXJTeW5jLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRURGMzY5QjEyMkM5NEI0MDAyRjdENEUgLyogRmls
ZVJlYWRlclN5bmMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZVJlYWRl
clN5bmMuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkVERjM2OUUxMjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNlcHRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsZUV4Y2VwdGlvbi5oOyBwYXRo
ID0gZmlsZWFwaS9GaWxlRXhjZXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTJFRUIyMDZCMTI2OTE0RjEwMDk1MzgxMCAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVGMUJGRTgxMjFDOUY0MjAwQzI3NjI3IC8q
IEZpbGVTdHJlYW0uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRmls
ZVN0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFRjFCRkU5MTIxQzlG
NDIwMEMyNzYyNyAvKiBGaWxlU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVGMUJGRjYx
MjFDQjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBBc3luY0ZpbGVTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE2ODU1LDYgKzE2ODU3LDcgQEAKIAkJCQk4OTNDNDg1MjEyNDk5QjA2MDAyQjNEODYg
LyogSlNFbnRyeVN5bmNDdXN0b20uY3BwICovLAogCQkJCUJDRUZBRjREMEMzMTdFNjkwMEZBODFG
NiAvKiBKU0V2ZW50Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzI3NUI4MDExQzVEMkI0MDBDOTIwNkMg
LyogSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgKi8sCisJCQkJMkVFQjIwNkIxMjY5MTRGMTAwOTUz
ODEwIC8qIEpTRmlsZVJlYWRlckN1c3RvbS5jcHAgKi8sCiAJCQkJNDlFRUNGNzIxMDUwOEQ5QzAw
MDk5RkFCIC8qIEpTRmxvYXQzMkFycmF5Q3VzdG9tLmNwcCAqLywKIAkJCQlGRTgwRDdBNjBFOUMx
RUQyMDAwRDZGNzUgLyogSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgKi8sCiAJCQkJQkNFN0IxOTIw
RDRFODY5NjAwNzVBNTM5IC8qIEpTSGlzdG9yeUN1c3RvbS5jcHAgKi8sCkBAIC0yMzYzMSw2ICsy
MzYzNCw3IEBACiAJCQkJOTdERDREODYwRkRGNEQ2RTAwRUNGOUE0IC8qIFhTU0F1ZGl0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNEZBM0I5MEExMjVDRDEyMjAwMzAwQkFEIC8qIEluc3BlY3Rv
clN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3MjhDMzEzMTI2OEU0MzkwMDQxRTg5QiAv
KiBNYXJrdXBBY2N1bXVsYXRvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkyRUVCMjA2QzEyNjkx
NEYxMDA5NTM4MTAgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
KTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwIGIvV2Vi
Q29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjg0NDMyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiSlNGaWxlUmVhZGVy
LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIK
KyNpbmNsdWRlICJKU0FycmF5QnVmZmVyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworSlNWYWx1ZSBKU0ZpbGVSZWFkZXI6OnJlc3VsdChFeGVjU3Rh
dGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgRmlsZVJlYWRlciogaW1wID0gaW1wbCgpOworICAgIHN3
aXRjaCAoaW1wLT5yZWFkVHlwZSgpKSB7CisgICAgY2FzZSBGaWxlUmVhZGVyOjpSZWFkRmlsZUFz
QXJyYXlCdWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBX
VEY6OmdldFB0cihpbXAtPmFycmF5QnVmZmVyUmVzdWx0KCkpKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4ganNPd25lZFN0cmluZ09yTnVsbChleGVjLCBpbXAtPnN0cmluZ1Jlc3VsdCgp
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShCTE9CKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVh
ZGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1
c3RvbS5jcHAKaW5kZXggNWY0ZmI1Ny4uMGY1NmU3MCAxMDA3NTUKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwCkBAIC0yOSw5ICsyOSwxMyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCTE9CKQorCiAjaW5jbHVk
ZSAiVjhGaWxlUmVhZGVyLmgiCiAKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiVjhBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw0ICs2MSwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhGaWxlUmVhZGVyOjpjb25zdHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMm
IGFyZwogICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhGaWxlUmVhZGVyOjpyZXN1bHRBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmlu
Zz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMo
IkRPTS5GaWxlUmVhZGVyLnJlc3VsdC5fZ2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOworICAgIEZpbGVSZWFkZXIqIGltcCA9IFY4RmlsZVJl
YWRlcjo6dG9OYXRpdmUoaG9sZGVyKTsKKyAgICBzd2l0Y2ggKGltcC0+cmVhZFR5cGUoKSkgewor
ICAgIGNhc2UgRmlsZVJlYWRlcjo6UmVhZEZpbGVBc0FycmF5QnVmZmVyOgorICAgICAgICByZXR1
cm4gdG9WOChpbXAtPmFycmF5QnVmZmVyUmVzdWx0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiB2OFN0cmluZ09yTnVsbChpbXAtPnN0cmluZ1Jlc3VsdCgpKTsKKyAgICB9Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwIGIvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuY3BwCmluZGV4IDBiN2I0NmQuLjM2NmIwZmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5j
cHAKQEAgLTM0LDYgKzM0LDcgQEAKIAogI2luY2x1ZGUgIkZpbGVSZWFkZXIuaCIKIAorI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5jbHVkZSAiQmxvYi5o
IgogI2luY2x1ZGUgIkJsb2JVUkwuaCIKQEAgLTg2LDYgKzg3LDE2IEBAIHZvaWQgRmlsZVJlYWRl
cjo6c3RvcCgpCiAgICAgdGVybWluYXRlKCk7CiB9CiAKK3ZvaWQgRmlsZVJlYWRlcjo6cmVhZEFz
QXJyYXlCdWZmZXIoQmxvYiogYmxvYikKK3sKKyAgICBpZiAoIWJsb2IpCisgICAgICAgIHJldHVy
bjsKKworICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVhZGluZyBhcyBhcnJheSBidWZm
ZXI6ICVzICVzXG4iLCBibG9iLT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5p
c0ZpbGUoKSA/IHN0YXRpY19jYXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkg
OiAiIik7CisKKyAgICByZWFkSW50ZXJuYWwoYmxvYiwgUmVhZEZpbGVBc0FycmF5QnVmZmVyKTsK
K30KKwogdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmcoQmxvYiogYmxvYikKIHsK
ICAgICBpZiAoIWJsb2IpCkBAIC0yMDAsNiArMjExLDE2IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZGlk
UmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogICAgIGZp
cmVFdmVudChldmVudE5hbWVzKCkubG9hZHN0YXJ0RXZlbnQpOwogCiAgICAgbV90b3RhbEJ5dGVz
ID0gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7CisKKyAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPihtX3RvdGFsQnl0ZXMpID4gIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmcgbG9uZz4oc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKSkgewor
ICAgICAgICBmYWlsZWQoNTAwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICht
X3JlYWRUeXBlICE9IFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFt
X3Jhd0RhdGEpOworICAgICAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX3RvdGFsQnl0ZXMpLCAxKTsKKyAgICB9CiB9CiAKIHZvaWQgRmls
ZVJlYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2Vp
dmVkKQpAQCAtMjE0LDEwICsyMzUsMTAgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRSZWNlaXZlRGF0
YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCiAgICAgY2FzZSBSZWFkRmls
ZUFzQmluYXJ5U3RyaW5nOgogICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGRhdGEsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNl
IFJlYWRGaWxlQXNBcnJheUJ1ZmZlcjoKICAgICBjYXNlIFJlYWRGaWxlQXNUZXh0OgogICAgIGNh
c2UgUmVhZEZpbGVBc0RhdGFVUkw6Ci0gICAgICAgIG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7Ci0gICAgICAgIG1faXNSYXdEYXRh
Q29udmVydGVkID0gZmFsc2U7CisgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9y
YXdEYXRhLT5kYXRhKCkpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fYnl0ZXNMb2FkZWQpLCBk
YXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yOTYs
MjkgKzMxNyw0MyBAQCBGaWxlUmVhZGVyOjpSZWFkeVN0YXRlIEZpbGVSZWFkZXI6OnJlYWR5U3Rh
dGUoKSBjb25zdAogICAgIHJldHVybiBFTVBUWTsKIH0KIAotU3RyaW5nIEZpbGVSZWFkZXI6OnJl
c3VsdCgpCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBGaWxlUmVhZGVyOjphcnJheUJ1ZmZlclJl
c3VsdCgpIGNvbnN0CiB7Ci0gICAgLy8gSWYgcmVhZGluZyBhcyBiaW5hcnkgc3RyaW5nLCB3ZSBj
YW4gcmV0dXJuIHRoZSByZXN1bHQgaW1tZWRpYXRlbHkuCi0gICAgaWYgKG1fcmVhZFR5cGUgPT0g
UmVhZEZpbGVBc0JpbmFyeVN0cmluZykKLSAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmlu
ZygpOworICAgIEFTU0VSVChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNBcnJheUJ1ZmZlcik7CiAK
LSAgICAvLyBJZiB3ZSBhbHJlYWR5IGNvbnZlcnQgdGhlIHJhdyBkYXRhIHJlY2VpdmVkIHNvIGZh
ciwgd2UgY2FuIHJldHVybiB0aGUgcmVzdWx0IG5vdy4KLSAgICBpZiAobV9pc1Jhd0RhdGFDb252
ZXJ0ZWQpCi0gICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKLSAgICBtX2lzUmF3
RGF0YUNvbnZlcnRlZCA9IHRydWU7CisgICAgLy8gQXJyYXkgYnVmZmVyIHJlc3VsdCBpcyBvbmx5
IHNlcnZlZCB3aGVuIHdlIHJlY2VpdmUgYWxsIHRoZSBkYXRhIHN1Y2Nlc3NmdWxseS4KKyAgICBp
ZiAobV9zdGF0ZSAhPSBDb21wbGV0ZWQgfHwgbV9lcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBpZiAobV9yZWFkVHlwZSA9PSBSZWFkRmlsZUFzVGV4dCkKLSAgICAgICAgY29udmVydFRv
VGV4dCgpOwotICAgIC8vIEZvciBkYXRhIFVSTCwgd2Ugb25seSBkbyB0aGUgY292ZXJzaW9uIHVu
dGlsIHdlIHJlY2VpdmUgYWxsIHRoZSByYXcgZGF0YS4KLSAgICBlbHNlIGlmIChtX3JlYWRUeXBl
ID09IFJlYWRGaWxlQXNEYXRhVVJMICYmIG1fc3RhdGUgPT0gQ29tcGxldGVkKQotICAgICAgICBj
b252ZXJ0VG9EYXRhVVJMKG1fcmF3RGF0YSwgbV9maWxlVHlwZSwgbV9idWlsZGVyKTsKKyAgICBy
ZXR1cm4gbV9yYXdEYXRhOworfQorCitTdHJpbmcgRmlsZVJlYWRlcjo6c3RyaW5nUmVzdWx0KCkK
K3sKKyAgICBBU1NFUlQobV9yZWFkVHlwZSAhPSBSZWFkRmlsZUFzQXJyYXlCdWZmZXIpOworCisg
ICAgLy8gSWYgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4gYW4gZW1wdHkgcmVzdWx0LgorICAgIGlm
IChtX2Vycm9yKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICAvLyBEbyB0aGUgY292
ZXJzaW9uIGlmIG5vdCB5ZXQgYW5kIHdlIHJlY2VpdmUgYWxsIHRoZSByYXcgZGF0YS4KKyAgICBp
ZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYgIW1faXNSYXdEYXRhQ29udmVydGVkICYmIG1fcmVh
ZFR5cGUgIT0gUmVhZEZpbGVBc0JpbmFyeVN0cmluZykgeworICAgICAgICBpZiAobV9yZWFkVHlw
ZSA9PSBSZWFkRmlsZUFzVGV4dCkKKyAgICAgICAgICAgIGNvbnZlcnRUb1RleHQoKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9yZWFkVHlwZSA9PSBSZWFkRmlsZUFzRGF0
YVVSTCk7CisgICAgICAgICAgICBjb252ZXJ0VG9EYXRhVVJMKHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihtX3Jhd0RhdGEtPmRhdGEoKSksIG1fcmF3RGF0YS0+Ynl0ZUxlbmd0aCgpLCBtX2ZpbGVU
eXBlLCBtX2J1aWxkZXIpOworICAgICAgICB9CisKKyAgICAgICAgbV9pc1Jhd0RhdGFDb252ZXJ0
ZWQgPSB0cnVlOworICAgIH0KIAogICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKIH0K
IAogdm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0KCkKIHsKLSAgICBpZiAoIW1fcmF3RGF0
YS5zaXplKCkpIHsKKyAgICBpZiAoIW1fcmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKSB7CiAgICAgICAg
IG1fYnVpbGRlci5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzMxLDE4ICsz
NjYsMTggQEAgdm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0KCkKICAgICBpZiAoIW1fZGVj
b2RlcikKICAgICAgICAgbV9kZWNvZGVyID0gVGV4dFJlc291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0
ZXh0L3BsYWluIiwgbV9lbmNvZGluZy5pc1ZhbGlkKCkgPyBtX2VuY29kaW5nIDogVVRGOEVuY29k
aW5nKCkpOwogICAgIG1fYnVpbGRlci5jbGVhcigpOwotICAgIG1fYnVpbGRlci5hcHBlbmQobV9k
ZWNvZGVyLT5kZWNvZGUoJm1fcmF3RGF0YS5hdCgwKSwgbV9yYXdEYXRhLnNpemUoKSkpOworICAg
IG1fYnVpbGRlci5hcHBlbmQobV9kZWNvZGVyLT5kZWNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hh
cio+KG1fcmF3RGF0YS0+ZGF0YSgpKSwgbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCkpKTsKIAogICAg
IGlmIChtX3N0YXRlID09IENvbXBsZXRlZCAmJiAhbV9lcnJvcikKICAgICAgICAgbV9idWlsZGVy
LmFwcGVuZChtX2RlY29kZXItPmZsdXNoKCkpOwogfQogCi12b2lkIEZpbGVSZWFkZXI6OmNvbnZl
cnRUb0RhdGFVUkwoY29uc3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhLCBjb25zdCBTdHJpbmcmIGZp
bGVUeXBlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQordm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0
VG9EYXRhVVJMKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBsZW4sIGNvbnN0IFN0cmluZyYgZmls
ZVR5cGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCiB7CiAgICAgYnVpbGRlci5jbGVhcigpOwog
ICAgIGJ1aWxkZXIuYXBwZW5kKCJkYXRhOiIpOwogCi0gICAgaWYgKCFyYXdEYXRhLnNpemUoKSkK
KyAgICBpZiAoIWxlbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCFmaWxlVHlwZS5pc0Vt
cHR5KCkpIHsKQEAgLTM1Miw3ICszODcsNyBAQCB2b2lkIEZpbGVSZWFkZXI6OmNvbnZlcnRUb0Rh
dGFVUkwoY29uc3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhLCBjb25zdCBTdHJpbmcmIGZpbAogICAg
ICAgICBidWlsZGVyLmFwcGVuZCgiYmFzZTY0LCIpOwogCiAgICAgVmVjdG9yPGNoYXI+IG91dDsK
LSAgICBiYXNlNjRFbmNvZGUocmF3RGF0YSwgb3V0KTsKKyAgICBiYXNlNjRFbmNvZGUoZGF0YSwg
bGVuLCBvdXQpOwogICAgIG91dC5hcHBlbmQoJ1wwJyk7CiAgICAgYnVpbGRlci5hcHBlbmQob3V0
LmRhdGEoKSk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oIGIv
V2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAppbmRleCBmOTE0ZGFkLi40YmU0YzcxIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCisrKyBiL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyLmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEJsb2I7CiBjbGFzcyBTY3JpcHRFeGVjdXRpb25D
b250ZXh0OwogY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKQEAgLTY4LDYgKzY5LDE0IEBAIHB1
YmxpYzoKICAgICAgICAgRE9ORSA9IDIKICAgICB9OwogCisgICAgZW51bSBSZWFkVHlwZSB7Cisg
ICAgICAgIFJlYWRGaWxlQXNBcnJheUJ1ZmZlciwKKyAgICAgICAgUmVhZEZpbGVBc0JpbmFyeVN0
cmluZywKKyAgICAgICAgUmVhZEZpbGVBc1RleHQsCisgICAgICAgIFJlYWRGaWxlQXNEYXRhVVJM
CisgICAgfTsKKworICAgIHZvaWQgcmVhZEFzQXJyYXlCdWZmZXIoQmxvYiopOwogICAgIHZvaWQg
cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqKTsKICAgICB2b2lkIHJlYWRBc1RleHQoQmxvYiosIGNv
bnN0IFN0cmluZyYgZW5jb2RpbmcgPSAiIik7CiAgICAgdm9pZCByZWFkQXNEYXRhVVJMKEJsb2Iq
KTsKQEAgLTc2LDEyICs4NSwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydCgpOwogCiAgICAg
UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxGaWxlRXJyb3I+
IGVycm9yKCkgeyByZXR1cm4gbV9lcnJvcjsgfQotICAgIFN0cmluZyByZXN1bHQoKTsKKyAgICBQ
YXNzUmVmUHRyPEZpbGVFcnJvcj4gZXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9Cisg
ICAgUmVhZFR5cGUgcmVhZFR5cGUoKSBjb25zdCB7IHJldHVybiBtX3JlYWRUeXBlOyB9CisgICAg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gYXJyYXlCdWZmZXJSZXN1bHQoKSBjb25zdDsKKyAgICBT
dHJpbmcgc3RyaW5nUmVzdWx0KCk7CiAKICAgICAvLyBIZWxwZXIgbWV0aG9kcywgYWxzbyB1c2Vk
IGJ5IEZpbGVSZWFkZXJTeW5jLgogICAgIHN0YXRpYyBFeGNlcHRpb25Db2RlIGh0dHBTdGF0dXND
b2RlVG9FeGNlcHRpb25Db2RlKGludCBodHRwU3RhdHVzQ29kZSk7Ci0gICAgc3RhdGljIHZvaWQg
Y29udmVydFRvRGF0YVVSTChjb25zdCBWZWN0b3I8Y2hhcj4mIHJhd0RhdGEsIGNvbnN0IFN0cmlu
ZyYgZmlsZVR5cGUsIFN0cmluZ0J1aWxkZXImKTsKKyAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VG9E
YXRhVVJMKGNvbnN0IGNoYXIqLCBzaXplX3QsIGNvbnN0IFN0cmluZyYgZmlsZVR5cGUsIFN0cmlu
Z0J1aWxkZXImKTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdAogICAgIHZpcnR1YWwgYm9vbCBj
YW5TdXNwZW5kKCkgY29uc3Q7CkBAIC0xMDksMTEgKzEyMCw2IEBAIHB1YmxpYzoKICAgICBERUZJ
TkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGxvYWRlbmQpOwogCiBwcml2YXRlOgotICAgIGVu
dW0gUmVhZFR5cGUgewotICAgICAgICBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nLAotICAgICAgICBS
ZWFkRmlsZUFzVGV4dCwKLSAgICAgICAgUmVhZEZpbGVBc0RhdGFVUkwKLSAgICB9OwogICAgIGVu
dW0gSW50ZXJuYWxTdGF0ZSB7CiAgICAgICAgIE5vbmUsCiAgICAgICAgIFN0YXJ0aW5nLApAQCAt
MTM3LDcgKzE0Myw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBmaXJlRXJyb3JFdmVudChpbnQgaHR0
cFN0YXR1c0NvZGUpOwogICAgIHZvaWQgZmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlw
ZSk7CiAgICAgdm9pZCBjb252ZXJ0VG9UZXh0KCk7Ci0gICAgdm9pZCBjb252ZXJ0VG9EYXRhVVJM
KCk7CiAKICAgICBJbnRlcm5hbFN0YXRlIG1fc3RhdGU7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1f
ZXZlbnRUYXJnZXREYXRhOwpAQCAtMTQ5LDggKzE1NCw4IEBAIHByaXZhdGU6CiAKICAgICBTdHJp
bmdCdWlsZGVyIG1fYnVpbGRlcjsKIAotICAgIC8vIFRoZSByYXcgZGF0YS4gV2UgaGF2ZSB0byBr
ZWVwIHRyYWNrIG9mIGFsbCB0aGUgcmF3IGRhdGEgZm9yIGl0IHRvIGJlIGNvbnZlcnRlZCB0byB0
ZXh0IG9yIGRhdGEgVVJMIGRhdGEuCi0gICAgVmVjdG9yPGNoYXI+IG1fcmF3RGF0YTsKKyAgICAv
LyBXZSBoYXZlIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHRoZSByYXcgZGF0YSBmb3IgYWxsIHJlYWRp
bmdzIG90aGVyIHRoYW4gYmluYXJ5IHN0cmluZy4KKyAgICBSZWZQdHI8QXJyYXlCdWZmZXI+IG1f
cmF3RGF0YTsKICAgICBib29sIG1faXNSYXdEYXRhQ29udmVydGVkOwogCiAgICAgLy8gVGhlIGRl
Y29kZXIgdXNlZCB0byBkZWNvZGUgdGhlIHRleHQgZGF0YS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyLmlkbCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmlkbApp
bmRleCBmZWJiMjMxLi5lYmM2ZmZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5pZGwKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaWRsCkBAIC00NCw2ICs0
NCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVk
IHNob3J0IHJlYWR5U3RhdGU7CiAKICAgICAgICAgLy8gYXN5bmMgcmVhZCBtZXRob2RzCisgICAg
ICAgIHZvaWQgcmVhZEFzQXJyYXlCdWZmZXIoaW4gQmxvYiBibG9iKTsKICAgICAgICAgdm9pZCBy
ZWFkQXNCaW5hcnlTdHJpbmcoaW4gQmxvYiBibG9iKTsKICAgICAgICAgdm9pZCByZWFkQXNUZXh0
KGluIEJsb2IgYmxvYiwgaW4gW09wdGlvbmFsXSBET01TdHJpbmcgZW5jb2RpbmcpOwogICAgICAg
ICB2b2lkIHJlYWRBc0RhdGFVUkwoaW4gQmxvYiBibG9iKTsKQEAgLTUxLDcgKzUyLDcgQEAgbW9k
dWxlIGh0bWwgewogICAgICAgICB2b2lkIGFib3J0KCk7CiAKICAgICAgICAgLy8gZmlsZSBkYXRh
Ci0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydFNjcmlwdFN0cmluZ10gRE9NU3Ry
aW5nIHJlc3VsdDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21dIERPTU9iamVj
dCByZXN1bHQ7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZpbGVFcnJvciBlcnJvcjsK
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcCBiL1dlYkNv
cmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKaW5kZXggNjQyNWJjZi4uZTliNDQ2NyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcAorKysgYi9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRl
ICJGaWxlUmVhZGVyU3luYy5oIgogCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRl
ICJCYXNlNjQuaCIKICNpbmNsdWRlICJCbG9iLmgiCiAjaW5jbHVkZSAiQmxvYlVSTC5oIgpAQCAt
NDUsNzYgKzQ2LDI1IEBACiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1
ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVy
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmlsZVJlYWRlclN5bmNMb2FkZXIgOiBw
dWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgLy8gSWYgdGhlIG91
dHB1dCByZXN1bHQgaXMgcHJvdmlkZWQsIHVzZSBpdC4gT3RoZXJ3aXNlLCBzYXZlIGl0IGFzIHRo
ZSByYXcgZGF0YS4KLSAgICBGaWxlUmVhZGVyU3luY0xvYWRlcihTdHJpbmdCdWlsZGVyKik7Ci0K
LSAgICAvLyBSZXR1cm5zIHRoZSBodHRwIHN0YXR1cyBjb2RlLgotICAgIHZvaWQgc3RhcnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEV4Y2VwdGlvbkNv
ZGUmKTsKLQotICAgIC8vIFRocmVhZGFibGVMb2FkZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZvaWQg
ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgdmlydHVhbCB2b2lk
IGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKLSAgICB2aXJ0dWFs
IHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0KLSAgICBjb25zdCBWZWN0b3I8
Y2hhcj4mIHJhd0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jhd0RhdGE7IH0KLQotcHJpdmF0ZToK
LSAgICAvLyBUaGUgb3V0cHV0IHJlc3VsdC4gVGhlIGNhbGxlciBwcm92aWRlcyB0aGlzIGluIG9y
ZGVyIHRvIGxvYWQgdGhlIGJpbmFyeSBkYXRhIGRpcmVjdGx5LgotICAgIFN0cmluZ0J1aWxkZXIq
IG1fYnVpbGRlcjsKLQotICAgIC8vIFRoZSByYXcgZGF0YS4gVGhlIGNhbGxlciBkb2VzIG5vdCBw
cm92aWRlIHRoZSBhYm92ZSBvdXRwdXQgcmVzdWx0IGFuZCB3ZSBuZWVkIHRvIHNhdmUgaXQgaGVy
ZS4KLSAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOwotCi0gICAgaW50IG1faHR0cFN0YXR1c0Nv
ZGU7ICAgIAotfTsKLQotRmlsZVJlYWRlclN5bmNMb2FkZXI6OkZpbGVSZWFkZXJTeW5jTG9hZGVy
KFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpCi0gICAgOiBtX2J1aWxkZXIoYnVpbGRlcikKK0ZpbGVS
ZWFkZXJTeW5jOjpGaWxlUmVhZGVyU3luYygpCisgICAgOiBtX3JlYWRUeXBlKFJlYWRBc0JpbmFy
eVN0cmluZykKKyAgICAsIG1fdG90YWxMb2FkZWQoMCkKICAgICAsIG1faHR0cFN0YXR1c0NvZGUo
MCkKIHsKIH0KIAotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6c3RhcnQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IEZp
bGVSZWFkZXJTeW5jOjpyZWFkQXNBcnJheUJ1ZmZlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
LSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOwotICAgIG9wdGlvbnMuc2VuZExv
YWRDYWxsYmFja3MgPSB0cnVlOwotICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7Ci0g
ICAgb3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOwotICAgIG9wdGlvbnMuYWxsb3dDcmVk
ZW50aWFscyA9IHRydWU7Ci0gICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBE
ZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKLQotICAgIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNv
dXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCwgKnRoaXMs
IG9wdGlvbnMpOwotCi0gICAgZWMgPSAobV9odHRwU3RhdHVzQ29kZSA9PSAyMDApID8gMCA6IEZp
bGVSZWFkZXI6Omh0dHBTdGF0dXNDb2RlVG9FeGNlcHRpb25Db2RlKG1faHR0cFN0YXR1c0NvZGUp
OwotfQotCi12b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCi17Ci0gICAgbV9odHRwU3RhdHVzQ29kZSA9
IHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCk7Ci19Ci0KLXZvaWQgRmlsZVJlYWRlclN5bmNMb2Fk
ZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkK
LXsKLSAgICBpZiAobV9idWlsZGVyKQotICAgICAgICBtX2J1aWxkZXItPmFwcGVuZChkYXRhLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKLSAgICBlbHNlCi0gICAgICAg
IG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2Vp
dmVkKSk7Ci19Ci0KLXZvaWQgRmlsZVJlYWRlclN5bmNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmco
dW5zaWduZWQgbG9uZykKLXsKLX0KKyAgICBpZiAoIWJsb2IpCisgICAgICAgIHJldHVybiAwOwog
Ci12b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3Im
KQotewotICAgIC8vIFRyZWF0IGFzIGludGVybmFsIGVycm9yLgotICAgIG1faHR0cFN0YXR1c0Nv
ZGUgPSA1MDA7CisgICAgcmVhZChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBibG9iLCBSZWFkQXNB
cnJheUJ1ZmZlciwgZWMpOworICAgIHJldHVybiBtX3Jhd0RhdGE7CiB9CiAKIFN0cmluZyBGaWxl
UmVhZGVyU3luYzo6cmVhZEFzQmluYXJ5U3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAt
MTQxLDEyICs5MSwxNSBAQCBTdHJpbmcgRmlsZVJlYWRlclN5bmM6OnJlYWRBc0RhdGFVUkwoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udAogICAgIGlmICghYmxvYikK
ICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwogCisgICAgbV9ibG9iVHlwZSA9
IGJsb2ItPnR5cGUoKTsKICAgICByZWFkKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2IsIFJl
YWRBc0RhdGFVUkwsIGVjKTsKICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAK
IHZvaWQgRmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgUmVhZFR5cGUgcmVhZFR5cGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogeworICAgIG1fcmVhZFR5cGUgPSByZWFkVHlwZTsKKwogICAgIC8vIFRoZSBi
bG9iIGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRsaW5nIGxheWVy
IGdpdmVuIHRoZSB0ZW1wb3JhcnkgcHVibGljIHVybC4KICAgICBLVVJMIHVybEZvclJlYWRpbmcg
PSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJp
dHlPcmlnaW4oKSk7CiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJM
KHVybEZvclJlYWRpbmcsIGJsb2ItPnVybCgpKTsKQEAgLTE1NCwyNSArMTA3LDE4IEBAIHZvaWQg
RmlsZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCwgQmxvYioKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmxGb3JSZWFk
aW5nKTsKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOwogCi0gICAgRmlsZVJlYWRl
clN5bmNMb2FkZXIgbG9hZGVyKChyZWFkVHlwZSA9PSBSZWFkQXNCaW5hcnlTdHJpbmcpID8gJm1f
YnVpbGRlciA6IDApOwotICAgIGxvYWRlci5zdGFydChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBy
ZXF1ZXN0LCBlYyk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JV
UkwodXJsRm9yUmVhZGluZyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47CisgICAgVGhy
ZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJh
Y2tzID0gdHJ1ZTsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOworICAgIG9wdGlv
bnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMg
PSB0cnVlOworICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gRGVueUNyb3Nz
T3JpZ2luUmVxdWVzdHM7CiAKLSAgICBzd2l0Y2ggKHJlYWRUeXBlKSB7Ci0gICAgY2FzZSBSZWFk
QXNCaW5hcnlTdHJpbmc6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gc2luY2Ugd2UgbmVlZCBu
byBjb252ZXJzaW9uLgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBSZWFkQXNUZXh0OgotICAg
ICAgICBjb252ZXJ0VG9UZXh0KGxvYWRlci5yYXdEYXRhKCkuZGF0YSgpLCBsb2FkZXIucmF3RGF0
YSgpLnNpemUoKSwgbV9idWlsZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgUmVhZEFz
RGF0YVVSTDoKLSAgICAgICAgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTChsb2FkZXIucmF3
RGF0YSgpLCBibG9iLT50eXBlKCksIG1fYnVpbGRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
CisgICAgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCByZXF1ZXN0LCAqdGhpcywgb3B0aW9ucyk7CisgCisgICAgVGhyZWFk
YWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodXJsRm9yUmVhZGluZyk7CiAKLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlYyA9IChtX2h0dHBTdGF0dXNDb2RlID09IDIw
MCkgPyAwIDogRmlsZVJlYWRlcjo6aHR0cFN0YXR1c0NvZGVUb0V4Y2VwdGlvbkNvZGUobV9odHRw
U3RhdHVzQ29kZSk7CiB9CiAKIHZvaWQgRmlsZVJlYWRlclN5bmM6OmNvbnZlcnRUb1RleHQoY29u
c3QgY2hhciogZGF0YSwgaW50IHNpemUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCkBAIC0xOTEs
NiArMTM3LDcwIEBAIHZvaWQgRmlsZVJlYWRlclN5bmM6OmNvbnZlcnRUb1RleHQoY29uc3QgY2hh
ciogZGF0YSwgaW50IHNpemUsIFN0cmluZ0J1aWxkZXImIGJ1CiAgICAgYnVpbGRlci5hcHBlbmQo
ZGVjb2Rlci0+Zmx1c2goKSk7CiB9CiAKK3ZvaWQgRmlsZVJlYWRlclN5bmM6OmRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3sKKyAgICBtX2h0dHBT
dGF0dXNDb2RlID0gcmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKTsKKworICAgIGxvbmcgbG9uZyB0
b3RhbEJ5dGVzID0gcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3RoKCk7CisKKyAgICBpZiAo
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih0b3RhbEJ5dGVzKSA+ICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgo
KSkpIHsKKyAgICAgICAgbV9odHRwU3RhdHVzQ29kZSA9IDUwMDsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChtX3JlYWRUeXBlICE9IFJlYWRBc0JpbmFyeVN0cmluZykgeworICAg
ICAgICBBU1NFUlQoIW1fcmF3RGF0YSk7CisgICAgICAgIG1fcmF3RGF0YSA9IEFycmF5QnVmZmVy
OjpjcmVhdGUoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvdGFsQnl0ZXMpLCAxKTsKKyAgICB9Cit9
CisKK3ZvaWQgRmlsZVJlYWRlclN5bmM6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc3dpdGNoIChtX3JlYWRUeXBlKSB7CisgICAgY2FzZSBSZWFkQXNCaW5hcnlT
dHJpbmc6CisgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlYWRBc0Fy
cmF5QnVmZmVyOgorICAgIGNhc2UgUmVhZEFzVGV4dDoKKyAgICBjYXNlIFJlYWRBc0RhdGFVUkw6
CisgICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpICsg
bV90b3RhbExvYWRlZCwgZGF0YSwgbGVuZ3RoUmVjZWl2ZWQpOworICAgICAgICBtX3RvdGFsTG9h
ZGVkICs9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBGaWxl
UmVhZGVyU3luYzo6ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQoreworICAgIGlmICho
YXNFcnJvcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBzd2l0Y2ggKG1fcmVhZFR5cGUpIHsK
KyAgICBjYXNlIFJlYWRBc0FycmF5QnVmZmVyOgorICAgIGNhc2UgUmVhZEFzQmluYXJ5U3RyaW5n
OgorICAgICAgICAvLyBOb3RoaW5nIHRvIGRvIHNpbmNlIHdlIG5lZWQgbm8gY29udmVyc2lvbi4K
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVhZEFzVGV4dDoKKyAgICAgICAgY29udmVydFRv
VGV4dChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX3Jhd0Rh
dGEtPmJ5dGVMZW5ndGgoKSwgbV9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
UmVhZEFzRGF0YVVSTDoKKyAgICAgICAgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTChzdGF0
aWNfY2FzdDxjb25zdCBjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX3Jhd0RhdGEtPmJ5dGVM
ZW5ndGgoKSwgbV9ibG9iVHlwZSwgbV9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEZpbGVSZWFkZXJTeW5jOjpk
aWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIC8vIFRyZWF0IGFzIGludGVybmFs
IGVycm9yLgorICAgIG1faHR0cFN0YXR1c0NvZGUgPSA1MDA7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKICAKICNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5j
LmgKaW5kZXggY2IwZTAwZC4uNDQ0Y2FmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJTeW5jLmgKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmgKQEAg
LTM0LDE2ICszNCwxOCBAQAogI2lmIEVOQUJMRShCTE9CKQogCiAjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSAiVGhyZWFkYWJs
ZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXJyYXlCdWZmZXI7CiBjbGFzcyBCbG9iOwogY2xh
c3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAotY2xhc3MgRmlsZVJlYWRlclN5bmMgOiBwdWJs
aWMgUmVmQ291bnRlZDxGaWxlUmVhZGVyU3luYz4geworY2xhc3MgRmlsZVJlYWRlclN5bmMgOiBw
dWJsaWMgUmVmQ291bnRlZDxGaWxlUmVhZGVyU3luYz4sIHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVy
Q2xpZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGaWxlUmVhZGVyU3luYz4g
Y3JlYXRlKCkKICAgICB7CkBAIC01Miw2ICs1NCwxMyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IH5GaWxlUmVhZGVyU3luYygpIHsgfQogCisgICAgLy8gVGhyZWFkYWJsZUxvYWRlckNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiwgaW50KTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKwor
ICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHJlYWRBc0FycmF5QnVmZmVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqLCBCbG9iKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyByZWFkQXNC
aW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25Db2Rl
Jik7CiAgICAgU3RyaW5nIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgewpA
QCAtNjAsMjEgKzY5LDMxIEBAIHB1YmxpYzoKICAgICBTdHJpbmcgcmVhZEFzVGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgQmxvYiosIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBTdHJpbmcgcmVhZEFzRGF0YVVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgQmxvYiosIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIGJvb2wgaGFzRXJyb3IoKSBjb25zdCB7
IHJldHVybiBtX2h0dHBTdGF0dXNDb2RlICYmIG1faHR0cFN0YXR1c0NvZGUgIT0gMjAwOyB9CisK
IHByaXZhdGU6CiAgICAgZW51bSBSZWFkVHlwZSB7CisgICAgICAgIFJlYWRBc0FycmF5QnVmZmVy
LAogICAgICAgICBSZWFkQXNCaW5hcnlTdHJpbmcsCiAgICAgICAgIFJlYWRBc1RleHQsCiAgICAg
ICAgIFJlYWRBc0RhdGFVUkwKICAgICB9OwogCi0gICAgRmlsZVJlYWRlclN5bmMoKSB7IH0KKyAg
ICBGaWxlUmVhZGVyU3luYygpOwogCiAgICAgdm9pZCByZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBCbG9iKiwgUmVhZFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIGNvbnZlcnRU
b1RleHQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUsIFN0cmluZ0J1aWxkZXImKTsKIAogICAg
IFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwogCisgICAgLy8gV2UgaGF2ZSB0byBrZWVwIHRyYWNr
IG9mIGFsbCB0aGUgcmF3IGRhdGEgZm9yIGFsbCByZWFkaW5ncyBvdGhlciB0aGFuIGJpbmFyeSBz
dHJpbmcuCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3Jhd0RhdGE7CisKICAgICBTdHJpbmcg
bV9lbmNvZGluZzsKKyAgICBTdHJpbmcgbV9ibG9iVHlwZTsKKyAgICBSZWFkVHlwZSBtX3JlYWRU
eXBlOworICAgIHVuc2lnbmVkIG1fdG90YWxMb2FkZWQ7CisgICAgaW50IG1faHR0cFN0YXR1c0Nv
ZGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5j
LmlkbAppbmRleCA3MjgxOGIxLi4zODFkNDgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlclN5bmMuaWRsCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5p
ZGwKQEAgLTM0LDYgKzM0LDggQEAgbW9kdWxlIGh0bWwgewogICAgICAgICBDYW5CZUNvbnN0cnVj
dGVkLAogICAgICAgICBOb1N0YXRpY1RhYmxlcwogICAgIF0gRmlsZVJlYWRlclN5bmMgeworICAg
ICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dF0gQXJyYXlCdWZmZXIgcmVhZEFz
QXJyYXlCdWZmZXIoaW4gQmxvYiBibG9iKQorICAgICAgICAgICAgcmFpc2VzKEZpbGVFeGNlcHRp
b24pOwogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQ29udmVydFNj
cmlwdFN0cmluZ10gRE9NU3RyaW5nIHJlYWRBc0JpbmFyeVN0cmluZyhpbiBCbG9iIGJsb2IpCiAg
ICAgICAgICAgICByYWlzZXMoRmlsZUV4Y2VwdGlvbik7CiAgICAgICAgIFtDYWxsV2l0aD1TY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBDb252ZXJ0U2NyaXB0U3RyaW5nXSBET01TdHJpbmcgcmVhZEFz
VGV4dChpbiBCbG9iIGJsb2IsIGluIFtPcHRpb25hbF0gRE9NU3RyaW5nIGVuY29kaW5nKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oIGIvV2ViQ29y
ZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oCmluZGV4IGI4YTY1ODQuLmJjZjY4YmUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaAorKysg
Yi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgKQEAgLTMxLDYgKzMxLDgg
QEAKICNpZm5kZWYgVGhyZWFkYWJsZUxvYWRlckNsaWVudF9oCiAjZGVmaW5lIFRocmVhZGFibGVM
b2FkZXJDbGllbnRfaAogCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFJlc291cmNlRXJyb3I7Cg==
</data>
<flag name="commit-queue"
          id="61253"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71496</attachid>
            <date>2010-10-21 14:54:21 -0700</date>
            <delta_ts>2010-10-25 17:40:45 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47691_4</filename>
            <type>text/plain</type>
            <size>49662</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhMWE3YmM4Li5iNzc5MjM1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMTAtMTAt
MjEgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4g
RmlsZVJlYWRlciBhbmQgRmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NjkxCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3JlYWQt
ZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1jb21tb24uanM6CisgICAgICAgIChyZWFkQmxvYkFzQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQXJy
YXlCdWZmZXJTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nU3luYyk6Cisg
ICAgICAgIChfcmVhZEJsb2JBc1RleHRTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzRGF0YVVS
TFN5bmMpOgorICAgICAgICAobG9nUmVzdWx0KToKKyAgICAgICAgKGxvYWRlZCk6CisgICAgICAg
IChfdG9TdHJpbmcpOgorICAgICAgICAoX2lzQVNDSUlTdHJpbmcpOgorICAgICAgICAoX3RvSGV4
YWRlY2ltYWwpOgorICAgICAgICAoX2dldEVsZW1lbnRBdCk6CisgICAgICAgICogZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanM6CisgICAgICAgICh0ZXN0UmVhZGlu
Z05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIpOgorICAgICAgICAodGVzdFJlYWRpbmdFbXB0
eUZpbGVBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxl
QXNBcnJheUJ1ZmZlcik6CisgICAgICAgICh0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVm
ZmVyKToKKyAgICAgICAgKHRlc3RNdWx0aXBsZVJlYWRzKToKKyAgICAgICAgKiBmYXN0L2ZpbGVz
L3dvcmtlcnMvd29ya2VyLXJlYWQtYmxvYi1zeW5jLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBm
YXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6Cisg
ICAgICAgICogZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3Rl
ZC50eHQ6CisKIDIwMTAtMTAtMjEgIENocmlzIEZsZWl6YWNoICA8Y2ZsZWl6YWNoQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCZXRoIERha2luLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0CmluZGV4IDc2ZmQ1NWYu
LjBkZWYwNjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFz
eW5jLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3JlYWQtZmlsZS1h
c3luYy1leHBlY3RlZC50eHQKQEAgLTEsNCArMSwxMCBAQAogCitUZXN0IHJlYWRpbmcgYSBub24t
ZXhpc3RlbnQgZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGVy
cm9yIGV2ZW50CityZWFkeVN0YXRlOiAyCitlcnJvciBjb2RlOiA4CitSZWNlaXZlZCBsb2FkZW5k
IGV2ZW50CiBUZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZSBhcyBiaW5hcnkgc3RyaW5n
CiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBlcnJvciBldmVudApAQCAtMTcsNiArMjMsMTUgQEAg
UmVjZWl2ZWQgZXJyb3IgZXZlbnQKIHJlYWR5U3RhdGU6IDIKIGVycm9yIGNvZGU6IDgKIFJlY2Vp
dmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhbiBlbXB0eSBmaWxlIGFzIGFycmF5IGJ1
ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRl
OiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogMAor
cmVzdWx0OiAKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhbiBlbXB0eSBm
aWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGxvYWRzdGFydCBl
dmVudApAQCAtNDQsNiArNTksMTUgQEAgcmVhZHlTdGF0ZTogMgogcmVzdWx0IHNpemU6IDUKIHJl
c3VsdDogZGF0YToKIFJlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhIFVURi04
IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQg
ZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIK
K3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6IEhlbGxvCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBU
ZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6IDAK
IFJlY2VpdmVkIGxvYWRzdGFydCBldmVudApAQCAtNTMsNiArNzcsMTUgQEAgcmVhZHlTdGF0ZTog
MgogcmVzdWx0IHNpemU6IDUKIHJlc3VsdDogSGVsbG8KIFJlY2VpdmVkIGxvYWRlbmQgZXZlbnQK
K1Rlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTog
MAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2Fk
IGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogOQorcmVzdWx0OiAweDAgMHgxIDB4
MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAog
VGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTog
MAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWNvbW1vbi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMv
cmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCmluZGV4IGFiZTMyNGYuLjNiNzQ0N2EgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtY29tbW9uLmpzCkBAIC0xMSw2
ICsxMSwxNCBAQCBmdW5jdGlvbiBidWlsZEJsb2IoaXRlbXMsIGNvbnRlbnRUeXBlLCBidWlsZGVy
KQogfQogCiAvLyBSZWFkcyBhIGJsb2IgZWl0aGVyIGFzeW5jaHJvbm91c2x5IG9yIHN5bmNocm9u
b3VzbHkuCitmdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIodGVzdEZpbGVzLCBibG9iKQor
eworICAgIGlmIChpc1JlYWRBc0FzeW5jKCkpCisgICAgICAgIF9yZWFkQmxvYkFzQXJyYXlCdWZm
ZXJBc3luYyh0ZXN0RmlsZXMsIGJsb2IpOworICAgIGVsc2UKKyAgICAgICAgX3JlYWRCbG9iQXNB
cnJheUJ1ZmZlclN5bmModGVzdEZpbGVzLCBibG9iKTsKK30KKwogZnVuY3Rpb24gcmVhZEJsb2JB
c0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMsIGJsb2IpCiB7CiAgICAgaWYgKGlzUmVhZEFzQXN5bmMo
KSkKQEAgLTM2LDYgKzQ0LDEyIEBAIGZ1bmN0aW9uIHJlYWRCbG9iQXNEYXRhVVJMKHRlc3RGaWxl
cywgYmxvYikKIH0KIAogLy8gUmVhZHMgYSBibG9iIGFzeW5jaHJvbm91c2x5LgorZnVuY3Rpb24g
X3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKHRlc3RGaWxlcywgYmxvYikKK3sKKyAgICB2YXIg
cmVhZGVyID0gY3JlYXRlUmVhZGVyQXN5bmModGVzdEZpbGVzKTsKKyAgICByZWFkZXIucmVhZEFz
QXJyYXlCdWZmZXIoYmxvYikKK30KKwogZnVuY3Rpb24gX3JlYWRCbG9iQXNCaW5hcnlTdHJpbmdB
c3luYyh0ZXN0RmlsZXMsIGJsb2IpCiB7CiAgICAgdmFyIHJlYWRlciA9IGNyZWF0ZVJlYWRlckFz
eW5jKHRlc3RGaWxlcyk7CkBAIC01NSwxMiArNjksMjUgQEAgZnVuY3Rpb24gX3JlYWRCbG9iQXNE
YXRhVVJMQXN5bmModGVzdEZpbGVzLCBibG9iKQogfQogCiAvLyBSZWFkcyBhIGJsb2Igc3luY2hy
b25vdXNseS4KK2Z1bmN0aW9uIF9yZWFkQmxvYkFzQXJyYXlCdWZmZXJTeW5jKHRlc3RGaWxlcywg
YmxvYikKK3sKKyAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyU3luYygpOworICAgIHRyeSB7
CisgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7Cisg
ICAgICAgIGxvZ1Jlc3VsdChyZXN1bHQpOworICAgIH0gY2F0Y2ggKGVycm9yKSB7CisgICAgICAg
IGxvZygiUmVjZWl2ZWQgZXhjZXB0aW9uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm5h
bWUpOworICAgIH0KKworICAgIHJ1bk5leHRUZXN0KHRlc3RGaWxlcyk7Cit9CisKIGZ1bmN0aW9u
IF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nU3luYyh0ZXN0RmlsZXMsIGJsb2IpCiB7CiAgICAgdmFy
IHJlYWRlciA9IGNyZWF0ZVJlYWRlclN5bmMoKTsKICAgICB0cnkgewogICAgICAgICB2YXIgcmVz
dWx0ID0gcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhibG9iKTsKLSAgICAgICAgbG9nKHJlc3Vs
dCk7CisgICAgICAgIGxvZ1Jlc3VsdChyZXN1bHQpOwogICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAg
ICAgICAgIGxvZygiUmVjZWl2ZWQgZXhjZXB0aW9uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVy
cm9yLm5hbWUpOwogICAgIH0KQEAgLTczLDcgKzEwMCw3IEBAIGZ1bmN0aW9uIF9yZWFkQmxvYkFz
VGV4dFN5bmModGVzdEZpbGVzLCBibG9iLCBlbmNvZGluZykKICAgICB2YXIgcmVhZGVyID0gY3Jl
YXRlUmVhZGVyU3luYygpOwogICAgIHRyeSB7CiAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIu
cmVhZEFzVGV4dChibG9iLCBlbmNvZGluZyk7Ci0gICAgICAgIGxvZyhyZXN1bHQpOworICAgICAg
ICBsb2dSZXN1bHQocmVzdWx0KTsKICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICBsb2co
IlJlY2VpdmVkIGV4Y2VwdGlvbiAiICsgZXJyb3IuY29kZSArICI6ICIgKyBlcnJvci5uYW1lKTsK
ICAgICB9CkBAIC04Niw3ICsxMTMsNyBAQCBmdW5jdGlvbiBfcmVhZEJsb2JBc0RhdGFVUkxTeW5j
KHRlc3RGaWxlcywgYmxvYikKICAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyU3luYygpOwog
ICAgIHRyeSB7CiAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIucmVhZEFzRGF0YVVSTChibG9i
KTsKLSAgICAgICAgbG9nKHJlc3VsdCk7CisgICAgICAgIGxvZ1Jlc3VsdChyZXN1bHQpOwogICAg
IH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgIGxvZygiUmVjZWl2ZWQgZXhjZXB0aW9uICIgKyBl
cnJvci5jb2RlICsgIjogIiArIGVycm9yLm5hbWUpOwogICAgIH0KQEAgLTExNSw2ICsxNDIsMTkg
QEAgZnVuY3Rpb24gY3JlYXRlUmVhZGVyU3luYygpCiAgICAgcmV0dXJuIG5ldyBGaWxlUmVhZGVy
U3luYygpOwogfQogCisvLyAncmVzdWx0JyBjYW4gYmUgZWl0aGVyIGFuIEFycmF5QnVmZmVyIG9i
amVjdCBvciBhIHN0cmluZy4KK2Z1bmN0aW9uIGxvZ1Jlc3VsdChyZXN1bHQpCit7CisgICAgaWYg
KHR5cGVvZiByZXN1bHQgPT0gJ29iamVjdCcpIHsKKyAgICAgICAgbG9nKCJyZXN1bHQgc2l6ZTog
IiArIHJlc3VsdC5ieXRlTGVuZ3RoKTsKKyAgICAgICAgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXko
cmVzdWx0LCAwLCByZXN1bHQuYnl0ZUxlbmd0aCk7CisgICAgfSBlbHNlCisgICAgICAgIGxvZygi
cmVzdWx0IHNpemU6ICIgKyByZXN1bHQubGVuZ3RoKTsKKworICAgIHZhciByZXN1bHRPdXRwdXQg
PSBfaXNBU0NJSVN0cmluZyhyZXN1bHQpID8gX3RvU3RyaW5nKHJlc3VsdCkgOiBfdG9IZXhhZGVj
aW1hbChyZXN1bHQpOworICAgIGxvZygicmVzdWx0OiAiICsgcmVzdWx0T3V0cHV0KTsKK30KKwog
ZnVuY3Rpb24gbG9nRXZlbnQoZXZlbnQpCiB7CiAgICAgbG9nKCJSZWNlaXZlZCAiICsgZXZlbnQu
dHlwZSArICIgZXZlbnQiKTsKQEAgLTEzMCwxMSArMTcwLDkgQEAgZnVuY3Rpb24gbG9hZGVkKGV2
ZW50KQogewogICAgIGxvZ0V2ZW50KGV2ZW50KTsKICAgICBsb2coInJlYWR5U3RhdGU6ICIgKyBl
dmVudC50YXJnZXQucmVhZHlTdGF0ZSk7Ci0gICAgbG9nKCJyZXN1bHQgc2l6ZTogIiArIGV2ZW50
LnRhcmdldC5yZXN1bHQubGVuZ3RoKTsKIAogICAgIHZhciByZXN1bHQgPSBldmVudC50YXJnZXQu
cmVzdWx0OwotICAgIHZhciByZXN1bHRPdXRwdXQgPSBfaXNBU0NJSVN0cmluZyhyZXN1bHQpID8g
cmVzdWx0IDogX3RvSGV4YWRlY2ltYWwocmVzdWx0KTsKLSAgICBsb2coInJlc3VsdDogIiArIHJl
c3VsdE91dHB1dCk7CisgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiB9CiAKIGZ1bmN0aW9uIGxvYWRG
YWlsZWQoZXZlbnQpCkBAIC0xNTEsMjMgKzE4OSw0MiBAQCBmdW5jdGlvbiBsb2FkRW5kZWQodGVz
dEZpbGVzLCBldmVudCkKIH0KIAogLy8gSGVscGVyIGZ1bmN0aW9ucy4KLWZ1bmN0aW9uIF9pc0FT
Q0lJU3RyaW5nKHN0cikKKworLy8gJ3ZhbHVlJyBjYW4gYmUgZWl0aGVyIGFuIEFycmF5QnVmZmVy
VmlldyBvYmplY3Qgb3IgYSBzdHJpbmcuCitmdW5jdGlvbiBfdG9TdHJpbmcodmFsdWUpCiB7Ci0g
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKHN0
ci5jaGFyQ29kZUF0KGkpID49IDEyOCkKKyAgICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcn
KQorICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgdmFyIHJlc3VsdCA9ICIiOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdCArPSBTdHJp
bmcuZnJvbUNoYXJDb2RlKHZhbHVlW2ldKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyAn
dmFsdWUnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXJWaWV3IG9iamVjdCBvciBhIHN0cmlu
Zy4KK2Z1bmN0aW9uIF9pc0FTQ0lJU3RyaW5nKHZhbHVlKQoreworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKF9nZXRFbGVtZW50QXQodmFs
dWUsIGkpID49IDEyOCkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWZ1bmN0aW9uIF90b0hleGFkZWNpbWFsKHN0cikKKy8vICd2YWx1ZScg
Y2FuIGJlIGVpdGhlciBhbiBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0IG9yIGEgc3RyaW5nLgorZnVu
Y3Rpb24gX3RvSGV4YWRlY2ltYWwodmFsdWUpCiB7CiAgICAgdmFyIHJlc3VsdCA9ICIiOwotICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHZhciBoZXgg
PSAiMHgiICsgKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRikudG9TdHJpbmcoMTYpOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGhleCA9
ICIweCIgKyAoX2dldEVsZW1lbnRBdCh2YWx1ZSwgaSkgJiAweEZGKS50b1N0cmluZygxNik7CiAg
ICAgICAgIGlmIChpID4gMCkKICAgICAgICAgICAgIHJlc3VsdCArPSAiICI7CiAgICAgICAgIHJl
c3VsdCArPSBoZXg7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK2Z1bmN0aW9uIF9n
ZXRFbGVtZW50QXQodmFsdWUsIGkpCit7CisgICAgcmV0dXJuICh0eXBlb2YgdmFsdWUgPT0gJ3N0
cmluZycpID8gdmFsdWUuY2hhckNvZGVBdChpKSA6IHZhbHVlW2ldOworfQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanMg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5q
cwppbmRleCBlOGIyYzljLi4zOGVlMTIwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcworKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcwpAQCAtMSwxMSArMSwx
NSBAQAogdmFyIHRlc3RDYXNlcyA9IFsKKyAgICAidGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVB
c0FycmF5QnVmZmVyIiwKICAgICAidGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc0JpbmFyeVN0
cmluZyIsCiAgICAgInRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNUZXh0IiwKICAgICAidGVz
dFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc0RhdGFVUkwiLAorICAgICJ0ZXN0UmVhZGluZ0VtcHR5
RmlsZUFzQXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzQmluYXJ5U3Ry
aW5nIiwKICAgICAidGVzdFJlYWRpbmdFbXB0eUZpbGVBc1RleHQiLAogICAgICJ0ZXN0UmVhZGlu
Z0VtcHR5RmlsZUFzRGF0YVVSTCIsCisgICAgInRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNB
cnJheUJ1ZmZlciIsCiAgICAgInRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNCaW5hcnlTdHJp
bmciLAorICAgICJ0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVmZmVyIiwKICAgICAidGVz
dFJlYWRpbmdCaW5hcnlGaWxlQXNCaW5hcnlTdHJpbmciLAogICAgICJ0ZXN0UmVhZGluZ1VURjhF
bmNvZGVkRmlsZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5nVVRGMTZCRUJPTUVuY29kZWRGaWxl
QXNUZXh0IiwKQEAgLTI5LDYgKzMzLDEyIEBAIGZ1bmN0aW9uIHJ1bk5leHRUZXN0KHRlc3RGaWxl
cykKICAgICB9CiB9CiAKK2Z1bmN0aW9uIHRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNBcnJh
eUJ1ZmZlcih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBub24tZXhpc3Rl
bnQgZmlsZSBhcyBhcnJheSBidWZmZXIiKTsKKyAgICByZWFkQmxvYkFzQXJyYXlCdWZmZXIodGVz
dEZpbGVzLCB0ZXN0RmlsZXNbJ25vbi1leGlzdGVudCddKTsKK30KKwogZnVuY3Rpb24gdGVzdFJl
YWRpbmdOb25FeGlzdGVudEZpbGVBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAgICAgbG9n
KCJUZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CkBA
IC00Nyw2ICs1NywxMiBAQCBmdW5jdGlvbiB0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzRGF0
YVVSTCh0ZXN0RmlsZXMpCiAgICAgcmVhZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVzLCB0ZXN0Rmls
ZXNbJ25vbi1leGlzdGVudCddKTsKIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRpbmdFbXB0eUZpbGVB
c0FycmF5QnVmZmVyKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhbiBlbXB0
eSBmaWxlIGFzIGFycmF5IGJ1ZmZlciIpOworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0
RmlsZXMsIHRlc3RGaWxlc1snZW1wdHktZmlsZSddKTsKK30KKwogZnVuY3Rpb24gdGVzdFJlYWRp
bmdFbXB0eUZpbGVBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAgICAgbG9nKCJUZXN0IHJl
YWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CkBAIC02NSwxMiArODEsMjQg
QEAgZnVuY3Rpb24gdGVzdFJlYWRpbmdFbXB0eUZpbGVBc0RhdGFVUkwodGVzdEZpbGVzKQogICAg
IHJlYWRCbG9iQXNEYXRhVVJMKHRlc3RGaWxlcywgdGVzdEZpbGVzWydlbXB0eS1maWxlJ10pOwog
fQogCitmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzQXJyYXlCdWZmZXIodGVz
dEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBhcnJheSBi
dWZmZXIiKTsKKyAgICByZWFkQmxvYkFzQXJyYXlCdWZmZXIodGVzdEZpbGVzLCB0ZXN0RmlsZXNb
J1VURjgtZmlsZSddKTsKK30KKwogZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVB
c0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYt
OCBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKICAgICByZWFkQmxvYkFzQmluYXJ5U3RyaW5nKHRl
c3RGaWxlcywgdGVzdEZpbGVzWydVVEY4LWZpbGUnXSk7CiB9CiAKK2Z1bmN0aW9uIHRlc3RSZWFk
aW5nQmluYXJ5RmlsZUFzQXJyYXlCdWZmZXIodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCBy
ZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyIik7CisgICAgcmVhZEJsb2JBc0Fy
cmF5QnVmZmVyKHRlc3RGaWxlcywgdGVzdEZpbGVzWydiaW5hcnktZmlsZSddKTsKK30KKwogZnVu
Y3Rpb24gdGVzdFJlYWRpbmdCaW5hcnlGaWxlQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzKQogewog
ICAgIGxvZygiVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0cmluZyIpOwpA
QCAtMTM1LDYgKzE2Myw3IEBAIGZ1bmN0aW9uIHRlc3RNdWx0aXBsZVJlYWRzKHRlc3RGaWxlcykK
IAogICAgIGxvZygiVGVzdCBjYWxsaW5nIG11bHRpcGxlIHJlYWQgbWV0aG9kcyBhbmQgb25seSBs
YXN0IG9uZSBpcyBwcm9jZXNzZWQiKTsKICAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyQXN5
bmMoKTsKKyAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIodGVzdEZpbGVzWydVVEY4LWZpbGUn
XSk7CiAgICAgcmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXNbJ1VURjgtZmlsZSdd
KTsKICAgICByZWFkZXIucmVhZEFzVGV4dCh0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKICAgICBy
ZWFkZXIucmVhZEFzRGF0YVVSTCh0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1ibG9iLXN5bmMtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJs
b2Itc3luYy1leHBlY3RlZC50eHQKaW5kZXggM2Q5MDU4Yi4uOWU3YzQ3OSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBl
Y3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFk
LWJsb2Itc3luYy1leHBlY3RlZC50eHQKQEAgLTUsMzIgKzUsNDYgQEAgUmVjZWl2ZWQgZXhjZXB0
aW9uIDg6IE5PVF9GT1VORF9FUlIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBleGlz
dGVudCBhbmQgbm9uLWV4aXN0ZW50IGZpbGUKIFJlY2VpdmVkIGV4Y2VwdGlvbiA4OiBOT1RfRk9V
TkRfRVJSCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgZW1wdHkgZmlsZQotCityZXN1
bHQgc2l6ZTogMAorcmVzdWx0OiAKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBlbXB0
eSB0ZXh0Ci0KK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBj
b250YWluaW5nIGVtcHR5IGZpbGVzIGFuZCBlbXB0eSB0ZXh0cwotCityZXN1bHQgc2l6ZTogMAor
cmVzdWx0OiAKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgZmlsZQotSGVs
bG8KK3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6IEhlbGxvCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNv
bnRhaW5pbmcgc2luZ2xlIHRleHQKLUZpcnN0CityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBGaXJz
dAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNpbmdsZSB0ZXh0IGFzIGRhdGEgVVJM
Ci1kYXRhOmJhc2U2NCxSbWx5YzNRPQorcmVzdWx0IHNpemU6IDIwCityZXN1bHQ6IGRhdGE6YmFz
ZTY0LFJtbHljM1E9CiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xlIHRleHQg
YXMgZGF0YSBVUkwgKG9wdGlvbmFsIGNvbnRlbnQgdHlwZSBwcm92aWRlZCkKK3Jlc3VsdCBzaXpl
OiAyOQogcmVzdWx0OiBkYXRhOnR5cGUvZm9vO2Jhc2U2NCxSbWx5YzNRPQogVGVzdCByZWFkaW5n
IGEgYmxvYiBjb250YWluaW5nIHNsaWNlZCBmaWxlCi1vbmRlcgorcmVzdWx0IHNpemU6IDUKK3Jl
c3VsdDogb25kZXIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzbGljZWQgdGV4dAot
aXJzdAorcmVzdWx0IHNpemU6IDQKK3Jlc3VsdDogaXJzdAogVGVzdCByZWFkaW5nIGEgYmxvYiBj
b250YWluaW5nIG11bHRpcGxlIGZpbGVzCi1IZWxsb1dvbmRlcmZ1bFdvcmxkCityZXN1bHQgc2l6
ZTogMTkKK3Jlc3VsdDogSGVsbG9Xb25kZXJmdWxXb3JsZAogVGVzdCByZWFkaW5nIGEgYmxvYiBj
b250YWluaW5nIG11bHRpcGxlIHRleHRzCi1GaXJzdFNlY29uZFRoaXJkCityZXN1bHQgc2l6ZTog
MTYKK3Jlc3VsdDogRmlyc3RTZWNvbmRUaGlyZAogVGVzdCByZWFkaW5nIGEgaHlicmlkIGJsb2IK
LUZpcnN0SGVsbG9TZWNvbmRXb25kZXJmdWxXb3JsZFRoaXJkCityZXN1bHQgc2l6ZTogMzUKK3Jl
c3VsdDogRmlyc3RIZWxsb1NlY29uZFdvbmRlcmZ1bFdvcmxkVGhpcmQKIFRlc3QgcmVhZGluZyBh
IHNsaWNlZCBoeWJyaWQgYmxvYgotbGxvU2Vjb25kV29uCityZXN1bHQgc2l6ZTogMTIKK3Jlc3Vs
dDogbGxvU2Vjb25kV29uCiBUZXN0IHJlYWRpbmcgYSB0cmlwbGUtc2xpY2VkIGh5YnJpZCBibG9i
Ci1vbmRXb25kZXJmdWxXb3JsZFRoaXJkRm9vbG9TZWMKK3Jlc3VsdCBzaXplOiAzMAorcmVzdWx0
OiBvbmRXb25kZXJmdWxXb3JsZFRoaXJkRm9vbG9TZWMKIERPTkUKIApkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUt
YXN5bmMtZXhwZWN0ZWQudHh0CmluZGV4IGE0OTc2NTguLjJmZDc3NjcgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxlLWFzeW5jLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQt
ZmlsZS1hc3luYy1leHBlY3RlZC50eHQKQEAgLTEsNSArMSwxMSBAQAogCiBSZWNlaXZlZCBmaWxl
cyBpbiB3b3JrZXIKK1Rlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGFycmF5IGJ1
ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgZXJyb3IgZXZlbnQKK3JlYWR5U3RhdGU6IDIK
K2Vycm9yIGNvZGU6IDgKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhIG5v
bi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVk
IGVycm9yIGV2ZW50CkBAIC0xOCw2ICsyNCwxNSBAQCBSZWNlaXZlZCBlcnJvciBldmVudAogcmVh
ZHlTdGF0ZTogMgogZXJyb3IgY29kZTogOAogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCBy
ZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitSZWNl
aXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQK
K3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAorUmVjZWl2ZWQgbG9hZGVu
ZCBldmVudAogVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVh
ZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CkBAIC00NSw2ICs2MCwxNSBAQCBy
ZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBkYXRhOgogUmVjZWl2ZWQgbG9h
ZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBhcnJheSBidWZmZXIKK3Jl
YWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVj
ZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDUKK3Jlc3VsdDog
SGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhIFVURi04IGZpbGUg
YXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50
CkBAIC01NCw2ICs3OCwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0
OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZp
bGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZl
bnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jl
c3VsdCBzaXplOiA5CityZXN1bHQ6IDB4MCAweDEgMHgyIDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhm
ZSAweGZmCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmls
ZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZl
bnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVh
ZC1maWxlLXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJz
L3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3RlZC50eHQKaW5kZXggMzY5MWE1OGY5NjZiYjYz
YWE1ODFhNWFhYWY0YzJiMjFmZjQ0NTdiYS4uYTA0ZDdkNDczNjNjMTIyYjM0MzUyMTlkM2Y2N2Ix
ZDVhNDIxOGIxZiAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDE2MTcKemNtY0pQJjJF
RCo0OUQrMGcmJHptPXN2MjlYX3U8Qko5SV4ydXhrfkgqYGwjZkMyMzNkXmRwUj1mPnlMYj8ydCVT
CnpAWHorJkhrT1lvV0x1ME9WSlMqcjlDbiViTH0zTGU2JHFwOzxMXkwkWE1CSjtsTTE7aXpYZDlS
M1BKWX1aSVl5TAp6RmVKPVp4Sz1GVktwYT9qIUUpK19pXjxhVXtmblJ4PDVjV0hEcDVyNGpqQXdM
eX1ARnREMWBwSjFDUnJMdD0wYXQKemdhWUx6UlVwfG5JJCZHQnJVTVB4bnV4ayEtNTh9ai1DVF9y
SFRRZHl5PyVFWkJ8c1FWMmpsX340d3o/NSkydG9TCnpCRSVVXjwqOWV6WHMmQnpKKCNsVyt5Ki16
N1UhbG9MPm9qfk00TCZoRlZ0N2slKClTKENGdmY1KXBiN1pAKT0jVQp6YCoxWE5WZUd3X1pnciYw
ZCFVZCQ1LUgwMFlxVHh9YzEoU2cxNmZ2emUzantjVWUpTW84TjJGYS1+fDJ5JT1uaDMKc0ViaCll
P0JNQSZ6OCN1QEZaV21yY0QrdDE8QnQpUUlKJiFmb3hSQ3VNeEx5Und7UmAlMlpiVWFfeTdPXgoK
ZGVsdGEgMTU4CnpjbWNifWJBV3c8LU5lYzdfPndhNzV7b0pvaWM1K3peVX1Fe3pocVBhVnRLeGwj
RjlqWCY+JFohNVd7Tm4xIWxSKQp6WFBOalcyZTYxdldAcU0/TWIqVz8kYUpYVFB+KU1kIStRXyFK
Rz52TFN7Yk5QZGFeSThGZTRYYHI0UGlDbGg/QmQKY2dHSWx2czYlQzh3QitSZHRiIW1sbGh9a09Z
cU9+VjBPeEJweGN+cUYKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3Mu
bWsgYi9XZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsKaW5kZXggMzI4ODA1OS4uODIxZmQz
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRpbmdzLm1rCisrKyBiL1dlYkNv
cmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawpAQCAtMTAwLDYgKzEwMCw3IEBAIExPQ0FMX1NSQ19G
SUxFUyArPSBcCiAJYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVyLmNwcCBcCiAJYmluZGluZ3Mv
anMvSlNFdmVudFRhcmdldC5jcHAgXAogCWJpbmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFzZS5jcHAg
XAorCWJpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL2pzL0pT
R2VvbG9jYXRpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy9qcy9KU0hUTUxBbGxDb2xsZWN0aW9u
Q3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAg
XApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKaW5kZXggNDJlMzQ0YS4uOTc0YTE1NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC02MTksNiArNjE5LDcgQEAg
U0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRTb3VyY2VDdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAKICAgICBiaW5kaW5ncy9qcy9K
U0V4Y2VwdGlvbkJhc2UuY3BwCisgICAgYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cAogICAgIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwCiAgICAgYmluZGluZ3Mv
anMvSlNIaXN0b3J5Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTSURCQW55Q3VzdG9tLmNw
cApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAwMTBhYTRhLi45NDViNDcxIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEwLTEwLTIxICBKaWFuIExpICA8
amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBTdXBwb3J0IHJlYWRBc0FycmF5QnVmZmVyIGluIEZpbGVSZWFkZXIgYW5k
IEZpbGVSZWFkZXJTeW5jCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NzY5MQorCisgICAgICAgIFRlc3QgY2FzZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHJl
YWQtZmlsZS10ZXN0LWNhc2VzLmpzLgorCisgICAgICAgICogQW5kcm9pZC5qc2NiaW5kaW5ncy5t
azoKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbToK
KyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAg
ICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRmlsZVJlYWRl
ckN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVS
ZWFkZXJDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhGaWxlUmVhZGVyOjpyZXN1bHRB
Y2Nlc3NvckdldHRlcik6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDogQWxzbyBj
aGFuZ2VkIG5vdCB0byByZXR1cm4gaW5jb21wbGV0ZSByZXN1bHQKKyAgICAgICAgd2hlbiByZWFk
aW5nIGFzIHRleHQuIFRoaXMgaXMgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBzcGVjLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzQXJyYXlCdWZmZXIpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsZVJlYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVS
ZWFkZXI6OmFycmF5QnVmZmVyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6
OnN0cmluZ1Jlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpjb252ZXJ0VG9U
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwpOgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5oOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlcjo6ZXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZFR5cGUpOgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlci5pZGw6CisgICAgICAgICogZmlsZWFwaS9GaWxl
UmVhZGVyU3luYy5jcHA6IFJlbW92ZWQgRmlsZVJlYWRlclN5bmNMb2FkZXIgYW5kIG1vdmUgaXRz
CisgICAgICAgIGZ1bmN0aW9uYWxpdGllcyB0byBGaWxlUmVhZGVyU3luYy4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVSZWFkZXJTeW5jOjpGaWxlUmVhZGVyU3luYyk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlUmVhZGVyU3luYzo6cmVhZEFzQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsZVJlYWRlclN5bmM6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlclN5bmM6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6OmRpZFJl
Y2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6ZGlkUmVj
ZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6OmRpZEZpbmlzaExv
YWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6OmRpZEZhaWwpOgorICAg
ICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVS
ZWFkZXJTeW5jOjpoYXNFcnJvcik6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5p
ZGw6CisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5
QnVmZmVyOjpzZXRCeXRlTGVuZ3RoKTogc3VwcG9ydCBzZXR0aW5nIGJ5dGUgbGVuZ3RoIHRvCisg
ICAgICAgIGFsbG93IHBhcnRpYWwgZGF0YS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9BcnJheUJ1
ZmZlci5oOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50Lmg6CisKIDIw
MTAtMTAtMjEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
R05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDFmMjU1MDAuLjBj
NzUyMjMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQpAQCAtNzI2LDYgKzcyNiw3IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmggXAogCVdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFeGNlcHRpb25CYXNlLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V4Y2VwdGlv
bkJhc2UuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwIFwK
IAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwIFwKIAlXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMv
SlNIaXN0b3J5Q3VzdG9tLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMWE5NmUxLi45ZTk2NTU5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNjAxLDYg
KzYwMSw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oJywKICAg
ICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwJywKICAgICAgICAgICAg
ICdiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuaCcsCisgICAgICAgICAgICAnYmluZGluZ3Mv
anMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNH
ZW9sb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5o
JywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJv
CmluZGV4IGI2YWM0YWUuLjI1ZGFiZDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8K
KysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDE5LDYgKzQxOSw3IEBAIHY4IHsKICAgICAg
ICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAgXAogICAgICAgICBiaW5k
aW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9j
dXN0b20vVjhFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCBcCisgICAgICAgIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCiAKICAgICBjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfVklERU89MSkgewpAQCAtNTE4LDYgKzUxOSw3IEBAIHY4IHsKICAgICAgICAgYmlu
ZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9K
U0V2ZW50VGFyZ2V0LmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRXhjZXB0aW9uQmFzZS5j
cHAgXAorICAgICAgICBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwIFwKICAgICAg
ICAgYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNIVE1MQXBw
bGV0RWxlbWVudEN1c3RvbS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggZmQ5NDIxYy4uNzkwYzAzNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC01NTk1MCw2ICs1NTk1MCwxMCBAQAogCQkJCQk+DQogCQkJCTwvRmlsZT4NCiAJCQkJ
PEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNGaWxlUmVhZGVyQ3Vz
dG9tLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCINCiAJCQkJCT4N
CiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggN2I1YWY5Ni4uZGE5MTVjNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTc2Myw2ICs3NjMsNyBAQAogCQkyRURGMzY5QzEy
MkM5NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVERjM2OUExMjJDOTRCNDAwMkY3RDRFIC8qIEZp
bGVSZWFkZXJTeW5jLmNwcCAqLzsgfTsKIAkJMkVERjM2OUQxMjJDOTRCNDAwMkY3RDRFIC8qIEZp
bGVSZWFkZXJTeW5jLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAyRURGMzY5QjEyMkM5NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMuaCAqLzsgfTsK
IAkJMkVERjM2OUYxMjJDOTRDODAwMkY3RDRFIC8qIEZpbGVFeGNlcHRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFREYzNjlFMTIyQzk0QzgwMDJG
N0Q0RSAvKiBGaWxlRXhjZXB0aW9uLmggKi87IH07CisJCTJFRUIyMEJBMTI3MEQ1QTcwMDk1Mzgx
MCAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMkVFQjIwQjkxMjcwRDVBNzAwOTUzODEwIC8qIEpTRmlsZVJlYWRl
ckN1c3RvbS5jcHAgKi87IH07CiAJCTJFRjFCRkVBMTIxQzlGNDIwMEMyNzYyNyAvKiBGaWxlU3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
RjFCRkU4MTIxQzlGNDIwMEMyNzYyNyAvKiBGaWxlU3RyZWFtLmNwcCAqLzsgfTsKIAkJMkVGMUJG
RUIxMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRjFCRkU5MTIxQzlGNDIwMEMyNzYyNyAvKiBGaWxl
U3RyZWFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJMkVGMUJGRjcxMjFDQjBCRDAwQzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkVGMUJGRjYxMjFDQjBCRDAw
QzI3NjI3IC8qIEFzeW5jRmlsZVN0cmVhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC02NzkxLDYgKzY3OTIsNyBAQAogCQkyRURGMzY5QTEyMkM5
NEI0MDAyRjdENEUgLyogRmlsZVJlYWRlclN5bmMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gRmlsZVJlYWRlclN5bmMuY3BwOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVh
ZGVyU3luYy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFREYzNjlCMTIyQzk0
QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBGaWxlUmVhZGVyU3luYy5oOyBwYXRoID0gZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRURGMzY5RTEyMkM5NEM4MDAyRjdENEUg
LyogRmlsZUV4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWxl
RXhjZXB0aW9uLmg7IHBhdGggPSBmaWxlYXBpL0ZpbGVFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMkVFQjIwQjkxMjcwRDVBNzAwOTUzODEwIC8qIEpTRmlsZVJlYWRl
ckN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbGVS
ZWFkZXJDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRUYxQkZFODEy
MUM5RjQyMDBDMjc2MjcgLyogRmlsZVN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGaWxlU3RyZWFtLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMkVGMUJGRTkxMjFDOUY0MjAwQzI3NjI3IC8qIEZpbGVTdHJlYW0uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRmlsZVN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkyRUYxQkZGNjEyMUNCMEJEMDBDMjc2MjcgLyogQXN5bmNGaWxlU3RyZWFtLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFzeW5jRmlsZVN0cmVhbS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTY5MDEsNiArMTY5MDMsNyBAQAogCQkJCTg5M0M0ODUy
MTI0OTlCMDYwMDJCM0Q4NiAvKiBKU0VudHJ5U3luY0N1c3RvbS5jcHAgKi8sCiAJCQkJQkNFRkFG
NEQwQzMxN0U2OTAwRkE4MUY2IC8qIEpTRXZlbnRDdXN0b20uY3BwICovLAogCQkJCUJDMjc1Qjgw
MTFDNUQyQjQwMEM5MjA2QyAvKiBKU0V2ZW50U291cmNlQ3VzdG9tLmNwcCAqLywKKwkJCQkyRUVC
MjBCOTEyNzBENUE3MDA5NTM4MTAgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCAqLywKIAkJCQk0
OUVFQ0Y3MjEwNTA4RDlDMDAwOTlGQUIgLyogSlNGbG9hdDMyQXJyYXlDdXN0b20uY3BwICovLAog
CQkJCUZFODBEN0E2MEU5QzFFRDIwMDBENkY3NSAvKiBKU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCAq
LywKIAkJCQlCQ0U3QjE5MjBENEU4Njk2MDA3NUE1MzkgLyogSlNIaXN0b3J5Q3VzdG9tLmNwcCAq
LywKQEAgLTIzNjkxLDYgKzIzNjk0LDcgQEAKIAkJCQk5NzI4QzMxMzEyNjhFNDM5MDA0MUU4OUIg
LyogTWFya3VwQWNjdW11bGF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4NzcyRjExMjZF
MjYyOTAwM0RENTg2IC8qIExhbmd1YWdlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdBMUYyQjUy
MTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMkVFQjIwQkExMjcwRDVBNzAwOTUzODEwIC8qIEpTRmlsZVJlYWRlckN1c3RvbS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVy
Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDQzMmMzCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1
ZGUgIkpTRmlsZVJlYWRlci5oIgorCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRl
ICJGaWxlUmVhZGVyLmgiCisjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCit1c2luZyBuYW1l
c3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNGaWxlUmVhZGVy
OjpyZXN1bHQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIEZpbGVSZWFkZXIqIGltcCA9
IGltcGwoKTsKKyAgICBzd2l0Y2ggKGltcC0+cmVhZFR5cGUoKSkgeworICAgIGNhc2UgRmlsZVJl
YWRlcjo6UmVhZEZpbGVBc0FycmF5QnVmZmVyOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgV1RGOjpnZXRQdHIoaW1wLT5hcnJheUJ1ZmZlclJlc3VsdCgpKSk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGpzT3duZWRTdHJpbmdPck51bGwoZXhlYywgaW1w
LT5zdHJpbmdSZXN1bHQoKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RmlsZVJlYWRlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwCmluZGV4IDVmNGZiNTcuLjBmNTZlNzAgMTAwNzU1Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1c3RvbS5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNwcApAQCAt
MjksOSArMjksMTMgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
QkxPQikKKwogI2luY2x1ZGUgIlY4RmlsZVJlYWRlci5oIgogCiAjaW5jbHVkZSAiU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlY4QXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJW
OEJpbmRpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTcsNCArNjEsMTkgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4RmlsZVJlYWRlcjo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmcKICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0KIAordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4RmlsZVJlYWRlcjo6cmVzdWx0QWNjZXNzb3JHZXR0ZXIodjg6
OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7
CisgICAgSU5DX1NUQVRTKCJET00uRmlsZVJlYWRlci5yZXN1bHQuX2dldCIpOworICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKKyAgICBGaWxlUmVhZGVy
KiBpbXAgPSBWOEZpbGVSZWFkZXI6OnRvTmF0aXZlKGhvbGRlcik7CisgICAgc3dpdGNoIChpbXAt
PnJlYWRUeXBlKCkpIHsKKyAgICBjYXNlIEZpbGVSZWFkZXI6OlJlYWRGaWxlQXNBcnJheUJ1ZmZl
cjoKKyAgICAgICAgcmV0dXJuIHRvVjgoaW1wLT5hcnJheUJ1ZmZlclJlc3VsdCgpKTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gdjhTdHJpbmdPck51bGwoaW1wLT5zdHJpbmdSZXN1bHQo
KSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoQkxPQikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcCBiL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcAppbmRleCAwYjdiNDZkLi43OWViYmVhIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKKysrIGIvV2ViQ29yZS9maWxl
YXBpL0ZpbGVSZWFkZXIuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJGaWxlUmVh
ZGVyLmgiCiAKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJhc2U2NC5oIgog
I2luY2x1ZGUgIkJsb2IuaCIKICNpbmNsdWRlICJCbG9iVVJMLmgiCkBAIC04Niw2ICs4NywxNiBA
QCB2b2lkIEZpbGVSZWFkZXI6OnN0b3AoKQogICAgIHRlcm1pbmF0ZSgpOwogfQogCit2b2lkIEZp
bGVSZWFkZXI6OnJlYWRBc0FycmF5QnVmZmVyKEJsb2IqIGJsb2IpCit7CisgICAgaWYgKCFibG9i
KQorICAgICAgICByZXR1cm47CisKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRp
bmcgYXMgYXJyYXkgYnVmZmVyOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgo
KS51dGY4KCkuZGF0YSgpIDogIiIpOworCisgICAgcmVhZEludGVybmFsKGJsb2IsIFJlYWRGaWxl
QXNBcnJheUJ1ZmZlcik7Cit9CisKIHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5n
KEJsb2IqIGJsb2IpCiB7CiAgICAgaWYgKCFibG9iKQpAQCAtMjAwLDYgKzIxMSwxNiBAQCB2b2lk
IEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiBy
ZXNwb25zZSkKICAgICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmxvYWRzdGFydEV2ZW50KTsKIAog
ICAgIG1fdG90YWxCeXRlcyA9IHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpOworCisg
ICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4obV90b3RhbEJ5dGVzKSA+ICBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWdu
ZWQ+OjptYXgoKSkpIHsKKyAgICAgICAgZmFpbGVkKDUwMCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAobV9yZWFkVHlwZSAhPSBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nKSB7Cisg
ICAgICAgIEFTU0VSVCghbV9yYXdEYXRhKTsKKyAgICAgICAgbV9yYXdEYXRhID0gQXJyYXlCdWZm
ZXI6OmNyZWF0ZShzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90b3RhbEJ5dGVzKSwgMSk7CisgICAg
fQogfQogCiB2b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IGludCBsZW5ndGhSZWNlaXZlZCkKQEAgLTIxNCwxNiArMjM1LDE4IEBAIHZvaWQgRmlsZVJlYWRl
cjo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aFJlY2VpdmVkKQog
ICAgIGNhc2UgUmVhZEZpbGVBc0JpbmFyeVN0cmluZzoKICAgICAgICAgbV9idWlsZGVyLmFwcGVu
ZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKICAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBSZWFkRmlsZUFzQXJyYXlCdWZmZXI6CiAgICAgY2FzZSBSZWFkRmls
ZUFzVGV4dDoKICAgICBjYXNlIFJlYWRGaWxlQXNEYXRhVVJMOgotICAgICAgICBtX3Jhd0RhdGEu
YXBwZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOwotICAg
ICAgICBtX2lzUmF3RGF0YUNvbnZlcnRlZCA9IGZhbHNlOworICAgICAgICBtZW1jcHkoc3RhdGlj
X2Nhc3Q8Y2hhcio+KG1fcmF3RGF0YS0+ZGF0YSgpKSArIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X2J5dGVzTG9hZGVkKSwgZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVk
KSk7CisgICAgICAgIG1fcmF3RGF0YS0+c2V0Qnl0ZUxlbmd0aChtX2J5dGVzTG9hZGVkICsgbGVu
Z3RoUmVjZWl2ZWQpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAKICAgICBtX2J5dGVzTG9hZGVkICs9IGxlbmd0aFJl
Y2VpdmVkOworICAgIG1faXNSYXdEYXRhQ29udmVydGVkID0gZmFsc2U7CiAKICAgICAvLyBGaXJl
IHRoZSBwcm9ncmVzcyBldmVudCBhdCBsZWFzdCBldmVyeSA1MG1zLgogICAgIGRvdWJsZSBub3cg
PSBXVEY6OmN1cnJlbnRUaW1lTVMoKTsKQEAgLTI1NSw3ICsyNzgsNyBAQCB2b2lkIEZpbGVSZWFk
ZXI6OmZhaWxlZChpbnQgaHR0cFN0YXR1c0NvZGUpCiB7CiAgICAgbV9zdGF0ZSA9IENvbXBsZXRl
ZDsKIAotICAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpjcmVhdGUoaHR0cFN0YXR1c0NvZGVUb0V4
Y2VwdGlvbkNvZGUoaHR0cFN0YXR1c0NvZGUpKTsKKyAgICBtX2Vycm9yID0gRmlsZUVycm9yOjpj
cmVhdGUoaHR0cFN0YXR1c0NvZGVUb0V4Y2VwdGlvbkNvZGUoaHR0cFN0YXR1c0NvZGUpKTsKICAg
ICBmaXJlRXZlbnQoZXZlbnROYW1lcygpLmVycm9yRXZlbnQpOwogICAgIGZpcmVFdmVudChldmVu
dE5hbWVzKCkubG9hZGVuZEV2ZW50KTsKIApAQCAtMjk2LDMyICszMTksNTMgQEAgRmlsZVJlYWRl
cjo6UmVhZHlTdGF0ZSBGaWxlUmVhZGVyOjpyZWFkeVN0YXRlKCkgY29uc3QKICAgICByZXR1cm4g
RU1QVFk7CiB9CiAKLVN0cmluZyBGaWxlUmVhZGVyOjpyZXN1bHQoKQorUGFzc1JlZlB0cjxBcnJh
eUJ1ZmZlcj4gRmlsZVJlYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQoKSBjb25zdAogewotICAgIC8v
IElmIHJlYWRpbmcgYXMgYmluYXJ5IHN0cmluZywgd2UgY2FuIHJldHVybiB0aGUgcmVzdWx0IGlt
bWVkaWF0ZWx5LgotICAgIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcp
Ci0gICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICBBU1NFUlQobV9yZWFk
VHlwZSA9PSBSZWFkRmlsZUFzQXJyYXlCdWZmZXIpOwogCi0gICAgLy8gSWYgd2UgYWxyZWFkeSBj
b252ZXJ0IHRoZSByYXcgZGF0YSByZWNlaXZlZCBzbyBmYXIsIHdlIGNhbiByZXR1cm4gdGhlIHJl
c3VsdCBub3cuCi0gICAgaWYgKG1faXNSYXdEYXRhQ29udmVydGVkKQotICAgICAgICByZXR1cm4g
bV9idWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgbV9pc1Jhd0RhdGFDb252ZXJ0ZWQgPSB0cnVlOwor
ICAgIC8vIElmIGFuIGVycm9yIG9jY3VycywgcmV0dXJuIGFuIGVtcHR5IHJlc3VsdC4KKyAgICBp
ZiAobV9lcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAobV9yZWFkVHlwZSA9PSBS
ZWFkRmlsZUFzVGV4dCkKLSAgICAgICAgY29udmVydFRvVGV4dCgpOwotICAgIC8vIEZvciBkYXRh
IFVSTCwgd2Ugb25seSBkbyB0aGUgY292ZXJzaW9uIHVudGlsIHdlIHJlY2VpdmUgYWxsIHRoZSBy
YXcgZGF0YS4KLSAgICBlbHNlIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNEYXRhVVJMICYm
IG1fc3RhdGUgPT0gQ29tcGxldGVkKQotICAgICAgICBjb252ZXJ0VG9EYXRhVVJMKG1fcmF3RGF0
YSwgbV9maWxlVHlwZSwgbV9idWlsZGVyKTsKKyAgICAvLyBXZSBzdXBwb3J0IHJldHVybmluZyB0
aGUgcGFydGlhbCBkYXRhLgorICAgIHJldHVybiBtX3Jhd0RhdGE7Cit9CisKK1N0cmluZyBGaWxl
UmVhZGVyOjpzdHJpbmdSZXN1bHQoKQoreworICAgIEFTU0VSVChtX3JlYWRUeXBlICE9IFJlYWRG
aWxlQXNBcnJheUJ1ZmZlcik7CisKKyAgICAvLyBJZiBhbiBlcnJvciBvY2N1cnMsIHJldHVybiBh
biBlbXB0eSByZXN1bHQuCisgICAgaWYgKG1fZXJyb3IpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKworICAgIC8vIERvIHRoZSBjb3ZlcnNpb24gaWYgbm90IHlldC4KKyAgICBpZiAoIW1faXNS
YXdEYXRhQ29udmVydGVkICYmIG1fcmVhZFR5cGUgIT0gUmVhZEZpbGVBc0JpbmFyeVN0cmluZykg
eworICAgICAgICBpZiAobV9yZWFkVHlwZSA9PSBSZWFkRmlsZUFzVGV4dCkKKyAgICAgICAgICAg
IGNvbnZlcnRUb1RleHQoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9y
ZWFkVHlwZSA9PSBSZWFkRmlsZUFzRGF0YVVSTCk7CisgICAgICAgICAgICAvLyBQYXJ0aWFsIGRh
dGEgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJlYWRpbmcgYXMgZGF0YSBVUkwuCisgICAgICAgICAg
ICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQpCisgICAgICAgICAgICAgICAgY29udmVydFRvRGF0
YVVSTChzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX3Jhd0Rh
dGEtPmJ5dGVMZW5ndGgoKSwgbV9maWxlVHlwZSwgbV9idWlsZGVyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIC8vIFdoZW4gd2UgZmluaXNoIHRoZSBjb252ZXJzaW9uLCB3ZSBkbyBub3QgbmVlZCB0
byBrZWVwIGFyb3VuZCB0aGUgcmF3IGRhdGEuCisgICAgICAgIGlmIChtX3N0YXRlID09IENvbXBs
ZXRlZCkKKyAgICAgICAgICAgIG1fcmF3RGF0YSA9IDA7CisKKyAgICAgICAgbV9pc1Jhd0RhdGFD
b252ZXJ0ZWQgPSB0cnVlOworICAgIH0KIAogICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmco
KTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9UZXh0KCkKIHsKLSAgICBpZiAoIW1f
cmF3RGF0YS5zaXplKCkpIHsKLSAgICAgICAgbV9idWlsZGVyLmNsZWFyKCk7CisgICAgbV9idWls
ZGVyLmNsZWFyKCk7CisKKyAgICBpZiAoIW1fcmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKQogICAgICAg
ICByZXR1cm47Ci0gICAgfQogCiAgICAgLy8gRGVjb2RlIHRoZSBkYXRhLgogICAgIC8vIFRoZSBG
aWxlIEFQSSBzcGVjIHNheXMgdGhhdCB3ZSBzaG91bGQgdXNlIHRoZSBzdXBwbGllZCBlbmNvZGlu
ZyBpZiBpdCBpcyB2YWxpZC4gSG93ZXZlciwgd2UgY2hvb3NlIHRvIGlnbm9yZSB0aGlzCkBAIC0z
MzAsMTkgKzM3NCwxOCBAQCB2b2lkIEZpbGVSZWFkZXI6OmNvbnZlcnRUb1RleHQoKQogICAgIC8v
IEZJWE1FOiBjb25zaWRlciBzdXBwb3J0aW5nIGluY3JlbWVudGFsIGRlY29kaW5nIHRvIGltcHJv
dmUgdGhlIHBlcmYuCiAgICAgaWYgKCFtX2RlY29kZXIpCiAgICAgICAgIG1fZGVjb2RlciA9IFRl
eHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgidGV4dC9wbGFpbiIsIG1fZW5jb2RpbmcuaXNWYWxp
ZCgpID8gbV9lbmNvZGluZyA6IFVURjhFbmNvZGluZygpKTsKLSAgICBtX2J1aWxkZXIuY2xlYXIo
KTsKLSAgICBtX2J1aWxkZXIuYXBwZW5kKG1fZGVjb2Rlci0+ZGVjb2RlKCZtX3Jhd0RhdGEuYXQo
MCksIG1fcmF3RGF0YS5zaXplKCkpKTsKKyAgICBtX2J1aWxkZXIuYXBwZW5kKG1fZGVjb2Rlci0+
ZGVjb2RlKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihtX3Jhd0RhdGEtPmRhdGEoKSksIG1fcmF3
RGF0YS0+Ynl0ZUxlbmd0aCgpKSk7CiAKICAgICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYg
IW1fZXJyb3IpCiAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQobV9kZWNvZGVyLT5mbHVzaCgpKTsK
IH0KIAotdm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFy
PiYgcmF3RGF0YSwgY29uc3QgU3RyaW5nJiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRl
cikKK3ZvaWQgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTChjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3QgbGVuLCBjb25zdCBTdHJpbmcmIGZpbGVUeXBlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KQogewogICAgIGJ1aWxkZXIuY2xlYXIoKTsKICAgICBidWlsZGVyLmFwcGVuZCgiZGF0YToiKTsK
IAotICAgIGlmICghcmF3RGF0YS5zaXplKCkpCisgICAgaWYgKCFsZW4pCiAgICAgICAgIHJldHVy
bjsKIAogICAgIGlmICghZmlsZVR5cGUuaXNFbXB0eSgpKSB7CkBAIC0zNTIsNyArMzk1LDcgQEAg
dm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3
RGF0YSwgY29uc3QgU3RyaW5nJiBmaWwKICAgICAgICAgYnVpbGRlci5hcHBlbmQoImJhc2U2NCwi
KTsKIAogICAgIFZlY3RvcjxjaGFyPiBvdXQ7Ci0gICAgYmFzZTY0RW5jb2RlKHJhd0RhdGEsIG91
dCk7CisgICAgYmFzZTY0RW5jb2RlKGRhdGEsIGxlbiwgb3V0KTsKICAgICBvdXQuYXBwZW5kKCdc
MCcpOwogICAgIGJ1aWxkZXIuYXBwZW5kKG91dC5kYXRhKCkpOwogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgK
aW5kZXggZjkxNGRhZC4uNGJlNGM3MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXIuaAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oCkBAIC00OCw2ICs0OCw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXJyYXlCdWZmZXI7CiBjbGFzcyBC
bG9iOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIGNsYXNzIFRleHRSZXNvdXJjZURl
Y29kZXI7CkBAIC02OCw2ICs2OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIERPTkUgPSAyCiAgICAg
fTsKIAorICAgIGVudW0gUmVhZFR5cGUgeworICAgICAgICBSZWFkRmlsZUFzQXJyYXlCdWZmZXIs
CisgICAgICAgIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcsCisgICAgICAgIFJlYWRGaWxlQXNUZXh0
LAorICAgICAgICBSZWFkRmlsZUFzRGF0YVVSTAorICAgIH07CisKKyAgICB2b2lkIHJlYWRBc0Fy
cmF5QnVmZmVyKEJsb2IqKTsKICAgICB2b2lkIHJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKik7CiAg
ICAgdm9pZCByZWFkQXNUZXh0KEJsb2IqLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nID0gIiIpOwog
ICAgIHZvaWQgcmVhZEFzRGF0YVVSTChCbG9iKik7CkBAIC03NiwxMiArODUsMTQgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RhcnQoKTsKIAogICAgIFJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
OwotICAgIFBhc3NSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigpIHsgcmV0dXJuIG1fZXJyb3I7IH0K
LSAgICBTdHJpbmcgcmVzdWx0KCk7CisgICAgUGFzc1JlZlB0cjxGaWxlRXJyb3I+IGVycm9yKCkg
Y29uc3QgeyByZXR1cm4gbV9lcnJvcjsgfQorICAgIFJlYWRUeXBlIHJlYWRUeXBlKCkgY29uc3Qg
eyByZXR1cm4gbV9yZWFkVHlwZTsgfQorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5
QnVmZmVyUmVzdWx0KCkgY29uc3Q7CisgICAgU3RyaW5nIHN0cmluZ1Jlc3VsdCgpOwogCiAgICAg
Ly8gSGVscGVyIG1ldGhvZHMsIGFsc28gdXNlZCBieSBGaWxlUmVhZGVyU3luYy4KICAgICBzdGF0
aWMgRXhjZXB0aW9uQ29kZSBodHRwU3RhdHVzQ29kZVRvRXhjZXB0aW9uQ29kZShpbnQgaHR0cFN0
YXR1c0NvZGUpOwotICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRUb0RhdGFVUkwoY29uc3QgVmVjdG9y
PGNoYXI+JiByYXdEYXRhLCBjb25zdCBTdHJpbmcmIGZpbGVUeXBlLCBTdHJpbmdCdWlsZGVyJik7
CisgICAgc3RhdGljIHZvaWQgY29udmVydFRvRGF0YVVSTChjb25zdCBjaGFyKiwgc2l6ZV90LCBj
b25zdCBTdHJpbmcmIGZpbGVUeXBlLCBTdHJpbmdCdWlsZGVyJik7CiAKICAgICAvLyBBY3RpdmVE
T01PYmplY3QKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OwpAQCAtMTA5LDEx
ICsxMjAsNiBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihs
b2FkZW5kKTsKIAogcHJpdmF0ZToKLSAgICBlbnVtIFJlYWRUeXBlIHsKLSAgICAgICAgUmVhZEZp
bGVBc0JpbmFyeVN0cmluZywKLSAgICAgICAgUmVhZEZpbGVBc1RleHQsCi0gICAgICAgIFJlYWRG
aWxlQXNEYXRhVVJMCi0gICAgfTsKICAgICBlbnVtIEludGVybmFsU3RhdGUgewogICAgICAgICBO
b25lLAogICAgICAgICBTdGFydGluZywKQEAgLTEzNyw3ICsxNDMsNiBAQCBwcml2YXRlOgogICAg
IHZvaWQgZmlyZUVycm9yRXZlbnQoaW50IGh0dHBTdGF0dXNDb2RlKTsKICAgICB2b2lkIGZpcmVF
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUpOwogICAgIHZvaWQgY29udmVydFRvVGV4dCgp
OwotICAgIHZvaWQgY29udmVydFRvRGF0YVVSTCgpOwogCiAgICAgSW50ZXJuYWxTdGF0ZSBtX3N0
YXRlOwogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKQEAgLTE0OSw4ICsx
NTQsOCBAQCBwcml2YXRlOgogCiAgICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7CiAKLSAgICAv
LyBUaGUgcmF3IGRhdGEuIFdlIGhhdmUgdG8ga2VlcCB0cmFjayBvZiBhbGwgdGhlIHJhdyBkYXRh
IGZvciBpdCB0byBiZSBjb252ZXJ0ZWQgdG8gdGV4dCBvciBkYXRhIFVSTCBkYXRhLgotICAgIFZl
Y3RvcjxjaGFyPiBtX3Jhd0RhdGE7CisgICAgLy8gV2UgaGF2ZSB0byBrZWVwIHRyYWNrIG9mIGFs
bCB0aGUgcmF3IGRhdGEgZm9yIGFsbCByZWFkaW5ncyBvdGhlciB0aGFuIGJpbmFyeSBzdHJpbmcu
CisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3Jhd0RhdGE7CiAgICAgYm9vbCBtX2lzUmF3RGF0
YUNvbnZlcnRlZDsKIAogICAgIC8vIFRoZSBkZWNvZGVyIHVzZWQgdG8gZGVjb2RlIHRoZSB0ZXh0
IGRhdGEuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwgYi9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwKaW5kZXggZmViYjIzMS4uZWJjNmZmZCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaWRsCisrKyBiL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyLmlkbApAQCAtNDQsNiArNDQsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAg
IHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBzaG9ydCByZWFkeVN0YXRlOwogCiAgICAgICAg
IC8vIGFzeW5jIHJlYWQgbWV0aG9kcworICAgICAgICB2b2lkIHJlYWRBc0FycmF5QnVmZmVyKGlu
IEJsb2IgYmxvYik7CiAgICAgICAgIHZvaWQgcmVhZEFzQmluYXJ5U3RyaW5nKGluIEJsb2IgYmxv
Yik7CiAgICAgICAgIHZvaWQgcmVhZEFzVGV4dChpbiBCbG9iIGJsb2IsIGluIFtPcHRpb25hbF0g
RE9NU3RyaW5nIGVuY29kaW5nKTsKICAgICAgICAgdm9pZCByZWFkQXNEYXRhVVJMKGluIEJsb2Ig
YmxvYik7CkBAIC01MSw3ICs1Miw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgdm9pZCBhYm9y
dCgpOwogCiAgICAgICAgIC8vIGZpbGUgZGF0YQotICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUg
W0NvbnZlcnRTY3JpcHRTdHJpbmddIERPTVN0cmluZyByZXN1bHQ7CisgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBbQ3VzdG9tXSBET01PYmplY3QgcmVzdWx0OwogCiAgICAgICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBGaWxlRXJyb3IgZXJyb3I7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmlsZWFw
aS9GaWxlUmVhZGVyU3luYy5jcHAgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3Bw
CmluZGV4IDY0MjViY2YuLmU5YjQ0NjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxl
UmVhZGVyU3luYy5jcHAKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcApA
QCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSAiRmlsZVJlYWRlclN5bmMuaCIKIAorI2luY2x1
ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5jbHVkZSAiQmxvYi5o
IgogI2luY2x1ZGUgIkJsb2JVUkwuaCIKQEAgLTQ1LDc2ICs0NiwyNSBAQAogI2luY2x1ZGUgIlRl
eHRSZXNvdXJjZURlY29kZXIuaCIKICNpbmNsdWRlICJUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5Lmgi
CiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIEZpbGVSZWFkZXJTeW5jTG9hZGVyIDogcHVibGljIFRocmVhZGFibGVMb2FkZXJDbGllbnQg
ewotcHVibGljOgotICAgIC8vIElmIHRoZSBvdXRwdXQgcmVzdWx0IGlzIHByb3ZpZGVkLCB1c2Ug
aXQuIE90aGVyd2lzZSwgc2F2ZSBpdCBhcyB0aGUgcmF3IGRhdGEuCi0gICAgRmlsZVJlYWRlclN5
bmNMb2FkZXIoU3RyaW5nQnVpbGRlciopOwotCi0gICAgLy8gUmV0dXJucyB0aGUgaHR0cCBzdGF0
dXMgY29kZS4KLSAgICB2b2lkIHN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICAvLyBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNo
YXIqLCBpbnQpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxv
bmcgaWRlbnRpZmllcik7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VF
cnJvciYpOwotCi0gICAgY29uc3QgVmVjdG9yPGNoYXI+JiByYXdEYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9yYXdEYXRhOyB9Ci0KLXByaXZhdGU6Ci0gICAgLy8gVGhlIG91dHB1dCByZXN1bHQuIFRo
ZSBjYWxsZXIgcHJvdmlkZXMgdGhpcyBpbiBvcmRlciB0byBsb2FkIHRoZSBiaW5hcnkgZGF0YSBk
aXJlY3RseS4KLSAgICBTdHJpbmdCdWlsZGVyKiBtX2J1aWxkZXI7Ci0KLSAgICAvLyBUaGUgcmF3
IGRhdGEuIFRoZSBjYWxsZXIgZG9lcyBub3QgcHJvdmlkZSB0aGUgYWJvdmUgb3V0cHV0IHJlc3Vs
dCBhbmQgd2UgbmVlZCB0byBzYXZlIGl0IGhlcmUuCi0gICAgVmVjdG9yPGNoYXI+IG1fcmF3RGF0
YTsKLQotICAgIGludCBtX2h0dHBTdGF0dXNDb2RlOyAgICAKLX07Ci0KLUZpbGVSZWFkZXJTeW5j
TG9hZGVyOjpGaWxlUmVhZGVyU3luY0xvYWRlcihTdHJpbmdCdWlsZGVyKiBidWlsZGVyKQotICAg
IDogbV9idWlsZGVyKGJ1aWxkZXIpCitGaWxlUmVhZGVyU3luYzo6RmlsZVJlYWRlclN5bmMoKQor
ICAgIDogbV9yZWFkVHlwZShSZWFkQXNCaW5hcnlTdHJpbmcpCisgICAgLCBtX3RvdGFsTG9hZGVk
KDApCiAgICAgLCBtX2h0dHBTdGF0dXNDb2RlKDApCiB7CiB9CiAKLXZvaWQgRmlsZVJlYWRlclN5
bmNMb2FkZXI6OnN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwgRXhjZXB0aW9uQ29kZSYgZWMp
CitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBGaWxlUmVhZGVyU3luYzo6cmVhZEFzQXJyYXlCdWZm
ZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiog
YmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7Ci0gICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMg
b3B0aW9uczsKLSAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKLSAgICBvcHRp
b25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwotICAgIG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQgPSBm
YWxzZTsKLSAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSB0cnVlOwotICAgIG9wdGlvbnMu
Y3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gRGVueUNyb3NzT3JpZ2luUmVxdWVzdHM7Ci0KLSAg
ICBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIHJlcXVlc3QsICp0aGlzLCBvcHRpb25zKTsKLQotICAgIGVjID0gKG1faHR0
cFN0YXR1c0NvZGUgPT0gMjAwKSA/IDAgOiBGaWxlUmVhZGVyOjpodHRwU3RhdHVzQ29kZVRvRXhj
ZXB0aW9uQ29kZShtX2h0dHBTdGF0dXNDb2RlKTsKLX0KLQotdm9pZCBGaWxlUmVhZGVyU3luY0xv
YWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQotewotICAgIG1faHR0cFN0YXR1c0NvZGUgPSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOwot
fQotCi12b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCi17Ci0gICAgaWYgKG1fYnVpbGRlcikKLSAgICAg
ICAgbV9idWlsZGVyLT5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJl
Y2VpdmVkKSk7Ci0gICAgZWxzZQotICAgICAgICBtX3Jhd0RhdGEuYXBwZW5kKGRhdGEsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOwotfQotCi12b2lkIEZpbGVSZWFkZXJT
eW5jTG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpCi17Ci19CisgICAgaWYg
KCFibG9iKQorICAgICAgICByZXR1cm4gMDsKIAotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6
ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikKLXsKLSAgICAvLyBUcmVhdCBhcyBpbnRlcm5h
bCBlcnJvci4KLSAgICBtX2h0dHBTdGF0dXNDb2RlID0gNTAwOworICAgIHJlYWQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgYmxvYiwgUmVhZEFzQXJyYXlCdWZmZXIsIGVjKTsKKyAgICByZXR1cm4g
bV9yYXdEYXRhOwogfQogCiBTdHJpbmcgRmlsZVJlYWRlclN5bmM6OnJlYWRBc0JpbmFyeVN0cmlu
ZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBi
bG9iLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTE0MSwxMiArOTEsMTUgQEAgU3RyaW5nIEZpbGVS
ZWFkZXJTeW5jOjpyZWFkQXNEYXRhVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4
ZWN1dGlvbkNvbnQKICAgICBpZiAoIWJsb2IpCiAgICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9T
dHJpbmcoKTsKIAorICAgIG1fYmxvYlR5cGUgPSBibG9iLT50eXBlKCk7CiAgICAgcmVhZChzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBibG9iLCBSZWFkQXNEYXRhVVJMLCBlYyk7CiAgICAgcmV0dXJu
IG1fYnVpbGRlci50b1N0cmluZygpOwogfQogCiB2b2lkIEZpbGVSZWFkZXJTeW5jOjpyZWFkKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2Is
IFJlYWRUeXBlIHJlYWRUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBtX3JlYWRUeXBl
ID0gcmVhZFR5cGU7CisKICAgICAvLyBUaGUgYmxvYiBpcyByZWFkIGJ5IHJvdXRpbmcgdGhyb3Vn
aCB0aGUgcmVxdWVzdCBoYW5kbGluZyBsYXllciBnaXZlbiB0aGUgdGVtcG9yYXJ5IHB1YmxpYyB1
cmwuCiAgICAgS1VSTCB1cmxGb3JSZWFkaW5nID0gQmxvYlVSTDo6Y3JlYXRlUHVibGljVVJMKHNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3JpZ2luKCkpOwogICAgIFRocmVhZGFibGVC
bG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTCh1cmxGb3JSZWFkaW5nLCBibG9iLT51cmwoKSk7
CkBAIC0xNTQsMjUgKzEwNywxOCBAQCB2b2lkIEZpbGVSZWFkZXJTeW5jOjpyZWFkKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqCiAgICAgUmVzb3Vy
Y2VSZXF1ZXN0IHJlcXVlc3QodXJsRm9yUmVhZGluZyk7CiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0
aG9kKCJHRVQiKTsKIAotICAgIEZpbGVSZWFkZXJTeW5jTG9hZGVyIGxvYWRlcigocmVhZFR5cGUg
PT0gUmVhZEFzQmluYXJ5U3RyaW5nKSA/ICZtX2J1aWxkZXIgOiAwKTsKLSAgICBsb2FkZXIuc3Rh
cnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCwgZWMpOwotICAgIFRocmVhZGFibGVC
bG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHVybEZvclJlYWRpbmcpOwotICAgIGlmIChl
YykKLSAgICAgICAgcmV0dXJuOworICAgIFRocmVhZGFibGVMb2FkZXJPcHRpb25zIG9wdGlvbnM7
CisgICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7CisgICAgb3B0aW9ucy5zbmlm
ZkNvbnRlbnQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmZvcmNlUHJlZmxpZ2h0ID0gZmFsc2U7Cisg
ICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsKKyAgICBvcHRpb25zLmNyb3NzT3Jp
Z2luUmVxdWVzdFBvbGljeSA9IERlbnlDcm9zc09yaWdpblJlcXVlc3RzOwogCi0gICAgc3dpdGNo
IChyZWFkVHlwZSkgewotICAgIGNhc2UgUmVhZEFzQmluYXJ5U3RyaW5nOgotICAgICAgICAvLyBO
b3RoaW5nIHRvIGRvIHNpbmNlIHdlIG5lZWQgbm8gY29udmVyc2lvbi4KLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgUmVhZEFzVGV4dDoKLSAgICAgICAgY29udmVydFRvVGV4dChsb2FkZXIucmF3
RGF0YSgpLmRhdGEoKSwgbG9hZGVyLnJhd0RhdGEoKS5zaXplKCksIG1fYnVpbGRlcik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICBjYXNlIFJlYWRBc0RhdGFVUkw6Ci0gICAgICAgIEZpbGVSZWFkZXI6
OmNvbnZlcnRUb0RhdGFVUkwobG9hZGVyLnJhd0RhdGEoKSwgYmxvYi0+dHlwZSgpLCBtX2J1aWxk
ZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIFRocmVhZGFibGVMb2FkZXI6OmxvYWRS
ZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCwgKnRo
aXMsIG9wdGlvbnMpOworIAorICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJC
bG9iVVJMKHVybEZvclJlYWRpbmcpOwogCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ZWMgPSAobV9odHRwU3RhdHVzQ29kZSA9PSAyMDApID8gMCA6IEZpbGVSZWFkZXI6Omh0dHBTdGF0
dXNDb2RlVG9FeGNlcHRpb25Db2RlKG1faHR0cFN0YXR1c0NvZGUpOwogfQogCiB2b2lkIEZpbGVS
ZWFkZXJTeW5jOjpjb252ZXJ0VG9UZXh0KGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplLCBTdHJp
bmdCdWlsZGVyJiBidWlsZGVyKQpAQCAtMTkxLDYgKzEzNyw3MCBAQCB2b2lkIEZpbGVSZWFkZXJT
eW5jOjpjb252ZXJ0VG9UZXh0KGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplLCBTdHJpbmdCdWls
ZGVyJiBidQogICAgIGJ1aWxkZXIuYXBwZW5kKGRlY29kZXItPmZsdXNoKCkpOwogfQogCit2b2lk
IEZpbGVSZWFkZXJTeW5jOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCit7CisgICAgbV9odHRwU3RhdHVzQ29kZSA9IHJlc3BvbnNlLmh0dHBTdGF0
dXNDb2RlKCk7CisKKyAgICBsb25nIGxvbmcgdG90YWxCeXRlcyA9IHJlc3BvbnNlLmV4cGVjdGVk
Q29udGVudExlbmd0aCgpOworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4odG90YWxCeXRlcykgPiAgc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpKSB7CisgICAgICAgIG1faHR0cFN0YXR1c0Nv
ZGUgPSA1MDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAobV9yZWFkVHlwZSAh
PSBSZWFkQXNCaW5hcnlTdHJpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFtX3Jhd0RhdGEpOworICAg
ICAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih0b3RhbEJ5dGVzKSwgMSk7CisgICAgfQorfQorCit2b2lkIEZpbGVSZWFkZXJTeW5jOjpkaWRS
ZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAg
aWYgKGhhc0Vycm9yKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHN3aXRjaCAobV9yZWFkVHlw
ZSkgeworICAgIGNhc2UgUmVhZEFzQmluYXJ5U3RyaW5nOgorICAgICAgICBtX2J1aWxkZXIuYXBw
ZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZlZCkpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBSZWFkQXNBcnJheUJ1ZmZlcjoKKyAgICBjYXNlIFJlYWRBc1Rl
eHQ6CisgICAgY2FzZSBSZWFkQXNEYXRhVVJMOgorICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8
Y2hhcio+KG1fcmF3RGF0YS0+ZGF0YSgpKSArIG1fdG90YWxMb2FkZWQsIGRhdGEsIGxlbmd0aFJl
Y2VpdmVkKTsKKyAgICAgICAgbV90b3RhbExvYWRlZCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bGVuZ3RoUmVjZWl2ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgRmlsZVJlYWRlclN5bmM6OmRpZEZpbmlzaExvYWRpbmco
dW5zaWduZWQgbG9uZykKK3sKKyAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgc3dpdGNoIChtX3JlYWRUeXBlKSB7CisgICAgY2FzZSBSZWFkQXNBcnJheUJ1ZmZlcjoK
KyAgICBjYXNlIFJlYWRBc0JpbmFyeVN0cmluZzoKKyAgICAgICAgLy8gTm90aGluZyB0byBkbyBz
aW5jZSB3ZSBuZWVkIG5vIGNvbnZlcnNpb24uCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJl
YWRBc1RleHQ6CisgICAgICAgIGNvbnZlcnRUb1RleHQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+
KG1fcmF3RGF0YS0+ZGF0YSgpKSwgbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCksIG1fYnVpbGRlcik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlYWRBc0RhdGFVUkw6CisgICAgICAgIEZpbGVS
ZWFkZXI6OmNvbnZlcnRUb0RhdGFVUkwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fcmF3RGF0
YS0+ZGF0YSgpKSwgbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCksIG1fYmxvYlR5cGUsIG1fYnVpbGRl
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBGaWxlUmVhZGVyU3luYzo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikK
K3sKKyAgICAvLyBUcmVhdCBhcyBpbnRlcm5hbCBlcnJvci4KKyAgICBtX2h0dHBTdGF0dXNDb2Rl
ID0gNTAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAgCiAjZW5kaWYgLy8gRU5BQkxF
KEJMT0IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaCBiL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oCmluZGV4IGNiMGUwMGQuLjQ0NGNhZjkgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oCisrKyBiL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oCkBAIC0zNCwxNiArMzQsMTggQEAKICNpZiBFTkFCTEUo
QkxPQikKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEFy
cmF5QnVmZmVyOwogY2xhc3MgQmxvYjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAK
LWNsYXNzIEZpbGVSZWFkZXJTeW5jIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVJlYWRlclN5bmM+
IHsKK2NsYXNzIEZpbGVSZWFkZXJTeW5jIDogcHVibGljIFJlZkNvdW50ZWQ8RmlsZVJlYWRlclN5
bmM+LCBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8RmlsZVJlYWRlclN5bmM+IGNyZWF0ZSgpCiAgICAgewpAQCAtNTIsNiArNTQs
MTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+RmlsZVJlYWRlclN5bmMoKSB7IH0KIAorICAg
IC8vIFRocmVhZGFibGVMb2FkZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJl
c3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExv
YWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFp
bChjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBy
ZWFkQXNBcnJheUJ1ZmZlcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICBTdHJpbmcgcmVhZEFzQmluYXJ5U3RyaW5nKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBCbG9iKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFN0cmluZyByZWFkQXNUZXh0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2Is
IEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKQEAgLTYwLDIxICs2OSwzMSBAQCBwdWJsaWM6CiAg
ICAgU3RyaW5nIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBjb25z
dCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlYWRBc0Rh
dGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7CiAK
KyAgICBib29sIGhhc0Vycm9yKCkgY29uc3QgeyByZXR1cm4gbV9odHRwU3RhdHVzQ29kZSAmJiBt
X2h0dHBTdGF0dXNDb2RlICE9IDIwMDsgfQorCiBwcml2YXRlOgogICAgIGVudW0gUmVhZFR5cGUg
eworICAgICAgICBSZWFkQXNBcnJheUJ1ZmZlciwKICAgICAgICAgUmVhZEFzQmluYXJ5U3RyaW5n
LAogICAgICAgICBSZWFkQXNUZXh0LAogICAgICAgICBSZWFkQXNEYXRhVVJMCiAgICAgfTsKIAot
ICAgIEZpbGVSZWFkZXJTeW5jKCkgeyB9CisgICAgRmlsZVJlYWRlclN5bmMoKTsKIAogICAgIHZv
aWQgcmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIFJlYWRUeXBlLCBFeGNlcHRp
b25Db2RlJik7CiAgICAgdm9pZCBjb252ZXJ0VG9UZXh0KGNvbnN0IGNoYXIqIGRhdGEsIGludCBz
aXplLCBTdHJpbmdCdWlsZGVyJik7CiAKICAgICBTdHJpbmdCdWlsZGVyIG1fYnVpbGRlcjsKIAor
ICAgIC8vIFdlIGhhdmUgdG8ga2VlcCB0cmFjayBvZiBhbGwgdGhlIHJhdyBkYXRhIGZvciBhbGwg
cmVhZGluZ3Mgb3RoZXIgdGhhbiBiaW5hcnkgc3RyaW5nLgorICAgIFJlZlB0cjxBcnJheUJ1ZmZl
cj4gbV9yYXdEYXRhOworCiAgICAgU3RyaW5nIG1fZW5jb2Rpbmc7CisgICAgU3RyaW5nIG1fYmxv
YlR5cGU7CisgICAgUmVhZFR5cGUgbV9yZWFkVHlwZTsKKyAgICB1bnNpZ25lZCBtX3RvdGFsTG9h
ZGVkOworICAgIGludCBtX2h0dHBTdGF0dXNDb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlkbCBiL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5pZGwKaW5kZXggNzI4MThiMS4uMzgxZDQ4MyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlkbAorKysgYi9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsCkBAIC0zNCw2ICszNCw4IEBAIG1vZHVsZSBo
dG1sIHsKICAgICAgICAgQ2FuQmVDb25zdHJ1Y3RlZCwKICAgICAgICAgTm9TdGF0aWNUYWJsZXMK
ICAgICBdIEZpbGVSZWFkZXJTeW5jIHsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRdIEFycmF5QnVmZmVyIHJlYWRBc0FycmF5QnVmZmVyKGluIEJsb2IgYmxvYikKKyAg
ICAgICAgICAgIHJhaXNlcyhGaWxlRXhjZXB0aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQsIENvbnZlcnRTY3JpcHRTdHJpbmddIERPTVN0cmluZyByZWFkQXNC
aW5hcnlTdHJpbmcoaW4gQmxvYiBibG9iKQogICAgICAgICAgICAgcmFpc2VzKEZpbGVFeGNlcHRp
b24pOwogICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQ29udmVydFNj
cmlwdFN0cmluZ10gRE9NU3RyaW5nIHJlYWRBc1RleHQoaW4gQmxvYiBibG9iLCBpbiBbT3B0aW9u
YWxdIERPTVN0cmluZyBlbmNvZGluZykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMv
QXJyYXlCdWZmZXIuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKaW5k
ZXggMDE0Y2MxZS4uZWM4NDkxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJh
eUJ1ZmZlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKQEAg
LTUzLDYgKzUzLDcgQEAgUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0
ZShBcnJheUJ1ZmZlciogb3RoZXIpCiAKIEFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcih2b2lkKiBk
YXRhLCB1bnNpZ25lZCBzaXplSW5CeXRlcykKICAgICA6IG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0
ZXMpCisgICAgLCBtX2NhcGFjaXR5SW5CeXRlcyhzaXplSW5CeXRlcykKICAgICAsIG1fZGF0YShk
YXRhKQogewogfQpAQCAtNzIsNiArNzMsMTIgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVM
ZW5ndGgoKSBjb25zdAogICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOwogfQogCit2b2lkIEFycmF5
QnVmZmVyOjpzZXRCeXRlTGVuZ3RoKHVuc2lnbmVkIHNpemUpCit7CisgICAgQVNTRVJUKHNpemUg
PD0gbV9jYXBhY2l0eUluQnl0ZXMpOworICAgIG1fc2l6ZUluQnl0ZXMgPSBzaXplOworfQorCiBB
cnJheUJ1ZmZlcjo6fkFycmF5QnVmZmVyKCkKIHsKICAgICBXVEY6OmZhc3RGcmVlKG1fZGF0YSk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmggYi9XZWJDb3Jl
L2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmgKaW5kZXggZjUzODA4MC4uMjc3MDFmMSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oCisrKyBiL1dlYkNvcmUvaHRt
bC9jYW52YXMvQXJyYXlCdWZmZXIuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBBcnJheUJ1ZmZl
ciA6IHB1YmxpYyBSZWZDb3VudGVkPEFycmF5QnVmZmVyPiB7CiAgICAgdm9pZCogZGF0YSgpOwog
ICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdDsKICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRCeXRlTGVuZ3RoKHVuc2lnbmVkKTsKIAogICAgIH5BcnJheUJ1
ZmZlcigpOwogCkBAIC00Nyw2ICs0OCw3IEBAIGNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJl
ZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKICAgICBBcnJheUJ1ZmZlcih1bnNpZ25lZCBudW1FbGVt
ZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgdm9pZCogdHJ5QWxs
b2NhdGUodW5zaWduZWQgbnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAg
ICAgdW5zaWduZWQgbV9zaXplSW5CeXRlczsKKyAgICB1bnNpZ25lZCBtX2NhcGFjaXR5SW5CeXRl
czsKICAgICB2b2lkKiBtX2RhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9U
aHJlYWRhYmxlTG9hZGVyQ2xpZW50LmggYi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVy
Q2xpZW50LmgKaW5kZXggYjhhNjU4NC4uYmNmNjhiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2Fk
ZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFi
bGVMb2FkZXJDbGllbnQuaApAQCAtMzEsNiArMzEsOCBAQAogI2lmbmRlZiBUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50X2gKICNkZWZpbmUgVGhyZWFkYWJsZUxvYWRlckNsaWVudF9oCiAKKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3Mg
UmVzb3VyY2VFcnJvcjsK
</data>
<flag name="review"
          id="61554"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="61555"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71826</attachid>
            <date>2010-10-25 17:40:45 -0700</date>
            <delta_ts>2010-10-26 18:17:37 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47691_5</filename>
            <type>text/plain</type>
            <size>52611</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzYWM5ZGE3Li40OTQ4ZTdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTAtMTAt
MjUgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4g
RmlsZVJlYWRlciBhbmQgRmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NjkxCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3JlYWQt
ZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1jb21tb24uanM6CisgICAgICAgIChyZWFkQmxvYkFzQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQXJy
YXlCdWZmZXJTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nU3luYyk6Cisg
ICAgICAgIChfcmVhZEJsb2JBc1RleHRTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzRGF0YVVS
TFN5bmMpOgorICAgICAgICAobG9nUmVzdWx0KToKKyAgICAgICAgKGxvYWRlZCk6CisgICAgICAg
IChfdG9TdHJpbmcpOgorICAgICAgICAoX2lzQVNDSUlTdHJpbmcpOgorICAgICAgICAoX3RvSGV4
YWRlY2ltYWwpOgorICAgICAgICAoX2dldEVsZW1lbnRBdCk6CisgICAgICAgICogZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanM6CisgICAgICAgICh0ZXN0UmVhZGlu
Z05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIpOgorICAgICAgICAodGVzdFJlYWRpbmdFbXB0
eUZpbGVBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxl
QXNBcnJheUJ1ZmZlcik6CisgICAgICAgICh0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVm
ZmVyKToKKyAgICAgICAgKHRlc3RNdWx0aXBsZVJlYWRzKToKKyAgICAgICAgKiBmYXN0L2ZpbGVz
L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZpbGUtc3luYy5qczoKKyAgICAgICAgKHRl
c3RNdWx0aXBsZVJlYWRzU3luYyk6CisgICAgICAgICogZmFzdC9maWxlcy93b3JrZXJzL3dvcmtl
ci1yZWFkLWJsb2Itc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy93b3Jr
ZXJzL3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
ZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxlLXN5bmMtZXhwZWN0ZWQudHh0OgorCiAyMDEw
LTEwLTI1ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCB0ZXN0IGV4cGVjdGF0aW9ucyB1cGRhdGUuIE1hcmsgV2ViR0wgbGF5b3V0IHRlc3QK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFzeW5jLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFzeW5jLWV4cGVjdGVk
LnR4dAppbmRleCBkOTRlYWJiLi4yODQ2NmQ1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9maWxlcy9yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsMTAgQEAKIAor
VGVzdCByZWFkaW5nIGEgbm9uLWV4aXN0ZW50IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0
YXRlOiAwCitSZWNlaXZlZCBlcnJvciBldmVudAorcmVhZHlTdGF0ZTogMgorZXJyb3IgY29kZTog
MQorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgbm9uLWV4aXN0ZW50IGZp
bGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgZXJyb3IgZXZlbnQK
QEAgLTE3LDYgKzIzLDE1IEBAIFJlY2VpdmVkIGVycm9yIGV2ZW50CiByZWFkeVN0YXRlOiAyCiBl
cnJvciBjb2RlOiAxCiBSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYW4gZW1w
dHkgZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFy
dCBldmVudAorcmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTog
MgorcmVzdWx0IHNpemU6IDAKK3Jlc3VsdDogCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBUZXN0
IHJlYWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBS
ZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKQEAgLTQ0LDYgKzU5LDE1IEBAIHJlYWR5U3RhdGU6IDIK
IHJlc3VsdCBzaXplOiA1CiByZXN1bHQ6IGRhdGE6CiBSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CitU
ZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAor
UmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2
ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBIZWxsbworUmVjZWl2
ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBiaW5hcnkgc3Ry
aW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKQEAgLTUzLDYgKzc3
LDE1IEBAIHJlYWR5U3RhdGU6IDIKIHJlc3VsdCBzaXplOiA1CiByZXN1bHQ6IEhlbGxvCiBSZWNl
aXZlZCBsb2FkZW5kIGV2ZW50CitUZXN0IHJlYWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBhcnJheSBi
dWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlTdGF0
ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6IDkK
K3Jlc3VsdDogMHgwIDB4MSAweDIgMHg4MCAweDgxIDB4ODIgMHhmZCAweGZlIDB4ZmYKK1JlY2Vp
dmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxlIGFzIGJpbmFyeSBz
dHJpbmcKIHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGxvYWRzdGFydCBldmVudApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMgYi9MYXlv
dXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWNvbW1vbi5qcwppbmRleCBhYmUzMjRm
Li4zYjc0NDdhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9y
ZWFkLWNvbW1vbi5qcworKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFk
LWNvbW1vbi5qcwpAQCAtMTEsNiArMTEsMTQgQEAgZnVuY3Rpb24gYnVpbGRCbG9iKGl0ZW1zLCBj
b250ZW50VHlwZSwgYnVpbGRlcikKIH0KIAogLy8gUmVhZHMgYSBibG9iIGVpdGhlciBhc3luY2hy
b25vdXNseSBvciBzeW5jaHJvbm91c2x5LgorZnVuY3Rpb24gcmVhZEJsb2JBc0FycmF5QnVmZmVy
KHRlc3RGaWxlcywgYmxvYikKK3sKKyAgICBpZiAoaXNSZWFkQXNBc3luYygpKQorICAgICAgICBf
cmVhZEJsb2JBc0FycmF5QnVmZmVyQXN5bmModGVzdEZpbGVzLCBibG9iKTsKKyAgICBlbHNlCisg
ICAgICAgIF9yZWFkQmxvYkFzQXJyYXlCdWZmZXJTeW5jKHRlc3RGaWxlcywgYmxvYik7Cit9CisK
IGZ1bmN0aW9uIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCBibG9iKQogewogICAg
IGlmIChpc1JlYWRBc0FzeW5jKCkpCkBAIC0zNiw2ICs0NCwxMiBAQCBmdW5jdGlvbiByZWFkQmxv
YkFzRGF0YVVSTCh0ZXN0RmlsZXMsIGJsb2IpCiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBhc3luY2hy
b25vdXNseS4KK2Z1bmN0aW9uIF9yZWFkQmxvYkFzQXJyYXlCdWZmZXJBc3luYyh0ZXN0RmlsZXMs
IGJsb2IpCit7CisgICAgdmFyIHJlYWRlciA9IGNyZWF0ZVJlYWRlckFzeW5jKHRlc3RGaWxlcyk7
CisgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpCit9CisKIGZ1bmN0aW9uIF9yZWFk
QmxvYkFzQmluYXJ5U3RyaW5nQXN5bmModGVzdEZpbGVzLCBibG9iKQogewogICAgIHZhciByZWFk
ZXIgPSBjcmVhdGVSZWFkZXJBc3luYyh0ZXN0RmlsZXMpOwpAQCAtNTUsMTIgKzY5LDI1IEBAIGZ1
bmN0aW9uIF9yZWFkQmxvYkFzRGF0YVVSTEFzeW5jKHRlc3RGaWxlcywgYmxvYikKIH0KIAogLy8g
UmVhZHMgYSBibG9iIHN5bmNocm9ub3VzbHkuCitmdW5jdGlvbiBfcmVhZEJsb2JBc0FycmF5QnVm
ZmVyU3luYyh0ZXN0RmlsZXMsIGJsb2IpCit7CisgICAgdmFyIHJlYWRlciA9IGNyZWF0ZVJlYWRl
clN5bmMoKTsKKyAgICB0cnkgeworICAgICAgICB2YXIgcmVzdWx0ID0gcmVhZGVyLnJlYWRBc0Fy
cmF5QnVmZmVyKGJsb2IpOworICAgICAgICBsb2dSZXN1bHQocmVzdWx0KTsKKyAgICB9IGNhdGNo
IChlcnJvcikgeworICAgICAgICBsb2coIlJlY2VpdmVkIGV4Y2VwdGlvbiAiICsgZXJyb3IuY29k
ZSArICI6ICIgKyBlcnJvci5uYW1lKTsKKyAgICB9CisKKyAgICBydW5OZXh0VGVzdCh0ZXN0Rmls
ZXMpOworfQorCiBmdW5jdGlvbiBfcmVhZEJsb2JBc0JpbmFyeVN0cmluZ1N5bmModGVzdEZpbGVz
LCBibG9iKQogewogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CiAgICAgdHJ5
IHsKICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoYmxvYik7
Ci0gICAgICAgIGxvZyhyZXN1bHQpOworICAgICAgICBsb2dSZXN1bHQocmVzdWx0KTsKICAgICB9
IGNhdGNoIChlcnJvcikgewogICAgICAgICBsb2coIlJlY2VpdmVkIGV4Y2VwdGlvbiAiICsgZXJy
b3IuY29kZSArICI6ICIgKyBlcnJvci5uYW1lKTsKICAgICB9CkBAIC03Myw3ICsxMDAsNyBAQCBm
dW5jdGlvbiBfcmVhZEJsb2JBc1RleHRTeW5jKHRlc3RGaWxlcywgYmxvYiwgZW5jb2RpbmcpCiAg
ICAgdmFyIHJlYWRlciA9IGNyZWF0ZVJlYWRlclN5bmMoKTsKICAgICB0cnkgewogICAgICAgICB2
YXIgcmVzdWx0ID0gcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpOwotICAgICAgICBs
b2cocmVzdWx0KTsKKyAgICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiAgICAgfSBjYXRjaCAoZXJy
b3IpIHsKICAgICAgICAgbG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAi
OiAiICsgZXJyb3IubmFtZSk7CiAgICAgfQpAQCAtODYsNyArMTEzLDcgQEAgZnVuY3Rpb24gX3Jl
YWRCbG9iQXNEYXRhVVJMU3luYyh0ZXN0RmlsZXMsIGJsb2IpCiAgICAgdmFyIHJlYWRlciA9IGNy
ZWF0ZVJlYWRlclN5bmMoKTsKICAgICB0cnkgewogICAgICAgICB2YXIgcmVzdWx0ID0gcmVhZGVy
LnJlYWRBc0RhdGFVUkwoYmxvYik7Ci0gICAgICAgIGxvZyhyZXN1bHQpOworICAgICAgICBsb2dS
ZXN1bHQocmVzdWx0KTsKICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICBsb2coIlJlY2Vp
dmVkIGV4Y2VwdGlvbiAiICsgZXJyb3IuY29kZSArICI6ICIgKyBlcnJvci5uYW1lKTsKICAgICB9
CkBAIC0xMTUsNiArMTQyLDE5IEBAIGZ1bmN0aW9uIGNyZWF0ZVJlYWRlclN5bmMoKQogICAgIHJl
dHVybiBuZXcgRmlsZVJlYWRlclN5bmMoKTsKIH0KIAorLy8gJ3Jlc3VsdCcgY2FuIGJlIGVpdGhl
ciBhbiBBcnJheUJ1ZmZlciBvYmplY3Qgb3IgYSBzdHJpbmcuCitmdW5jdGlvbiBsb2dSZXN1bHQo
cmVzdWx0KQoreworICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnKSB7CisgICAgICAg
IGxvZygicmVzdWx0IHNpemU6ICIgKyByZXN1bHQuYnl0ZUxlbmd0aCk7CisgICAgICAgIHJlc3Vs
dCA9IG5ldyBVaW50OEFycmF5KHJlc3VsdCwgMCwgcmVzdWx0LmJ5dGVMZW5ndGgpOworICAgIH0g
ZWxzZQorICAgICAgICBsb2coInJlc3VsdCBzaXplOiAiICsgcmVzdWx0Lmxlbmd0aCk7CisKKyAg
ICB2YXIgcmVzdWx0T3V0cHV0ID0gX2lzQVNDSUlTdHJpbmcocmVzdWx0KSA/IF90b1N0cmluZyhy
ZXN1bHQpIDogX3RvSGV4YWRlY2ltYWwocmVzdWx0KTsKKyAgICBsb2coInJlc3VsdDogIiArIHJl
c3VsdE91dHB1dCk7Cit9CisKIGZ1bmN0aW9uIGxvZ0V2ZW50KGV2ZW50KQogewogICAgIGxvZygi
UmVjZWl2ZWQgIiArIGV2ZW50LnR5cGUgKyAiIGV2ZW50Iik7CkBAIC0xMzAsMTEgKzE3MCw5IEBA
IGZ1bmN0aW9uIGxvYWRlZChldmVudCkKIHsKICAgICBsb2dFdmVudChldmVudCk7CiAgICAgbG9n
KCJyZWFkeVN0YXRlOiAiICsgZXZlbnQudGFyZ2V0LnJlYWR5U3RhdGUpOwotICAgIGxvZygicmVz
dWx0IHNpemU6ICIgKyBldmVudC50YXJnZXQucmVzdWx0Lmxlbmd0aCk7CiAKICAgICB2YXIgcmVz
dWx0ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDsKLSAgICB2YXIgcmVzdWx0T3V0cHV0ID0gX2lzQVND
SUlTdHJpbmcocmVzdWx0KSA/IHJlc3VsdCA6IF90b0hleGFkZWNpbWFsKHJlc3VsdCk7Ci0gICAg
bG9nKCJyZXN1bHQ6ICIgKyByZXN1bHRPdXRwdXQpOworICAgIGxvZ1Jlc3VsdChyZXN1bHQpOwog
fQogCiBmdW5jdGlvbiBsb2FkRmFpbGVkKGV2ZW50KQpAQCAtMTUxLDIzICsxODksNDIgQEAgZnVu
Y3Rpb24gbG9hZEVuZGVkKHRlc3RGaWxlcywgZXZlbnQpCiB9CiAKIC8vIEhlbHBlciBmdW5jdGlv
bnMuCi1mdW5jdGlvbiBfaXNBU0NJSVN0cmluZyhzdHIpCisKKy8vICd2YWx1ZScgY2FuIGJlIGVp
dGhlciBhbiBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0IG9yIGEgc3RyaW5nLgorZnVuY3Rpb24gX3Rv
U3RyaW5nKHZhbHVlKQogewotICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgIGlmIChzdHIuY2hhckNvZGVBdChpKSA+PSAxMjgpCisgICAgaWYgKHR5cGVv
ZiB2YWx1ZSA9PSAnc3RyaW5nJykKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIHZhciByZXN1
bHQgPSAiIjsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKQorICAg
ICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh2YWx1ZVtpXSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworLy8gJ3ZhbHVlJyBjYW4gYmUgZWl0aGVyIGFuIEFycmF5QnVmZmVyVmll
dyBvYmplY3Qgb3IgYSBzdHJpbmcuCitmdW5jdGlvbiBfaXNBU0NJSVN0cmluZyh2YWx1ZSkKK3sK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGlm
IChfZ2V0RWxlbWVudEF0KHZhbHVlLCBpKSA+PSAxMjgpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi1mdW5jdGlvbiBfdG9IZXhhZGVjaW1h
bChzdHIpCisvLyAndmFsdWUnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXJWaWV3IG9iamVj
dCBvciBhIHN0cmluZy4KK2Z1bmN0aW9uIF90b0hleGFkZWNpbWFsKHZhbHVlKQogewogICAgIHZh
ciByZXN1bHQgPSAiIjsKLSAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkg
ewotICAgICAgICB2YXIgaGV4ID0gIjB4IiArIChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpLnRv
U3RyaW5nKDE2KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7
CisgICAgICAgIHZhciBoZXggPSAiMHgiICsgKF9nZXRFbGVtZW50QXQodmFsdWUsIGkpICYgMHhG
RikudG9TdHJpbmcoMTYpOwogICAgICAgICBpZiAoaSA+IDApCiAgICAgICAgICAgICByZXN1bHQg
Kz0gIiAiOwogICAgICAgICByZXN1bHQgKz0gaGV4OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0
OwogfQorCitmdW5jdGlvbiBfZ2V0RWxlbWVudEF0KHZhbHVlLCBpKQoreworICAgIHJldHVybiAo
dHlwZW9mIHZhbHVlID09ICdzdHJpbmcnKSA/IHZhbHVlLmNoYXJDb2RlQXQoaSkgOiB2YWx1ZVtp
XTsKK30KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQt
ZmlsZS10ZXN0LWNhc2VzLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVh
ZC1maWxlLXRlc3QtY2FzZXMuanMKaW5kZXggZThiMmM5Yy4uMzhlZTEyMCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanMK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2Fz
ZXMuanMKQEAgLTEsMTEgKzEsMTUgQEAKIHZhciB0ZXN0Q2FzZXMgPSBbCisgICAgInRlc3RSZWFk
aW5nTm9uRXhpc3RlbnRGaWxlQXNBcnJheUJ1ZmZlciIsCiAgICAgInRlc3RSZWFkaW5nTm9uRXhp
c3RlbnRGaWxlQXNCaW5hcnlTdHJpbmciLAogICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50Rmls
ZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNEYXRhVVJMIiwKKyAg
ICAidGVzdFJlYWRpbmdFbXB0eUZpbGVBc0FycmF5QnVmZmVyIiwKICAgICAidGVzdFJlYWRpbmdF
bXB0eUZpbGVBc0JpbmFyeVN0cmluZyIsCiAgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNUZXh0
IiwKICAgICAidGVzdFJlYWRpbmdFbXB0eUZpbGVBc0RhdGFVUkwiLAorICAgICJ0ZXN0UmVhZGlu
Z1VURjhFbmNvZGVkRmlsZUFzQXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0UmVhZGluZ1VURjhFbmNv
ZGVkRmlsZUFzQmluYXJ5U3RyaW5nIiwKKyAgICAidGVzdFJlYWRpbmdCaW5hcnlGaWxlQXNBcnJh
eUJ1ZmZlciIsCiAgICAgInRlc3RSZWFkaW5nQmluYXJ5RmlsZUFzQmluYXJ5U3RyaW5nIiwKICAg
ICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc1RleHQiLAogICAgICJ0ZXN0UmVhZGluZ1VU
RjE2QkVCT01FbmNvZGVkRmlsZUFzVGV4dCIsCkBAIC0yOSw2ICszMywxMiBAQCBmdW5jdGlvbiBy
dW5OZXh0VGVzdCh0ZXN0RmlsZXMpCiAgICAgfQogfQogCitmdW5jdGlvbiB0ZXN0UmVhZGluZ05v
bkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIodGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCBy
ZWFkaW5nIGEgbm9uLWV4aXN0ZW50IGZpbGUgYXMgYXJyYXkgYnVmZmVyIik7CisgICAgcmVhZEJs
b2JBc0FycmF5QnVmZmVyKHRlc3RGaWxlcywgdGVzdEZpbGVzWydub24tZXhpc3RlbnQnXSk7Cit9
CisKIGZ1bmN0aW9uIHRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNCaW5hcnlTdHJpbmcodGVz
dEZpbGVzKQogewogICAgIGxvZygiVGVzdCByZWFkaW5nIGEgbm9uLWV4aXN0ZW50IGZpbGUgYXMg
YmluYXJ5IHN0cmluZyIpOwpAQCAtNDcsNiArNTcsMTIgQEAgZnVuY3Rpb24gdGVzdFJlYWRpbmdO
b25FeGlzdGVudEZpbGVBc0RhdGFVUkwodGVzdEZpbGVzKQogICAgIHJlYWRCbG9iQXNEYXRhVVJM
KHRlc3RGaWxlcywgdGVzdEZpbGVzWydub24tZXhpc3RlbnQnXSk7CiB9CiAKK2Z1bmN0aW9uIHRl
c3RSZWFkaW5nRW1wdHlGaWxlQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJU
ZXN0IHJlYWRpbmcgYW4gZW1wdHkgZmlsZSBhcyBhcnJheSBidWZmZXIiKTsKKyAgICByZWFkQmxv
YkFzQXJyYXlCdWZmZXIodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ2VtcHR5LWZpbGUnXSk7Cit9CisK
IGZ1bmN0aW9uIHRlc3RSZWFkaW5nRW1wdHlGaWxlQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzKQog
ewogICAgIGxvZygiVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYmluYXJ5IHN0cmluZyIp
OwpAQCAtNjUsMTIgKzgxLDI0IEBAIGZ1bmN0aW9uIHRlc3RSZWFkaW5nRW1wdHlGaWxlQXNEYXRh
VVJMKHRlc3RGaWxlcykKICAgICByZWFkQmxvYkFzRGF0YVVSTCh0ZXN0RmlsZXMsIHRlc3RGaWxl
c1snZW1wdHktZmlsZSddKTsKIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZp
bGVBc0FycmF5QnVmZmVyKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVU
Ri04IGZpbGUgYXMgYXJyYXkgYnVmZmVyIik7CisgICAgcmVhZEJsb2JBc0FycmF5QnVmZmVyKHRl
c3RGaWxlcywgdGVzdEZpbGVzWydVVEY4LWZpbGUnXSk7Cit9CisKIGZ1bmN0aW9uIHRlc3RSZWFk
aW5nVVRGOEVuY29kZWRGaWxlQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzKQogewogICAgIGxvZygi
VGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CiAgICAgcmVhZEJs
b2JBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMsIHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwogfQog
CitmdW5jdGlvbiB0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVmZmVyKHRlc3RGaWxlcykK
K3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxlIGFzIGFycmF5IGJ1ZmZlciIp
OworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIHRlc3RGaWxlc1snYmluYXJ5
LWZpbGUnXSk7Cit9CisKIGZ1bmN0aW9uIHRlc3RSZWFkaW5nQmluYXJ5RmlsZUFzQmluYXJ5U3Ry
aW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxlIGFz
IGJpbmFyeSBzdHJpbmciKTsKQEAgLTEzNSw2ICsxNjMsNyBAQCBmdW5jdGlvbiB0ZXN0TXVsdGlw
bGVSZWFkcyh0ZXN0RmlsZXMpCiAKICAgICBsb2coIlRlc3QgY2FsbGluZyBtdWx0aXBsZSByZWFk
IG1ldGhvZHMgYW5kIG9ubHkgbGFzdCBvbmUgaXMgcHJvY2Vzc2VkIik7CiAgICAgdmFyIHJlYWRl
ciA9IGNyZWF0ZVJlYWRlckFzeW5jKCk7CisgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKHRl
c3RGaWxlc1snVVRGOC1maWxlJ10pOwogICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcodGVz
dEZpbGVzWydVVEY4LWZpbGUnXSk7CiAgICAgcmVhZGVyLnJlYWRBc1RleHQodGVzdEZpbGVzWydV
VEY4LWZpbGUnXSk7CiAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwodGVzdEZpbGVzWydVVEY4LWZp
bGUnXSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvcmVzb3Vy
Y2VzL3dvcmtlci1yZWFkLWZpbGUtc3luYy5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29y
a2Vycy9yZXNvdXJjZXMvd29ya2VyLXJlYWQtZmlsZS1zeW5jLmpzCmluZGV4IGY1Zjc2ZWIuLjQy
MDMwZDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy9yZXNvdXJj
ZXMvd29ya2VyLXJlYWQtZmlsZS1zeW5jLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMv
d29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXJlYWQtZmlsZS1zeW5jLmpzCkBAIC0xLDUgKzEsMTkg
QEAKIGltcG9ydFNjcmlwdHMoIi4uLy4uL3Jlc291cmNlcy9yZWFkLWNvbW1vbi5qcyIsICIuLi8u
Li9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanMiLCAid29ya2VyLXJlYWQtY29tbW9u
LmpzIik7CiAKKy8vIEFkZCBzcGVjaWZpYyB0ZXN0IGZvciBGaWxlUmVhZGVyU3luYy4KK3Rlc3RD
YXNlcy5wdXNoKCJ0ZXN0TXVsdGlwbGVSZWFkc1N5bmMiKTsKKworZnVuY3Rpb24gdGVzdE11bHRp
cGxlUmVhZHNTeW5jKHRlc3RGaWxlcykKK3sKKyAgICBsb2coIlRlc3QgY2FsbGluZyBtdWx0aXBs
ZSByZWFkIG1ldGhvZHMgaW4gYSByb3ciKTsKKyAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVy
U3luYygpOworICAgIGxvZ1Jlc3VsdChyZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIodGVzdEZpbGVz
WydVVEY4LWZpbGUnXSkpOworICAgIGxvZ1Jlc3VsdChyZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5n
KHRlc3RGaWxlc1snYmluYXJ5LWZpbGUnXSkpOworICAgIGxvZ1Jlc3VsdChyZWFkZXIucmVhZEFz
RGF0YVVSTCh0ZXN0RmlsZXNbJ2VtcHR5LWZpbGUnXSkpOworCisgICAgcnVuTmV4dFRlc3QodGVz
dEZpbGVzKTsKK30KKwogZnVuY3Rpb24gaXNSZWFkQXNBc3luYygpCiB7CiAgICAgcmV0dXJuIGZh
bHNlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1y
ZWFkLWJsb2Itc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtl
cnMvd29ya2VyLXJlYWQtYmxvYi1zeW5jLWV4cGVjdGVkLnR4dAppbmRleCAyY2U1OWIyLi5iMTc2
NzgxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJl
YWQtYmxvYi1zeW5jLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dv
cmtlcnMvd29ya2VyLXJlYWQtYmxvYi1zeW5jLWV4cGVjdGVkLnR4dApAQCAtNSwzOCArNSw1NSBA
QCBSZWNlaXZlZCBleGNlcHRpb24gMTogTk9UX0ZPVU5EX0VSUgogVGVzdCByZWFkaW5nIGEgYmxv
YiBjb250YWluaW5nIGV4aXN0ZW50IGFuZCBub24tZXhpc3RlbnQgZmlsZQogUmVjZWl2ZWQgZXhj
ZXB0aW9uIDE6IE5PVF9GT1VORF9FUlIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBl
bXB0eSBmaWxlCi0KK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxv
YiBjb250YWluaW5nIGVtcHR5IHRleHQKLQorcmVzdWx0IHNpemU6IDAKK3Jlc3VsdDogCiBUZXN0
IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgZW1wdHkgZmlsZXMgYW5kIGVtcHR5IHRleHRzCi0K
K3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5n
IHNpbmdsZSBmaWxlCi1IZWxsbworcmVzdWx0IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KIFRlc3Qg
cmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgdGV4dAotRmlyc3QKK3Jlc3VsdCBzaXpl
OiA1CityZXN1bHQ6IEZpcnN0CiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xl
IHRleHQgYXMgZGF0YSBVUkwKLWRhdGE6YmFzZTY0LFJtbHljM1E9CityZXN1bHQgc2l6ZTogMjAK
K3Jlc3VsdDogZGF0YTpiYXNlNjQsUm1seWMzUT0KIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFp
bmluZyBzaW5nbGUgdGV4dCBhcyBkYXRhIFVSTCAob3B0aW9uYWwgY29udGVudCB0eXBlIHByb3Zp
ZGVkKQotZGF0YTp0eXBlL2ZvbztiYXNlNjQsUm1seWMzUT0KK3Jlc3VsdCBzaXplOiAyOQorcmVz
dWx0OiBkYXRhOnR5cGUvZm9vO2Jhc2U2NCxSbWx5YzNRPQogVGVzdCByZWFkaW5nIGEgYmxvYiBj
b250YWluaW5nIHNpbmdsZSBBcnJheUJ1ZmZlcgotMHgwIDB4MSAweDIgMHg4MCAweDgxIDB4ODIg
MHhmZCAweGZlIDB4ZmYKK3Jlc3VsdCBzaXplOiA5CityZXN1bHQ6IDB4MCAweDEgMHgyIDB4ODAg
MHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcg
c2xpY2VkIGZpbGUKLW9uZGVyCityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBvbmRlcgogVGVzdCBy
ZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNsaWNlZCB0ZXh0Ci1pcnN0CityZXN1bHQgc2l6ZTog
NAorcmVzdWx0OiBpcnN0CiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2xpY2VkIEFy
cmF5QnVmZmVyCi0weDEgMHgyIDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCityZXN1bHQg
c2l6ZTogOAorcmVzdWx0OiAweDEgMHgyIDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCiBU
ZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgbXVsdGlwbGUgZmlsZXMKLUhlbGxvV29uZGVy
ZnVsV29ybGQKK3Jlc3VsdCBzaXplOiAxOQorcmVzdWx0OiBIZWxsb1dvbmRlcmZ1bFdvcmxkCiBU
ZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgbXVsdGlwbGUgdGV4dHMKLUZpcnN0U2Vjb25k
VGhpcmQKK3Jlc3VsdCBzaXplOiAxNgorcmVzdWx0OiBGaXJzdFNlY29uZFRoaXJkCiBUZXN0IHJl
YWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgbXVsdGlwbGUgQXJyYXlCdWZmZXIKLTB4MCAweDEgMHgy
IDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCityZXN1bHQgc2l6ZTogOQorcmVzdWx0OiAw
eDAgMHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgogVGVzdCByZWFkaW5nIGEg
aHlicmlkIGJsb2IKLUZpcnN0SGVsbG9TZWNvbmRXb25kZXJmdWxXb3JsZFRoaXJkMDEyCityZXN1
bHQgc2l6ZTogMzgKK3Jlc3VsdDogRmlyc3RIZWxsb1NlY29uZFdvbmRlcmZ1bFdvcmxkVGhpcmQw
MTIKIFRlc3QgcmVhZGluZyBhIHNsaWNlZCBoeWJyaWQgYmxvYgotbGxvU2Vjb25kV29uCityZXN1
bHQgc2l6ZTogMTIKK3Jlc3VsdDogbGxvU2Vjb25kV29uCiBUZXN0IHJlYWRpbmcgYSB0cmlwbGUt
c2xpY2VkIGh5YnJpZCBibG9iCi1vbmRXb25kZXJmdWxXb3JsZFRoaXJkMDEyRm9vbG8KK3Jlc3Vs
dCBzaXplOiAzMAorcmVzdWx0OiBvbmRXb25kZXJmdWxXb3JsZFRoaXJkMDEyRm9vbG8KIERPTkUK
IApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFk
LWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJz
L3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0CmluZGV4IGQwMzYxYjMuLjlkZWUw
ZjIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVh
ZC1maWxlLWFzeW5jLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dv
cmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKQEAgLTEsNSArMSwxMSBA
QAogCiBSZWNlaXZlZCBmaWxlcyBpbiB3b3JrZXIKK1Rlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVu
dCBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgZXJyb3IgZXZl
bnQKK3JlYWR5U3RhdGU6IDIKK2Vycm9yIGNvZGU6IDEKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQK
IFRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5
U3RhdGU6IDAKIFJlY2VpdmVkIGVycm9yIGV2ZW50CkBAIC0xOCw2ICsyNCwxNSBAQCBSZWNlaXZl
ZCBlcnJvciBldmVudAogcmVhZHlTdGF0ZTogMgogZXJyb3IgY29kZTogMQogUmVjZWl2ZWQgbG9h
ZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCity
ZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1Jl
Y2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6
IAorUmVjZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMg
YmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CkBA
IC00NSw2ICs2MCwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBk
YXRhOgogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBh
cyBhcnJheSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAor
cmVhZHlTdGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0
IHNpemU6IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVh
ZGluZyBhIFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2
ZWQgbG9hZHN0YXJ0IGV2ZW50CkBAIC01NCw2ICs3OCwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1
bHQgc2l6ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCBy
ZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitSZWNl
aXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQK
K3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA5CityZXN1bHQ6IDB4MCAweDEgMHgyIDB4ODAg
MHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJl
YWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNl
aXZlZCBsb2Fkc3RhcnQgZXZlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMv
d29ya2Vycy93b3JrZXItcmVhZC1maWxlLXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtc3luYy1leHBlY3RlZC50eHQKaW5k
ZXggMzY5MWE1OGY5NjZiYjYzYWE1ODFhNWFhYWY0YzJiMjFmZjQ0NTdiYS4uNzg0ODRmMDE3NjRj
MDQ2NTM2MGZjOWZmNTE2MDU0N2JjZGJiYWQ4ZSAxMDA2NDQKR0lUIGJpbmFyeSBwYXRjaApsaXRl
cmFsIDE3ODQKemNtY0pRJjJFRCo0OUQrMGcmJHptVT5fQUArTko4cDRxY0kweUs1RHx0a0tlZGxD
LTZKYFZyYDtwY1NuY0oweXw/Cnp7PkE+PVA3RHROcSsxTGpxNntUYTQhYy08cClscXM2JG02RDwp
MSkrJEduRnJsP3U3YXt7PHB9MnRvR1haPXh1Mwp6Q2BwKEdtPyM9XnVwRjRWXlgxckclIWJSNj1V
b04kREpObk5RaTwmMyZacjdnKWZwQCNpb244fndnN1UjYil4cD8KekJAYCQoT282MXw9endWeXJV
TnpFPldIZGY/SElXez9PYVBTRCg7VkVeIW1Gfk85Mi0xYW5IVSZnZF5xXjhIPH1TCno0TUpTdDk2
YT81b2IrYGl0KjBfQUdkMDBYdCEmKzglaHJhaUVuQXlXczVqSkdSRkFvS1J6dUpvOTlHciZ3OHxI
Qgp6KGU3NCVGb0o+bVIjdk1lVyFlRzc/am4jWm8hPigxUkE1S2REc1JYPFF7K0xjQDRRMnk1NXc0
MnJ4ST8lZX1GMDkKejU9TylKP0JmaWNBTER6Z1oxe1lSd1AzZGlCYX1iO0x9TEhwPTYmKVp7Zllm
ancwU0BuKCt8Y3Z5VEBwZk9fUDI+CmdWMnhAT2h4ek01SypZT2RaVH4hUTZ+TTdfI1lIcjlYQ3VT
LTBqJSo/QGM7ay0KCmRlbHRhIDE5MQp6Y21leXRkd19qey1OZWE/ajIwOClPKHdwUzBNbkRyNy1j
e1Z4eWU1bTFeQUxPXkFkfEg2XmN1V0dWe3s4Q2NrNzwKejBiK1QrbCpFIW1oMHFgJEUpY19OQCYj
dE8kIUQ0UENJXyZIUEcpRTNtcXBkWnp7cXJ7O1pXbkRybygjPT8+b0Y3CnpzOUc3UVFoS3M0dDF1
JU1rZmpnQWw5U2k3MiFsbnh1JjZfMlZZS0Fye2o3b0BISXZ3Y0N1XzRRdSh8bUF4cEh2PApFMEtv
PTZWKm1nRQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tayBiL1dl
YkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawppbmRleCAzMjg4MDU5Li44MjFmZDNiIDEwMDY0
NAotLS0gYS9XZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsKKysrIGIvV2ViQ29yZS9BbmRy
b2lkLmpzY2JpbmRpbmdzLm1rCkBAIC0xMDAsNiArMTAwLDcgQEAgTE9DQUxfU1JDX0ZJTEVTICs9
IFwKIAliaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwIFwKIAliaW5kaW5ncy9qcy9KU0V2
ZW50VGFyZ2V0LmNwcCBcCiAJYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCBcCisJYmlu
ZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvanMvSlNHZW9sb2Nh
dGlvbkN1c3RvbS5jcHAgXAogCWJpbmRpbmdzL2pzL0pTSFRNTEFsbENvbGxlY3Rpb25DdXN0b20u
Y3BwIFwKIAliaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcCBcCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApp
bmRleCA0MmUzNDRhLi45NzRhMTU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CisrKyBiL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTYxOSw2ICs2MTksNyBAQCBTRVQoV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAKICAg
ICBiaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTRXhjZXB0
aW9uQmFzZS5jcHAKKyAgICBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCiAgICAg
YmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9qcy9KU0hp
c3RvcnlDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNJREJBbnlDdXN0b20uY3BwCmRpZmYg
LS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGZhNTg5
MjUuLmNlNDRhZTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTUgQEAKKzIwMTAtMTAtMjUgIEppYW4gTGkgIDxqaWFubGlA
Y2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4gRmlsZVJlYWRlciBhbmQgRmlsZVJl
YWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTQ3NjkxCisKKyAgICAgICAgVGVzdCBjYXNlcyBoYXZlIGJlZW4gYWRkZWQgdG8gcmVhZC1maWxl
LXRlc3QtY2FzZXMuanMuCisKKyAgICAgICAgKiBBbmRyb2lkLmpzY2JpbmRpbmdzLm1rOgorICAg
ICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9t
LmNwcDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEZpbGVSZWFkZXI6OnJlc3VsdEFjY2Vzc29y
R2V0dGVyKToKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwOiBBbHNvIGNoYW5nZWQg
bm90IHRvIHJldHVybiBpbmNvbXBsZXRlIHJlc3VsdAorICAgICAgICB3aGVuIHJlYWRpbmcgYXMg
dGV4dC4gVGhpcyBpcyB0byBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHNwZWMuCisgICAgICAgIChX
ZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkQXNBcnJheUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpGaWxlUmVhZGVyOjpkaWRSZWNlaXZlUmVzcG9uc2UpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
ZVJlYWRlcjo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6
YXJyYXlCdWZmZXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RyaW5n
UmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OmNvbnZlcnRUb1RleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTCk6CisgICAgICAg
ICogZmlsZWFwaS9GaWxlUmVhZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpl
cnJvcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkVHlwZSk6CisgICAgICAg
ICogZmlsZWFwaS9GaWxlUmVhZGVyLmlkbDoKKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJT
eW5jLmNwcDogUmVtb3ZlZCBGaWxlUmVhZGVyU3luY0xvYWRlciBhbmQgbW92ZSBpdHMKKyAgICAg
ICAgZnVuY3Rpb25hbGl0aWVzIHRvIEZpbGVSZWFkZXJTeW5jIHRvIHNpbXBsaWZ5IHRoZSBsb2dp
Yy4KKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXJTeW5jOjpGaWxlUmVhZGVyU3luYyk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6cmVhZEFzQXJyYXlCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlclN5bmM6OmRpZFJlY2VpdmVSZXNwb25zZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVh
ZGVyU3luYzo6ZGlkUmVjZWl2ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5
bmM6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5bmM6
OmRpZEZhaWwpOgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkZpbGVSZWFkZXJTeW5jOjpoYXNFcnJvcik6CisgICAgICAgICogZmlsZWFwaS9G
aWxlUmVhZGVyU3luYy5pZGw6CisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkFycmF5QnVmZmVyOjpzZXRCeXRlTGVuZ3RoKTogc3VwcG9ydCBzZXR0aW5nIGJ5
dGUgbGVuZ3RoIHRvCisgICAgICAgIGFsbG93IHBhcnRpYWwgZGF0YS4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9BcnJheUJ1ZmZlci5oOgorICAgICAgICAqIGxvYWRlci9UaHJlYWRhYmxlTG9hZGVy
Q2xpZW50Lmg6CisKIDIwMTAtMTAtMjUgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCBRdCBidWlsZCBmaXggZm9yIHI3MDQ5Ni4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4
IGM2ZTM5NzguLjBkMjI1MjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysr
IGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtNzI2LDYgKzcyNiw3IEBAIHdlYmNvcmVfc291
cmNlcyArPSBcCiAJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmggXAogCVdlYkNv
cmUvYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0V4Y2VwdGlvbkJhc2UuaCBcCisJV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJD
dXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3Bw
IFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAgXAogCVdlYkNvcmUv
YmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJD
b3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBmYmExYzMzLi4xODVjNmQyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQpAQCAtNjAxLDYgKzYwMSw3IEBACiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNFdmVudFRh
cmdldC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwJywK
ICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuaCcsCisgICAgICAgICAg
ICAnYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCcsCiAgICAgICAgICAgICAnYmlu
ZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdz
L2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAnLAogICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTSGlz
dG9yeUN1c3RvbS5oJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3Jl
L1dlYkNvcmUucHJvCmluZGV4IDg0ODY5YjQuLjFmOWY3YzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
V2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNDE5LDYgKzQxOSw3IEBA
IHY4IHsKICAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAgXAog
ICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAgXAogICAgICAgICBi
aW5kaW5ncy92OC9jdXN0b20vVjhFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmNwcCBcCisgICAgICAg
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20uY3BwIFwKICAgICAgICAgYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEFsbENvbGxlY3Rpb25DdXN0b20uY3BwCiAKICAgICBjb250
YWlucyhERUZJTkVTLCBFTkFCTEVfVklERU89MSkgewpAQCAtNTE4LDYgKzUxOSw3IEBAIHY4IHsK
ICAgICAgICAgYmluZGluZ3MvanMvSlNFdmVudFNvdXJjZUN1c3RvbS5jcHAgXAogICAgICAgICBi
aW5kaW5ncy9qcy9KU0V2ZW50VGFyZ2V0LmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRXhj
ZXB0aW9uQmFzZS5jcHAgXAorICAgICAgICBiaW5kaW5ncy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20u
Y3BwIFwKICAgICAgICAgYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAgXAogICAg
ICAgICBiaW5kaW5ncy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwIFwKICAgICAgICAgYmluZGluZ3Mv
anMvSlNIVE1MQXBwbGV0RWxlbWVudEN1c3RvbS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oKaW5kZXggYzcwMDA3NC4uM2VjZGYxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCkBAIC01NTk0Miw2ICs1NTk0MiwxMCBAQAogCQkJCQk+DQogCQkJCTwv
RmlsZT4NCiAJCQkJPEZpbGUNCisJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmluZGluZ3NcanNcSlNG
aWxlUmVhZGVyQ3VzdG9tLmNwcCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8RmlsZQ0K
IAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxiaW5kaW5nc1xqc1xKU0dlb2xvY2F0aW9uQ3VzdG9tLmNw
cCINCiAJCQkJCT4NCiAJCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGNiZDdmMC4uMTE2MTA4ZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTc0NCw2ICs3NDQsNyBAQAog
CQkyRTQzNDY1NTBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyVGhyZWFkLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRTQzNDY0MzBGNTQ2QTgyMDBCMEYx
QkEgLyogV29ya2VyVGhyZWFkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMkU0MzQ2NTgwRjU0NkE5OTAwQjBGMUJBIC8qIENyb3NzVGhyZWFkQ29w
aWVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJF
NDM0NjU2MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi87IH07CiAJ
CTJFNDM0NjU5MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NTcwRjU0NkE5OTAw
QjBGMUJBIC8qIENyb3NzVGhyZWFkQ29waWVyLmggKi87IH07CisJCTJFNzU4MkVFMTI3NjRGMjYw
MDYyNjI4QiAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTgyRUQxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmls
ZVJlYWRlckN1c3RvbS5jcHAgKi87IH07CiAJCTJFOTRGNDNCMTE5MjA3REEwMEI3Rjc1RCAvKiBK
U0ZpbGVSZWFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMkU5NEY0MzkxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi87IH07
CiAJCTJFOTRGNDNDMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDNBMTE5MjA3REEwMEI3
Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVBNzY4MDQwRkU3MTI2NDAwQUI5QzhB
IC8qIFdvcmtlclNjcmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNj
cmlwdExvYWRlckNsaWVudC5oICovOyB9OwpAQCAtNjc3Nyw2ICs2Nzc4LDcgQEAKIAkJMkU0MzQ2
NDMwRjU0NkE4MjAwQjBGMUJBIC8qIFdvcmtlclRocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBXb3JrZXJUaHJlYWQuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyVGhyZWFk
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFNDM0NjU2MEY1NDZBOTkwMEIwRjFC
QSAvKiBDcm9zc1RocmVhZENvcGllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDcm9zc1RocmVhZENvcGllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTJFNDM0NjU3MEY1NDZBOTkwMEIwRjFCQSAvKiBDcm9zc1RocmVhZENvcGllci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDcm9zc1RocmVhZENvcGllci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkyRTc1ODJFRDEyNzY0RjI2MDA2MjYyOEIgLyogSlNGaWxl
UmVhZGVyQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
RmlsZVJlYWRlckN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJFOTRG
NDM5MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNGaWxlUmVhZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMkU5NEY0M0ExMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ZpbGVSZWFkZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNj
cmlwdExvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXb3Jr
ZXJTY3JpcHRMb2FkZXJDbGllbnQuaDsgcGF0aCA9IHdvcmtlcnMvV29ya2VyU2NyaXB0TG9hZGVy
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjkxOCw2ICsxNjkyMCw3
IEBACiAJCQkJODkzQzQ4NTIxMjQ5OUIwNjAwMkIzRDg2IC8qIEpTRW50cnlTeW5jQ3VzdG9tLmNw
cCAqLywKIAkJCQlCQ0VGQUY0RDBDMzE3RTY5MDBGQTgxRjYgLyogSlNFdmVudEN1c3RvbS5jcHAg
Ki8sCiAJCQkJQkMyNzVCODAxMUM1RDJCNDAwQzkyMDZDIC8qIEpTRXZlbnRTb3VyY2VDdXN0b20u
Y3BwICovLAorCQkJCTJFNzU4MkVEMTI3NjRGMjYwMDYyNjI4QiAvKiBKU0ZpbGVSZWFkZXJDdXN0
b20uY3BwICovLAogCQkJCTQ5RUVDRjcyMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0Zsb2F0MzJBcnJh
eUN1c3RvbS5jcHAgKi8sCiAJCQkJRkU4MEQ3QTYwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpTR2VvbG9j
YXRpb25DdXN0b20uY3BwICovLAogCQkJCUJDRTdCMTkyMEQ0RTg2OTYwMDc1QTUzOSAvKiBKU0hp
c3RvcnlDdXN0b20uY3BwICovLApAQCAtMjEyMjEsNyArMjEyMjQsNiBAQAogCQkJaXNhID0gUEJY
UHJvamVjdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAxNDlDMjg0MzA4OTAyQjExMDA4
QTlFRkMgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJXZWJDb3Jl
IiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9w
bWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJ
CWtub3duUmVnaW9ucyA9ICgKIAkJCQlFbmdsaXNoLApAQCAtMjM3MTYsNiArMjM3MTgsNyBAQAog
CQkJCTdBMUYyQjUyMTI2QzYxQjIwMDA2QTdFNiAvKiBJbnNwZWN0b3JDbGllbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTEzRjAxRjExMjcwRTE5MDAwREZCQTcxIC8qIENvb2tpZVN0b3JhZ2VN
YWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk3NTg5NzhFQzEyNzA5MEQ2MDA3NkQ1QTkgLyogU3Bl
ZWNoSW5wdXRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkU3NTgyRUUxMjc2NEYyNjAw
NjI2MjhCIC8qIEpTRmlsZVJlYWRlckN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44NDQzMmMzCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0ZpbGVSZWFkZXJDdXN0b20uY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkpTRmlsZVJlYWRlci5oIgor
CisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyLmgiCisjaW5j
bHVkZSAiSlNBcnJheUJ1ZmZlci5oIgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK0pTVmFsdWUgSlNGaWxlUmVhZGVyOjpyZXN1bHQoRXhlY1N0YXRlKiBl
eGVjKSBjb25zdAoreworICAgIEZpbGVSZWFkZXIqIGltcCA9IGltcGwoKTsKKyAgICBzd2l0Y2gg
KGltcC0+cmVhZFR5cGUoKSkgeworICAgIGNhc2UgRmlsZVJlYWRlcjo6UmVhZEZpbGVBc0FycmF5
QnVmZmVyOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgV1RGOjpn
ZXRQdHIoaW1wLT5hcnJheUJ1ZmZlclJlc3VsdCgpKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGpzT3duZWRTdHJpbmdPck51bGwoZXhlYywgaW1wLT5zdHJpbmdSZXN1bHQoKSk7Cisg
ICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkxP
QikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1
c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVSZWFkZXJDdXN0b20u
Y3BwCmluZGV4IDVmNGZiNTcuLjBmNTZlNzAgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNwcApAQCAtMjksOSArMjksMTMgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQkxPQikKKwogI2luY2x1ZGUgIlY4
RmlsZVJlYWRlci5oIgogCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlY4QXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJWOEJpbmRpbmcuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNTcsNCArNjEsMTkgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
RmlsZVJlYWRlcjo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmcK
ICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0KIAordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4
RmlsZVJlYWRlcjo6cmVzdWx0QWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCit7CisgICAgSU5DX1NUQVRTKCJET00u
RmlsZVJlYWRlci5yZXN1bHQuX2dldCIpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9s
ZGVyID0gaW5mby5Ib2xkZXIoKTsKKyAgICBGaWxlUmVhZGVyKiBpbXAgPSBWOEZpbGVSZWFkZXI6
OnRvTmF0aXZlKGhvbGRlcik7CisgICAgc3dpdGNoIChpbXAtPnJlYWRUeXBlKCkpIHsKKyAgICBj
YXNlIEZpbGVSZWFkZXI6OlJlYWRGaWxlQXNBcnJheUJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRv
VjgoaW1wLT5hcnJheUJ1ZmZlclJlc3VsdCgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gdjhTdHJpbmdPck51bGwoaW1wLT5zdHJpbmdSZXN1bHQoKSk7CisgICAgfQorfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyLmNwcAppbmRleCAwNjkxYjI4Li41OThiZGJlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVJlYWRlci5jcHAKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCkBA
IC0zNCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJGaWxlUmVhZGVyLmgiCiAKKyNpbmNsdWRlICJB
cnJheUJ1ZmZlci5oIgogI2luY2x1ZGUgIkJhc2U2NC5oIgogI2luY2x1ZGUgIkJsb2IuaCIKICNp
bmNsdWRlICJCbG9iVVJMLmgiCkBAIC04Niw2ICs4NywxNiBAQCB2b2lkIEZpbGVSZWFkZXI6OnN0
b3AoKQogICAgIHRlcm1pbmF0ZSgpOwogfQogCit2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc0FycmF5
QnVmZmVyKEJsb2IqIGJsb2IpCit7CisgICAgaWYgKCFibG9iKQorICAgICAgICByZXR1cm47CisK
KyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYXJyYXkgYnVmZmVyOiAl
cyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+aXNGaWxl
KCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIp
OworCisgICAgcmVhZEludGVybmFsKGJsb2IsIFJlYWRGaWxlQXNBcnJheUJ1ZmZlcik7Cit9CisK
IHZvaWQgRmlsZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGJsb2IpCiB7CiAgICAg
aWYgKCFibG9iKQpAQCAtMjE0LDEyICsyMjUsMjQgQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRSZWNl
aXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiAgICAgbV9zdGF0
ZSA9IFJlYWRpbmc7CiAgICAgZmlyZUV2ZW50KGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCk7
CiAKLSAgICBtX3RvdGFsQnl0ZXMgPSByZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsK
KyAgICAvLyBGSVhNRTogU3VwcG9ydCByZWFkaW5nIG1vcmUgdGhhbiB0aGUgY3VycmVudCBzaXpl
IGxpbWl0IG9mIEFycmF5QnVmZmVyLgorICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
IGxvbmc+KHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKSA+ICBzdGQ6Om51bWVyaWNf
bGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIHsKKyAgICAgICAgZmFpbGVkKDUwMCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgbV90b3RhbEJ5dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKTsKKworICAgIGlmIChtX3JlYWRUeXBl
ICE9IFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpIHsKKyAgICAgICAgQVNTRVJUKCFtX3Jhd0RhdGEp
OworICAgICAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1ZmZlcjo6Y3JlYXRlKG1fdG90YWxCeXRlcywg
MSk7CisgICAgfQogfQogCiB2b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNo
YXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKIHsKLSAgICBBU1NFUlQoZGF0YSAmJiBsZW5n
dGhSZWNlaXZlZCk7CisgICAgLy8gRklYTUU6IENvbnNpZGVyIG1lcmdpbmcgd2l0aCB0aGUgc2lt
aWxhciBsb2dpYyBpbiBGaWxlUmVhZGVyU3luYy4KKworICAgIEFTU0VSVChkYXRhICYmIGxlbmd0
aFJlY2VpdmVkID4gMCk7CiAKICAgICAvLyBCYWlsIG91dCBpZiB3ZSBoYXZlIGFib3J0ZWQgdGhl
IHJlYWRpbmcuCiAgICAgaWYgKG1fc3RhdGUgPT0gQ29tcGxldGVkKQpAQCAtMjI5LDE2ICsyNTIs
MTggQEAgdm9pZCBGaWxlUmVhZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBp
bnQgbGVuZ3RoUmVjZWl2ZWQpCiAgICAgY2FzZSBSZWFkRmlsZUFzQmluYXJ5U3RyaW5nOgogICAg
ICAgICBtX2J1aWxkZXIuYXBwZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhS
ZWNlaXZlZCkpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFJlYWRGaWxlQXNBcnJheUJ1ZmZl
cjoKICAgICBjYXNlIFJlYWRGaWxlQXNUZXh0OgogICAgIGNhc2UgUmVhZEZpbGVBc0RhdGFVUkw6
Ci0gICAgICAgIG1fcmF3RGF0YS5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxl
bmd0aFJlY2VpdmVkKSk7Ci0gICAgICAgIG1faXNSYXdEYXRhQ29udmVydGVkID0gZmFsc2U7Cisg
ICAgICAgIG1lbWNweShzdGF0aWNfY2FzdDxjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpICsgbV9i
eXRlc0xvYWRlZCwgZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7
CisgICAgICAgIG1fcmF3RGF0YS0+c2V0Qnl0ZUxlbmd0aChtX2J5dGVzTG9hZGVkICsgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIAogICAgIG1fYnl0
ZXNMb2FkZWQgKz0gbGVuZ3RoUmVjZWl2ZWQ7CisgICAgbV9pc1Jhd0RhdGFDb252ZXJ0ZWQgPSBm
YWxzZTsKIAogICAgIC8vIEZpcmUgdGhlIHByb2dyZXNzIGV2ZW50IGF0IGxlYXN0IGV2ZXJ5IDUw
bXMuCiAgICAgZG91YmxlIG5vdyA9IFdURjo6Y3VycmVudFRpbWVNUygpOwpAQCAtMjk2LDcgKzMy
MSw3IEBAIEZpbGVFcnJvcjo6RXJyb3JDb2RlIEZpbGVSZWFkZXI6Omh0dHBTdGF0dXNDb2RlVG9F
cnJvckNvZGUoaW50IGh0dHBTdGF0dXNDb2RlKQogdm9pZCBGaWxlUmVhZGVyOjpmaXJlRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQogewogICAgIC8vIEZJWE1FOiB0aGUgY3VycmVudCBQ
cm9ncmVzc0V2ZW50IHVzZXMgInVuc2lnbmVkIGxvbmciIGZvciB0b3RhbCBhbmQgbG9hZGVkIGF0
dHJpYnV0ZXMuIE5lZWQgdG8gdGFsayB3aXRoIHRoZSBzcGVjIHdyaXRlciB0byByZXNvbHZlIHRo
ZSBpc3N1ZS4KLSAgICBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSh0eXBlLCB0
cnVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ieXRlc0xvYWRlZCksIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3RvdGFsQnl0ZXMpKSk7CisgICAgZGlzcGF0Y2hFdmVudChQcm9ncmVzc0V2ZW50
OjpjcmVhdGUodHlwZSwgdHJ1ZSwgbV9ieXRlc0xvYWRlZCwgbV90b3RhbEJ5dGVzKSk7CiB9CiAK
IEZpbGVSZWFkZXI6OlJlYWR5U3RhdGUgRmlsZVJlYWRlcjo6cmVhZHlTdGF0ZSgpIGNvbnN0CkBA
IC0zMTYsMzIgKzM0MSw1MyBAQCBGaWxlUmVhZGVyOjpSZWFkeVN0YXRlIEZpbGVSZWFkZXI6OnJl
YWR5U3RhdGUoKSBjb25zdAogICAgIHJldHVybiBFTVBUWTsKIH0KIAotU3RyaW5nIEZpbGVSZWFk
ZXI6OnJlc3VsdCgpCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBGaWxlUmVhZGVyOjphcnJheUJ1
ZmZlclJlc3VsdCgpIGNvbnN0CiB7Ci0gICAgLy8gSWYgcmVhZGluZyBhcyBiaW5hcnkgc3RyaW5n
LCB3ZSBjYW4gcmV0dXJuIHRoZSByZXN1bHQgaW1tZWRpYXRlbHkuCi0gICAgaWYgKG1fcmVhZFR5
cGUgPT0gUmVhZEZpbGVBc0JpbmFyeVN0cmluZykKLSAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50
b1N0cmluZygpOworICAgIEFTU0VSVChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNBcnJheUJ1ZmZl
cik7CiAKLSAgICAvLyBJZiB3ZSBhbHJlYWR5IGNvbnZlcnQgdGhlIHJhdyBkYXRhIHJlY2VpdmVk
IHNvIGZhciwgd2UgY2FuIHJldHVybiB0aGUgcmVzdWx0IG5vdy4KLSAgICBpZiAobV9pc1Jhd0Rh
dGFDb252ZXJ0ZWQpCi0gICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKLSAgICBt
X2lzUmF3RGF0YUNvbnZlcnRlZCA9IHRydWU7CisgICAgLy8gSWYgYW4gZXJyb3Igb2NjdXJzLCBy
ZXR1cm4gYW4gZW1wdHkgcmVzdWx0LgorICAgIGlmIChtX2Vycm9yKQorICAgICAgICByZXR1cm4g
MDsKIAotICAgIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNUZXh0KQotICAgICAgICBjb252
ZXJ0VG9UZXh0KCk7Ci0gICAgLy8gRm9yIGRhdGEgVVJMLCB3ZSBvbmx5IGRvIHRoZSBjb3ZlcnNp
b24gdW50aWwgd2UgcmVjZWl2ZSBhbGwgdGhlIHJhdyBkYXRhLgotICAgIGVsc2UgaWYgKG1fcmVh
ZFR5cGUgPT0gUmVhZEZpbGVBc0RhdGFVUkwgJiYgbV9zdGF0ZSA9PSBDb21wbGV0ZWQpCi0gICAg
ICAgIGNvbnZlcnRUb0RhdGFVUkwobV9yYXdEYXRhLCBtX2ZpbGVUeXBlLCBtX2J1aWxkZXIpOwor
ICAgIC8vIFdlIHN1cHBvcnQgcmV0dXJuaW5nIHRoZSBwYXJ0aWFsIGRhdGEuCisgICAgcmV0dXJu
IG1fcmF3RGF0YTsKK30KKworU3RyaW5nIEZpbGVSZWFkZXI6OnN0cmluZ1Jlc3VsdCgpCit7Cisg
ICAgQVNTRVJUKG1fcmVhZFR5cGUgIT0gUmVhZEZpbGVBc0FycmF5QnVmZmVyKTsKKworICAgIC8v
IElmIGFuIGVycm9yIG9jY3VycywgcmV0dXJuIGFuIGVtcHR5IHJlc3VsdC4KKyAgICBpZiAobV9l
cnJvcikKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgLy8gRG8gdGhlIGNvbnZlcnNp
b24gaWYgbm90IHlldC4KKyAgICBpZiAoIW1faXNSYXdEYXRhQ29udmVydGVkICYmIG1fcmVhZFR5
cGUgIT0gUmVhZEZpbGVBc0JpbmFyeVN0cmluZykgeworICAgICAgICBpZiAobV9yZWFkVHlwZSA9
PSBSZWFkRmlsZUFzVGV4dCkKKyAgICAgICAgICAgIGNvbnZlcnRUb1RleHQoKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQobV9yZWFkVHlwZSA9PSBSZWFkRmlsZUFzRGF0YVVS
TCk7CisgICAgICAgICAgICAvLyBQYXJ0aWFsIGRhdGEgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJl
YWRpbmcgYXMgZGF0YSBVUkwuCisgICAgICAgICAgICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQp
CisgICAgICAgICAgICAgICAgY29udmVydFRvRGF0YVVSTChzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX3Jhd0RhdGEtPmJ5dGVMZW5ndGgoKSwgbV9maWxlVHlw
ZSwgbV9idWlsZGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdoZW4gd2UgZmluaXNoIHRo
ZSBjb252ZXJzaW9uLCB3ZSBkbyBub3QgbmVlZCB0byBrZWVwIGFyb3VuZCB0aGUgcmF3IGRhdGEu
CisgICAgICAgIGlmIChtX3N0YXRlID09IENvbXBsZXRlZCkKKyAgICAgICAgICAgIG1fcmF3RGF0
YSA9IDA7CisKKyAgICAgICAgbV9pc1Jhd0RhdGFDb252ZXJ0ZWQgPSB0cnVlOworICAgIH0KIAog
ICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpj
b252ZXJ0VG9UZXh0KCkKIHsKLSAgICBpZiAoIW1fcmF3RGF0YS5zaXplKCkpIHsKLSAgICAgICAg
bV9idWlsZGVyLmNsZWFyKCk7CisgICAgbV9idWlsZGVyLmNsZWFyKCk7CisKKyAgICBpZiAoIW1f
cmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKQogICAgICAgICByZXR1cm47Ci0gICAgfQogCiAgICAgLy8g
RGVjb2RlIHRoZSBkYXRhLgogICAgIC8vIFRoZSBGaWxlIEFQSSBzcGVjIHNheXMgdGhhdCB3ZSBz
aG91bGQgdXNlIHRoZSBzdXBwbGllZCBlbmNvZGluZyBpZiBpdCBpcyB2YWxpZC4gSG93ZXZlciwg
d2UgY2hvb3NlIHRvIGlnbm9yZSB0aGlzCkBAIC0zNTAsMTkgKzM5NiwxOCBAQCB2b2lkIEZpbGVS
ZWFkZXI6OmNvbnZlcnRUb1RleHQoKQogICAgIC8vIEZJWE1FOiBjb25zaWRlciBzdXBwb3J0aW5n
IGluY3JlbWVudGFsIGRlY29kaW5nIHRvIGltcHJvdmUgdGhlIHBlcmYuCiAgICAgaWYgKCFtX2Rl
Y29kZXIpCiAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgi
dGV4dC9wbGFpbiIsIG1fZW5jb2RpbmcuaXNWYWxpZCgpID8gbV9lbmNvZGluZyA6IFVURjhFbmNv
ZGluZygpKTsKLSAgICBtX2J1aWxkZXIuY2xlYXIoKTsKLSAgICBtX2J1aWxkZXIuYXBwZW5kKG1f
ZGVjb2Rlci0+ZGVjb2RlKCZtX3Jhd0RhdGEuYXQoMCksIG1fcmF3RGF0YS5zaXplKCkpKTsKKyAg
ICBtX2J1aWxkZXIuYXBwZW5kKG1fZGVjb2Rlci0+ZGVjb2RlKHN0YXRpY19jYXN0PGNvbnN0IGNo
YXIqPihtX3Jhd0RhdGEtPmRhdGEoKSksIG1fcmF3RGF0YS0+Ynl0ZUxlbmd0aCgpKSk7CiAKICAg
ICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYgIW1fZXJyb3IpCiAgICAgICAgIG1fYnVpbGRl
ci5hcHBlbmQobV9kZWNvZGVyLT5mbHVzaCgpKTsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpjb252
ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5nJiBm
aWxlVHlwZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3ZvaWQgRmlsZVJlYWRlcjo6Y29udmVy
dFRvRGF0YVVSTChjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QgbGVuLCBjb25zdCBTdHJpbmcmIGZp
bGVUeXBlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQogewogICAgIGJ1aWxkZXIuY2xlYXIoKTsK
ICAgICBidWlsZGVyLmFwcGVuZCgiZGF0YToiKTsKIAotICAgIGlmICghcmF3RGF0YS5zaXplKCkp
CisgICAgaWYgKCFsZW4pCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghZmlsZVR5cGUuaXNF
bXB0eSgpKSB7CkBAIC0zNzIsNyArNDE3LDcgQEAgdm9pZCBGaWxlUmVhZGVyOjpjb252ZXJ0VG9E
YXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5nJiBmaWwKICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoImJhc2U2NCwiKTsKIAogICAgIFZlY3RvcjxjaGFyPiBvdXQ7
Ci0gICAgYmFzZTY0RW5jb2RlKHJhd0RhdGEsIG91dCk7CisgICAgYmFzZTY0RW5jb2RlKGRhdGEs
IGxlbiwgb3V0KTsKICAgICBvdXQuYXBwZW5kKCdcMCcpOwogICAgIGJ1aWxkZXIuYXBwZW5kKG91
dC5kYXRhKCkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaCBi
L1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKaW5kZXggM2Y3NmFkNi4uYTg2NTRkZCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaAorKysgYi9XZWJDb3JlL2ZpbGVh
cGkvRmlsZVJlYWRlci5oCkBAIC00OCw2ICs0OCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgQXJyYXlCdWZmZXI7CiBjbGFzcyBCbG9iOwogY2xhc3MgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dDsKIGNsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CkBAIC02OCw2ICs2OSwxNCBAQCBw
dWJsaWM6CiAgICAgICAgIERPTkUgPSAyCiAgICAgfTsKIAorICAgIGVudW0gUmVhZFR5cGUgewor
ICAgICAgICBSZWFkRmlsZUFzQXJyYXlCdWZmZXIsCisgICAgICAgIFJlYWRGaWxlQXNCaW5hcnlT
dHJpbmcsCisgICAgICAgIFJlYWRGaWxlQXNUZXh0LAorICAgICAgICBSZWFkRmlsZUFzRGF0YVVS
TAorICAgIH07CisKKyAgICB2b2lkIHJlYWRBc0FycmF5QnVmZmVyKEJsb2IqKTsKICAgICB2b2lk
IHJlYWRBc0JpbmFyeVN0cmluZyhCbG9iKik7CiAgICAgdm9pZCByZWFkQXNUZXh0KEJsb2IqLCBj
b25zdCBTdHJpbmcmIGVuY29kaW5nID0gIiIpOwogICAgIHZvaWQgcmVhZEFzRGF0YVVSTChCbG9i
Kik7CkBAIC03OCwxMSArODcsMTMgQEAgcHVibGljOgogCiAgICAgUmVhZHlTdGF0ZSByZWFkeVN0
YXRlKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxGaWxlRXJyb3I+IGVycm9yKCkgeyByZXR1cm4g
bV9lcnJvcjsgfQotICAgIFN0cmluZyByZXN1bHQoKTsKKyAgICBSZWFkVHlwZSByZWFkVHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVhZFR5cGU7IH0KKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVy
PiBhcnJheUJ1ZmZlclJlc3VsdCgpIGNvbnN0OworICAgIFN0cmluZyBzdHJpbmdSZXN1bHQoKTsK
IAogICAgIC8vIEhlbHBlciBtZXRob2RzLCBhbHNvIHVzZWQgYnkgRmlsZVJlYWRlclN5bmMuCiAg
ICAgc3RhdGljIEZpbGVFcnJvcjo6RXJyb3JDb2RlIGh0dHBTdGF0dXNDb2RlVG9FcnJvckNvZGUo
aW50IGh0dHBTdGF0dXNDb2RlKTsKLSAgICBzdGF0aWMgdm9pZCBjb252ZXJ0VG9EYXRhVVJMKGNv
bnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29uc3QgU3RyaW5nJiBmaWxlVHlwZSwgU3RyaW5n
QnVpbGRlciYpOworICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRUb0RhdGFVUkwoY29uc3QgY2hhcios
IHNpemVfdCwgY29uc3QgU3RyaW5nJiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYpOwogCiAgICAg
Ly8gQWN0aXZlRE9NT2JqZWN0CiAgICAgdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsK
QEAgLTExMCwxMSArMTIxLDYgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRf
TElTVEVORVIobG9hZGVuZCk7CiAKIHByaXZhdGU6Ci0gICAgZW51bSBSZWFkVHlwZSB7Ci0gICAg
ICAgIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcsCi0gICAgICAgIFJlYWRGaWxlQXNUZXh0LAotICAg
ICAgICBSZWFkRmlsZUFzRGF0YVVSTAotICAgIH07CiAgICAgZW51bSBJbnRlcm5hbFN0YXRlIHsK
ICAgICAgICAgTm9uZSwKICAgICAgICAgU3RhcnRpbmcsCkBAIC0xMzksNyArMTQ1LDYgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGZpcmVFcnJvckV2ZW50KGludCBodHRwU3RhdHVzQ29kZSk7CiAgICAg
dm9pZCBmaXJlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKICAgICB2b2lkIGNvbnZl
cnRUb1RleHQoKTsKLSAgICB2b2lkIGNvbnZlcnRUb0RhdGFVUkwoKTsKIAogICAgIEludGVybmFs
U3RhdGUgbV9zdGF0ZTsKICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CkBA
IC0xNTEsOCArMTU2LDggQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVy
OwogCi0gICAgLy8gVGhlIHJhdyBkYXRhLiBXZSBoYXZlIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHRo
ZSByYXcgZGF0YSBmb3IgaXQgdG8gYmUgY29udmVydGVkIHRvIHRleHQgb3IgZGF0YSBVUkwgZGF0
YS4KLSAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOworICAgIC8vIFdlIGhhdmUgdG8ga2VlcCB0
cmFjayBvZiBhbGwgdGhlIHJhdyBkYXRhIGZvciBhbGwgcmVhZGluZ3Mgb3RoZXIgdGhhbiBiaW5h
cnkgc3RyaW5nLgorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9yYXdEYXRhOwogICAgIGJvb2wg
bV9pc1Jhd0RhdGFDb252ZXJ0ZWQ7CiAKICAgICAvLyBUaGUgZGVjb2RlciB1c2VkIHRvIGRlY29k
ZSB0aGUgdGV4dCBkYXRhLgpAQCAtMTYzLDggKzE2OCw4IEBAIHByaXZhdGU6CiAKICAgICBSZWZQ
dHI8VGhyZWFkYWJsZUxvYWRlcj4gbV9sb2FkZXI7CiAgICAgUmVmUHRyPEZpbGVFcnJvcj4gbV9l
cnJvcjsKLSAgICBsb25nIGxvbmcgbV9ieXRlc0xvYWRlZDsKLSAgICBsb25nIGxvbmcgbV90b3Rh
bEJ5dGVzOworICAgIHVuc2lnbmVkIG1fYnl0ZXNMb2FkZWQ7CisgICAgdW5zaWduZWQgbV90b3Rh
bEJ5dGVzOwogICAgIGRvdWJsZSBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlvblRpbWVNUzsKIH07
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmlkbCBiL1dlYkNvcmUv
ZmlsZWFwaS9GaWxlUmVhZGVyLmlkbAppbmRleCBmZWJiMjMxLi5lYmM2ZmZkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5pZGwKKysrIGIvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXIuaWRsCkBAIC00NCw2ICs0NCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgcmVh
ZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IHJlYWR5U3RhdGU7CiAKICAgICAgICAgLy8g
YXN5bmMgcmVhZCBtZXRob2RzCisgICAgICAgIHZvaWQgcmVhZEFzQXJyYXlCdWZmZXIoaW4gQmxv
YiBibG9iKTsKICAgICAgICAgdm9pZCByZWFkQXNCaW5hcnlTdHJpbmcoaW4gQmxvYiBibG9iKTsK
ICAgICAgICAgdm9pZCByZWFkQXNUZXh0KGluIEJsb2IgYmxvYiwgaW4gW09wdGlvbmFsXSBET01T
dHJpbmcgZW5jb2RpbmcpOwogICAgICAgICB2b2lkIHJlYWRBc0RhdGFVUkwoaW4gQmxvYiBibG9i
KTsKQEAgLTUxLDcgKzUyLDcgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkIGFib3J0KCk7
CiAKICAgICAgICAgLy8gZmlsZSBkYXRhCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29u
dmVydFNjcmlwdFN0cmluZ10gRE9NU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIFtDdXN0b21dIERPTU9iamVjdCByZXN1bHQ7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIEZpbGVFcnJvciBlcnJvcjsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJTeW5jLmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKaW5k
ZXggOTlmNWE4OS4uNWU1Nzg4MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFk
ZXJTeW5jLmNwcAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCkBAIC0z
NCw2ICszNCw3IEBACiAKICNpbmNsdWRlICJGaWxlUmVhZGVyU3luYy5oIgogCisjaW5jbHVkZSAi
QXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJCbG9iLmgiCiAj
aW5jbHVkZSAiQmxvYlVSTC5oIgpAQCAtNDYsNzYgKzQ3LDI1IEBACiAjaW5jbHVkZSAiVGV4dFJl
c291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKICNp
bmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3Mg
RmlsZVJlYWRlclN5bmNMb2FkZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7Ci1w
dWJsaWM6Ci0gICAgLy8gSWYgdGhlIG91dHB1dCByZXN1bHQgaXMgcHJvdmlkZWQsIHVzZSBpdC4g
T3RoZXJ3aXNlLCBzYXZlIGl0IGFzIHRoZSByYXcgZGF0YS4KLSAgICBGaWxlUmVhZGVyU3luY0xv
YWRlcihTdHJpbmdCdWlsZGVyKik7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBodHRwIHN0YXR1cyBj
b2RlLgotICAgIHZvaWQgc3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIFRocmVhZGFibGVMb2FkZXJD
bGllbnQKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhcios
IGludCk7Ci0gICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9y
Jik7Ci0KLSAgICBjb25zdCBWZWN0b3I8Y2hhcj4mIHJhd0RhdGEoKSBjb25zdCB7IHJldHVybiBt
X3Jhd0RhdGE7IH0KLQotcHJpdmF0ZToKLSAgICAvLyBUaGUgb3V0cHV0IHJlc3VsdC4gVGhlIGNh
bGxlciBwcm92aWRlcyB0aGlzIGluIG9yZGVyIHRvIGxvYWQgdGhlIGJpbmFyeSBkYXRhIGRpcmVj
dGx5LgotICAgIFN0cmluZ0J1aWxkZXIqIG1fYnVpbGRlcjsKLQotICAgIC8vIFRoZSByYXcgZGF0
YS4gVGhlIGNhbGxlciBkb2VzIG5vdCBwcm92aWRlIHRoZSBhYm92ZSBvdXRwdXQgcmVzdWx0IGFu
ZCB3ZSBuZWVkIHRvIHNhdmUgaXQgaGVyZS4KLSAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOwot
Ci0gICAgaW50IG1faHR0cFN0YXR1c0NvZGU7ICAgIAotfTsKLQotRmlsZVJlYWRlclN5bmNMb2Fk
ZXI6OkZpbGVSZWFkZXJTeW5jTG9hZGVyKFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpCi0gICAgOiBt
X2J1aWxkZXIoYnVpbGRlcikKK0ZpbGVSZWFkZXJTeW5jOjpGaWxlUmVhZGVyU3luYygpCisgICAg
OiBtX3JlYWRUeXBlKFJlYWRBc0JpbmFyeVN0cmluZykKKyAgICAsIG1fdG90YWxMb2FkZWQoMCkK
ICAgICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKIHsKIH0KIAotdm9pZCBGaWxlUmVhZGVyU3luY0xv
YWRlcjo6c3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBFeGNlcHRpb25Db2RlJiBlYykKK1Bh
c3NSZWZQdHI8QXJyYXlCdWZmZXI+IEZpbGVSZWFkZXJTeW5jOjpyZWFkQXNBcnJheUJ1ZmZlcihT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9i
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRp
b25zOwotICAgIG9wdGlvbnMuc2VuZExvYWRDYWxsYmFja3MgPSB0cnVlOwotICAgIG9wdGlvbnMu
c25pZmZDb250ZW50ID0gZmFsc2U7Ci0gICAgb3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNl
OwotICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50aWFscyA9IHRydWU7Ci0gICAgb3B0aW9ucy5jcm9z
c09yaWdpblJlcXVlc3RQb2xpY3kgPSBEZW55Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKLQotICAgIFRo
cmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgcmVxdWVzdCwgKnRoaXMsIG9wdGlvbnMpOwotCi0gICAgZWMgPSAobV9odHRwU3Rh
dHVzQ29kZSA9PSAyMDApID8gMCA6IEZpbGVFeGNlcHRpb246OkVycm9yQ29kZVRvRXhjZXB0aW9u
Q29kZShGaWxlUmVhZGVyOjpodHRwU3RhdHVzQ29kZVRvRXJyb3JDb2RlKG1faHR0cFN0YXR1c0Nv
ZGUpKTsKLX0KLQotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNl
KGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQotewotICAgIG1faHR0cFN0YXR1c0Nv
ZGUgPSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOwotfQotCi12b2lkIEZpbGVSZWFkZXJTeW5j
TG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2
ZWQpCi17Ci0gICAgaWYgKG1fYnVpbGRlcikKLSAgICAgICAgbV9idWlsZGVyLT5hcHBlbmQoZGF0
YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7Ci0gICAgZWxzZQotICAg
ICAgICBtX3Jhd0RhdGEuYXBwZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhS
ZWNlaXZlZCkpOwotfQotCi12b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRGaW5pc2hMb2Fk
aW5nKHVuc2lnbmVkIGxvbmcpCi17Ci19CisgICAgaWYgKCFibG9iKQorICAgICAgICByZXR1cm4g
MDsKIAotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVy
cm9yJikKLXsKLSAgICAvLyBUcmVhdCBhcyBpbnRlcm5hbCBlcnJvci4KLSAgICBtX2h0dHBTdGF0
dXNDb2RlID0gNTAwOworICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYiwgUmVh
ZEFzQXJyYXlCdWZmZXIsIGVjKTsKKyAgICByZXR1cm4gbV9yYXdEYXRhLnJlbGVhc2UoKTsKIH0K
IAogU3RyaW5nIEZpbGVSZWFkZXJTeW5jOjpyZWFkQXNCaW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9u
Q29kZSYgZWMpCkBAIC0xNDIsMTIgKzkyLDIwIEBAIFN0cmluZyBGaWxlUmVhZGVyU3luYzo6cmVh
ZEFzRGF0YVVSTChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250CiAg
ICAgaWYgKCFibG9iKQogICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CiAKKyAg
ICBtX2Jsb2JUeXBlID0gYmxvYi0+dHlwZSgpOwogICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgYmxvYiwgUmVhZEFzRGF0YVVSTCwgZWMpOwogICAgIHJldHVybiBtX2J1aWxkZXIudG9T
dHJpbmcoKTsKIH0KIAogdm9pZCBGaWxlUmVhZGVyU3luYzo6cmVhZChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBSZWFkVHlwZSByZWFk
VHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgbV9yZWFkVHlwZSA9IHJlYWRUeXBlOwor
CisgICAgbV9idWlsZGVyLmNsZWFyKCk7CisgICAgbV9yYXdEYXRhID0gMDsKKyAgICBtX3RvdGFs
TG9hZGVkID0gMDsKKyAgICBtX2h0dHBTdGF0dXNDb2RlID0gMDsKKwogICAgIC8vIFRoZSBibG9i
IGlzIHJlYWQgYnkgcm91dGluZyB0aHJvdWdoIHRoZSByZXF1ZXN0IGhhbmRsaW5nIGxheWVyIGdp
dmVuIHRoZSB0ZW1wb3JhcnkgcHVibGljIHVybC4KICAgICBLVVJMIHVybEZvclJlYWRpbmcgPSBC
bG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2NyaXB0RXhlY3V0aW9uQ29udGV4dC0+c2VjdXJpdHlP
cmlnaW4oKSk7CiAgICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6cmVnaXN0ZXJCbG9iVVJMKHVy
bEZvclJlYWRpbmcsIGJsb2ItPnVybCgpKTsKQEAgLTE1NSwyNSArMTEzLDE4IEBAIHZvaWQgRmls
ZVJlYWRlclN5bmM6OnJlYWQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCwgQmxvYioKICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1cmxGb3JSZWFkaW5n
KTsKICAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOwogCi0gICAgRmlsZVJlYWRlclN5
bmNMb2FkZXIgbG9hZGVyKChyZWFkVHlwZSA9PSBSZWFkQXNCaW5hcnlTdHJpbmcpID8gJm1fYnVp
bGRlciA6IDApOwotICAgIGxvYWRlci5zdGFydChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZXF1
ZXN0LCBlYyk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwo
dXJsRm9yUmVhZGluZyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47CisgICAgVGhyZWFk
YWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tz
ID0gdHJ1ZTsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOworICAgIG9wdGlvbnMu
Zm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSB0
cnVlOworICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gRGVueUNyb3NzT3Jp
Z2luUmVxdWVzdHM7CiAKLSAgICBzd2l0Y2ggKHJlYWRUeXBlKSB7Ci0gICAgY2FzZSBSZWFkQXNC
aW5hcnlTdHJpbmc6Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gc2luY2Ugd2UgbmVlZCBubyBj
b252ZXJzaW9uLgotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBSZWFkQXNUZXh0OgotICAgICAg
ICBjb252ZXJ0VG9UZXh0KGxvYWRlci5yYXdEYXRhKCkuZGF0YSgpLCBsb2FkZXIucmF3RGF0YSgp
LnNpemUoKSwgbV9idWlsZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgUmVhZEFzRGF0
YVVSTDoKLSAgICAgICAgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTChsb2FkZXIucmF3RGF0
YSgpLCBibG9iLT50eXBlKCksIG1fYnVpbGRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgVGhyZWFkYWJsZUxvYWRlcjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzY3JpcHRFeGVj
dXRpb25Db250ZXh0LCByZXF1ZXN0LCAqdGhpcywgb3B0aW9ucyk7CisgCisgICAgVGhyZWFkYWJs
ZUJsb2JSZWdpc3RyeTo6dW5yZWdpc3RlckJsb2JVUkwodXJsRm9yUmVhZGluZyk7CiAKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBlYyA9IChtX2h0dHBTdGF0dXNDb2RlID09IDIwMCkg
PyAwIDogRmlsZUV4Y2VwdGlvbjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKEZpbGVSZWFkZXI6
Omh0dHBTdGF0dXNDb2RlVG9FcnJvckNvZGUobV9odHRwU3RhdHVzQ29kZSkpOwogfQogCiB2b2lk
IEZpbGVSZWFkZXJTeW5jOjpjb252ZXJ0VG9UZXh0KGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXpl
LCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQpAQCAtMTkyLDYgKzE0Myw3MiBAQCB2b2lkIEZpbGVS
ZWFkZXJTeW5jOjpjb252ZXJ0VG9UZXh0KGNvbnN0IGNoYXIqIGRhdGEsIGludCBzaXplLCBTdHJp
bmdCdWlsZGVyJiBidQogICAgIGJ1aWxkZXIuYXBwZW5kKGRlY29kZXItPmZsdXNoKCkpOwogfQog
Cit2b2lkIEZpbGVSZWFkZXJTeW5jOjpkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgbV9odHRwU3RhdHVzQ29kZSA9IHJlc3BvbnNlLmh0
dHBTdGF0dXNDb2RlKCk7CisKKyAgICBsb25nIGxvbmcgdG90YWxCeXRlcyA9IHJlc3BvbnNlLmV4
cGVjdGVkQ29udGVudExlbmd0aCgpOworCisgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4odG90YWxCeXRlcykgPiAgc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1h
eCgpKSB7CisgICAgICAgIG1faHR0cFN0YXR1c0NvZGUgPSA1MDA7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAobV9yZWFkVHlwZSAhPSBSZWFkQXNCaW5hcnlTdHJpbmcpIHsKKyAg
ICAgICAgQVNTRVJUKCFtX3Jhd0RhdGEpOworICAgICAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1ZmZl
cjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0b3RhbEJ5dGVzKSwgMSk7CisgICAgfQor
fQorCit2b2lkIEZpbGVSZWFkZXJTeW5jOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgaWYgKGhhc0Vycm9yKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHN3aXRjaCAobV9yZWFkVHlwZSkgeworICAgIGNhc2UgUmVhZEFzQmluYXJ5
U3RyaW5nOgorICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsZW5ndGhSZWNlaXZlZCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWFkQXNB
cnJheUJ1ZmZlcjoKKyAgICBjYXNlIFJlYWRBc1RleHQ6CisgICAgY2FzZSBSZWFkQXNEYXRhVVJM
OgorICAgICAgICBtZW1jcHkoc3RhdGljX2Nhc3Q8Y2hhcio+KG1fcmF3RGF0YS0+ZGF0YSgpKSAr
IG1fdG90YWxMb2FkZWQsIGRhdGEsIGxlbmd0aFJlY2VpdmVkKTsKKyAgICAgICAgbV90b3RhbExv
YWRlZCArPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgRmls
ZVJlYWRlclN5bmM6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZykKK3sKKyAgICBpZiAo
aGFzRXJyb3IoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc3dpdGNoIChtX3JlYWRUeXBlKSB7
CisgICAgY2FzZSBSZWFkQXNBcnJheUJ1ZmZlcjoKKyAgICBjYXNlIFJlYWRBc0JpbmFyeVN0cmlu
ZzoKKyAgICAgICAgLy8gTm90aGluZyB0byBkbyBzaW5jZSB3ZSBuZWVkIG5vIGNvbnZlcnNpb24u
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlYWRBc1RleHQ6CisgICAgICAgIGNvbnZlcnRU
b1RleHQoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fcmF3RGF0YS0+ZGF0YSgpKSwgbV9yYXdE
YXRhLT5ieXRlTGVuZ3RoKCksIG1fYnVpbGRlcik7CisgICAgICAgIG1fcmF3RGF0YSA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlYWRBc0RhdGFVUkw6CisgICAgICAgIEZpbGVSZWFk
ZXI6OmNvbnZlcnRUb0RhdGFVUkwoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fcmF3RGF0YS0+
ZGF0YSgpKSwgbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCksIG1fYmxvYlR5cGUsIG1fYnVpbGRlcik7
CisgICAgICAgIG1fcmF3RGF0YSA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBGaWxlUmVhZGVyU3luYzo6ZGlkRmFpbChj
b25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAgICAvLyBUcmVhdCBhcyBpbnRlcm5hbCBlcnJvci4K
KyAgICBtX2h0dHBTdGF0dXNDb2RlID0gNTAwOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAgCiAjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlclN5bmMuaCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oCmluZGV4
IGNiMGUwMGQuLmJhNGFiMjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
U3luYy5oCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oCkBAIC0zNCwxNiAr
MzQsMTggQEAKICNpZiBFTkFCTEUoQkxPQikKIAogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
LSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJD
bGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQmxvYjsKIGNsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CiAKLWNsYXNzIEZpbGVSZWFkZXJTeW5jIDogcHVibGljIFJlZkNv
dW50ZWQ8RmlsZVJlYWRlclN5bmM+IHsKK2NsYXNzIEZpbGVSZWFkZXJTeW5jIDogcHVibGljIFJl
ZkNvdW50ZWQ8RmlsZVJlYWRlclN5bmM+LCBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7
CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8RmlsZVJlYWRlclN5bmM+IGNyZWF0ZSgp
CiAgICAgewpAQCAtNTIsNiArNTQsMTMgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+RmlsZVJl
YWRlclN5bmMoKSB7IH0KIAorICAgIC8vIFRocmVhZGFibGVMb2FkZXJDbGllbnQKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7CisgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICBQYXNz
UmVmUHRyPEFycmF5QnVmZmVyPiByZWFkQXNBcnJheUJ1ZmZlcihTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgQmxvYiosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBTdHJpbmcgcmVhZEFzQmluYXJ5U3Ry
aW5nKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgRXhjZXB0aW9uQ29kZSYpOwogICAg
IFN0cmluZyByZWFkQXNUZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQsIEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIHsKQEAgLTYwLDIx
ICs2OSwzMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJlYWRBc1RleHQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEJsb2IqLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRpb25Db2RlJik7
CiAgICAgU3RyaW5nIHJlYWRBc0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEJsb2Iq
LCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICBib29sIGhhc0Vycm9yKCkgY29uc3QgeyByZXR1cm4g
bV9odHRwU3RhdHVzQ29kZSAmJiBtX2h0dHBTdGF0dXNDb2RlICE9IDIwMDsgfQorCiBwcml2YXRl
OgogICAgIGVudW0gUmVhZFR5cGUgeworICAgICAgICBSZWFkQXNBcnJheUJ1ZmZlciwKICAgICAg
ICAgUmVhZEFzQmluYXJ5U3RyaW5nLAogICAgICAgICBSZWFkQXNUZXh0LAogICAgICAgICBSZWFk
QXNEYXRhVVJMCiAgICAgfTsKIAotICAgIEZpbGVSZWFkZXJTeW5jKCkgeyB9CisgICAgRmlsZVJl
YWRlclN5bmMoKTsKIAogICAgIHZvaWQgcmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxv
YiosIFJlYWRUeXBlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjb252ZXJ0VG9UZXh0KGNv
bnN0IGNoYXIqIGRhdGEsIGludCBzaXplLCBTdHJpbmdCdWlsZGVyJik7CiAKICAgICBTdHJpbmdC
dWlsZGVyIG1fYnVpbGRlcjsKIAorICAgIFJlZlB0cjxBcnJheUJ1ZmZlcj4gbV9yYXdEYXRhOwor
CiAgICAgU3RyaW5nIG1fZW5jb2Rpbmc7CisgICAgU3RyaW5nIG1fYmxvYlR5cGU7CisgICAgUmVh
ZFR5cGUgbV9yZWFkVHlwZTsKKyAgICB1bnNpZ25lZCBtX3RvdGFsTG9hZGVkOworICAgIGludCBt
X2h0dHBTdGF0dXNDb2RlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlkbCBiL1dlYkNvcmUvZmlsZWFwaS9G
aWxlUmVhZGVyU3luYy5pZGwKaW5kZXggNzI4MThiMS4uMzgxZDQ4MyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlkbAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmls
ZVJlYWRlclN5bmMuaWRsCkBAIC0zNCw2ICszNCw4IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAg
Q2FuQmVDb25zdHJ1Y3RlZCwKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIEZpbGVSZWFk
ZXJTeW5jIHsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIEFycmF5
QnVmZmVyIHJlYWRBc0FycmF5QnVmZmVyKGluIEJsb2IgYmxvYikKKyAgICAgICAgICAgIHJhaXNl
cyhGaWxlRXhjZXB0aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQsIENvbnZlcnRTY3JpcHRTdHJpbmddIERPTVN0cmluZyByZWFkQXNCaW5hcnlTdHJpbmcoaW4g
QmxvYiBibG9iKQogICAgICAgICAgICAgcmFpc2VzKEZpbGVFeGNlcHRpb24pOwogICAgICAgICBb
Q2FsbFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQ29udmVydFNjcmlwdFN0cmluZ10gRE9N
U3RyaW5nIHJlYWRBc1RleHQoaW4gQmxvYiBibG9iLCBpbiBbT3B0aW9uYWxdIERPTVN0cmluZyBl
bmNvZGluZykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3Bw
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKaW5kZXggMDE0Y2MxZS4uZWM4
NDkxOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKKysr
IGIvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKQEAgLTUzLDYgKzUzLDcgQEAg
UGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciog
b3RoZXIpCiAKIEFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25lZCBz
aXplSW5CeXRlcykKICAgICA6IG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgLCBtX2Nh
cGFjaXR5SW5CeXRlcyhzaXplSW5CeXRlcykKICAgICAsIG1fZGF0YShkYXRhKQogewogfQpAQCAt
NzIsNiArNzMsMTIgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAog
ICAgIHJldHVybiBtX3NpemVJbkJ5dGVzOwogfQogCit2b2lkIEFycmF5QnVmZmVyOjpzZXRCeXRl
TGVuZ3RoKHVuc2lnbmVkIHNpemUpCit7CisgICAgQVNTRVJUKHNpemUgPD0gbV9jYXBhY2l0eUlu
Qnl0ZXMpOworICAgIG1fc2l6ZUluQnl0ZXMgPSBzaXplOworfQorCiBBcnJheUJ1ZmZlcjo6fkFy
cmF5QnVmZmVyKCkKIHsKICAgICBXVEY6OmZhc3RGcmVlKG1fZGF0YSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL0Fy
cmF5QnVmZmVyLmgKaW5kZXggZjUzODA4MC4uMjc3MDFmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlC
dWZmZXIuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBSZWZD
b3VudGVkPEFycmF5QnVmZmVyPiB7CiAgICAgdm9pZCogZGF0YSgpOwogICAgIGNvbnN0IHZvaWQq
IGRhdGEoKSBjb25zdDsKICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRCeXRlTGVuZ3RoKHVuc2lnbmVkKTsKIAogICAgIH5BcnJheUJ1ZmZlcigpOwogCkBAIC00
Nyw2ICs0OCw3IEBAIGNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlC
dWZmZXI+IHsKICAgICBBcnJheUJ1ZmZlcih1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQg
ZWxlbWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUodW5zaWduZWQg
bnVtRWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgdW5zaWduZWQgbV9z
aXplSW5CeXRlczsKKyAgICB1bnNpZ25lZCBtX2NhcGFjaXR5SW5CeXRlczsKICAgICB2b2lkKiBt
X2RhdGE7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVy
Q2xpZW50LmggYi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgKaW5kZXgg
YjhhNjU4NC4uYmNmNjhiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxv
YWRlckNsaWVudC5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQu
aApAQCAtMzEsNiArMzEsOCBAQAogI2lmbmRlZiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKICNk
ZWZpbmUgVGhyZWFkYWJsZUxvYWRlckNsaWVudF9oCiAKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsK
</data>
<flag name="commit-queue"
          id="61956"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71973</attachid>
            <date>2010-10-26 18:17:37 -0700</date>
            <delta_ts>2010-10-26 18:26:32 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47691_6</filename>
            <type>text/plain</type>
            <size>76571</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjMjgzMjE5Li4xN2ZiZDU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTAtMTAt
MjYgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4g
RmlsZVJlYWRlciBhbmQgRmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NjkxCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3JlYWQt
ZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1jb21tb24uanM6CisgICAgICAgIChyZWFkQmxvYkFzQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQXJy
YXlCdWZmZXJTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nU3luYyk6Cisg
ICAgICAgIChfcmVhZEJsb2JBc1RleHRTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzRGF0YVVS
TFN5bmMpOgorICAgICAgICAobG9nUmVzdWx0KToKKyAgICAgICAgKGxvYWRlZCk6CisgICAgICAg
IChfdG9TdHJpbmcpOgorICAgICAgICAoX2lzQVNDSUlTdHJpbmcpOgorICAgICAgICAoX3RvSGV4
YWRlY2ltYWwpOgorICAgICAgICAoX2dldEVsZW1lbnRBdCk6CisgICAgICAgICogZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanM6CisgICAgICAgICh0ZXN0UmVhZGlu
Z05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIpOgorICAgICAgICAodGVzdFJlYWRpbmdFbXB0
eUZpbGVBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxl
QXNBcnJheUJ1ZmZlcik6CisgICAgICAgICh0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVm
ZmVyKToKKyAgICAgICAgKHRlc3RNdWx0aXBsZVJlYWRzKToKKyAgICAgICAgKiBmYXN0L2ZpbGVz
L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZpbGUtc3luYy5qczoKKyAgICAgICAgKHRl
c3RNdWx0aXBsZVJlYWRzU3luYyk6CisgICAgICAgICogZmFzdC9maWxlcy93b3JrZXJzL3dvcmtl
ci1yZWFkLWJsb2Itc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy93b3Jr
ZXJzL3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
ZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxlLXN5bmMtZXhwZWN0ZWQudHh0OgorCiAyMDEw
LTEwLTI2ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKaW5kZXggZDk0ZWFiYi4uMjg0NjZkNSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFzeW5jLWV4cGVjdGVk
LnR4dApAQCAtMSw0ICsxLDEwIEBACiAKK1Rlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxl
IGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgZXJyb3IgZXZlbnQKK3Jl
YWR5U3RhdGU6IDIKK2Vycm9yIGNvZGU6IDEKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3Qg
cmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6
IDAKIFJlY2VpdmVkIGVycm9yIGV2ZW50CkBAIC0xNyw2ICsyMywxNSBAQCBSZWNlaXZlZCBlcnJv
ciBldmVudAogcmVhZHlTdGF0ZTogMgogZXJyb3IgY29kZTogMQogUmVjZWl2ZWQgbG9hZGVuZCBl
dmVudAorVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0
YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVk
IGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAorUmVj
ZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYmluYXJ5
IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CkBAIC00NCw2
ICs1OSwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBkYXRhOgog
UmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBhcnJh
eSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlT
dGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6
IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBh
IFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9h
ZHN0YXJ0IGV2ZW50CkBAIC01Myw2ICs3NywxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6
ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5n
IGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBs
b2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5
U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA5CityZXN1bHQ6IDB4MCAweDEgMHgyIDB4ODAgMHg4MSAw
eDgyIDB4ZmQgMHhmZSAweGZmCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcg
YSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBs
b2Fkc3RhcnQgZXZlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3Vy
Y2VzL3JlYWQtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVh
ZC1jb21tb24uanMKaW5kZXggYWJlMzI0Zi4uM2I3NDQ3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKQEAgLTExLDYgKzExLDE0IEBAIGZ1
bmN0aW9uIGJ1aWxkQmxvYihpdGVtcywgY29udGVudFR5cGUsIGJ1aWxkZXIpCiB9CiAKIC8vIFJl
YWRzIGEgYmxvYiBlaXRoZXIgYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25vdXNseS4KK2Z1bmN0
aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIGJsb2IpCit7CisgICAgaWYgKGlz
UmVhZEFzQXN5bmMoKSkKKyAgICAgICAgX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKHRlc3RG
aWxlcywgYmxvYik7CisgICAgZWxzZQorICAgICAgICBfcmVhZEJsb2JBc0FycmF5QnVmZmVyU3lu
Yyh0ZXN0RmlsZXMsIGJsb2IpOworfQorCiBmdW5jdGlvbiByZWFkQmxvYkFzQmluYXJ5U3RyaW5n
KHRlc3RGaWxlcywgYmxvYikKIHsKICAgICBpZiAoaXNSZWFkQXNBc3luYygpKQpAQCAtMzYsNiAr
NDQsMTIgQEAgZnVuY3Rpb24gcmVhZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVzLCBibG9iKQogfQog
CiAvLyBSZWFkcyBhIGJsb2IgYXN5bmNocm9ub3VzbHkuCitmdW5jdGlvbiBfcmVhZEJsb2JBc0Fy
cmF5QnVmZmVyQXN5bmModGVzdEZpbGVzLCBibG9iKQoreworICAgIHZhciByZWFkZXIgPSBjcmVh
dGVSZWFkZXJBc3luYyh0ZXN0RmlsZXMpOworICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihi
bG9iKQorfQorCiBmdW5jdGlvbiBfcmVhZEJsb2JBc0JpbmFyeVN0cmluZ0FzeW5jKHRlc3RGaWxl
cywgYmxvYikKIHsKICAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyQXN5bmModGVzdEZpbGVz
KTsKQEAgLTU1LDEyICs2OSwyNSBAQCBmdW5jdGlvbiBfcmVhZEJsb2JBc0RhdGFVUkxBc3luYyh0
ZXN0RmlsZXMsIGJsb2IpCiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBzeW5jaHJvbm91c2x5LgorZnVu
Y3Rpb24gX3JlYWRCbG9iQXNBcnJheUJ1ZmZlclN5bmModGVzdEZpbGVzLCBibG9iKQoreworICAg
IHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CisgICAgdHJ5IHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTsKKyAgICAgICAgbG9nUmVz
dWx0KHJlc3VsdCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgbG9nKCJSZWNlaXZl
ZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAiOiAiICsgZXJyb3IubmFtZSk7CisgICAgfQor
CisgICAgcnVuTmV4dFRlc3QodGVzdEZpbGVzKTsKK30KKwogZnVuY3Rpb24gX3JlYWRCbG9iQXNC
aW5hcnlTdHJpbmdTeW5jKHRlc3RGaWxlcywgYmxvYikKIHsKICAgICB2YXIgcmVhZGVyID0gY3Jl
YXRlUmVhZGVyU3luYygpOwogICAgIHRyeSB7CiAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIu
cmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpOwotICAgICAgICBsb2cocmVzdWx0KTsKKyAgICAgICAg
bG9nUmVzdWx0KHJlc3VsdCk7CiAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgbG9nKCJS
ZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAiOiAiICsgZXJyb3IubmFtZSk7CiAg
ICAgfQpAQCAtNzMsNyArMTAwLDcgQEAgZnVuY3Rpb24gX3JlYWRCbG9iQXNUZXh0U3luYyh0ZXN0
RmlsZXMsIGJsb2IsIGVuY29kaW5nKQogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5j
KCk7CiAgICAgdHJ5IHsKICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNUZXh0KGJs
b2IsIGVuY29kaW5nKTsKLSAgICAgICAgbG9nKHJlc3VsdCk7CisgICAgICAgIGxvZ1Jlc3VsdChy
ZXN1bHQpOwogICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgIGxvZygiUmVjZWl2ZWQgZXhj
ZXB0aW9uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm5hbWUpOwogICAgIH0KQEAgLTg2
LDcgKzExMyw3IEBAIGZ1bmN0aW9uIF9yZWFkQmxvYkFzRGF0YVVSTFN5bmModGVzdEZpbGVzLCBi
bG9iKQogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CiAgICAgdHJ5IHsKICAg
ICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpOwotICAgICAgICBs
b2cocmVzdWx0KTsKKyAgICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiAgICAgfSBjYXRjaCAoZXJy
b3IpIHsKICAgICAgICAgbG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAi
OiAiICsgZXJyb3IubmFtZSk7CiAgICAgfQpAQCAtMTE1LDYgKzE0MiwxOSBAQCBmdW5jdGlvbiBj
cmVhdGVSZWFkZXJTeW5jKCkKICAgICByZXR1cm4gbmV3IEZpbGVSZWFkZXJTeW5jKCk7CiB9CiAK
Ky8vICdyZXN1bHQnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXIgb2JqZWN0IG9yIGEgc3Ry
aW5nLgorZnVuY3Rpb24gbG9nUmVzdWx0KHJlc3VsdCkKK3sKKyAgICBpZiAodHlwZW9mIHJlc3Vs
dCA9PSAnb2JqZWN0JykgeworICAgICAgICBsb2coInJlc3VsdCBzaXplOiAiICsgcmVzdWx0LmJ5
dGVMZW5ndGgpOworICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShyZXN1bHQsIDAsIHJl
c3VsdC5ieXRlTGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbG9nKCJyZXN1bHQgc2l6ZTog
IiArIHJlc3VsdC5sZW5ndGgpOworCisgICAgdmFyIHJlc3VsdE91dHB1dCA9IF9pc0FTQ0lJU3Ry
aW5nKHJlc3VsdCkgPyBfdG9TdHJpbmcocmVzdWx0KSA6IF90b0hleGFkZWNpbWFsKHJlc3VsdCk7
CisgICAgbG9nKCJyZXN1bHQ6ICIgKyByZXN1bHRPdXRwdXQpOworfQorCiBmdW5jdGlvbiBsb2dF
dmVudChldmVudCkKIHsKICAgICBsb2coIlJlY2VpdmVkICIgKyBldmVudC50eXBlICsgIiBldmVu
dCIpOwpAQCAtMTMwLDExICsxNzAsOSBAQCBmdW5jdGlvbiBsb2FkZWQoZXZlbnQpCiB7CiAgICAg
bG9nRXZlbnQoZXZlbnQpOwogICAgIGxvZygicmVhZHlTdGF0ZTogIiArIGV2ZW50LnRhcmdldC5y
ZWFkeVN0YXRlKTsKLSAgICBsb2coInJlc3VsdCBzaXplOiAiICsgZXZlbnQudGFyZ2V0LnJlc3Vs
dC5sZW5ndGgpOwogCiAgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAg
dmFyIHJlc3VsdE91dHB1dCA9IF9pc0FTQ0lJU3RyaW5nKHJlc3VsdCkgPyByZXN1bHQgOiBfdG9I
ZXhhZGVjaW1hbChyZXN1bHQpOwotICAgIGxvZygicmVzdWx0OiAiICsgcmVzdWx0T3V0cHV0KTsK
KyAgICBsb2dSZXN1bHQocmVzdWx0KTsKIH0KIAogZnVuY3Rpb24gbG9hZEZhaWxlZChldmVudCkK
QEAgLTE1MSwyMyArMTg5LDQyIEBAIGZ1bmN0aW9uIGxvYWRFbmRlZCh0ZXN0RmlsZXMsIGV2ZW50
KQogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb25zLgotZnVuY3Rpb24gX2lzQVNDSUlTdHJpbmcoc3Ry
KQorCisvLyAndmFsdWUnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXJWaWV3IG9iamVjdCBv
ciBhIHN0cmluZy4KK2Z1bmN0aW9uIF90b1N0cmluZyh2YWx1ZSkKIHsKLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3RyLmNoYXJDb2RlQXQo
aSkgPj0gMTI4KQorICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpCisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB2YWx1ZS5sZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNv
ZGUodmFsdWVbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vICd2YWx1ZScgY2FuIGJl
IGVpdGhlciBhbiBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0IG9yIGEgc3RyaW5nLgorZnVuY3Rpb24g
X2lzQVNDSUlTdHJpbmcodmFsdWUpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5s
ZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoX2dldEVsZW1lbnRBdCh2YWx1ZSwgaSkgPj0gMTI4
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotZnVuY3Rpb24gX3RvSGV4YWRlY2ltYWwoc3RyKQorLy8gJ3ZhbHVlJyBjYW4gYmUgZWl0aGVy
IGFuIEFycmF5QnVmZmVyVmlldyBvYmplY3Qgb3IgYSBzdHJpbmcuCitmdW5jdGlvbiBfdG9IZXhh
ZGVjaW1hbCh2YWx1ZSkKIHsKICAgICB2YXIgcmVzdWx0ID0gIiI7Ci0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGhleCA9ICIweCIgKyAoc3Ry
LmNoYXJDb2RlQXQoaSkgJiAweEZGKS50b1N0cmluZygxNik7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgaGV4ID0gIjB4IiArIChfZ2V0
RWxlbWVudEF0KHZhbHVlLCBpKSAmIDB4RkYpLnRvU3RyaW5nKDE2KTsKICAgICAgICAgaWYgKGkg
PiAwKQogICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKICAgICAgICAgcmVzdWx0ICs9IGhleDsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKworZnVuY3Rpb24gX2dldEVsZW1lbnRBdCh2
YWx1ZSwgaSkKK3sKKyAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1
ZS5jaGFyQ29kZUF0KGkpIDogdmFsdWVbaV07Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCmluZGV4IGU4YjJj
OWMuLjM4ZWUxMjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2Vz
L3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVz
b3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCkBAIC0xLDExICsxLDE1IEBACiB2YXIgdGVz
dENhc2VzID0gWworICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIi
LAogICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzQmluYXJ5U3RyaW5nIiwKICAgICAi
dGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc1RleHQiLAogICAgICJ0ZXN0UmVhZGluZ05vbkV4
aXN0ZW50RmlsZUFzRGF0YVVSTCIsCisgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNBcnJheUJ1
ZmZlciIsCiAgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNCaW5hcnlTdHJpbmciLAogICAgICJ0
ZXN0UmVhZGluZ0VtcHR5RmlsZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNE
YXRhVVJMIiwKKyAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0FycmF5QnVmZmVyIiwK
ICAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0JpbmFyeVN0cmluZyIsCisgICAgInRl
c3RSZWFkaW5nQmluYXJ5RmlsZUFzQXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0UmVhZGluZ0JpbmFy
eUZpbGVBc0JpbmFyeVN0cmluZyIsCiAgICAgInRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNU
ZXh0IiwKICAgICAidGVzdFJlYWRpbmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVBc1RleHQiLApAQCAt
MjksNiArMzMsMTIgQEAgZnVuY3Rpb24gcnVuTmV4dFRlc3QodGVzdEZpbGVzKQogICAgIH0KIH0K
IAorZnVuY3Rpb24gdGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc0FycmF5QnVmZmVyKHRlc3RG
aWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGFy
cmF5IGJ1ZmZlciIpOworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIHRlc3RG
aWxlc1snbm9uLWV4aXN0ZW50J10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ05vbkV4aXN0
ZW50RmlsZUFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGlu
ZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKQEAgLTQ3LDYgKzU3LDEy
IEBAIGZ1bmN0aW9uIHRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNEYXRhVVJMKHRlc3RGaWxl
cykKICAgICByZWFkQmxvYkFzRGF0YVVSTCh0ZXN0RmlsZXMsIHRlc3RGaWxlc1snbm9uLWV4aXN0
ZW50J10pOwogfQogCitmdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzQXJyYXlCdWZmZXIo
dGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJy
YXkgYnVmZmVyIik7CisgICAgcmVhZEJsb2JBc0FycmF5QnVmZmVyKHRlc3RGaWxlcywgdGVzdEZp
bGVzWydlbXB0eS1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFz
QmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhbiBlbXB0
eSBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKQEAgLTY1LDEyICs4MSwyNCBAQCBmdW5jdGlvbiB0
ZXN0UmVhZGluZ0VtcHR5RmlsZUFzRGF0YVVSTCh0ZXN0RmlsZXMpCiAgICAgcmVhZEJsb2JBc0Rh
dGFVUkwodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ2VtcHR5LWZpbGUnXSk7CiB9CiAKK2Z1bmN0aW9u
IHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMpCit7Cisg
ICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGFycmF5IGJ1ZmZlciIpOworICAg
IHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIHRlc3RGaWxlc1snVVRGOC1maWxlJ10p
OworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzQmluYXJ5U3RyaW5n
KHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgYmlu
YXJ5IHN0cmluZyIpOwogICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCB0ZXN0
RmlsZXNbJ1VURjgtZmlsZSddKTsKIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRpbmdCaW5hcnlGaWxl
QXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBiaW5h
cnkgZmlsZSBhcyBhcnJheSBidWZmZXIiKTsKKyAgICByZWFkQmxvYkFzQXJyYXlCdWZmZXIodGVz
dEZpbGVzLCB0ZXN0RmlsZXNbJ2JpbmFyeS1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVh
ZGluZ0JpbmFyeUZpbGVBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAgICAgbG9nKCJUZXN0
IHJlYWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CkBAIC0xMzUsNiArMTYz
LDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVhZHModGVzdEZpbGVzKQogCiAgICAgbG9nKCJU
ZXN0IGNhbGxpbmcgbXVsdGlwbGUgcmVhZCBtZXRob2RzIGFuZCBvbmx5IGxhc3Qgb25lIGlzIHBy
b2Nlc3NlZCIpOwogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJBc3luYygpOworICAgIHJl
YWRlci5yZWFkQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKICAgICByZWFk
ZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwogICAgIHJlYWRl
ci5yZWFkQXNUZXh0KHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwogICAgIHJlYWRlci5yZWFkQXNE
YXRhVVJMKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItcmVhZC1maWxlLXN5bmMuanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZpbGUt
c3luYy5qcwppbmRleCBmNWY3NmViLi40MjAzMGQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZpbGUtc3luYy5qcworKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZp
bGUtc3luYy5qcwpAQCAtMSw1ICsxLDE5IEBACiBpbXBvcnRTY3JpcHRzKCIuLi8uLi9yZXNvdXJj
ZXMvcmVhZC1jb21tb24uanMiLCAiLi4vLi4vcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2Vz
LmpzIiwgIndvcmtlci1yZWFkLWNvbW1vbi5qcyIpOwogCisvLyBBZGQgc3BlY2lmaWMgdGVzdCBm
b3IgRmlsZVJlYWRlclN5bmMuCit0ZXN0Q2FzZXMucHVzaCgidGVzdE11bHRpcGxlUmVhZHNTeW5j
Iik7CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVJlYWRzU3luYyh0ZXN0RmlsZXMpCit7CisgICAg
bG9nKCJUZXN0IGNhbGxpbmcgbXVsdGlwbGUgcmVhZCBtZXRob2RzIGluIGEgcm93Iik7CisgICAg
dmFyIHJlYWRlciA9IGNyZWF0ZVJlYWRlclN5bmMoKTsKKyAgICBsb2dSZXN1bHQocmVhZGVyLnJl
YWRBc0FycmF5QnVmZmVyKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pKTsKKyAgICBsb2dSZXN1bHQo
cmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXNbJ2JpbmFyeS1maWxlJ10pKTsKKyAg
ICBsb2dSZXN1bHQocmVhZGVyLnJlYWRBc0RhdGFVUkwodGVzdEZpbGVzWydlbXB0eS1maWxlJ10p
KTsKKworICAgIHJ1bk5leHRUZXN0KHRlc3RGaWxlcyk7Cit9CisKIGZ1bmN0aW9uIGlzUmVhZEFz
QXN5bmMoKQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1ibG9iLXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBlY3Rl
ZC50eHQKaW5kZXggMmNlNTliMi4uYjE3Njc4MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBl
Y3RlZC50eHQKQEAgLTUsMzggKzUsNTUgQEAgUmVjZWl2ZWQgZXhjZXB0aW9uIDE6IE5PVF9GT1VO
RF9FUlIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBleGlzdGVudCBhbmQgbm9uLWV4
aXN0ZW50IGZpbGUKIFJlY2VpdmVkIGV4Y2VwdGlvbiAxOiBOT1RfRk9VTkRfRVJSCiBUZXN0IHJl
YWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgZW1wdHkgZmlsZQotCityZXN1bHQgc2l6ZTogMAorcmVz
dWx0OiAKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBlbXB0eSB0ZXh0Ci0KK3Jlc3Vs
dCBzaXplOiAwCityZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIGVtcHR5
IGZpbGVzIGFuZCBlbXB0eSB0ZXh0cwotCityZXN1bHQgc2l6ZTogMAorcmVzdWx0OiAKIFRlc3Qg
cmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgZmlsZQotSGVsbG8KK3Jlc3VsdCBzaXpl
OiA1CityZXN1bHQ6IEhlbGxvCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xl
IHRleHQKLUZpcnN0CityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBGaXJzdAogVGVzdCByZWFkaW5n
IGEgYmxvYiBjb250YWluaW5nIHNpbmdsZSB0ZXh0IGFzIGRhdGEgVVJMCi1kYXRhOmJhc2U2NCxS
bWx5YzNRPQorcmVzdWx0IHNpemU6IDIwCityZXN1bHQ6IGRhdGE6YmFzZTY0LFJtbHljM1E9CiBU
ZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xlIHRleHQgYXMgZGF0YSBVUkwgKG9w
dGlvbmFsIGNvbnRlbnQgdHlwZSBwcm92aWRlZCkKLWRhdGE6dHlwZS9mb287YmFzZTY0LFJtbHlj
M1E9CityZXN1bHQgc2l6ZTogMjkKK3Jlc3VsdDogZGF0YTp0eXBlL2ZvbztiYXNlNjQsUm1seWMz
UT0KIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgQXJyYXlCdWZmZXIKLTB4
MCAweDEgMHgyIDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCityZXN1bHQgc2l6ZTogOQor
cmVzdWx0OiAweDAgMHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgogVGVzdCBy
ZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNsaWNlZCBmaWxlCi1vbmRlcgorcmVzdWx0IHNpemU6
IDUKK3Jlc3VsdDogb25kZXIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzbGljZWQg
dGV4dAotaXJzdAorcmVzdWx0IHNpemU6IDQKK3Jlc3VsdDogaXJzdAogVGVzdCByZWFkaW5nIGEg
YmxvYiBjb250YWluaW5nIHNsaWNlZCBBcnJheUJ1ZmZlcgotMHgxIDB4MiAweDgwIDB4ODEgMHg4
MiAweGZkIDB4ZmUgMHhmZgorcmVzdWx0IHNpemU6IDgKK3Jlc3VsdDogMHgxIDB4MiAweDgwIDB4
ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIG11
bHRpcGxlIGZpbGVzCi1IZWxsb1dvbmRlcmZ1bFdvcmxkCityZXN1bHQgc2l6ZTogMTkKK3Jlc3Vs
dDogSGVsbG9Xb25kZXJmdWxXb3JsZAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIG11
bHRpcGxlIHRleHRzCi1GaXJzdFNlY29uZFRoaXJkCityZXN1bHQgc2l6ZTogMTYKK3Jlc3VsdDog
Rmlyc3RTZWNvbmRUaGlyZAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIG11bHRpcGxl
IEFycmF5QnVmZmVyCi0weDAgMHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgor
cmVzdWx0IHNpemU6IDkKK3Jlc3VsdDogMHgwIDB4MSAweDIgMHg4MCAweDgxIDB4ODIgMHhmZCAw
eGZlIDB4ZmYKIFRlc3QgcmVhZGluZyBhIGh5YnJpZCBibG9iCi1GaXJzdEhlbGxvU2Vjb25kV29u
ZGVyZnVsV29ybGRUaGlyZDAxMgorcmVzdWx0IHNpemU6IDM4CityZXN1bHQ6IEZpcnN0SGVsbG9T
ZWNvbmRXb25kZXJmdWxXb3JsZFRoaXJkMDEyCiBUZXN0IHJlYWRpbmcgYSBzbGljZWQgaHlicmlk
IGJsb2IKLWxsb1NlY29uZFdvbgorcmVzdWx0IHNpemU6IDEyCityZXN1bHQ6IGxsb1NlY29uZFdv
bgogVGVzdCByZWFkaW5nIGEgdHJpcGxlLXNsaWNlZCBoeWJyaWQgYmxvYgotb25kV29uZGVyZnVs
V29ybGRUaGlyZDAxMkZvb2xvCityZXN1bHQgc2l6ZTogMzAKK3Jlc3VsdDogb25kV29uZGVyZnVs
V29ybGRUaGlyZDAxMkZvb2xvCiBET05FCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxlLWFzeW5jLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxlLWFzeW5jLWV4cGVjdGVk
LnR4dAppbmRleCBkMDM2MWIzLi45ZGVlMGYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhw
ZWN0ZWQudHh0CkBAIC0xLDUgKzEsMTEgQEAKIAogUmVjZWl2ZWQgZmlsZXMgaW4gd29ya2VyCitU
ZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3Rh
dGU6IDAKK1JlY2VpdmVkIGVycm9yIGV2ZW50CityZWFkeVN0YXRlOiAyCitlcnJvciBjb2RlOiAx
CitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmls
ZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBlcnJvciBldmVudApA
QCAtMTgsNiArMjQsMTUgQEAgUmVjZWl2ZWQgZXJyb3IgZXZlbnQKIHJlYWR5U3RhdGU6IDIKIGVy
cm9yIGNvZGU6IDEKIFJlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhbiBlbXB0
eSBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0
IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAy
CityZXN1bHQgc2l6ZTogMAorcmVzdWx0OiAKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3Qg
cmVhZGluZyBhbiBlbXB0eSBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6IDAKIFJl
Y2VpdmVkIGxvYWRzdGFydCBldmVudApAQCAtNDUsNiArNjAsMTUgQEAgcmVhZHlTdGF0ZTogMgog
cmVzdWx0IHNpemU6IDUKIHJlc3VsdDogZGF0YToKIFJlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rl
c3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitS
ZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZl
bnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6IEhlbGxvCitSZWNlaXZl
ZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGJpbmFyeSBzdHJp
bmcKIHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGxvYWRzdGFydCBldmVudApAQCAtNTQsNiArNzgs
MTUgQEAgcmVhZHlTdGF0ZTogMgogcmVzdWx0IHNpemU6IDUKIHJlc3VsdDogSGVsbG8KIFJlY2Vp
dmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxlIGFzIGFycmF5IGJ1
ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRl
OiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogOQor
cmVzdWx0OiAweDAgMHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgorUmVjZWl2
ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0
cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1zeW5jLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1m
aWxlLXN5bmMtZXhwZWN0ZWQudHh0CmluZGV4IDM2OTFhNThmOTY2YmI2M2FhNTgxYTVhYWFmNGMy
YjIxZmY0NDU3YmEuLjc4NDg0ZjAxNzY0YzA0NjUzNjBmYzlmZjUxNjA1NDdiY2RiYmFkOGUgMTAw
NjQ0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNzg0CnpjbWNKUSYyRUQqNDlEKzBnJiR6bVU+
X0FAK05KOHA0cWNJMHlLNUR8dGtLZWRsQy02SmBWcmA7cGNTbmNKMHl8Pwp6ez5BPj1QN0R0TnEr
MUxqcTZ7VGE0IWMtPHApbHFzNiRtNkQ8KTEpKyRHbkZybD91N2F7ezxwfTJ0b0dYWj14dTMKekNg
cChHbT8jPV51cEY0Vl5YMXJHJSFiUjY9VW9OJERKTm5OUWk8JjMmWnI3ZylmcEAjaW9uOH53ZzdV
I2IpeHA/CnpCQGAkKE9vNjF8PXp3VnlyVU56RT5XSGRmP0hJV3s/T2FQU0QoO1ZFXiFtRn5POTIt
MWFuSFUmZ2RecV44SDx9Uwp6NE1KU3Q5NmE/NW9iK2BpdCowX0FHZDAwWHQhJis4JWhyYWlFbkF5
V3M1akpHUkZBb0tSenVKbzk5R3Imdzh8SEIKeihlNzQlRm9KPm1SI3ZNZVchZUc3P2puI1pvIT4o
MVJBNUtkRHNSWDxReytMY0A0UTJ5NTV3NDJyeEk/JWV9RjA5Cno1PU8pSj9CZmljQUxEemdaMXtZ
UndQM2RpQmF9YjtMfUxIcD02Jilae2ZZZmp3MFNAbigrfGN2eVRAcGZPX1AyPgpnVjJ4QE9oeHpN
NUsqWU9kWlR+IVE2fk03XyNZSHI5WEN1Uy0waiUqP0BjO2stCgpkZWx0YSAxOTEKemNtZXl0ZHdf
anstTmVhP2oyMDgpTyh3cFMwTW5EcjctY3tWeHllNW0xXkFMT15BZHxINl5jdVdHVnt7OENjazc8
CnowYitUK2wqRSFtaDBxYCRFKWNfTkAmI3RPJCFENFBDSV8mSFBHKUUzbXFwZFp6e3FyeztaV25E
cm8oIz0/Pm9GNwp6czlHN1FRaEtzNHQxdSVNa2ZqZ0FsOVNpNzIhbG54dSY2XzJWWUtBcntqN29A
SEl2d2NDdV80UXUofG1BeHBIdjwKRTBLbz02ViptZ0UKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0Fu
ZHJvaWQuanNjYmluZGluZ3MubWsgYi9XZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsKaW5k
ZXggMzI4ODA1OS4uODIxZmQzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRp
bmdzLm1rCisrKyBiL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawpAQCAtMTAwLDYgKzEw
MCw3IEBAIExPQ0FMX1NSQ19GSUxFUyArPSBcCiAJYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcCBcCiAJYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAgXAogCWJpbmRpbmdzL2pzL0pT
RXhjZXB0aW9uQmFzZS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAg
XAogCWJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy9qcy9K
U0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0
RWxlbWVudEN1c3RvbS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNThiMDcyMC4uYTlkNTg1NiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC02MTksNiArNjE5LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pT
RXZlbnRTb3VyY2VDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAK
ICAgICBiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwCisgICAgYmluZGluZ3MvanMvSlNG
aWxlUmVhZGVyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTSURCQW55Q3VzdG9tLmNwcApAQCAtMTU5Miw2ICsxNTkzLDcgQEAgU0VUKFdlYkNvcmVfU09V
UkNFUwogSUYgKEVOQUJMRV9CTE9CKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgICAgICBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisgICAgICAgIGZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlVGhyZWFkLmNwcAogICAgICAgICBmaWxl
YXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAKICAgICAgICAgcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTg3NzhkOC4uZTFiYzQwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMC0xMC0yNiAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU3VwcG9ydCByZWFkQXNBcnJheUJ1ZmZlciBpbiBGaWxlUmVhZGVyIGFuZCBG
aWxlUmVhZGVyU3luYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDc2OTEKKworICAgICAgICBNZXJnZSB0aGUgc2ltaWxhciBjb2RlIGluIEZpbGVSZWFk
ZXIgYW5kIEZpbGVSZWFkZXJTeW5jIGludG8KKyAgICAgICAgRmlsZVJlYWRlckxvYWRlci4KKwor
ICAgICAgICBUZXN0IGNhc2VzIGhhdmUgYmVlbiBhZGRlZCB0byByZWFkLWZpbGUtdGVzdC1jYXNl
cy5qcy4KKworICAgICAgICAqIEFuZHJvaWQuanNjYmluZGluZ3MubWs6CisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVSZWFkZXI6OkZpbGVSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlcjo6cmVhZEFzQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6
cmVhZEFzQmluYXJ5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRB
c1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzRGF0YVVSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVJlYWRlcjo6ZG9BYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVy
Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZGlkU3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVSZWFkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRl
cjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpmaXJlRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RyaW5nUmVzdWx0KToKKyAgICAgICAgKiBmaWxlYXBp
L0ZpbGVSZWFkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRUeXBlKToK
KyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuaWRsOgorICAgICAgICAqIGZpbGVhcGkvRmls
ZVJlYWRlckxvYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxv
YWRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXJDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6RmlsZVJlYWRlclN5bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVJlYWRlclN5bmM6OnJlYWRBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVSZWFkZXJTeW5jOjpyZWFkQXNCaW5hcnlTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVJlYWRlclN5bmM6OnJlYWRBc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlclN5bmM6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5
bmM6OnN0YXJ0TG9hZGluZyk6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oOgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjpBcnJh
eUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6c2V0Qnl0ZUxlbmd0aCk6
IHN1cHBvcnQgc2V0dGluZyBieXRlIGxlbmd0aCB0bworICAgICAgICBhbGxvdyBwYXJ0aWFsIGRh
dGEuCisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKiBsb2Fk
ZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oOgorCiAyMDEwLTEwLTI2ICBKb2NlbHluIFR1cmNv
dHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
S2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA4YzIwNGFhLi42MjU3ZmE0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KQEAgLTcyNiw2ICs3MjYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhj
ZXB0aW9uQmFzZS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmgg
XAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5oIFwKQEAgLTE0MTYsNiArMTQxNyw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmggXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
LmNwcCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaCBcCisJV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXIuY3BwIFwKKwlXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5oIFwKKwlXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIFwKIAlXZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlclN5bmMuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCBmNTI2ZDA3Li40ZGYzN2JmIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNjAxLDYgKzYwMSw3IEBACiAgICAgICAgICAgICAn
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9K
U0V4Y2VwdGlvbkJhc2UuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0V4Y2VwdGlv
bkJhc2UuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5oJywKQEAgLTE1MDQsNiArMTUwNSw5IEBA
CiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlTGlzdC5oJywKICAgICAgICAgICAgICdmaWxlYXBp
L0ZpbGVSZWFkZXIuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVSZWFkZXIuaCcsCisg
ICAgICAgICAgICAnZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcCcsCisgICAgICAgICAgICAn
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVJl
YWRlckxvYWRlckNsaWVudC5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVSZWFkZXJTeW5j
LmNwcCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oJywKICAgICAgICAg
ICAgICdmaWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggOWZiMmZkZC4uOTI3NzllNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJv
CkBAIC00MTksNiArNDE5LDcgQEAgdjggewogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhF
bGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3Vz
dG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50U291cmNlQ29uc3Ry
dWN0b3IuY3BwIFwKKyAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1c3Rv
bS5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1
c3RvbS5jcHAKIAogICAgIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CkBAIC01
MTgsNiArNTE5LDcgQEAgdjggewogICAgICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3Vz
dG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwIFwKICAgICAg
ICAgYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCBcCisgICAgICAgIGJpbmRpbmdzL2pz
L0pTRmlsZVJlYWRlckN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0dlb2xvY2F0
aW9uQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAg
XAogICAgICAgICBiaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcCBcCkBA
IC04MjcsNiArODI5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZmlsZWFwaS9GaWxlLmNwcCBcCiAg
ICAgZmlsZWFwaS9GaWxlTGlzdC5jcHAgXAogICAgIGZpbGVhcGkvRmlsZVJlYWRlci5jcHAgXAor
ICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAgXAogICAgIGZpbGVhcGkvRmlsZVJlYWRl
clN5bmMuY3BwIFwKICAgICBmaWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXAogICAgIGZpbGVh
cGkvRmlsZVRocmVhZC5jcHAgXApAQCAtMTczMiw2ICsxNzM1LDggQEAgSEVBREVSUyArPSBcCiAg
ICAgZmlsZWFwaS9GaWxlRXhjZXB0aW9uLmggXAogICAgIGZpbGVhcGkvRmlsZUxpc3QuaCBcCiAg
ICAgZmlsZWFwaS9GaWxlUmVhZGVyLmggXAorICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5o
IFwKKyAgICBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCBcCiAgICAgZmlsZWFwaS9G
aWxlUmVhZGVyU3luYy5oIFwKICAgICBmaWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5oIFwKICAgICBm
aWxlYXBpL0ZpbGVUaHJlYWQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCBkYzdkMmQwLi4zYzhjNTE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTQ4NDE1LDYgKzQ4NDE1LDE4IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlckxvYWRlci5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxl
YXBpXEZpbGVSZWFkZXJMb2FkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmls
ZWFwaVxGaWxlUmVhZGVyU3luYy5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtNTU5NTgs
NiArNTU5NzAsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRmlsZVJlYWRlckN1c3RvbS5jcHAiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmlu
ZGluZ3NcanNcSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDMzNmM3ODYuLjEyYjZlNWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC03NDQsNiArNzQ0LDEwIEBACiAJCTJFNDM0NjU1MEY1NDZBODIwMEIwRjFC
QSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFNDM0NjQzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRTQzNDY1ODBG
NTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NTYwRjU0NkE5OTAwQjBGMUJBIC8q
IENyb3NzVGhyZWFkQ29waWVyLmNwcCAqLzsgfTsKIAkJMkU0MzQ2NTkwRjU0NkE5OTAwQjBGMUJB
IC8qIENyb3NzVGhyZWFkQ29waWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRTQzNDY1NzBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaCAqLzsgfTsKKwkJMkU3NTgyRUUxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmlsZVJlYWRlckN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RTc1ODJFRDEyNzY0RjI2MDA2MjYyOEIgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCAqLzsgfTsK
KwkJMkU3NTg0MUQxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUExMjc3OUFE
QTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwICovOyB9OworCQkyRTc1ODQxRTEyNzc5
QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVS
ZWFkZXJMb2FkZXIuaCAqLzsgfTsKKwkJMkU3NTg0MUYxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVS
ZWFkZXJMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xp
ZW50LmggKi87IH07CiAJCTJFOTRGNDNCMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5NEY0
MzkxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi87IH07CiAJCTJFOTRGNDND
MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0Zp
bGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVBNzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNj
cmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNs
aWVudC5oICovOyB9OwpAQCAtNjc4MSw2ICs2Nzg1LDEwIEBACiAJCTJFNDM0NjQzMEY1NDZBODIw
MEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV29ya2VyVGhyZWFkLmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlclRocmVhZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRTQzNDY1NjBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTQzNDY1
NzBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRDb3BpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMkU3NTgyRUQxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmlsZVJlYWRlckN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbGVSZWFkZXJD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTc1ODQxQTEyNzc5QURB
MDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBGaWxlUmVhZGVyTG9hZGVyLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJl
YWRlckxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNzU4NDFCMTI3
NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZpbGVSZWFkZXJMb2FkZXIuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTc1ODQxQzEyNzc5QURB
MDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg7IHBhdGggPSBmaWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU5
NEY0MzkxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbGVSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmlsZVJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2Vy
U2NyaXB0TG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdv
cmtlclNjcmlwdExvYWRlckNsaWVudC5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0OTk0LDYgKzE1MDAy
LDkgQEAKIAkJCQk5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCAqLywKIAkJ
CQk5NzZENkM2OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5jcHAgKi8sCiAJCQkJOTc2
RDZDNkExMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuaCAqLywKKwkJCQkyRTc1ODQxQTEy
Nzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5jcHAgKi8sCisJCQkJMkU3NTg0MUIx
Mjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuaCAqLywKKwkJCQkyRTc1ODQxQzEy
Nzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovLAogCQkJCTJFREYz
NjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAgKi8sCiAJCQkJMkVERjM2
OUIxMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi8sCiAJCQkJOTc2RDZDNkMx
MjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgKi8sCkBAIC0xNjkzMCw2ICsx
Njk0MSw3IEBACiAJCQkJODkzQzQ4NTIxMjQ5OUIwNjAwMkIzRDg2IC8qIEpTRW50cnlTeW5jQ3Vz
dG9tLmNwcCAqLywKIAkJCQlCQ0VGQUY0RDBDMzE3RTY5MDBGQTgxRjYgLyogSlNFdmVudEN1c3Rv
bS5jcHAgKi8sCiAJCQkJQkMyNzVCODAxMUM1RDJCNDAwQzkyMDZDIC8qIEpTRXZlbnRTb3VyY2VD
dXN0b20uY3BwICovLAorCQkJCTJFNzU4MkVEMTI3NjRGMjYwMDYyNjI4QiAvKiBKU0ZpbGVSZWFk
ZXJDdXN0b20uY3BwICovLAogCQkJCTQ5RUVDRjcyMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0Zsb2F0
MzJBcnJheUN1c3RvbS5jcHAgKi8sCiAJCQkJRkU4MEQ3QTYwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpT
R2VvbG9jYXRpb25DdXN0b20uY3BwICovLAogCQkJCUJDRTdCMTkyMEQ0RTg2OTYwMDc1QTUzOSAv
KiBKU0hpc3RvcnlDdXN0b20uY3BwICovLApAQCAtMjExNzYsNiArMjExODgsOCBAQAogCQkJCThB
QjRCQzc3MTI2RkRCNzEwMERFQjcyNyAvKiBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNy
ZW1lbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg3Qjg0OTYxMjcyQ0VDODAwQTE0NDE3IC8q
IFNWR0FuaW1hdGVkQW5nbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1ODk3OEVEMTI3MDkwRDYw
MDc2RDVBOSAvKiBTcGVlY2hJbnB1dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkU3NTg0
MUUxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTJFNzU4NDFGMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTIxMjM1LDcgKzIxMjQ5LDYgQEAKIAkJCWlzYSA9IFBCWFByb2pl
Y3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZD
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87
CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRS
ZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93
blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTIzNzMyLDYgKzIzNzQ1LDggQEAKIAkJCQk3
QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxM0YwMUYxMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNzU4OTc4RUMxMjcwOTBENjAwNzZENUE5IC8qIFNwZWVjaElu
cHV0UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJFNzU4MkVFMTI3NjRGMjYwMDYyNjI4
QiAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkU3NTg0MUQx
Mjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhYTYwYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcApAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJKU0ZpbGVSZWFk
ZXIuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiRmlsZVJlYWRlci5o
IgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTRmlsZVJlYWRlcjo6cmVzdWx0KEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBGaWxlUmVhZGVyKiBpbXAgPSBpbXBsKCk7CisgICAg
aWYgKGltcC0+cmVhZFR5cGUoKSA9PSBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNBcnJheUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGltcC0+YXJyYXlCdWZmZXJSZXN1bHQoKSkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGpz
T3duZWRTdHJpbmdPck51bGwoZXhlYywgaW1wLT5zdHJpbmdSZXN1bHQoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1c3RvbS5jcHAKaW5kZXggNWY0ZmI1
Ny4uMGY1NmU3MCAxMDA3NTUKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhGaWxl
UmVhZGVyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVS
ZWFkZXJDdXN0b20uY3BwCkBAIC0yOSw5ICsyOSwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShCTE9CKQorCiAjaW5jbHVkZSAiVjhGaWxlUmVhZGVyLmgiCiAK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVjhBcnJheUJ1
ZmZlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01Nyw0ICs2MSwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhGaWxlUmVhZGVyOjpjb25z
dHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZwogICAgIHJldHVybiBhcmdz
LkhvbGRlcigpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhGaWxlUmVhZGVyOjpyZXN1
bHRBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5GaWxlUmVhZGVyLnJlc3Vs
dC5fZ2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRl
cigpOworICAgIEZpbGVSZWFkZXIqIGltcCA9IFY4RmlsZVJlYWRlcjo6dG9OYXRpdmUoaG9sZGVy
KTsKKyAgICBzd2l0Y2ggKGltcC0+cmVhZFR5cGUoKSkgeworICAgIGNhc2UgRmlsZVJlYWRlcjo6
UmVhZEZpbGVBc0FycmF5QnVmZmVyOgorICAgICAgICByZXR1cm4gdG9WOChpbXAtPmFycmF5QnVm
ZmVyUmVzdWx0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB2OFN0cmluZ09yTnVs
bChpbXAtPnN0cmluZ1Jlc3VsdCgpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXIuY3BwIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCmluZGV4IDA2
OTFiMjguLmE1NGEzMzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNw
cAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTM0LDIxICszNCwxNyBA
QAogCiAjaW5jbHVkZSAiRmlsZVJlYWRlci5oIgogCi0jaW5jbHVkZSAiQmFzZTY0LmgiCisjaW5j
bHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJCbG9iLmgiCi0jaW5jbHVkZSAiQmxvYlVS
TC5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIkZpbGUuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgotI2luY2x1ZGUg
IlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlICJUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC01NywxMCArNTMsNyBAQCBjb25zdCBkb3VibGUgcHJvZ3Jlc3NOb3RpZmlj
YXRpb25JbnRlcnZhbE1TID0gNTA7CiBGaWxlUmVhZGVyOjpGaWxlUmVhZGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhp
cykKICAgICAsIG1fc3RhdGUoTm9uZSkKLSAgICAsIG1fcmVhZFR5cGUoUmVhZEZpbGVBc0JpbmFy
eVN0cmluZykKLSAgICAsIG1faXNSYXdEYXRhQ29udmVydGVkKGZhbHNlKQotICAgICwgbV9ieXRl
c0xvYWRlZCgwKQotICAgICwgbV90b3RhbEJ5dGVzKDApCisgICAgLCBtX3JlYWRUeXBlKEZpbGVS
ZWFkZXJMb2FkZXI6OlJlYWRBc0JpbmFyeVN0cmluZykKICAgICAsIG1fbGFzdFByb2dyZXNzTm90
aWZpY2F0aW9uVGltZU1TKDApCiB7CiB9CkBAIC04Niw2ICs3OSwxNiBAQCB2b2lkIEZpbGVSZWFk
ZXI6OnN0b3AoKQogICAgIHRlcm1pbmF0ZSgpOwogfQogCit2b2lkIEZpbGVSZWFkZXI6OnJlYWRB
c0FycmF5QnVmZmVyKEJsb2IqIGJsb2IpCit7CisgICAgaWYgKCFibG9iKQorICAgICAgICByZXR1
cm47CisKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYXJyYXkgYnVm
ZmVyOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+
aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0YSgp
IDogIiIpOworCisgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRB
c0FycmF5QnVmZmVyKTsKK30KKwogdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmco
QmxvYiogYmxvYikKIHsKICAgICBpZiAoIWJsb2IpCkBAIC05Myw3ICs5Niw3IEBAIHZvaWQgRmls
ZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGJsb2IpCiAKICAgICBMT0coRmlsZUFQ
SSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxl
Kj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOwogCi0gICAgcmVhZEludGVybmFs
KGJsb2IsIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpOworICAgIHJlYWRJbnRlcm5hbChibG9iLCBG
aWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNCaW5hcnlTdHJpbmcpOwogfQogCiB2b2lkIEZpbGVSZWFk
ZXI6OnJlYWRBc1RleHQoQmxvYiogYmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKQEAgLTEw
Myw5ICsxMDYsOCBAQCB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc1RleHQoQmxvYiogYmxvYiwgY29u
c3QgU3RyaW5nJiBlbmNvZGluZykKIAogICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVh
ZGluZyBhcyB0ZXh0OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4
KCkuZGF0YSgpIDogIiIpOwogCi0gICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAg
IG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoZW5jb2RpbmcpOwotICAgIHJlYWRJbnRlcm5hbChi
bG9iLCBSZWFkRmlsZUFzVGV4dCk7CisgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nOworICAgIHJl
YWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNUZXh0KTsKIH0KIAogdm9p
ZCBGaWxlUmVhZGVyOjpyZWFkQXNEYXRhVVJMKEJsb2IqIGJsb2IpCkBAIC0xMTUsOCArMTE3LDcg
QEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNEYXRhVVJMKEJsb2IqIGJsb2IpCiAKICAgICBMT0co
RmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBibG9i
LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5pc0ZpbGUoKSA/IHN0YXRpY19j
YXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKLSAgICBtX2Zp
bGVUeXBlID0gYmxvYi0+dHlwZSgpOwotICAgIHJlYWRJbnRlcm5hbChibG9iLCBSZWFkRmlsZUFz
RGF0YVVSTCk7CisgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRB
c0RhdGFVUkwpOwogfQogCiBzdGF0aWMgdm9pZCBkZWxheWVkU3RhcnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEZpbGVSZWFkZXIqIHJlYWRlcikKQEAgLTEyNCw3ICsxMjUsNyBAQCBzdGF0aWMg
dm9pZCBkZWxheWVkU3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVSZWFkZXIqIHJl
YWRlcikKICAgICByZWFkZXItPnN0YXJ0KCk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6cmVhZElu
dGVybmFsKEJsb2IqIGJsb2IsIFJlYWRUeXBlIHR5cGUpCit2b2lkIEZpbGVSZWFkZXI6OnJlYWRJ
bnRlcm5hbChCbG9iKiBibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkVHlwZSB0eXBlKQogewog
ICAgIC8vIHJlYWRBcyoqKiBtZXRob2RzKCkgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4g
T25seSB0aGUgbGFzdCBjYWxsIGJlZm9yZSB0aGUgYWN0dWFsIHJlYWRpbmcgaGFwcGVucyBpcyBw
cm9jZXNzZWQuCiAgICAgaWYgKG1fc3RhdGUgIT0gTm9uZSAmJiBtX3N0YXRlICE9IFN0YXJ0aW5n
KQpAQCAtMTU5LDcgKzE2MCw2IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZG9BYm9ydCgpCiB7CiAgICAg
dGVybWluYXRlKCk7CiAKLSAgICBtX2J1aWxkZXIuY2xlYXIoKTsKICAgICBtX2Vycm9yID0gRmls
ZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpBQk9SVF9FUlIpOwogCiAgICAgZmlyZUV2ZW50KGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKQEAgLTE3MSw3NSArMTcxLDI5IEBAIHZvaWQgRmlsZVJl
YWRlcjo6dGVybWluYXRlKCkKIHsKICAgICBpZiAobV9sb2FkZXIpIHsKICAgICAgICAgbV9sb2Fk
ZXItPmNhbmNlbCgpOwotICAgICAgICBjbGVhbnVwKCk7CisgICAgICAgIG1fbG9hZGVyID0gMDsK
ICAgICB9CiAgICAgbV9zdGF0ZSA9IENvbXBsZXRlZDsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpj
bGVhbnVwKCkKLXsKLSAgICBtX2xvYWRlciA9IDA7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6dW5yZWdpc3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nKTsKLSAgICBtX3VybEZvclJlYWRp
bmcgPSBLVVJMKCk7Ci19Ci0KIHZvaWQgRmlsZVJlYWRlcjo6c3RhcnQoKQogewogICAgIG1fc3Rh
dGUgPSBPcGVuaW5nOwogCi0gICAgLy8gVGhlIGJsb2IgaXMgcmVhZCBieSByb3V0aW5nIHRocm91
Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4gYSB0ZW1wb3JhcnkgcHVibGljIHVy
bC4KLSAgICBtX3VybEZvclJlYWRpbmcgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nLCBtX2Jsb2ItPnVybCgp
KTsKLQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsRm9yUmVhZGluZyk7Ci0gICAg
cmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLQotICAgIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zIG9wdGlvbnM7Ci0gICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7Ci0gICAg
b3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKLSAgICBvcHRpb25zLmZvcmNlUHJlZmxpZ2h0
ID0gZmFsc2U7Ci0gICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsKLSAgICBvcHRp
b25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IERlbnlDcm9zc09yaWdpblJlcXVlc3RzOwot
Ci0gICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCB0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKKyAgICBtX2xvYWRlciA9IGFkb3B0
UHRyKG5ldyBGaWxlUmVhZGVyTG9hZGVyKG1fcmVhZFR5cGUsIHRoaXMpKTsKKyAgICBtX2xvYWRl
ci0+c2V0RW5jb2RpbmcobV9lbmNvZGluZyk7CisgICAgbV9sb2FkZXItPnNldERhdGFUeXBlKG1f
YmxvYi0+dHlwZSgpKTsKKyAgICBtX2xvYWRlci0+c3RhcnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCBtX2Jsb2IuZ2V0KCkpOwogfQogCi12b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgRmlsZVJlYWRlcjo6
ZGlkU3RhcnRMb2FkaW5nKCkKIHsKLSAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAh
PSAyMDApIHsKLSAgICAgICAgZmFpbGVkKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgbV9zdGF0ZSA9IFJlYWRpbmc7CiAgICAgZmlyZUV2
ZW50KGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCk7Ci0KLSAgICBtX3RvdGFsQnl0ZXMgPSBy
ZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpk
aWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit2b2lk
IEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKCkKIHsKLSAgICBBU1NFUlQoZGF0YSAmJiBsZW5n
dGhSZWNlaXZlZCk7Ci0KLSAgICAvLyBCYWlsIG91dCBpZiB3ZSBoYXZlIGFib3J0ZWQgdGhlIHJl
YWRpbmcuCi0gICAgaWYgKG1fc3RhdGUgPT0gQ29tcGxldGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzd2l0Y2ggKG1fcmVhZFR5cGUpIHsKLSAgICBjYXNlIFJlYWRGaWxlQXNCaW5hcnlTdHJp
bmc6Ci0gICAgICAgIG1fYnVpbGRlci5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxlbmd0aFJlY2VpdmVkKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhZEZpbGVBc1Rl
eHQ6Ci0gICAgY2FzZSBSZWFkRmlsZUFzRGF0YVVSTDoKLSAgICAgICAgbV9yYXdEYXRhLmFwcGVu
ZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKLSAgICAgICAg
bV9pc1Jhd0RhdGFDb252ZXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbV9ieXRlc0xv
YWRlZCArPSBsZW5ndGhSZWNlaXZlZDsKLQogICAgIC8vIEZpcmUgdGhlIHByb2dyZXNzIGV2ZW50
IGF0IGxlYXN0IGV2ZXJ5IDUwbXMuCiAgICAgZG91YmxlIG5vdyA9IFdURjo6Y3VycmVudFRpbWVN
UygpOwogICAgIGlmICghbV9sYXN0UHJvZ3Jlc3NOb3RpZmljYXRpb25UaW1lTVMpCkBAIC0yNTAs
NTMgKzIwNCwzMyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKICAgICB9CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6
ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQordm9pZCBGaWxlUmVhZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKCkKIHsKICAgICBtX3N0YXRlID0gQ29tcGxldGVkOwogCiAgICAgZmlyZUV2ZW50
KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpOwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9h
ZGVuZEV2ZW50KTsKLQotICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBl
cnJvckNvZGUpCiB7CiAgICAgLy8gSWYgd2UncmUgYWJvcnRpbmcsIGRvIG5vdCBwcm9jZWVkIHdp
dGggbm9ybWFsIGVycm9yIGhhbmRsaW5nIHNpbmNlIGl0IGlzIGNvdmVyZWQgaW4gYWJvcnRpbmcg
Y29kZS4KICAgICBpZiAobV9zdGF0ZSA9PSBBYm9ydGluZykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gVHJlYXQgYXMgaW50ZXJuYWwgZXJyb3IuCi0gICAgZmFpbGVkKDUwMCk7Ci19Ci0KLXZv
aWQgRmlsZVJlYWRlcjo6ZmFpbGVkKGludCBodHRwU3RhdHVzQ29kZSkKLXsKICAgICBtX3N0YXRl
ID0gQ29tcGxldGVkOwogCi0gICAgbV9lcnJvciA9IEZpbGVFcnJvcjo6Y3JlYXRlKGh0dHBTdGF0
dXNDb2RlVG9FcnJvckNvZGUoaHR0cFN0YXR1c0NvZGUpKTsKKyAgICBtX2Vycm9yID0gRmlsZUVy
cm9yOjpjcmVhdGUoc3RhdGljX2Nhc3Q8RmlsZUVycm9yOjpFcnJvckNvZGU+KGVycm9yQ29kZSkp
OwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CiAgICAgZmlyZUV2ZW50
KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwotCi0gICAgY2xlYW51cCgpOwotfQotCi1GaWxl
RXJyb3I6OkVycm9yQ29kZSBGaWxlUmVhZGVyOjpodHRwU3RhdHVzQ29kZVRvRXJyb3JDb2RlKGlu
dCBodHRwU3RhdHVzQ29kZSkKLXsKLSAgICBzd2l0Y2ggKGh0dHBTdGF0dXNDb2RlKSB7Ci0gICAg
ICAgIGNhc2UgNDAzOgotICAgICAgICAgICAgcmV0dXJuIEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJS
OwotICAgICAgICBjYXNlIDQwNDoKLSAgICAgICAgICAgIHJldHVybiBGaWxlRXJyb3I6Ok5PVF9G
T1VORF9FUlI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRmlsZUVycm9y
OjpOT1RfUkVBREFCTEVfRVJSOwotICAgIH0KIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpmaXJlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQogewogICAgIC8vIEZJWE1FOiB0aGUgY3VycmVu
dCBQcm9ncmVzc0V2ZW50IHVzZXMgInVuc2lnbmVkIGxvbmciIGZvciB0b3RhbCBhbmQgbG9hZGVk
IGF0dHJpYnV0ZXMuIE5lZWQgdG8gdGFsayB3aXRoIHRoZSBzcGVjIHdyaXRlciB0byByZXNvbHZl
IHRoZSBpc3N1ZS4KLSAgICBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSh0eXBl
LCB0cnVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ieXRlc0xvYWRlZCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX3RvdGFsQnl0ZXMpKSk7CisgICAgdW5zaWduZWQgYnl0ZXNMb2FkZWQgPSBt
X2xvYWRlciA/IG1fbG9hZGVyLT5ieXRlc0xvYWRlZCgpIDogMDsKKyAgICB1bnNpZ25lZCB0b3Rh
bEJ5dGVzID0gbV9sb2FkZXIgPyBtX2xvYWRlci0+dG90YWxCeXRlcygpIDogMDsKKyAgICBkaXNw
YXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSh0eXBlLCB0cnVlLCBieXRlc0xvYWRlZCwg
dG90YWxCeXRlcykpOwogfQogCiBGaWxlUmVhZGVyOjpSZWFkeVN0YXRlIEZpbGVSZWFkZXI6OnJl
YWR5U3RhdGUoKSBjb25zdApAQCAtMzE2LDY1ICsyNTAsMTQgQEAgRmlsZVJlYWRlcjo6UmVhZHlT
dGF0ZSBGaWxlUmVhZGVyOjpyZWFkeVN0YXRlKCkgY29uc3QKICAgICByZXR1cm4gRU1QVFk7CiB9
CiAKLVN0cmluZyBGaWxlUmVhZGVyOjpyZXN1bHQoKQorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
RmlsZVJlYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQoKSBjb25zdAogewotICAgIC8vIElmIHJlYWRp
bmcgYXMgYmluYXJ5IHN0cmluZywgd2UgY2FuIHJldHVybiB0aGUgcmVzdWx0IGltbWVkaWF0ZWx5
LgotICAgIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpCi0gICAgICAg
IHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgY29u
dmVydCB0aGUgcmF3IGRhdGEgcmVjZWl2ZWQgc28gZmFyLCB3ZSBjYW4gcmV0dXJuIHRoZSByZXN1
bHQgbm93LgotICAgIGlmIChtX2lzUmF3RGF0YUNvbnZlcnRlZCkKLSAgICAgICAgcmV0dXJuIG1f
YnVpbGRlci50b1N0cmluZygpOwotICAgIG1faXNSYXdEYXRhQ29udmVydGVkID0gdHJ1ZTsKLQot
ICAgIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNUZXh0KQotICAgICAgICBjb252ZXJ0VG9U
ZXh0KCk7Ci0gICAgLy8gRm9yIGRhdGEgVVJMLCB3ZSBvbmx5IGRvIHRoZSBjb3ZlcnNpb24gdW50
aWwgd2UgcmVjZWl2ZSBhbGwgdGhlIHJhdyBkYXRhLgotICAgIGVsc2UgaWYgKG1fcmVhZFR5cGUg
PT0gUmVhZEZpbGVBc0RhdGFVUkwgJiYgbV9zdGF0ZSA9PSBDb21wbGV0ZWQpCi0gICAgICAgIGNv
bnZlcnRUb0RhdGFVUkwobV9yYXdEYXRhLCBtX2ZpbGVUeXBlLCBtX2J1aWxkZXIpOwotCi0gICAg
cmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiBtX2xvYWRlciA/IG1fbG9h
ZGVyLT5hcnJheUJ1ZmZlclJlc3VsdCgpIDogMDsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpjb252
ZXJ0VG9UZXh0KCkKK1N0cmluZyBGaWxlUmVhZGVyOjpzdHJpbmdSZXN1bHQoKQogewotICAgIGlm
ICghbV9yYXdEYXRhLnNpemUoKSkgewotICAgICAgICBtX2J1aWxkZXIuY2xlYXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERlY29kZSB0aGUgZGF0YS4KLSAgICAvLyBUaGUg
RmlsZSBBUEkgc3BlYyBzYXlzIHRoYXQgd2Ugc2hvdWxkIHVzZSB0aGUgc3VwcGxpZWQgZW5jb2Rp
bmcgaWYgaXQgaXMgdmFsaWQuIEhvd2V2ZXIsIHdlIGNob29zZSB0byBpZ25vcmUgdGhpcwotICAg
IC8vIHJlcXVpcmVtZW50IGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgV2ViS2l0
IGRlY29kZXMgdGhlIHdlYiBjb250ZW50OiBhbHdheXMgaGFzIHRoZSBCT00gb3ZlcnJpZGUgdGhl
Ci0gICAgLy8gcHJvdmlkZWQgZW5jb2RpbmcuICAgICAKLSAgICAvLyBGSVhNRTogY29uc2lkZXIg
c3VwcG9ydGluZyBpbmNyZW1lbnRhbCBkZWNvZGluZyB0byBpbXByb3ZlIHRoZSBwZXJmLgotICAg
IGlmICghbV9kZWNvZGVyKQotICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpjcmVhdGUoInRleHQvcGxhaW4iLCBtX2VuY29kaW5nLmlzVmFsaWQoKSA/IG1fZW5jb2Rpbmcg
OiBVVEY4RW5jb2RpbmcoKSk7Ci0gICAgbV9idWlsZGVyLmNsZWFyKCk7Ci0gICAgbV9idWlsZGVy
LmFwcGVuZChtX2RlY29kZXItPmRlY29kZSgmbV9yYXdEYXRhLmF0KDApLCBtX3Jhd0RhdGEuc2l6
ZSgpKSk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYgIW1fZXJyb3IpCi0gICAg
ICAgIG1fYnVpbGRlci5hcHBlbmQobV9kZWNvZGVyLT5mbHVzaCgpKTsKLX0KLQotdm9pZCBGaWxl
UmVhZGVyOjpjb252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29u
c3QgU3RyaW5nJiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKLXsKLSAgICBidWls
ZGVyLmNsZWFyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoImRhdGE6Iik7Ci0KLSAgICBpZiAoIXJh
d0RhdGEuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWZpbGVUeXBlLmlzRW1w
dHkoKSkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChmaWxlVHlwZSk7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCI7YmFzZTY0LCIpOwotICAgIH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiYmFzZTY0LCIpOwotCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBiYXNlNjRFbmNvZGUo
cmF3RGF0YSwgb3V0KTsKLSAgICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KG91dC5kYXRhKCkpOworICAgIHJldHVybiBtX2xvYWRlciA/IG1fbG9hZGVyLT5zdHJpbmdSZXN1
bHQoKSA6ICIiOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaApp
bmRleCAzZjc2YWQ2Li4wNDUxM2YzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5oCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKQEAgLTM2LDI0ICszNiwx
OSBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCiAjaW5jbHVkZSAiRmlsZUVycm9yLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUg
IlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIkZpbGVSZWFkZXJMb2FkZXIuaCIK
KyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQmxvYjsKIGNsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwotY2xhc3MgVGhyZWFk
YWJsZUxvYWRlcjsKIAotY2xhc3MgRmlsZVJlYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVS
ZWFkZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1Ymxp
YyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKK2NsYXNzIEZpbGVSZWFkZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxGaWxlUmVhZGVyPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIEV2ZW50
VGFyZ2V0LCBwdWJsaWMgRmlsZVJlYWRlckxvYWRlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RmlsZVJlYWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCiAgICAgewpAQCAtNjgsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIERPTkUg
PSAyCiAgICAgfTsKIAorICAgIHZvaWQgcmVhZEFzQXJyYXlCdWZmZXIoQmxvYiopOwogICAgIHZv
aWQgcmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqKTsKICAgICB2b2lkIHJlYWRBc1RleHQoQmxvYios
IGNvbnN0IFN0cmluZyYgZW5jb2RpbmcgPSAiIik7CiAgICAgdm9pZCByZWFkQXNEYXRhVVJMKEJs
b2IqKTsKQEAgLTc4LDExICs3NCw5IEBAIHB1YmxpYzoKIAogICAgIFJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigpIHsgcmV0dXJu
IG1fZXJyb3I7IH0KLSAgICBTdHJpbmcgcmVzdWx0KCk7Ci0KLSAgICAvLyBIZWxwZXIgbWV0aG9k
cywgYWxzbyB1c2VkIGJ5IEZpbGVSZWFkZXJTeW5jLgotICAgIHN0YXRpYyBGaWxlRXJyb3I6OkVy
cm9yQ29kZSBodHRwU3RhdHVzQ29kZVRvRXJyb3JDb2RlKGludCBodHRwU3RhdHVzQ29kZSk7Ci0g
ICAgc3RhdGljIHZvaWQgY29udmVydFRvRGF0YVVSTChjb25zdCBWZWN0b3I8Y2hhcj4mIHJhd0Rh
dGEsIGNvbnN0IFN0cmluZyYgZmlsZVR5cGUsIFN0cmluZ0J1aWxkZXImKTsKKyAgICBGaWxlUmVh
ZGVyTG9hZGVyOjpSZWFkVHlwZSByZWFkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZFR5cGU7
IH0KKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlclJlc3VsdCgpIGNvbnN0
OworICAgIFN0cmluZyBzdHJpbmdSZXN1bHQoKTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdAog
ICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CkBAIC05MywxMSArODcsMTEgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgRmlsZVJlYWRlciogdG9GaWxlUmVhZGVyKCkgeyByZXR1cm4g
dGhpczsgfQogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOyB9CiAKLSAgICAvLyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIC8vIEZp
bGVSZWFkZXJMb2FkZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCk7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgZXJyb3JDb2Rl
KTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVJlYWRlcj46OnJlZjsKICAgICB1c2luZyBS
ZWZDb3VudGVkPEZpbGVSZWFkZXI+OjpkZXJlZjsKQEAgLTExMCwxMSArMTA0LDYgQEAgcHVibGlj
OgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZGVuZCk7CiAKIHByaXZh
dGU6Ci0gICAgZW51bSBSZWFkVHlwZSB7Ci0gICAgICAgIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcs
Ci0gICAgICAgIFJlYWRGaWxlQXNUZXh0LAotICAgICAgICBSZWFkRmlsZUFzRGF0YVVSTAotICAg
IH07CiAgICAgZW51bSBJbnRlcm5hbFN0YXRlIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgU3Rh
cnRpbmcsCkBAIC0xMzMsMzggKzEyMiwxOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdl
dERhdGE7IH0KIAogICAgIHZvaWQgdGVybWluYXRlKCk7Ci0gICAgdm9pZCBjbGVhbnVwKCk7Ci0g
ICAgdm9pZCByZWFkSW50ZXJuYWwoQmxvYiosIFJlYWRUeXBlKTsKLSAgICB2b2lkIGZhaWxlZChp
bnQgaHR0cFN0YXR1c0NvZGUpOworICAgIHZvaWQgcmVhZEludGVybmFsKEJsb2IqLCBGaWxlUmVh
ZGVyTG9hZGVyOjpSZWFkVHlwZSk7CiAgICAgdm9pZCBmaXJlRXJyb3JFdmVudChpbnQgaHR0cFN0
YXR1c0NvZGUpOwogICAgIHZvaWQgZmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7
Ci0gICAgdm9pZCBjb252ZXJ0VG9UZXh0KCk7Ci0gICAgdm9pZCBjb252ZXJ0VG9EYXRhVVJMKCk7
CiAKICAgICBJbnRlcm5hbFN0YXRlIG1fc3RhdGU7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwogCiAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKLSAgICBLVVJMIG1fdXJs
Rm9yUmVhZGluZzsKLSAgICBSZWFkVHlwZSBtX3JlYWRUeXBlOwotICAgIFRleHRFbmNvZGluZyBt
X2VuY29kaW5nOwotCi0gICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7Ci0KLSAgICAvLyBUaGUg
cmF3IGRhdGEuIFdlIGhhdmUgdG8ga2VlcCB0cmFjayBvZiBhbGwgdGhlIHJhdyBkYXRhIGZvciBp
dCB0byBiZSBjb252ZXJ0ZWQgdG8gdGV4dCBvciBkYXRhIFVSTCBkYXRhLgotICAgIFZlY3Rvcjxj
aGFyPiBtX3Jhd0RhdGE7Ci0gICAgYm9vbCBtX2lzUmF3RGF0YUNvbnZlcnRlZDsKLQotICAgIC8v
IFRoZSBkZWNvZGVyIHVzZWQgdG8gZGVjb2RlIHRoZSB0ZXh0IGRhdGEuCi0gICAgUmVmUHRyPFRl
eHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKLQotICAgIC8vIE5lZWRlZCB0byBjcmVhdGUg
ZGF0YSBVUkwuCi0gICAgU3RyaW5nIG1fZmlsZVR5cGU7CisgICAgRmlsZVJlYWRlckxvYWRlcjo6
UmVhZFR5cGUgbV9yZWFkVHlwZTsKKyAgICBTdHJpbmcgbV9lbmNvZGluZzsKIAotICAgIFJlZlB0
cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBPd25QdHI8RmlsZVJlYWRlckxvYWRl
cj4gbV9sb2FkZXI7CiAgICAgUmVmUHRyPEZpbGVFcnJvcj4gbV9lcnJvcjsKLSAgICBsb25nIGxv
bmcgbV9ieXRlc0xvYWRlZDsKLSAgICBsb25nIGxvbmcgbV90b3RhbEJ5dGVzOwogICAgIGRvdWJs
ZSBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlvblRpbWVNUzsKIH07CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmlkbCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
LmlkbAppbmRleCBmZWJiMjMxLi5lYmM2ZmZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlci5pZGwKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaWRsCkBAIC00
NCw2ICs0NCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIHNob3J0IHJlYWR5U3RhdGU7CiAKICAgICAgICAgLy8gYXN5bmMgcmVhZCBtZXRob2Rz
CisgICAgICAgIHZvaWQgcmVhZEFzQXJyYXlCdWZmZXIoaW4gQmxvYiBibG9iKTsKICAgICAgICAg
dm9pZCByZWFkQXNCaW5hcnlTdHJpbmcoaW4gQmxvYiBibG9iKTsKICAgICAgICAgdm9pZCByZWFk
QXNUZXh0KGluIEJsb2IgYmxvYiwgaW4gW09wdGlvbmFsXSBET01TdHJpbmcgZW5jb2RpbmcpOwog
ICAgICAgICB2b2lkIHJlYWRBc0RhdGFVUkwoaW4gQmxvYiBibG9iKTsKQEAgLTUxLDcgKzUyLDcg
QEAgbW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkIGFib3J0KCk7CiAKICAgICAgICAgLy8gZmls
ZSBkYXRhCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydFNjcmlwdFN0cmluZ10g
RE9NU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21dIERP
TU9iamVjdCByZXN1bHQ7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZpbGVFcnJvciBl
cnJvcjsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
IGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmQ5N2YwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVy
LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkJhc2U2NC5oIgorI2lu
Y2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJCbG9iVVJMLmgiCisjaW5jbHVkZSAiRmlsZVJlYWRl
ckxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVC
bG9iUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaWxlUmVhZGVyTG9hZGVyOjpGaWxlUmVhZGVyTG9hZGVyKFJlYWRU
eXBlIHJlYWRUeXBlLCBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3Jl
YWRUeXBlKHJlYWRUeXBlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pc1Jhd0Rh
dGFDb252ZXJ0ZWQoZmFsc2UpCisgICAgLCBtX3N0cmluZ1Jlc3VsdCgiIikKKyAgICAsIG1fYnl0
ZXNMb2FkZWQoMCkKKyAgICAsIG1fdG90YWxCeXRlcygwKQorICAgICwgbV9lcnJvckNvZGUoMCkK
K3sKK30KKworRmlsZVJlYWRlckxvYWRlcjo6fkZpbGVSZWFkZXJMb2FkZXIoKQoreworICAgIHRl
cm1pbmF0ZSgpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJM
KG1fdXJsRm9yUmVhZGluZyk7Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxvYWRlcjo6c3RhcnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYikK
K3sKKyAgICAvLyBUaGUgYmxvYiBpcyByZWFkIGJ5IHJvdXRpbmcgdGhyb3VnaCB0aGUgcmVxdWVz
dCBoYW5kbGluZyBsYXllciBnaXZlbiBhIHRlbXBvcmFyeSBwdWJsaWMgdXJsLgorICAgIG1fdXJs
Rm9yUmVhZGluZyA9IEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdp
c3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nLCBibG9iLT51cmwoKSk7CisKKyAgICAvLyBDb25z
dHJ1Y3QgYW5kIGxvYWQgdGhlIHJlcXVlc3QuCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
bV91cmxGb3JSZWFkaW5nKTsKKyAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOworCisg
ICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2Fk
Q2FsbGJhY2tzID0gdHJ1ZTsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOworICAg
IG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVu
dGlhbHMgPSB0cnVlOworICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gRGVu
eUNyb3NzT3JpZ2luUmVxdWVzdHM7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fbG9h
ZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRo
aXMsIHJlcXVlc3QsIG9wdGlvbnMpOworICAgIGVsc2UKKyAgICAgICAgVGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZXF1
ZXN0LCAqdGhpcywgb3B0aW9ucyk7Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxvYWRlcjo6Y2FuY2Vs
KCkKK3sKKyAgICBtX2Vycm9yQ29kZSA9IEZpbGVFcnJvcjo6QUJPUlRfRVJSOworICAgIHRlcm1p
bmF0ZSgpOworfQorCit2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OnRlcm1pbmF0ZSgpCit7CisgICAg
aWYgKG1fbG9hZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgY2xl
YW51cCgpOworICAgIH0KK30KKwordm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjbGVhbnVwKCkKK3sK
KyAgICBtX2xvYWRlciA9IDA7CisKKyAgICAvLyBJZiB3ZSBnZXQgYW55IGVycm9yLCB3ZSBkbyBu
b3QgbmVlZCB0byBrZWVwIGEgYnVmZmVyIGFyb3VuZC4KKyAgICBpZiAobV9lcnJvckNvZGUpIHsK
KyAgICAgICAgbV9yYXdEYXRhID0gMDsKKyAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSAiIjsKKyAg
ICB9Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmIChyZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpICE9IDIwMCkgeworICAgICAgICBmYWlsZWQoaHR0cFN0YXR1c0NvZGVUb0Vycm9y
Q29kZShyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCByZWFkaW5nIG1vcmUgdGhhbiB0aGUgY3VycmVudCBz
aXplIGxpbWl0IG9mIEFycmF5QnVmZmVyLgorICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKSA+ICBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIHsKKyAgICAgICAgZmFpbGVkKEZpbGVFcnJvcjo6
Tk9UX1JFQURBQkxFX0VSUik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV90b3RhbEJ5
dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0
aCgpKTsKKworICAgIEFTU0VSVCghbV9yYXdEYXRhKTsKKyAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RvdGFsQnl0ZXMpLCAxKTsKKwor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFN0YXJ0TG9hZGluZygpOwor
fQorCit2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoZGF0YSAmJiBsZW5ndGhSZWNl
aXZlZCA+IDApOworCisgICAgLy8gQmFpbCBvdXQgaWYgd2UgZW5jb3VuZXRyIGFuIGVycm9yLgor
ICAgIGlmIChtX2Vycm9yQ29kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVtY3B5KHN0YXRp
Y19jYXN0PGNoYXIqPihtX3Jhd0RhdGEtPmRhdGEoKSkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9ieXRlc0xvYWRlZCksIGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZl
ZCkpOworICAgIG1fYnl0ZXNMb2FkZWQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJl
Y2VpdmVkKTsKKyAgICBtX3Jhd0RhdGEtPnNldEJ5dGVMZW5ndGgobV9ieXRlc0xvYWRlZCk7CisK
KyAgICBtX2lzUmF3RGF0YUNvbnZlcnRlZCA9IGZhbHNlOworCisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoKTsKK30KKwordm9pZCBGaWxlUmVhZGVy
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpCit7CisgICAgY2xlYW51cCgp
OworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
KTsKK30KKwordm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKQoreworICAgIC8vIElmIHdlJ3JlIGFib3J0aW5nLCBkbyBub3QgcHJvY2VlZCB3aXRoIG5v
cm1hbCBlcnJvciBoYW5kbGluZyBzaW5jZSBpdCBpcyBjb3ZlcmVkIGluIGFib3J0aW5nIGNvZGUu
CisgICAgaWYgKG1fZXJyb3JDb2RlID09IEZpbGVFcnJvcjo6QUJPUlRfRVJSKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmYWlsZWQoRmlsZUVycm9yOjpOT1RfUkVBREFCTEVfRVJSKTsKK30KKwor
dm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpmYWlsZWQoaW50IGVycm9yQ29kZSkKK3sKKyAgICBtX2Vy
cm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICBjbGVhbnVwKCk7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChtX2Vycm9yQ29kZSk7Cit9CisKK0ZpbGVFcnJvcjo6
RXJyb3JDb2RlIEZpbGVSZWFkZXJMb2FkZXI6Omh0dHBTdGF0dXNDb2RlVG9FcnJvckNvZGUoaW50
IGh0dHBTdGF0dXNDb2RlKQoreworICAgIHN3aXRjaCAoaHR0cFN0YXR1c0NvZGUpIHsKKyAgICAg
ICAgY2FzZSA0MDM6CisgICAgICAgICAgICByZXR1cm4gRmlsZUVycm9yOjpTRUNVUklUWV9FUlI7
CisgICAgICAgIGNhc2UgNDA0OgorICAgICAgICAgICAgcmV0dXJuIEZpbGVFcnJvcjo6Tk9UX0ZP
VU5EX0VSUjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBGaWxlRXJyb3I6
Ok5PVF9SRUFEQUJMRV9FUlI7CisgICAgfQorfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBG
aWxlUmVhZGVyTG9hZGVyOjphcnJheUJ1ZmZlclJlc3VsdCgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KG1fcmVhZFR5cGUgPT0gUmVhZEFzQXJyYXlCdWZmZXIpOworCisgICAgLy8gSWYgdGhlIGxvYWRp
bmcgaXMgbm90IHN0YXJ0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4gYW4gZW1wdHkgcmVz
dWx0LgorICAgIGlmICghbV9yYXdEYXRhIHx8IG1fZXJyb3JDb2RlKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIC8vIFdlIHN1cHBvcnQgcmV0dXJuaW5nIHRoZSBwYXJ0aWFsIGRhdGEuCisgICAg
cmV0dXJuIG1fcmF3RGF0YTsKK30KKworU3RyaW5nIEZpbGVSZWFkZXJMb2FkZXI6OnN0cmluZ1Jl
c3VsdCgpCit7CisgICAgQVNTRVJUKG1fcmVhZFR5cGUgIT0gUmVhZEFzQXJyYXlCdWZmZXIpOwor
CisgICAgLy8gSWYgdGhlIGxvYWRpbmcgaXMgbm90IHN0YXJ0ZWQgb3IgYW4gZXJyb3Igb2NjdXJz
LCByZXR1cm4gYW4gZW1wdHkgcmVzdWx0LgorICAgIGlmICghbV9yYXdEYXRhIHx8IG1fZXJyb3JD
b2RlKQorICAgICAgICByZXR1cm4gbV9zdHJpbmdSZXN1bHQ7CisKKyAgICAvLyBJZiBhbHJlYWR5
IGNvbnZlcnRlZCBmcm9tIHRoZSByYXcgZGF0YSwgcmV0dXJuIHRoZSByZXN1bHQgbm93LgorICAg
IGlmIChtX2lzUmF3RGF0YUNvbnZlcnRlZCkKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nUmVzdWx0
OworCisgICAgaWYgKG1fcmVhZFR5cGUgPT0gUmVhZEFzQmluYXJ5U3RyaW5nKQorICAgICAgICBt
X3N0cmluZ1Jlc3VsdCA9IFN0cmluZyhzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9yYXdEYXRh
LT5kYXRhKCkpLCBtX3Jhd0RhdGEtPmJ5dGVMZW5ndGgoKSk7CisgICAgZWxzZSBpZiAobV9yZWFk
VHlwZSA9PSBSZWFkQXNUZXh0KQorICAgICAgICBjb252ZXJ0VG9UZXh0KCk7CisgICAgZWxzZSB7
CisgICAgICAgIEFTU0VSVChtX3JlYWRUeXBlID09IFJlYWRBc0RhdGFVUkwpOworICAgICAgICAv
LyBQYXJ0aWFsIGRhdGEgaXMgbm90IHN1cHBvcnRlZCB3aGVuIHJlYWRpbmcgYXMgZGF0YSBVUkwu
CisgICAgICAgIGlmIChpc0NvbXBsZXRlZCgpKQorICAgICAgICAgICAgY29udmVydFRvRGF0YVVS
TCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gbV9zdHJpbmdSZXN1bHQ7Cit9CisKK3ZvaWQg
RmlsZVJlYWRlckxvYWRlcjo6Y29udmVydFRvVGV4dCgpCit7CisgICAgaWYgKCFtX3Jhd0RhdGEt
PmJ5dGVMZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRGVjb2RlIHRoZSBkYXRh
LgorICAgIC8vIFRoZSBGaWxlIEFQSSBzcGVjIHNheXMgdGhhdCB3ZSBzaG91bGQgdXNlIHRoZSBz
dXBwbGllZCBlbmNvZGluZyBpZiBpdCBpcyB2YWxpZC4gSG93ZXZlciwgd2UgY2hvb3NlIHRvIGln
bm9yZSB0aGlzCisgICAgLy8gcmVxdWlyZW1lbnQgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3
aXRoIGhvdyBXZWJLaXQgZGVjb2RlcyB0aGUgd2ViIGNvbnRlbnQ6IGFsd2F5cyBoYXMgdGhlIEJP
TSBvdmVycmlkZSB0aGUKKyAgICAvLyBwcm92aWRlZCBlbmNvZGluZy4gICAgIAorICAgIC8vIEZJ
WE1FOiBjb25zaWRlciBzdXBwb3J0aW5nIGluY3JlbWVudGFsIGRlY29kaW5nIHRvIGltcHJvdmUg
dGhlIHBlcmYuCisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGlmICghbV9kZWNvZGVy
KQorICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQv
cGxhaW4iLCBtX2VuY29kaW5nLmlzVmFsaWQoKSA/IG1fZW5jb2RpbmcgOiBVVEY4RW5jb2Rpbmco
KSk7CisgICAgYnVpbGRlci5hcHBlbmQobV9kZWNvZGVyLT5kZWNvZGUoc3RhdGljX2Nhc3Q8Y29u
c3QgY2hhcio+KG1fcmF3RGF0YS0+ZGF0YSgpKSwgbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCkpKTsK
KworICAgIGlmIChpc0NvbXBsZXRlZCgpKQorICAgICAgICBidWlsZGVyLmFwcGVuZChtX2RlY29k
ZXItPmZsdXNoKCkpOworCisgICAgbV9zdHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7
Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxvYWRlcjo6Y29udmVydFRvRGF0YVVSTCgpCit7CisgICAg
U3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIGJ1aWxkZXIuYXBwZW5kKCJkYXRhOiIpOworCisg
ICAgaWYgKCFtX3Jhd0RhdGEtPmJ5dGVMZW5ndGgoKSkgeworICAgICAgICBtX3N0cmluZ1Jlc3Vs
dCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghbV9kYXRhVHlwZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kYXRh
VHlwZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI7YmFzZTY0LCIpOworICAgIH0gZWxzZQor
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiYmFzZTY0LCIpOworCisgICAgVmVjdG9yPGNoYXI+IG91
dDsKKyAgICBiYXNlNjRFbmNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fcmF3RGF0YS0+
ZGF0YSgpKSwgbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCksIG91dCk7CisgICAgb3V0LmFwcGVuZCgn
XDAnKTsKKyAgICBidWlsZGVyLmFwcGVuZChvdXQuZGF0YSgpKTsKKworICAgIG1fc3RyaW5nUmVz
dWx0ID0gYnVpbGRlci50b1N0cmluZygpOworfQorCitib29sIEZpbGVSZWFkZXJMb2FkZXI6Omlz
Q29tcGxldGVkKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCkg
PT0gbV90b3RhbEJ5dGVzOworfQorCit2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OnNldEVuY29kaW5n
KGNvbnN0IFN0cmluZyYgZW5jb2RpbmcpIHsKKyAgICBpZiAoIWVuY29kaW5nLmlzRW1wdHkoKSkK
KyAgICAgICAgbV9lbmNvZGluZyA9IFRleHRFbmNvZGluZyhlbmNvZGluZyk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKyAKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5oIGIvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h
MTVlZTAxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2Fk
ZXIuaApAQCAtMCwwICsxLDExOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbGVSZWFkZXJMb2FkZXJfaAorI2RlZmlu
ZSBGaWxlUmVhZGVyTG9hZGVyX2gKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiRmls
ZUVycm9yLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgor
I2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEFycmF5QnVmZmVyOworY2xhc3MgQmxvYjsKK2NsYXNzIEZpbGVSZWFkZXJM
b2FkZXJDbGllbnQ7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgVGV4dFJl
c291cmNlRGVjb2RlcjsKK2NsYXNzIFRocmVhZGFibGVMb2FkZXI7CisKK2NsYXNzIEZpbGVSZWFk
ZXJMb2FkZXIgOiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7CitwdWJsaWM6CisgICAg
ZW51bSBSZWFkVHlwZSB7CisgICAgICAgIFJlYWRBc0FycmF5QnVmZmVyLAorICAgICAgICBSZWFk
QXNCaW5hcnlTdHJpbmcsCisgICAgICAgIFJlYWRBc1RleHQsCisgICAgICAgIFJlYWRBc0RhdGFV
UkwKKyAgICB9OworCisgICAgLy8gSWYgY2xpZW50IGlzIGdpdmVuLCBkbyB0aGUgbG9hZGluZyBh
c3luY2hyb25vdXNseS4gT3RoZXJ3aXNlLCBsb2FkIHN5bmNocm9ub3VzbHkuCisgICAgRmlsZVJl
YWRlckxvYWRlcihSZWFkVHlwZSwgRmlsZVJlYWRlckxvYWRlckNsaWVudCopOworICAgIH5GaWxl
UmVhZGVyTG9hZGVyKCk7CisKKyAgICB2b2lkIHN0YXJ0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
LCBCbG9iKik7CisgICAgdm9pZCBjYW5jZWwoKTsKKworICAgIC8vIFRocmVhZGFibGVMb2FkZXJD
bGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhcios
IGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9y
Jik7CisKKyAgICBTdHJpbmcgc3RyaW5nUmVzdWx0KCk7CisgICAgUGFzc1JlZlB0cjxBcnJheUJ1
ZmZlcj4gYXJyYXlCdWZmZXJSZXN1bHQoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBieXRlc0xvYWRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZXNMb2FkZWQ7IH0KKyAgICB1bnNpZ25lZCB0b3RhbEJ5
dGVzKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbEJ5dGVzOyB9CisgICAgaW50IGVycm9yQ29kZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXJyb3JDb2RlOyB9CisKKyAgICB2b2lkIHNldEVuY29kaW5nKGNv
bnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0RGF0YVR5cGUoY29uc3QgU3RyaW5nJiBkYXRhVHlw
ZSkgeyBtX2RhdGFUeXBlID0gZGF0YVR5cGU7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCB0
ZXJtaW5hdGUoKTsKKyAgICB2b2lkIGNsZWFudXAoKTsKKyAgICB2b2lkIGZhaWxlZChpbnQgZXJy
b3JDb2RlKTsKKyAgICB2b2lkIGNvbnZlcnRUb1RleHQoKTsKKyAgICB2b2lkIGNvbnZlcnRUb0Rh
dGFVUkwoKTsKKworICAgIGJvb2wgaXNDb21wbGV0ZWQoKSBjb25zdDsKKworICAgIHN0YXRpYyBG
aWxlRXJyb3I6OkVycm9yQ29kZSBodHRwU3RhdHVzQ29kZVRvRXJyb3JDb2RlKGludCk7CisKKyAg
ICBSZWFkVHlwZSBtX3JlYWRUeXBlOworICAgIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQqIG1fY2xp
ZW50OworICAgIFRleHRFbmNvZGluZyBtX2VuY29kaW5nOworICAgIFN0cmluZyBtX2RhdGFUeXBl
OworCisgICAgS1VSTCBtX3VybEZvclJlYWRpbmc7CisgICAgUmVmUHRyPFRocmVhZGFibGVMb2Fk
ZXI+IG1fbG9hZGVyOworCisgICAgUmVmUHRyPEFycmF5QnVmZmVyPiBtX3Jhd0RhdGE7CisgICAg
Ym9vbCBtX2lzUmF3RGF0YUNvbnZlcnRlZDsKKworICAgIFN0cmluZyBtX3N0cmluZ1Jlc3VsdDsK
KworICAgIC8vIFRoZSBkZWNvZGVyIHVzZWQgdG8gZGVjb2RlIHRoZSB0ZXh0IGRhdGEuCisgICAg
UmVmUHRyPFRleHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKKworICAgIHVuc2lnbmVkIG1f
Ynl0ZXNMb2FkZWQ7CisgICAgdW5zaWduZWQgbV90b3RhbEJ5dGVzOworICAgIGludCBtX2Vycm9y
Q29kZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShC
TE9CKQorCisjZW5kaWYgLy8gRmlsZVJlYWRlckxvYWRlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVS
ZWFkZXJMb2FkZXJDbGllbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40
YWNiOGFkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2Fk
ZXJDbGllbnQuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsZVJlYWRlckxvYWRlckNsaWVu
dF9oCisjZGVmaW5lIEZpbGVSZWFkZXJMb2FkZXJDbGllbnRfaAorCisjaWYgRU5BQkxFKEJMT0Ip
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsZVJlYWRlckxvYWRlckNsaWVudCB7
CitwdWJsaWM6CisgICAgdmlydHVhbCB+RmlsZVJlYWRlckxvYWRlckNsaWVudCgpIHt9CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlRGF0YSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZygp
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgZXJyb3JDb2RlKSA9IDA7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2Vu
ZGlmIC8vIEZpbGVSZWFkZXJMb2FkZXJDbGllbnRfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxl
YXBpL0ZpbGVSZWFkZXJTeW5jLmNwcCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5j
cHAKaW5kZXggOTlmNWE4OS4uODVlN2Y1MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJTeW5jLmNwcAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3Bw
CkBAIC0zNCwxNjIgKzM0LDY2IEBACiAKICNpbmNsdWRlICJGaWxlUmVhZGVyU3luYy5oIgogCi0j
aW5jbHVkZSAiQmFzZTY0LmgiCisjaW5jbHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJC
bG9iLmgiCiAjaW5jbHVkZSAiQmxvYlVSTC5oIgogI2luY2x1ZGUgIkZpbGVFeGNlcHRpb24uaCIK
LSNpbmNsdWRlICJGaWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgotI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQuaCIKLSNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKLSNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCi0jaW5jbHVkZSAiVGhyZWFkYWJsZUJsb2JSZWdpc3RyeS5oIgotI2luY2x1
ZGUgIlRocmVhZGFibGVMb2FkZXIuaCIKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyLmgiCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBGaWxlUmVhZGVyU3luY0xvYWRlciA6IHB1YmxpYyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsK
LXB1YmxpYzoKLSAgICAvLyBJZiB0aGUgb3V0cHV0IHJlc3VsdCBpcyBwcm92aWRlZCwgdXNlIGl0
LiBPdGhlcndpc2UsIHNhdmUgaXQgYXMgdGhlIHJhdyBkYXRhLgotICAgIEZpbGVSZWFkZXJTeW5j
TG9hZGVyKFN0cmluZ0J1aWxkZXIqKTsKLQotICAgIC8vIFJldHVybnMgdGhlIGh0dHAgc3RhdHVz
IGNvZGUuCi0gICAgdm9pZCBzdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gVGhyZWFkYWJsZUxvYWRl
ckNsaWVudAotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlUmVzcG9uc2UoY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFy
KiwgaW50KTsKLSAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25n
IGlkZW50aWZpZXIpOwotICAgIHZpcnR1YWwgdm9pZCBkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKLQotICAgIGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmF3RGF0YTsgfQotCi1wcml2YXRlOgotICAgIC8vIFRoZSBvdXRwdXQgcmVzdWx0LiBUaGUg
Y2FsbGVyIHByb3ZpZGVzIHRoaXMgaW4gb3JkZXIgdG8gbG9hZCB0aGUgYmluYXJ5IGRhdGEgZGly
ZWN0bHkuCi0gICAgU3RyaW5nQnVpbGRlciogbV9idWlsZGVyOwotCi0gICAgLy8gVGhlIHJhdyBk
YXRhLiBUaGUgY2FsbGVyIGRvZXMgbm90IHByb3ZpZGUgdGhlIGFib3ZlIG91dHB1dCByZXN1bHQg
YW5kIHdlIG5lZWQgdG8gc2F2ZSBpdCBoZXJlLgotICAgIFZlY3RvcjxjaGFyPiBtX3Jhd0RhdGE7
Ci0KLSAgICBpbnQgbV9odHRwU3RhdHVzQ29kZTsgICAgCi19OwotCi1GaWxlUmVhZGVyU3luY0xv
YWRlcjo6RmlsZVJlYWRlclN5bmNMb2FkZXIoU3RyaW5nQnVpbGRlciogYnVpbGRlcikKLSAgICA6
IG1fYnVpbGRlcihidWlsZGVyKQotICAgICwgbV9odHRwU3RhdHVzQ29kZSgwKQotewotfQotCi12
b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpzdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIEV4
Y2VwdGlvbkNvZGUmIGVjKQorRmlsZVJlYWRlclN5bmM6OkZpbGVSZWFkZXJTeW5jKCkKIHsKLSAg
ICBUaHJlYWRhYmxlTG9hZGVyT3B0aW9ucyBvcHRpb25zOwotICAgIG9wdGlvbnMuc2VuZExvYWRD
YWxsYmFja3MgPSB0cnVlOwotICAgIG9wdGlvbnMuc25pZmZDb250ZW50ID0gZmFsc2U7Ci0gICAg
b3B0aW9ucy5mb3JjZVByZWZsaWdodCA9IGZhbHNlOwotICAgIG9wdGlvbnMuYWxsb3dDcmVkZW50
aWFscyA9IHRydWU7Ci0gICAgb3B0aW9ucy5jcm9zc09yaWdpblJlcXVlc3RQb2xpY3kgPSBEZW55
Q3Jvc3NPcmlnaW5SZXF1ZXN0czsKLQotICAgIFRocmVhZGFibGVMb2FkZXI6OmxvYWRSZXNvdXJj
ZVN5bmNocm9ub3VzbHkoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCwgKnRoaXMsIG9w
dGlvbnMpOwotCi0gICAgZWMgPSAobV9odHRwU3RhdHVzQ29kZSA9PSAyMDApID8gMCA6IEZpbGVF
eGNlcHRpb246OkVycm9yQ29kZVRvRXhjZXB0aW9uQ29kZShGaWxlUmVhZGVyOjpodHRwU3RhdHVz
Q29kZVRvRXJyb3JDb2RlKG1faHR0cFN0YXR1c0NvZGUpKTsKIH0KIAotdm9pZCBGaWxlUmVhZGVy
U3luY0xvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
c3BvbnNlKQorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4gRmlsZVJlYWRlclN5bmM6OnJlYWRBc0Fy
cmF5QnVmZmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIG1faHR0cFN0YXR1c0NvZGUg
PSByZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpOwotfQorICAgIGlmICghYmxvYikKKyAgICAgICAg
cmV0dXJuIDA7CiAKLXZvaWQgRmlsZVJlYWRlclN5bmNMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKLXsKLSAgICBpZiAobV9idWlsZGVy
KQotICAgICAgICBtX2J1aWxkZXItPmFwcGVuZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bGVuZ3RoUmVjZWl2ZWQpKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcmF3RGF0YS5hcHBlbmQoZGF0
YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7Ci19CisgICAgRmlsZVJl
YWRlckxvYWRlciBsb2FkZXIoRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQXJyYXlCdWZmZXIsIDAp
OworICAgIHN0YXJ0TG9hZGluZyhzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBsb2FkZXIsIGJsb2Is
IGVjKTsKIAotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6ZGlkRmluaXNoTG9hZGluZyh1bnNp
Z25lZCBsb25nKQotewotfQotCi12b2lkIEZpbGVSZWFkZXJTeW5jTG9hZGVyOjpkaWRGYWlsKGNv
bnN0IFJlc291cmNlRXJyb3ImKQotewotICAgIC8vIFRyZWF0IGFzIGludGVybmFsIGVycm9yLgot
ICAgIG1faHR0cFN0YXR1c0NvZGUgPSA1MDA7CisgICAgcmV0dXJuIGxvYWRlci5hcnJheUJ1ZmZl
clJlc3VsdCgpOwogfQogCiBTdHJpbmcgRmlsZVJlYWRlclN5bmM6OnJlYWRBc0JpbmFyeVN0cmlu
ZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBi
bG9iLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWJsb2IpCi0gICAgICAgIHJldHVy
biBtX2J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAg
cmVhZChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBibG9iLCBSZWFkQXNCaW5hcnlTdHJpbmcsIGVj
KTsKLSAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CisgICAgRmlsZVJlYWRlckxvYWRl
ciBsb2FkZXIoRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzQmluYXJ5U3RyaW5nLCAwKTsKKyAgICBz
dGFydExvYWRpbmcoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbG9hZGVyLCBibG9iLCBlYyk7Cisg
ICAgcmV0dXJuIGxvYWRlci5zdHJpbmdSZXN1bHQoKTsKIH0KIAogU3RyaW5nIEZpbGVSZWFkZXJT
eW5jOjpyZWFkQXNUZXh0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIEJsb2IqIGJsb2IsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmcsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogewogICAgIGlmICghYmxvYikKLSAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmlu
ZygpOworICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBtX2VuY29kaW5nID0gZW5jb2Rp
bmc7Ci0gICAgcmVhZChzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBibG9iLCBSZWFkQXNUZXh0LCBl
Yyk7Ci0gICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOworICAgIEZpbGVSZWFkZXJMb2Fk
ZXIgbG9hZGVyKEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRBc1RleHQsIDApOworICAgIGxvYWRlci5z
ZXRFbmNvZGluZyhlbmNvZGluZyk7CisgICAgc3RhcnRMb2FkaW5nKHNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQsIGxvYWRlciwgYmxvYiwgZWMpOworICAgIHJldHVybiBsb2FkZXIuc3RyaW5nUmVzdWx0
KCk7CiB9CiAKIFN0cmluZyBGaWxlUmVhZGVyU3luYzo6cmVhZEFzRGF0YVVSTChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBpZiAoIWJsb2IpCi0gICAgICAgIHJldHVybiBtX2J1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAgcmVhZChzY3JpcHRF
eGVjdXRpb25Db250ZXh0LCBibG9iLCBSZWFkQXNEYXRhVVJMLCBlYyk7Ci0gICAgcmV0dXJuIG1f
YnVpbGRlci50b1N0cmluZygpOwotfQotCi12b2lkIEZpbGVSZWFkZXJTeW5jOjpyZWFkKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIEJsb2IqIGJsb2IsIFJl
YWRUeXBlIHJlYWRUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBUaGUgYmxvYiBp
cyByZWFkIGJ5IHJvdXRpbmcgdGhyb3VnaCB0aGUgcmVxdWVzdCBoYW5kbGluZyBsYXllciBnaXZl
biB0aGUgdGVtcG9yYXJ5IHB1YmxpYyB1cmwuCi0gICAgS1VSTCB1cmxGb3JSZWFkaW5nID0gQmxv
YlVSTDo6Y3JlYXRlUHVibGljVVJMKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQtPnNlY3VyaXR5T3Jp
Z2luKCkpOwotICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnJlZ2lzdGVyQmxvYlVSTCh1cmxG
b3JSZWFkaW5nLCBibG9iLT51cmwoKSk7Ci0KLSAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCh1
cmxGb3JSZWFkaW5nKTsKLSAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOwotCi0gICAg
RmlsZVJlYWRlclN5bmNMb2FkZXIgbG9hZGVyKChyZWFkVHlwZSA9PSBSZWFkQXNCaW5hcnlTdHJp
bmcpID8gJm1fYnVpbGRlciA6IDApOwotICAgIGxvYWRlci5zdGFydChzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCByZXF1ZXN0LCBlYyk7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3RyeTo6dW5yZWdp
c3RlckJsb2JVUkwodXJsRm9yUmVhZGluZyk7Ci0gICAgaWYgKGVjKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBzd2l0Y2ggKHJlYWRUeXBlKSB7Ci0gICAgY2FzZSBSZWFkQXNCaW5hcnlTdHJpbmc6
Ci0gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gc2luY2Ugd2UgbmVlZCBubyBjb252ZXJzaW9uLgot
ICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBSZWFkQXNUZXh0OgotICAgICAgICBjb252ZXJ0VG9U
ZXh0KGxvYWRlci5yYXdEYXRhKCkuZGF0YSgpLCBsb2FkZXIucmF3RGF0YSgpLnNpemUoKSwgbV9i
dWlsZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgUmVhZEFzRGF0YVVSTDoKLSAgICAg
ICAgRmlsZVJlYWRlcjo6Y29udmVydFRvRGF0YVVSTChsb2FkZXIucmF3RGF0YSgpLCBibG9iLT50
eXBlKCksIG1fYnVpbGRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICBGaWxlUmVhZGVyTG9hZGVyIGxvYWRlcihGaWxlUmVhZGVyTG9h
ZGVyOjpSZWFkQXNEYXRhVVJMLCAwKTsKKyAgICBsb2FkZXIuc2V0RGF0YVR5cGUoYmxvYi0+dHlw
ZSgpKTsKKyAgICBzdGFydExvYWRpbmcoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgbG9hZGVyLCBi
bG9iLCBlYyk7CisgICAgcmV0dXJuIGxvYWRlci5zdHJpbmdSZXN1bHQoKTsKIH0KIAotdm9pZCBG
aWxlUmVhZGVyU3luYzo6Y29udmVydFRvVGV4dChjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwg
U3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3ZvaWQgRmlsZVJlYWRlclN5bmM6OnN0YXJ0TG9hZGlu
ZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBGaWxlUmVh
ZGVyTG9hZGVyJiBsb2FkZXIsIEJsb2IqIGJsb2IsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAg
IGlmICghc2l6ZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRGVjb2RlIHRoZSBkYXRhLgot
ICAgIC8vIFRoZSBGaWxlIEFQSSBzcGVjIHNheXMgdGhhdCB3ZSBzaG91bGQgdXNlIHRoZSBzdXBw
bGllZCBlbmNvZGluZyBpZiBpdCBpcyB2YWxpZC4gSG93ZXZlciwgd2UgY2hvb3NlIHRvIGlnbm9y
ZSB0aGlzCi0gICAgLy8gcmVxdWlyZW1lbnQgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRo
IGhvdyBXZWJLaXQgZGVjb2RlcyB0aGUgd2ViIGNvbnRlbnQ6IGFsd2F5cyBoYXZlIHRoZSBCT00g
b3ZlcnJpZGUgdGhlCi0gICAgLy8gcHJvdmlkZWQgZW5jb2RpbmcuICAgICAKLSAgICAvLyBGSVhN
RTogY29uc2lkZXIgc3VwcG9ydGluZyBpbmNyZW1lbnRhbCBkZWNvZGluZyB0byBpbXByb3ZlIHRo
ZSBwZXJmLgotICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNvZGVyPiBkZWNvZGVyID0gVGV4dFJl
c291cmNlRGVjb2Rlcjo6Y3JlYXRlKCJ0ZXh0L3BsYWluIiwgbV9lbmNvZGluZy5pc0VtcHR5KCkg
PyBVVEY4RW5jb2RpbmcoKSA6IFRleHRFbmNvZGluZyhtX2VuY29kaW5nKSk7Ci0gICAgYnVpbGRl
ci5jbGVhcigpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGRlY29kZXItPmRlY29kZShkYXRhLCBzaXpl
KSk7Ci0gICAgYnVpbGRlci5hcHBlbmQoZGVjb2Rlci0+Zmx1c2goKSk7CisgICAgbG9hZGVyLnN0
YXJ0KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGJsb2IpOworICAgIGVjID0gRmlsZUV4Y2VwdGlv
bjo6RXJyb3JDb2RlVG9FeGNlcHRpb25Db2RlKGxvYWRlci5lcnJvckNvZGUoKSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVh
ZGVyU3luYy5oIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmgKaW5kZXggY2IwZTAw
ZC4uNzliNjM3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmgK
KysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmgKQEAgLTM0LDEzICszNCwxNSBA
QAogI2lmIEVOQUJMRShCTE9CKQogCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitjbGFzcyBBcnJheUJ1ZmZlcjsKIGNsYXNzIEJsb2I7CitjbGFzcyBGaWxlUmVhZGVyTG9hZGVy
OwogY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKIAogY2xhc3MgRmlsZVJlYWRlclN5bmMg
OiBwdWJsaWMgUmVmQ291bnRlZDxGaWxlUmVhZGVyU3luYz4gewpAQCAtNTIsNiArNTQsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIH5GaWxlUmVhZGVyU3luYygpIHsgfQogCisgICAgUGFzc1Jl
ZlB0cjxBcnJheUJ1ZmZlcj4gcmVhZEFzQXJyYXlCdWZmZXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlYWRBc0JpbmFyeVN0cmlu
ZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBT
dHJpbmcgcmVhZEFzVGV4dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0LCBCbG9iKiBibG9iLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB7CkBAIC02MSwyMCAr
NjQsOSBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIHJlYWRBc0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7CiAKIHByaXZhdGU6Ci0gICAgZW51bSBS
ZWFkVHlwZSB7Ci0gICAgICAgIFJlYWRBc0JpbmFyeVN0cmluZywKLSAgICAgICAgUmVhZEFzVGV4
dCwKLSAgICAgICAgUmVhZEFzRGF0YVVSTAotICAgIH07CisgICAgRmlsZVJlYWRlclN5bmMoKTsK
IAotICAgIEZpbGVSZWFkZXJTeW5jKCkgeyB9Ci0KLSAgICB2b2lkIHJlYWQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIEJsb2IqLCBSZWFkVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
Y29udmVydFRvVGV4dChjb25zdCBjaGFyKiBkYXRhLCBpbnQgc2l6ZSwgU3RyaW5nQnVpbGRlciYp
OwotCi0gICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7Ci0KLSAgICBTdHJpbmcgbV9lbmNvZGlu
ZzsKKyAgICB2b2lkIHN0YXJ0TG9hZGluZyhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgRmlsZVJl
YWRlckxvYWRlciYsIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRs
IGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlkbAppbmRleCA3MjgxOGIxLi4zODFk
NDgzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsCisrKyBi
L1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5pZGwKQEAgLTM0LDYgKzM0LDggQEAgbW9k
dWxlIGh0bWwgewogICAgICAgICBDYW5CZUNvbnN0cnVjdGVkLAogICAgICAgICBOb1N0YXRpY1Rh
YmxlcwogICAgIF0gRmlsZVJlYWRlclN5bmMgeworICAgICAgICBbQ2FsbFdpdGg9U2NyaXB0RXhl
Y3V0aW9uQ29udGV4dF0gQXJyYXlCdWZmZXIgcmVhZEFzQXJyYXlCdWZmZXIoaW4gQmxvYiBibG9i
KQorICAgICAgICAgICAgcmFpc2VzKEZpbGVFeGNlcHRpb24pOwogICAgICAgICBbQ2FsbFdpdGg9
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQ29udmVydFNjcmlwdFN0cmluZ10gRE9NU3RyaW5nIHJl
YWRBc0JpbmFyeVN0cmluZyhpbiBCbG9iIGJsb2IpCiAgICAgICAgICAgICByYWlzZXMoRmlsZUV4
Y2VwdGlvbik7CiAgICAgICAgIFtDYWxsV2l0aD1TY3JpcHRFeGVjdXRpb25Db250ZXh0LCBDb252
ZXJ0U2NyaXB0U3RyaW5nXSBET01TdHJpbmcgcmVhZEFzVGV4dChpbiBCbG9iIGJsb2IsIGluIFtP
cHRpb25hbF0gRE9NU3RyaW5nIGVuY29kaW5nKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2Nh
bnZhcy9BcnJheUJ1ZmZlci5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmNw
cAppbmRleCAwMTRjYzFlLi5lYzg0OTE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFz
L0FycmF5QnVmZmVyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmNw
cApAQCAtNTMsNiArNTMsNyBAQCBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBBcnJheUJ1ZmZlcjo6
Y3JlYXRlKEFycmF5QnVmZmVyKiBvdGhlcikKIAogQXJyYXlCdWZmZXI6OkFycmF5QnVmZmVyKHZv
aWQqIGRhdGEsIHVuc2lnbmVkIHNpemVJbkJ5dGVzKQogICAgIDogbV9zaXplSW5CeXRlcyhzaXpl
SW5CeXRlcykKKyAgICAsIG1fY2FwYWNpdHlJbkJ5dGVzKHNpemVJbkJ5dGVzKQogICAgICwgbV9k
YXRhKGRhdGEpCiB7CiB9CkBAIC03Miw2ICs3MywxMiBAQCB1bnNpZ25lZCBBcnJheUJ1ZmZlcjo6
Ynl0ZUxlbmd0aCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc2l6ZUluQnl0ZXM7CiB9CiAKK3ZvaWQg
QXJyYXlCdWZmZXI6OnNldEJ5dGVMZW5ndGgodW5zaWduZWQgc2l6ZSkKK3sKKyAgICBBU1NFUlQo
c2l6ZSA8PSBtX2NhcGFjaXR5SW5CeXRlcyk7CisgICAgbV9zaXplSW5CeXRlcyA9IHNpemU7Cit9
CisKIEFycmF5QnVmZmVyOjp+QXJyYXlCdWZmZXIoKQogewogICAgIFdURjo6ZmFzdEZyZWUobV9k
YXRhKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaCBiL1dl
YkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaAppbmRleCBmNTM4MDgwLi4yNzcwMWYxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmgKKysrIGIvV2ViQ29y
ZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5oCkBAIC0zOSw2ICszOSw3IEBAIGNsYXNzIEFycmF5
QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZmZXI+IHsKICAgICB2b2lkKiBkYXRh
KCk7CiAgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0OwogICAgIHVuc2lnbmVkIGJ5dGVMZW5n
dGgoKSBjb25zdDsKKyAgICB2b2lkIHNldEJ5dGVMZW5ndGgodW5zaWduZWQpOwogCiAgICAgfkFy
cmF5QnVmZmVyKCk7CiAKQEAgLTQ3LDYgKzQ4LDcgQEAgY2xhc3MgQXJyYXlCdWZmZXIgOiBwdWJs
aWMgUmVmQ291bnRlZDxBcnJheUJ1ZmZlcj4gewogICAgIEFycmF5QnVmZmVyKHVuc2lnbmVkIG51
bUVsZW1lbnRzLCB1bnNpZ25lZCBlbGVtZW50Qnl0ZVNpemUpOwogICAgIHN0YXRpYyB2b2lkKiB0
cnlBbGxvY2F0ZSh1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxlbWVudEJ5dGVTaXpl
KTsKICAgICB1bnNpZ25lZCBtX3NpemVJbkJ5dGVzOworICAgIHVuc2lnbmVkIG1fY2FwYWNpdHlJ
bkJ5dGVzOwogICAgIHZvaWQqIG1fZGF0YTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9h
ZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaCBiL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVM
b2FkZXJDbGllbnQuaAppbmRleCBiOGE2NTg0Li5iY2Y2OGJlIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvVGhy
ZWFkYWJsZUxvYWRlckNsaWVudC5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIFRocmVhZGFi
bGVMb2FkZXJDbGllbnRfaAogI2RlZmluZSBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKIAorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBj
bGFzcyBSZXNvdXJjZUVycm9yOwo=
</data>
<flag name="commit-queue"
          id="62120"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71975</attachid>
            <date>2010-10-26 18:26:32 -0700</date>
            <delta_ts>2010-10-26 20:52:01 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>47691_7</filename>
            <type>text/plain</type>
            <size>76548</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjMjgzMjE5Li4xN2ZiZDU0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTAtMTAt
MjYgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFN1cHBvcnQgcmVhZEFzQXJyYXlCdWZmZXIgaW4g
RmlsZVJlYWRlciBhbmQgRmlsZVJlYWRlclN5bmMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NjkxCisKKyAgICAgICAgKiBmYXN0L2ZpbGVzL3JlYWQt
ZmlsZS1hc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy9yZXNvdXJjZXMv
cmVhZC1jb21tb24uanM6CisgICAgICAgIChyZWFkQmxvYkFzQXJyYXlCdWZmZXIpOgorICAgICAg
ICAoX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQXJy
YXlCdWZmZXJTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzQmluYXJ5U3RyaW5nU3luYyk6Cisg
ICAgICAgIChfcmVhZEJsb2JBc1RleHRTeW5jKToKKyAgICAgICAgKF9yZWFkQmxvYkFzRGF0YVVS
TFN5bmMpOgorICAgICAgICAobG9nUmVzdWx0KToKKyAgICAgICAgKGxvYWRlZCk6CisgICAgICAg
IChfdG9TdHJpbmcpOgorICAgICAgICAoX2lzQVNDSUlTdHJpbmcpOgorICAgICAgICAoX3RvSGV4
YWRlY2ltYWwpOgorICAgICAgICAoX2dldEVsZW1lbnRBdCk6CisgICAgICAgICogZmFzdC9maWxl
cy9yZXNvdXJjZXMvcmVhZC1maWxlLXRlc3QtY2FzZXMuanM6CisgICAgICAgICh0ZXN0UmVhZGlu
Z05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIpOgorICAgICAgICAodGVzdFJlYWRpbmdFbXB0
eUZpbGVBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxl
QXNBcnJheUJ1ZmZlcik6CisgICAgICAgICh0ZXN0UmVhZGluZ0JpbmFyeUZpbGVBc0FycmF5QnVm
ZmVyKToKKyAgICAgICAgKHRlc3RNdWx0aXBsZVJlYWRzKToKKyAgICAgICAgKiBmYXN0L2ZpbGVz
L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZpbGUtc3luYy5qczoKKyAgICAgICAgKHRl
c3RNdWx0aXBsZVJlYWRzU3luYyk6CisgICAgICAgICogZmFzdC9maWxlcy93b3JrZXJzL3dvcmtl
ci1yZWFkLWJsb2Itc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogZmFzdC9maWxlcy93b3Jr
ZXJzL3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGZhc3Qv
ZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxlLXN5bmMtZXhwZWN0ZWQudHh0OgorCiAyMDEw
LTEwLTI2ICBLZW5pY2hpIElzaGliYXNoaSAgPGJhc2hpQGdvb2dsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2Zp
bGVzL3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVz
L3JlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKaW5kZXggZDk0ZWFiYi4uMjg0NjZkNSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZWFkLWZpbGUtYXN5bmMtZXhwZWN0ZWQu
dHh0CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVhZC1maWxlLWFzeW5jLWV4cGVjdGVk
LnR4dApAQCAtMSw0ICsxLDEwIEBACiAKK1Rlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxl
IGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgZXJyb3IgZXZlbnQKK3Jl
YWR5U3RhdGU6IDIKK2Vycm9yIGNvZGU6IDEKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3Qg
cmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6
IDAKIFJlY2VpdmVkIGVycm9yIGV2ZW50CkBAIC0xNyw2ICsyMywxNSBAQCBSZWNlaXZlZCBlcnJv
ciBldmVudAogcmVhZHlTdGF0ZTogMgogZXJyb3IgY29kZTogMQogUmVjZWl2ZWQgbG9hZGVuZCBl
dmVudAorVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0
YXRlOiAwCitSZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVk
IGxvYWQgZXZlbnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiAwCityZXN1bHQ6IAorUmVj
ZWl2ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYmluYXJ5
IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CkBAIC00NCw2
ICs1OSwxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6ZTogNQogcmVzdWx0OiBkYXRhOgog
UmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5nIGEgVVRGLTggZmlsZSBhcyBhcnJh
eSBidWZmZXIKK3JlYWR5U3RhdGU6IDAKK1JlY2VpdmVkIGxvYWRzdGFydCBldmVudAorcmVhZHlT
dGF0ZTogMQorUmVjZWl2ZWQgbG9hZCBldmVudAorcmVhZHlTdGF0ZTogMgorcmVzdWx0IHNpemU6
IDUKK3Jlc3VsdDogSGVsbG8KK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3QgcmVhZGluZyBh
IFVURi04IGZpbGUgYXMgYmluYXJ5IHN0cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9h
ZHN0YXJ0IGV2ZW50CkBAIC01Myw2ICs3NywxNSBAQCByZWFkeVN0YXRlOiAyCiByZXN1bHQgc2l6
ZTogNQogcmVzdWx0OiBIZWxsbwogUmVjZWl2ZWQgbG9hZGVuZCBldmVudAorVGVzdCByZWFkaW5n
IGEgYmluYXJ5IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitSZWNlaXZlZCBs
b2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZlbnQKK3JlYWR5
U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA5CityZXN1bHQ6IDB4MCAweDEgMHgyIDB4ODAgMHg4MSAw
eDgyIDB4ZmQgMHhmZSAweGZmCitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcg
YSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBs
b2Fkc3RhcnQgZXZlbnQKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3Vy
Y2VzL3JlYWQtY29tbW9uLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVh
ZC1jb21tb24uanMKaW5kZXggYWJlMzI0Zi4uM2I3NDQ3YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy9yZXNvdXJjZXMvcmVhZC1jb21tb24uanMKQEAgLTExLDYgKzExLDE0IEBAIGZ1
bmN0aW9uIGJ1aWxkQmxvYihpdGVtcywgY29udGVudFR5cGUsIGJ1aWxkZXIpCiB9CiAKIC8vIFJl
YWRzIGEgYmxvYiBlaXRoZXIgYXN5bmNocm9ub3VzbHkgb3Igc3luY2hyb25vdXNseS4KK2Z1bmN0
aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIGJsb2IpCit7CisgICAgaWYgKGlz
UmVhZEFzQXN5bmMoKSkKKyAgICAgICAgX3JlYWRCbG9iQXNBcnJheUJ1ZmZlckFzeW5jKHRlc3RG
aWxlcywgYmxvYik7CisgICAgZWxzZQorICAgICAgICBfcmVhZEJsb2JBc0FycmF5QnVmZmVyU3lu
Yyh0ZXN0RmlsZXMsIGJsb2IpOworfQorCiBmdW5jdGlvbiByZWFkQmxvYkFzQmluYXJ5U3RyaW5n
KHRlc3RGaWxlcywgYmxvYikKIHsKICAgICBpZiAoaXNSZWFkQXNBc3luYygpKQpAQCAtMzYsNiAr
NDQsMTIgQEAgZnVuY3Rpb24gcmVhZEJsb2JBc0RhdGFVUkwodGVzdEZpbGVzLCBibG9iKQogfQog
CiAvLyBSZWFkcyBhIGJsb2IgYXN5bmNocm9ub3VzbHkuCitmdW5jdGlvbiBfcmVhZEJsb2JBc0Fy
cmF5QnVmZmVyQXN5bmModGVzdEZpbGVzLCBibG9iKQoreworICAgIHZhciByZWFkZXIgPSBjcmVh
dGVSZWFkZXJBc3luYyh0ZXN0RmlsZXMpOworICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihi
bG9iKQorfQorCiBmdW5jdGlvbiBfcmVhZEJsb2JBc0JpbmFyeVN0cmluZ0FzeW5jKHRlc3RGaWxl
cywgYmxvYikKIHsKICAgICB2YXIgcmVhZGVyID0gY3JlYXRlUmVhZGVyQXN5bmModGVzdEZpbGVz
KTsKQEAgLTU1LDEyICs2OSwyNSBAQCBmdW5jdGlvbiBfcmVhZEJsb2JBc0RhdGFVUkxBc3luYyh0
ZXN0RmlsZXMsIGJsb2IpCiB9CiAKIC8vIFJlYWRzIGEgYmxvYiBzeW5jaHJvbm91c2x5LgorZnVu
Y3Rpb24gX3JlYWRCbG9iQXNBcnJheUJ1ZmZlclN5bmModGVzdEZpbGVzLCBibG9iKQoreworICAg
IHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CisgICAgdHJ5IHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTsKKyAgICAgICAgbG9nUmVz
dWx0KHJlc3VsdCk7CisgICAgfSBjYXRjaCAoZXJyb3IpIHsKKyAgICAgICAgbG9nKCJSZWNlaXZl
ZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAiOiAiICsgZXJyb3IubmFtZSk7CisgICAgfQor
CisgICAgcnVuTmV4dFRlc3QodGVzdEZpbGVzKTsKK30KKwogZnVuY3Rpb24gX3JlYWRCbG9iQXNC
aW5hcnlTdHJpbmdTeW5jKHRlc3RGaWxlcywgYmxvYikKIHsKICAgICB2YXIgcmVhZGVyID0gY3Jl
YXRlUmVhZGVyU3luYygpOwogICAgIHRyeSB7CiAgICAgICAgIHZhciByZXN1bHQgPSByZWFkZXIu
cmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpOwotICAgICAgICBsb2cocmVzdWx0KTsKKyAgICAgICAg
bG9nUmVzdWx0KHJlc3VsdCk7CiAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgbG9nKCJS
ZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAiOiAiICsgZXJyb3IubmFtZSk7CiAg
ICAgfQpAQCAtNzMsNyArMTAwLDcgQEAgZnVuY3Rpb24gX3JlYWRCbG9iQXNUZXh0U3luYyh0ZXN0
RmlsZXMsIGJsb2IsIGVuY29kaW5nKQogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5j
KCk7CiAgICAgdHJ5IHsKICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNUZXh0KGJs
b2IsIGVuY29kaW5nKTsKLSAgICAgICAgbG9nKHJlc3VsdCk7CisgICAgICAgIGxvZ1Jlc3VsdChy
ZXN1bHQpOwogICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgIGxvZygiUmVjZWl2ZWQgZXhj
ZXB0aW9uICIgKyBlcnJvci5jb2RlICsgIjogIiArIGVycm9yLm5hbWUpOwogICAgIH0KQEAgLTg2
LDcgKzExMyw3IEBAIGZ1bmN0aW9uIF9yZWFkQmxvYkFzRGF0YVVSTFN5bmModGVzdEZpbGVzLCBi
bG9iKQogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJTeW5jKCk7CiAgICAgdHJ5IHsKICAg
ICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpOwotICAgICAgICBs
b2cocmVzdWx0KTsKKyAgICAgICAgbG9nUmVzdWx0KHJlc3VsdCk7CiAgICAgfSBjYXRjaCAoZXJy
b3IpIHsKICAgICAgICAgbG9nKCJSZWNlaXZlZCBleGNlcHRpb24gIiArIGVycm9yLmNvZGUgKyAi
OiAiICsgZXJyb3IubmFtZSk7CiAgICAgfQpAQCAtMTE1LDYgKzE0MiwxOSBAQCBmdW5jdGlvbiBj
cmVhdGVSZWFkZXJTeW5jKCkKICAgICByZXR1cm4gbmV3IEZpbGVSZWFkZXJTeW5jKCk7CiB9CiAK
Ky8vICdyZXN1bHQnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXIgb2JqZWN0IG9yIGEgc3Ry
aW5nLgorZnVuY3Rpb24gbG9nUmVzdWx0KHJlc3VsdCkKK3sKKyAgICBpZiAodHlwZW9mIHJlc3Vs
dCA9PSAnb2JqZWN0JykgeworICAgICAgICBsb2coInJlc3VsdCBzaXplOiAiICsgcmVzdWx0LmJ5
dGVMZW5ndGgpOworICAgICAgICByZXN1bHQgPSBuZXcgVWludDhBcnJheShyZXN1bHQsIDAsIHJl
c3VsdC5ieXRlTGVuZ3RoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbG9nKCJyZXN1bHQgc2l6ZTog
IiArIHJlc3VsdC5sZW5ndGgpOworCisgICAgdmFyIHJlc3VsdE91dHB1dCA9IF9pc0FTQ0lJU3Ry
aW5nKHJlc3VsdCkgPyBfdG9TdHJpbmcocmVzdWx0KSA6IF90b0hleGFkZWNpbWFsKHJlc3VsdCk7
CisgICAgbG9nKCJyZXN1bHQ6ICIgKyByZXN1bHRPdXRwdXQpOworfQorCiBmdW5jdGlvbiBsb2dF
dmVudChldmVudCkKIHsKICAgICBsb2coIlJlY2VpdmVkICIgKyBldmVudC50eXBlICsgIiBldmVu
dCIpOwpAQCAtMTMwLDExICsxNzAsOSBAQCBmdW5jdGlvbiBsb2FkZWQoZXZlbnQpCiB7CiAgICAg
bG9nRXZlbnQoZXZlbnQpOwogICAgIGxvZygicmVhZHlTdGF0ZTogIiArIGV2ZW50LnRhcmdldC5y
ZWFkeVN0YXRlKTsKLSAgICBsb2coInJlc3VsdCBzaXplOiAiICsgZXZlbnQudGFyZ2V0LnJlc3Vs
dC5sZW5ndGgpOwogCiAgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7Ci0gICAg
dmFyIHJlc3VsdE91dHB1dCA9IF9pc0FTQ0lJU3RyaW5nKHJlc3VsdCkgPyByZXN1bHQgOiBfdG9I
ZXhhZGVjaW1hbChyZXN1bHQpOwotICAgIGxvZygicmVzdWx0OiAiICsgcmVzdWx0T3V0cHV0KTsK
KyAgICBsb2dSZXN1bHQocmVzdWx0KTsKIH0KIAogZnVuY3Rpb24gbG9hZEZhaWxlZChldmVudCkK
QEAgLTE1MSwyMyArMTg5LDQyIEBAIGZ1bmN0aW9uIGxvYWRFbmRlZCh0ZXN0RmlsZXMsIGV2ZW50
KQogfQogCiAvLyBIZWxwZXIgZnVuY3Rpb25zLgotZnVuY3Rpb24gX2lzQVNDSUlTdHJpbmcoc3Ry
KQorCisvLyAndmFsdWUnIGNhbiBiZSBlaXRoZXIgYW4gQXJyYXlCdWZmZXJWaWV3IG9iamVjdCBv
ciBhIHN0cmluZy4KK2Z1bmN0aW9uIF90b1N0cmluZyh2YWx1ZSkKIHsKLSAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoc3RyLmNoYXJDb2RlQXQo
aSkgPj0gMTI4KQorICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpCisgICAgICAgIHJl
dHVybiB2YWx1ZTsKKyAgICB2YXIgcmVzdWx0ID0gIiI7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCB2YWx1ZS5sZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNv
ZGUodmFsdWVbaV0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vICd2YWx1ZScgY2FuIGJl
IGVpdGhlciBhbiBBcnJheUJ1ZmZlclZpZXcgb2JqZWN0IG9yIGEgc3RyaW5nLgorZnVuY3Rpb24g
X2lzQVNDSUlTdHJpbmcodmFsdWUpCit7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5s
ZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoX2dldEVsZW1lbnRBdCh2YWx1ZSwgaSkgPj0gMTI4
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotZnVuY3Rpb24gX3RvSGV4YWRlY2ltYWwoc3RyKQorLy8gJ3ZhbHVlJyBjYW4gYmUgZWl0aGVy
IGFuIEFycmF5QnVmZmVyVmlldyBvYmplY3Qgb3IgYSBzdHJpbmcuCitmdW5jdGlvbiBfdG9IZXhh
ZGVjaW1hbCh2YWx1ZSkKIHsKICAgICB2YXIgcmVzdWx0ID0gIiI7Ci0gICAgZm9yICh2YXIgaSA9
IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHsKLSAgICAgICAgdmFyIGhleCA9ICIweCIgKyAoc3Ry
LmNoYXJDb2RlQXQoaSkgJiAweEZGKS50b1N0cmluZygxNik7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB2YWx1ZS5sZW5ndGg7ICsraSkgeworICAgICAgICB2YXIgaGV4ID0gIjB4IiArIChfZ2V0
RWxlbWVudEF0KHZhbHVlLCBpKSAmIDB4RkYpLnRvU3RyaW5nKDE2KTsKICAgICAgICAgaWYgKGkg
PiAwKQogICAgICAgICAgICAgcmVzdWx0ICs9ICIgIjsKICAgICAgICAgcmVzdWx0ICs9IGhleDsK
ICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KKworZnVuY3Rpb24gX2dldEVsZW1lbnRBdCh2
YWx1ZSwgaSkKK3sKKyAgICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJykgPyB2YWx1
ZS5jaGFyQ29kZUF0KGkpIDogdmFsdWVbaV07Cit9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3Jlc291cmNlcy9yZWFkLWZpbGUtdGVzdC1jYXNlcy5qcyBiL0xheW91dFRlc3Rz
L2Zhc3QvZmlsZXMvcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCmluZGV4IGU4YjJj
OWMuLjM4ZWUxMjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVzb3VyY2Vz
L3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvcmVz
b3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2VzLmpzCkBAIC0xLDExICsxLDE1IEBACiB2YXIgdGVz
dENhc2VzID0gWworICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzQXJyYXlCdWZmZXIi
LAogICAgICJ0ZXN0UmVhZGluZ05vbkV4aXN0ZW50RmlsZUFzQmluYXJ5U3RyaW5nIiwKICAgICAi
dGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc1RleHQiLAogICAgICJ0ZXN0UmVhZGluZ05vbkV4
aXN0ZW50RmlsZUFzRGF0YVVSTCIsCisgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNBcnJheUJ1
ZmZlciIsCiAgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNCaW5hcnlTdHJpbmciLAogICAgICJ0
ZXN0UmVhZGluZ0VtcHR5RmlsZUFzVGV4dCIsCiAgICAgInRlc3RSZWFkaW5nRW1wdHlGaWxlQXNE
YXRhVVJMIiwKKyAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0FycmF5QnVmZmVyIiwK
ICAgICAidGVzdFJlYWRpbmdVVEY4RW5jb2RlZEZpbGVBc0JpbmFyeVN0cmluZyIsCisgICAgInRl
c3RSZWFkaW5nQmluYXJ5RmlsZUFzQXJyYXlCdWZmZXIiLAogICAgICJ0ZXN0UmVhZGluZ0JpbmFy
eUZpbGVBc0JpbmFyeVN0cmluZyIsCiAgICAgInRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNU
ZXh0IiwKICAgICAidGVzdFJlYWRpbmdVVEYxNkJFQk9NRW5jb2RlZEZpbGVBc1RleHQiLApAQCAt
MjksNiArMzMsMTIgQEAgZnVuY3Rpb24gcnVuTmV4dFRlc3QodGVzdEZpbGVzKQogICAgIH0KIH0K
IAorZnVuY3Rpb24gdGVzdFJlYWRpbmdOb25FeGlzdGVudEZpbGVBc0FycmF5QnVmZmVyKHRlc3RG
aWxlcykKK3sKKyAgICBsb2coIlRlc3QgcmVhZGluZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGFy
cmF5IGJ1ZmZlciIpOworICAgIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIHRlc3RG
aWxlc1snbm9uLWV4aXN0ZW50J10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ05vbkV4aXN0
ZW50RmlsZUFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGlu
ZyBhIG5vbi1leGlzdGVudCBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKQEAgLTQ3LDYgKzU3LDEy
IEBAIGZ1bmN0aW9uIHRlc3RSZWFkaW5nTm9uRXhpc3RlbnRGaWxlQXNEYXRhVVJMKHRlc3RGaWxl
cykKICAgICByZWFkQmxvYkFzRGF0YVVSTCh0ZXN0RmlsZXMsIHRlc3RGaWxlc1snbm9uLWV4aXN0
ZW50J10pOwogfQogCitmdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFzQXJyYXlCdWZmZXIo
dGVzdEZpbGVzKQoreworICAgIGxvZygiVGVzdCByZWFkaW5nIGFuIGVtcHR5IGZpbGUgYXMgYXJy
YXkgYnVmZmVyIik7CisgICAgcmVhZEJsb2JBc0FycmF5QnVmZmVyKHRlc3RGaWxlcywgdGVzdEZp
bGVzWydlbXB0eS1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ0VtcHR5RmlsZUFz
QmluYXJ5U3RyaW5nKHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhbiBlbXB0
eSBmaWxlIGFzIGJpbmFyeSBzdHJpbmciKTsKQEAgLTY1LDEyICs4MSwyNCBAQCBmdW5jdGlvbiB0
ZXN0UmVhZGluZ0VtcHR5RmlsZUFzRGF0YVVSTCh0ZXN0RmlsZXMpCiAgICAgcmVhZEJsb2JBc0Rh
dGFVUkwodGVzdEZpbGVzLCB0ZXN0RmlsZXNbJ2VtcHR5LWZpbGUnXSk7CiB9CiAKK2Z1bmN0aW9u
IHRlc3RSZWFkaW5nVVRGOEVuY29kZWRGaWxlQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMpCit7Cisg
ICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGFycmF5IGJ1ZmZlciIpOworICAg
IHJlYWRCbG9iQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMsIHRlc3RGaWxlc1snVVRGOC1maWxlJ10p
OworfQorCiBmdW5jdGlvbiB0ZXN0UmVhZGluZ1VURjhFbmNvZGVkRmlsZUFzQmluYXJ5U3RyaW5n
KHRlc3RGaWxlcykKIHsKICAgICBsb2coIlRlc3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgYmlu
YXJ5IHN0cmluZyIpOwogICAgIHJlYWRCbG9iQXNCaW5hcnlTdHJpbmcodGVzdEZpbGVzLCB0ZXN0
RmlsZXNbJ1VURjgtZmlsZSddKTsKIH0KIAorZnVuY3Rpb24gdGVzdFJlYWRpbmdCaW5hcnlGaWxl
QXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXMpCit7CisgICAgbG9nKCJUZXN0IHJlYWRpbmcgYSBiaW5h
cnkgZmlsZSBhcyBhcnJheSBidWZmZXIiKTsKKyAgICByZWFkQmxvYkFzQXJyYXlCdWZmZXIodGVz
dEZpbGVzLCB0ZXN0RmlsZXNbJ2JpbmFyeS1maWxlJ10pOworfQorCiBmdW5jdGlvbiB0ZXN0UmVh
ZGluZ0JpbmFyeUZpbGVBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXMpCiB7CiAgICAgbG9nKCJUZXN0
IHJlYWRpbmcgYSBiaW5hcnkgZmlsZSBhcyBiaW5hcnkgc3RyaW5nIik7CkBAIC0xMzUsNiArMTYz
LDcgQEAgZnVuY3Rpb24gdGVzdE11bHRpcGxlUmVhZHModGVzdEZpbGVzKQogCiAgICAgbG9nKCJU
ZXN0IGNhbGxpbmcgbXVsdGlwbGUgcmVhZCBtZXRob2RzIGFuZCBvbmx5IGxhc3Qgb25lIGlzIHBy
b2Nlc3NlZCIpOwogICAgIHZhciByZWFkZXIgPSBjcmVhdGVSZWFkZXJBc3luYygpOworICAgIHJl
YWRlci5yZWFkQXNBcnJheUJ1ZmZlcih0ZXN0RmlsZXNbJ1VURjgtZmlsZSddKTsKICAgICByZWFk
ZXIucmVhZEFzQmluYXJ5U3RyaW5nKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwogICAgIHJlYWRl
ci5yZWFkQXNUZXh0KHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwogICAgIHJlYWRlci5yZWFkQXNE
YXRhVVJMKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9maWxlcy93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItcmVhZC1maWxlLXN5bmMuanMgYi9M
YXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZpbGUt
c3luYy5qcwppbmRleCBmNWY3NmViLi40MjAzMGQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9m
YXN0L2ZpbGVzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZpbGUtc3luYy5qcworKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1yZWFkLWZp
bGUtc3luYy5qcwpAQCAtMSw1ICsxLDE5IEBACiBpbXBvcnRTY3JpcHRzKCIuLi8uLi9yZXNvdXJj
ZXMvcmVhZC1jb21tb24uanMiLCAiLi4vLi4vcmVzb3VyY2VzL3JlYWQtZmlsZS10ZXN0LWNhc2Vz
LmpzIiwgIndvcmtlci1yZWFkLWNvbW1vbi5qcyIpOwogCisvLyBBZGQgc3BlY2lmaWMgdGVzdCBm
b3IgRmlsZVJlYWRlclN5bmMuCit0ZXN0Q2FzZXMucHVzaCgidGVzdE11bHRpcGxlUmVhZHNTeW5j
Iik7CisKK2Z1bmN0aW9uIHRlc3RNdWx0aXBsZVJlYWRzU3luYyh0ZXN0RmlsZXMpCit7CisgICAg
bG9nKCJUZXN0IGNhbGxpbmcgbXVsdGlwbGUgcmVhZCBtZXRob2RzIGluIGEgcm93Iik7CisgICAg
dmFyIHJlYWRlciA9IGNyZWF0ZVJlYWRlclN5bmMoKTsKKyAgICBsb2dSZXN1bHQocmVhZGVyLnJl
YWRBc0FycmF5QnVmZmVyKHRlc3RGaWxlc1snVVRGOC1maWxlJ10pKTsKKyAgICBsb2dSZXN1bHQo
cmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyh0ZXN0RmlsZXNbJ2JpbmFyeS1maWxlJ10pKTsKKyAg
ICBsb2dSZXN1bHQocmVhZGVyLnJlYWRBc0RhdGFVUkwodGVzdEZpbGVzWydlbXB0eS1maWxlJ10p
KTsKKworICAgIHJ1bk5leHRUZXN0KHRlc3RGaWxlcyk7Cit9CisKIGZ1bmN0aW9uIGlzUmVhZEFz
QXN5bmMoKQogewogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1ibG9iLXN5bmMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBlY3Rl
ZC50eHQKaW5kZXggMmNlNTliMi4uYjE3Njc4MSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvZmFz
dC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWJsb2Itc3luYy1leHBl
Y3RlZC50eHQKQEAgLTUsMzggKzUsNTUgQEAgUmVjZWl2ZWQgZXhjZXB0aW9uIDE6IE5PVF9GT1VO
RF9FUlIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBleGlzdGVudCBhbmQgbm9uLWV4
aXN0ZW50IGZpbGUKIFJlY2VpdmVkIGV4Y2VwdGlvbiAxOiBOT1RfRk9VTkRfRVJSCiBUZXN0IHJl
YWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgZW1wdHkgZmlsZQotCityZXN1bHQgc2l6ZTogMAorcmVz
dWx0OiAKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBlbXB0eSB0ZXh0Ci0KK3Jlc3Vs
dCBzaXplOiAwCityZXN1bHQ6IAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIGVtcHR5
IGZpbGVzIGFuZCBlbXB0eSB0ZXh0cwotCityZXN1bHQgc2l6ZTogMAorcmVzdWx0OiAKIFRlc3Qg
cmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgZmlsZQotSGVsbG8KK3Jlc3VsdCBzaXpl
OiA1CityZXN1bHQ6IEhlbGxvCiBUZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xl
IHRleHQKLUZpcnN0CityZXN1bHQgc2l6ZTogNQorcmVzdWx0OiBGaXJzdAogVGVzdCByZWFkaW5n
IGEgYmxvYiBjb250YWluaW5nIHNpbmdsZSB0ZXh0IGFzIGRhdGEgVVJMCi1kYXRhOmJhc2U2NCxS
bWx5YzNRPQorcmVzdWx0IHNpemU6IDIwCityZXN1bHQ6IGRhdGE6YmFzZTY0LFJtbHljM1E9CiBU
ZXN0IHJlYWRpbmcgYSBibG9iIGNvbnRhaW5pbmcgc2luZ2xlIHRleHQgYXMgZGF0YSBVUkwgKG9w
dGlvbmFsIGNvbnRlbnQgdHlwZSBwcm92aWRlZCkKLWRhdGE6dHlwZS9mb287YmFzZTY0LFJtbHlj
M1E9CityZXN1bHQgc2l6ZTogMjkKK3Jlc3VsdDogZGF0YTp0eXBlL2ZvbztiYXNlNjQsUm1seWMz
UT0KIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzaW5nbGUgQXJyYXlCdWZmZXIKLTB4
MCAweDEgMHgyIDB4ODAgMHg4MSAweDgyIDB4ZmQgMHhmZSAweGZmCityZXN1bHQgc2l6ZTogOQor
cmVzdWx0OiAweDAgMHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgogVGVzdCBy
ZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIHNsaWNlZCBmaWxlCi1vbmRlcgorcmVzdWx0IHNpemU6
IDUKK3Jlc3VsdDogb25kZXIKIFRlc3QgcmVhZGluZyBhIGJsb2IgY29udGFpbmluZyBzbGljZWQg
dGV4dAotaXJzdAorcmVzdWx0IHNpemU6IDQKK3Jlc3VsdDogaXJzdAogVGVzdCByZWFkaW5nIGEg
YmxvYiBjb250YWluaW5nIHNsaWNlZCBBcnJheUJ1ZmZlcgotMHgxIDB4MiAweDgwIDB4ODEgMHg4
MiAweGZkIDB4ZmUgMHhmZgorcmVzdWx0IHNpemU6IDgKK3Jlc3VsdDogMHgxIDB4MiAweDgwIDB4
ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIG11
bHRpcGxlIGZpbGVzCi1IZWxsb1dvbmRlcmZ1bFdvcmxkCityZXN1bHQgc2l6ZTogMTkKK3Jlc3Vs
dDogSGVsbG9Xb25kZXJmdWxXb3JsZAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIG11
bHRpcGxlIHRleHRzCi1GaXJzdFNlY29uZFRoaXJkCityZXN1bHQgc2l6ZTogMTYKK3Jlc3VsdDog
Rmlyc3RTZWNvbmRUaGlyZAogVGVzdCByZWFkaW5nIGEgYmxvYiBjb250YWluaW5nIG11bHRpcGxl
IEFycmF5QnVmZmVyCi0weDAgMHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgor
cmVzdWx0IHNpemU6IDkKK3Jlc3VsdDogMHgwIDB4MSAweDIgMHg4MCAweDgxIDB4ODIgMHhmZCAw
eGZlIDB4ZmYKIFRlc3QgcmVhZGluZyBhIGh5YnJpZCBibG9iCi1GaXJzdEhlbGxvU2Vjb25kV29u
ZGVyZnVsV29ybGRUaGlyZDAxMgorcmVzdWx0IHNpemU6IDM4CityZXN1bHQ6IEZpcnN0SGVsbG9T
ZWNvbmRXb25kZXJmdWxXb3JsZFRoaXJkMDEyCiBUZXN0IHJlYWRpbmcgYSBzbGljZWQgaHlicmlk
IGJsb2IKLWxsb1NlY29uZFdvbgorcmVzdWx0IHNpemU6IDEyCityZXN1bHQ6IGxsb1NlY29uZFdv
bgogVGVzdCByZWFkaW5nIGEgdHJpcGxlLXNsaWNlZCBoeWJyaWQgYmxvYgotb25kV29uZGVyZnVs
V29ybGRUaGlyZDAxMkZvb2xvCityZXN1bHQgc2l6ZTogMzAKK3Jlc3VsdDogb25kV29uZGVyZnVs
V29ybGRUaGlyZDAxMkZvb2xvCiBET05FCiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qv
ZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxlLWFzeW5jLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1maWxlLWFzeW5jLWV4cGVjdGVk
LnR4dAppbmRleCBkMDM2MWIzLi45ZGVlMGYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9mYXN0
L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1hc3luYy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9maWxlcy93b3JrZXJzL3dvcmtlci1yZWFkLWZpbGUtYXN5bmMtZXhw
ZWN0ZWQudHh0CkBAIC0xLDUgKzEsMTEgQEAKIAogUmVjZWl2ZWQgZmlsZXMgaW4gd29ya2VyCitU
ZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmlsZSBhcyBhcnJheSBidWZmZXIKK3JlYWR5U3Rh
dGU6IDAKK1JlY2VpdmVkIGVycm9yIGV2ZW50CityZWFkeVN0YXRlOiAyCitlcnJvciBjb2RlOiAx
CitSZWNlaXZlZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcgYSBub24tZXhpc3RlbnQgZmls
ZSBhcyBiaW5hcnkgc3RyaW5nCiByZWFkeVN0YXRlOiAwCiBSZWNlaXZlZCBlcnJvciBldmVudApA
QCAtMTgsNiArMjQsMTUgQEAgUmVjZWl2ZWQgZXJyb3IgZXZlbnQKIHJlYWR5U3RhdGU6IDIKIGVy
cm9yIGNvZGU6IDEKIFJlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhbiBlbXB0
eSBmaWxlIGFzIGFycmF5IGJ1ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0
IGV2ZW50CityZWFkeVN0YXRlOiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAy
CityZXN1bHQgc2l6ZTogMAorcmVzdWx0OiAKK1JlY2VpdmVkIGxvYWRlbmQgZXZlbnQKIFRlc3Qg
cmVhZGluZyBhbiBlbXB0eSBmaWxlIGFzIGJpbmFyeSBzdHJpbmcKIHJlYWR5U3RhdGU6IDAKIFJl
Y2VpdmVkIGxvYWRzdGFydCBldmVudApAQCAtNDUsNiArNjAsMTUgQEAgcmVhZHlTdGF0ZTogMgog
cmVzdWx0IHNpemU6IDUKIHJlc3VsdDogZGF0YToKIFJlY2VpdmVkIGxvYWRlbmQgZXZlbnQKK1Rl
c3QgcmVhZGluZyBhIFVURi04IGZpbGUgYXMgYXJyYXkgYnVmZmVyCityZWFkeVN0YXRlOiAwCitS
ZWNlaXZlZCBsb2Fkc3RhcnQgZXZlbnQKK3JlYWR5U3RhdGU6IDEKK1JlY2VpdmVkIGxvYWQgZXZl
bnQKK3JlYWR5U3RhdGU6IDIKK3Jlc3VsdCBzaXplOiA1CityZXN1bHQ6IEhlbGxvCitSZWNlaXZl
ZCBsb2FkZW5kIGV2ZW50CiBUZXN0IHJlYWRpbmcgYSBVVEYtOCBmaWxlIGFzIGJpbmFyeSBzdHJp
bmcKIHJlYWR5U3RhdGU6IDAKIFJlY2VpdmVkIGxvYWRzdGFydCBldmVudApAQCAtNTQsNiArNzgs
MTUgQEAgcmVhZHlTdGF0ZTogMgogcmVzdWx0IHNpemU6IDUKIHJlc3VsdDogSGVsbG8KIFJlY2Vp
dmVkIGxvYWRlbmQgZXZlbnQKK1Rlc3QgcmVhZGluZyBhIGJpbmFyeSBmaWxlIGFzIGFycmF5IGJ1
ZmZlcgorcmVhZHlTdGF0ZTogMAorUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CityZWFkeVN0YXRl
OiAxCitSZWNlaXZlZCBsb2FkIGV2ZW50CityZWFkeVN0YXRlOiAyCityZXN1bHQgc2l6ZTogOQor
cmVzdWx0OiAweDAgMHgxIDB4MiAweDgwIDB4ODEgMHg4MiAweGZkIDB4ZmUgMHhmZgorUmVjZWl2
ZWQgbG9hZGVuZCBldmVudAogVGVzdCByZWFkaW5nIGEgYmluYXJ5IGZpbGUgYXMgYmluYXJ5IHN0
cmluZwogcmVhZHlTdGF0ZTogMAogUmVjZWl2ZWQgbG9hZHN0YXJ0IGV2ZW50CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2ZpbGVzL3dvcmtlcnMvd29ya2VyLXJlYWQtZmlsZS1zeW5jLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvZmlsZXMvd29ya2Vycy93b3JrZXItcmVhZC1m
aWxlLXN5bmMtZXhwZWN0ZWQudHh0CmluZGV4IDM2OTFhNThmOTY2YmI2M2FhNTgxYTVhYWFmNGMy
YjIxZmY0NDU3YmEuLjc4NDg0ZjAxNzY0YzA0NjUzNjBmYzlmZjUxNjA1NDdiY2RiYmFkOGUgMTAw
NjQ0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNzg0CnpjbWNKUSYyRUQqNDlEKzBnJiR6bVU+
X0FAK05KOHA0cWNJMHlLNUR8dGtLZWRsQy02SmBWcmA7cGNTbmNKMHl8Pwp6ez5BPj1QN0R0TnEr
MUxqcTZ7VGE0IWMtPHApbHFzNiRtNkQ8KTEpKyRHbkZybD91N2F7ezxwfTJ0b0dYWj14dTMKekNg
cChHbT8jPV51cEY0Vl5YMXJHJSFiUjY9VW9OJERKTm5OUWk8JjMmWnI3ZylmcEAjaW9uOH53ZzdV
I2IpeHA/CnpCQGAkKE9vNjF8PXp3VnlyVU56RT5XSGRmP0hJV3s/T2FQU0QoO1ZFXiFtRn5POTIt
MWFuSFUmZ2RecV44SDx9Uwp6NE1KU3Q5NmE/NW9iK2BpdCowX0FHZDAwWHQhJis4JWhyYWlFbkF5
V3M1akpHUkZBb0tSenVKbzk5R3Imdzh8SEIKeihlNzQlRm9KPm1SI3ZNZVchZUc3P2puI1pvIT4o
MVJBNUtkRHNSWDxReytMY0A0UTJ5NTV3NDJyeEk/JWV9RjA5Cno1PU8pSj9CZmljQUxEemdaMXtZ
UndQM2RpQmF9YjtMfUxIcD02Jilae2ZZZmp3MFNAbigrfGN2eVRAcGZPX1AyPgpnVjJ4QE9oeHpN
NUsqWU9kWlR+IVE2fk03XyNZSHI5WEN1Uy0waiUqP0BjO2stCgpkZWx0YSAxOTEKemNtZXl0ZHdf
anstTmVhP2oyMDgpTyh3cFMwTW5EcjctY3tWeHllNW0xXkFMT15BZHxINl5jdVdHVnt7OENjazc8
CnowYitUK2wqRSFtaDBxYCRFKWNfTkAmI3RPJCFENFBDSV8mSFBHKUUzbXFwZFp6e3FyeztaV25E
cm8oIz0/Pm9GNwp6czlHN1FRaEtzNHQxdSVNa2ZqZ0FsOVNpNzIhbG54dSY2XzJWWUtBcntqN29A
SEl2d2NDdV80UXUofG1BeHBIdjwKRTBLbz02ViptZ0UKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0Fu
ZHJvaWQuanNjYmluZGluZ3MubWsgYi9XZWJDb3JlL0FuZHJvaWQuanNjYmluZGluZ3MubWsKaW5k
ZXggMzI4ODA1OS4uODIxZmQzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9BbmRyb2lkLmpzY2JpbmRp
bmdzLm1rCisrKyBiL1dlYkNvcmUvQW5kcm9pZC5qc2NiaW5kaW5ncy5tawpAQCAtMTAwLDYgKzEw
MCw3IEBAIExPQ0FMX1NSQ19GSUxFUyArPSBcCiAJYmluZGluZ3MvanMvSlNFdmVudExpc3RlbmVy
LmNwcCBcCiAJYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAgXAogCWJpbmRpbmdzL2pzL0pT
RXhjZXB0aW9uQmFzZS5jcHAgXAorCWJpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAg
XAogCWJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20uY3BwIFwKIAliaW5kaW5ncy9qcy9K
U0hUTUxBbGxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBcCiAJYmluZGluZ3MvanMvSlNIVE1MQXBwbGV0
RWxlbWVudEN1c3RvbS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBi
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggNThiMDcyMC4uYTlkNTg1NiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC02MTksNiArNjE5LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGJpbmRpbmdzL2pzL0pT
RXZlbnRTb3VyY2VDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5jcHAK
ICAgICBiaW5kaW5ncy9qcy9KU0V4Y2VwdGlvbkJhc2UuY3BwCisgICAgYmluZGluZ3MvanMvSlNG
aWxlUmVhZGVyQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pzL0pTR2VvbG9jYXRpb25DdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNIaXN0b3J5Q3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTSURCQW55Q3VzdG9tLmNwcApAQCAtMTU5Miw2ICsxNTkzLDcgQEAgU0VUKFdlYkNvcmVfU09V
UkNFUwogSUYgKEVOQUJMRV9CTE9CKQogICAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgICAgICBmaWxlYXBpL0ZpbGVSZWFkZXIuY3BwCisgICAgICAgIGZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5jcHAKICAgICAgICAgZmlsZWFwaS9GaWxlVGhyZWFkLmNwcAogICAgICAgICBmaWxl
YXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAKICAgICAgICAgcGxhdGZvcm0vRmlsZVN0cmVhbS5jcHAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OTg3NzhkOC4uZTFiYzQwNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw2MiBAQAorMjAxMC0xMC0yNiAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU3VwcG9ydCByZWFkQXNBcnJheUJ1ZmZlciBpbiBGaWxlUmVhZGVyIGFuZCBG
aWxlUmVhZGVyU3luYworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDc2OTEKKworICAgICAgICBNZXJnZSB0aGUgc2ltaWxhciBjb2RlIGluIEZpbGVSZWFk
ZXIgYW5kIEZpbGVSZWFkZXJTeW5jIGludG8KKyAgICAgICAgRmlsZVJlYWRlckxvYWRlci4KKwor
ICAgICAgICBUZXN0IGNhc2VzIGhhdmUgYmVlbiBhZGRlZCB0byByZWFkLWZpbGUtdGVzdC1jYXNl
cy5qcy4KKworICAgICAgICAqIEFuZHJvaWQuanNjYmluZGluZ3MubWs6CisgICAgICAgICogQ01h
a2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29y
ZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNw
cDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVSZWFkZXI6OkZpbGVSZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlcjo6cmVhZEFzQXJyYXlCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6
cmVhZEFzQmluYXJ5U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRB
c1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6cmVhZEFzRGF0YVVSTCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpyZWFkSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVJlYWRlcjo6ZG9BYm9ydCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVy
Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RhcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6ZGlkU3RhcnRMb2FkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZp
bGVSZWFkZXI6OmRpZEZpbmlzaExvYWRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRl
cjo6ZGlkRmFpbCk6CisgICAgICAgIChXZWJDb3JlOjpGaWxlUmVhZGVyOjpmaXJlRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsZVJlYWRlcjo6c3RyaW5nUmVzdWx0KToKKyAgICAgICAgKiBmaWxlYXBp
L0ZpbGVSZWFkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZpbGVSZWFkZXI6OnJlYWRUeXBlKToK
KyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXIuaWRsOgorICAgICAgICAqIGZpbGVhcGkvRmls
ZVJlYWRlckxvYWRlci5jcHA6IEFkZGVkLgorICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlckxv
YWRlci5oOiBBZGRlZC4KKyAgICAgICAgKiBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXJDbGllbnQu
aDogQWRkZWQuCisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpGaWxlUmVhZGVyU3luYzo6RmlsZVJlYWRlclN5bmMpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsZVJlYWRlclN5bmM6OnJlYWRBc0FycmF5QnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZpbGVSZWFkZXJTeW5jOjpyZWFkQXNCaW5hcnlTdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsZVJlYWRlclN5bmM6OnJlYWRBc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJl
YWRlclN5bmM6OnJlYWRBc0RhdGFVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RmlsZVJlYWRlclN5
bmM6OnN0YXJ0TG9hZGluZyk6CisgICAgICAgICogZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oOgor
ICAgICAgICAqIGZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaWRsOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL0FycmF5QnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFycmF5QnVmZmVyOjpBcnJh
eUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpBcnJheUJ1ZmZlcjo6c2V0Qnl0ZUxlbmd0aCk6
IHN1cHBvcnQgc2V0dGluZyBieXRlIGxlbmd0aCB0bworICAgICAgICBhbGxvdyBwYXJ0aWFsIGRh
dGEuCisgICAgICAgICogaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuaDoKKyAgICAgICAgKiBsb2Fk
ZXIvVGhyZWFkYWJsZUxvYWRlckNsaWVudC5oOgorCiAyMDEwLTEwLTI2ICBKb2NlbHluIFR1cmNv
dHRlICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
S2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQppbmRleCA4YzIwNGFhLi42MjU3ZmE0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KQEAgLTcyNiw2ICs3MjYsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUv
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXhj
ZXB0aW9uQmFzZS5jcHAgXAogCVdlYkNvcmUvYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmgg
XAorCVdlYkNvcmUvYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCBcCiAJV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0dlb2xvY2F0aW9uQ3VzdG9tLmNwcCBcCiAJV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0hpc3RvcnlDdXN0b20uY3BwIFwKIAlXZWJDb3JlL2JpbmRpbmdzL2pzL0pTSGlzdG9y
eUN1c3RvbS5oIFwKQEAgLTE0MTYsNiArMTQxNyw5IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9maWxlYXBpL0ZpbGVMaXN0LmggXAogCVdlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
LmNwcCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaCBcCisJV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXJMb2FkZXIuY3BwIFwKKwlXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRl
ci5oIFwKKwlXZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIFwKIAlXZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwIFwKIAlXZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlclN5bmMuaCBcCiAJV2ViQ29yZS9maWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRl
eCBmNTI2ZDA3Li40ZGYzN2JmIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtNjAxLDYgKzYwMSw3IEBACiAgICAgICAgICAgICAn
YmluZGluZ3MvanMvSlNFdmVudFRhcmdldC5oJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9K
U0V4Y2VwdGlvbkJhc2UuY3BwJywKICAgICAgICAgICAgICdiaW5kaW5ncy9qcy9KU0V4Y2VwdGlv
bkJhc2UuaCcsCisgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNw
cCcsCiAgICAgICAgICAgICAnYmluZGluZ3MvanMvSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAnLAog
ICAgICAgICAgICAgJ2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAnLAogICAgICAgICAg
ICAgJ2JpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5oJywKQEAgLTE1MDQsNiArMTUwNSw5IEBA
CiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlTGlzdC5oJywKICAgICAgICAgICAgICdmaWxlYXBp
L0ZpbGVSZWFkZXIuY3BwJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVSZWFkZXIuaCcsCisg
ICAgICAgICAgICAnZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmNwcCcsCisgICAgICAgICAgICAn
ZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgnLAorICAgICAgICAgICAgJ2ZpbGVhcGkvRmlsZVJl
YWRlckxvYWRlckNsaWVudC5oJywKICAgICAgICAgICAgICdmaWxlYXBpL0ZpbGVSZWFkZXJTeW5j
LmNwcCcsCiAgICAgICAgICAgICAnZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oJywKICAgICAgICAg
ICAgICdmaWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggOWZiMmZkZC4uOTI3NzllNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJv
CkBAIC00MTksNiArNDE5LDcgQEAgdjggewogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhF
bGVtZW50Q3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3Vz
dG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50U291cmNlQ29uc3Ry
dWN0b3IuY3BwIFwKKyAgICAgICAgYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1c3Rv
bS5jcHAgXAogICAgICAgICBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQWxsQ29sbGVjdGlvbkN1
c3RvbS5jcHAKIAogICAgIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9WSURFTz0xKSB7CkBAIC01
MTgsNiArNTE5LDcgQEAgdjggewogICAgICAgICBiaW5kaW5ncy9qcy9KU0V2ZW50U291cmNlQ3Vz
dG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTRXZlbnRUYXJnZXQuY3BwIFwKICAgICAg
ICAgYmluZGluZ3MvanMvSlNFeGNlcHRpb25CYXNlLmNwcCBcCisgICAgICAgIGJpbmRpbmdzL2pz
L0pTRmlsZVJlYWRlckN1c3RvbS5jcHAgXAogICAgICAgICBiaW5kaW5ncy9qcy9KU0dlb2xvY2F0
aW9uQ3VzdG9tLmNwcCBcCiAgICAgICAgIGJpbmRpbmdzL2pzL0pTSGlzdG9yeUN1c3RvbS5jcHAg
XAogICAgICAgICBiaW5kaW5ncy9qcy9KU0hUTUxBcHBsZXRFbGVtZW50Q3VzdG9tLmNwcCBcCkBA
IC04MjcsNiArODI5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgZmlsZWFwaS9GaWxlLmNwcCBcCiAg
ICAgZmlsZWFwaS9GaWxlTGlzdC5jcHAgXAogICAgIGZpbGVhcGkvRmlsZVJlYWRlci5jcHAgXAor
ICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAgXAogICAgIGZpbGVhcGkvRmlsZVJlYWRl
clN5bmMuY3BwIFwKICAgICBmaWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5jcHAgXAogICAgIGZpbGVh
cGkvRmlsZVRocmVhZC5jcHAgXApAQCAtMTczMiw2ICsxNzM1LDggQEAgSEVBREVSUyArPSBcCiAg
ICAgZmlsZWFwaS9GaWxlRXhjZXB0aW9uLmggXAogICAgIGZpbGVhcGkvRmlsZUxpc3QuaCBcCiAg
ICAgZmlsZWFwaS9GaWxlUmVhZGVyLmggXAorICAgIGZpbGVhcGkvRmlsZVJlYWRlckxvYWRlci5o
IFwKKyAgICBmaWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXJDbGllbnQuaCBcCiAgICAgZmlsZWFwaS9G
aWxlUmVhZGVyU3luYy5oIFwKICAgICBmaWxlYXBpL0ZpbGVTdHJlYW1Qcm94eS5oIFwKICAgICBm
aWxlYXBpL0ZpbGVUaHJlYWQuaCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpp
bmRleCBkYzdkMmQwLi4zYzhjNTE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2oKQEAgLTQ4NDE1LDYgKzQ4NDE1LDE4IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8Rmls
ZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlckxvYWRlci5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlxmaWxl
YXBpXEZpbGVSZWFkZXJMb2FkZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGZpbGVhcGlcRmlsZVJlYWRlckxvYWRlckNsaWVudC5oIg0K
KwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZmls
ZWFwaVxGaWxlUmVhZGVyU3luYy5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtNTU5NTgs
NiArNTU5NzAsMTAgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXGJpbmRpbmdzXGpzXEpTRmlsZVJlYWRlckN1c3RvbS5jcHAiDQorCQkJ
CQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iLi5cYmlu
ZGluZ3NcanNcSlNHZW9sb2NhdGlvbkN1c3RvbS5jcHAiDQogCQkJCQk+DQogCQkJCQk8RmlsZUNv
bmZpZ3VyYXRpb24NCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDMzNmM3ODYuLjEyYjZlNWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC03NDQsNiArNzQ0LDEwIEBACiAJCTJFNDM0NjU1MEY1NDZBODIwMEIwRjFC
QSAvKiBXb3JrZXJUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFNDM0NjQzMEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkyRTQzNDY1ODBG
NTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU0MzQ2NTYwRjU0NkE5OTAwQjBGMUJBIC8q
IENyb3NzVGhyZWFkQ29waWVyLmNwcCAqLzsgfTsKIAkJMkU0MzQ2NTkwRjU0NkE5OTAwQjBGMUJB
IC8qIENyb3NzVGhyZWFkQ29waWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAyRTQzNDY1NzBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaCAqLzsgfTsKKwkJMkU3NTgyRUUxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmlsZVJlYWRlckN1
c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAy
RTc1ODJFRDEyNzY0RjI2MDA2MjYyOEIgLyogSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcCAqLzsgfTsK
KwkJMkU3NTg0MUQxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUExMjc3OUFE
QTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwICovOyB9OworCQkyRTc1ODQxRTEyNzc5
QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU3NTg0MUIxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVS
ZWFkZXJMb2FkZXIuaCAqLzsgfTsKKwkJMkU3NTg0MUYxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVS
ZWFkZXJMb2FkZXJDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJFNzU4NDFDMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xp
ZW50LmggKi87IH07CiAJCTJFOTRGNDNCMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkU5NEY0
MzkxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi87IH07CiAJCTJFOTRGNDND
MTE5MjA3REEwMEI3Rjc1RCAvKiBKU0ZpbGVSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFOTRGNDNBMTE5MjA3REEwMEI3Rjc1RCAvKiBKU0Zp
bGVSZWFkZXIuaCAqLzsgfTsKIAkJMkVBNzY4MDQwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNj
cmlwdExvYWRlckNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMkVBNzY4MDMwRkU3MTI2NDAwQUI5QzhBIC8qIFdvcmtlclNjcmlwdExvYWRlckNs
aWVudC5oICovOyB9OwpAQCAtNjc4MSw2ICs2Nzg1LDEwIEBACiAJCTJFNDM0NjQzMEY1NDZBODIw
MEIwRjFCQSAvKiBXb3JrZXJUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gV29ya2VyVGhyZWFkLmg7IHBhdGggPSB3b3JrZXJzL1dvcmtlclRocmVhZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRTQzNDY1NjBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyRTQzNDY1
NzBGNTQ2QTk5MDBCMEYxQkEgLyogQ3Jvc3NUaHJlYWRDb3BpZXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ3Jvc3NUaHJlYWRDb3BpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMkU3NTgyRUQxMjc2NEYyNjAwNjI2MjhCIC8qIEpTRmlsZVJlYWRlckN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbGVSZWFkZXJD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTc1ODQxQTEyNzc5QURB
MDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBGaWxlUmVhZGVyTG9hZGVyLmNwcDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJl
YWRlckxvYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTJFNzU4NDFCMTI3
NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZpbGVSZWFkZXJMb2FkZXIuaDsgcGF0aCA9IGZpbGVhcGkvRmlsZVJlYWRl
ckxvYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkyRTc1ODQxQzEyNzc5QURB
MDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmg7IHBhdGggPSBmaWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMkU5
NEY0MzkxMTkyMDdEQTAwQjdGNzVEIC8qIEpTRmlsZVJlYWRlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0ZpbGVSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkyRTk0RjQzQTExOTIwN0RBMDBCN0Y3NUQgLyogSlNGaWxlUmVhZGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRmlsZVJlYWRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkyRUE3NjgwMzBGRTcxMjY0MDBBQjlDOEEgLyogV29ya2Vy
U2NyaXB0TG9hZGVyQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdv
cmtlclNjcmlwdExvYWRlckNsaWVudC5oOyBwYXRoID0gd29ya2Vycy9Xb3JrZXJTY3JpcHRMb2Fk
ZXJDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0OTk0LDYgKzE1MDAy
LDkgQEAKIAkJCQk5NzZENkM2NzEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZUxpc3QuaCAqLywKIAkJ
CQk5NzZENkM2OTEyMkI4QTNEMDAxRkQxRjcgLyogRmlsZVJlYWRlci5jcHAgKi8sCiAJCQkJOTc2
RDZDNkExMjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVSZWFkZXIuaCAqLywKKwkJCQkyRTc1ODQxQTEy
Nzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlci5jcHAgKi8sCisJCQkJMkU3NTg0MUIx
Mjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuaCAqLywKKwkJCQkyRTc1ODQxQzEy
Nzc5QURBMDA2MjYyOEIgLyogRmlsZVJlYWRlckxvYWRlckNsaWVudC5oICovLAogCQkJCTJFREYz
NjlBMTIyQzk0QjQwMDJGN0Q0RSAvKiBGaWxlUmVhZGVyU3luYy5jcHAgKi8sCiAJCQkJMkVERjM2
OUIxMjJDOTRCNDAwMkY3RDRFIC8qIEZpbGVSZWFkZXJTeW5jLmggKi8sCiAJCQkJOTc2RDZDNkMx
MjJCOEEzRDAwMUZEMUY3IC8qIEZpbGVTdHJlYW1Qcm94eS5jcHAgKi8sCkBAIC0xNjkzMCw2ICsx
Njk0MSw3IEBACiAJCQkJODkzQzQ4NTIxMjQ5OUIwNjAwMkIzRDg2IC8qIEpTRW50cnlTeW5jQ3Vz
dG9tLmNwcCAqLywKIAkJCQlCQ0VGQUY0RDBDMzE3RTY5MDBGQTgxRjYgLyogSlNFdmVudEN1c3Rv
bS5jcHAgKi8sCiAJCQkJQkMyNzVCODAxMUM1RDJCNDAwQzkyMDZDIC8qIEpTRXZlbnRTb3VyY2VD
dXN0b20uY3BwICovLAorCQkJCTJFNzU4MkVEMTI3NjRGMjYwMDYyNjI4QiAvKiBKU0ZpbGVSZWFk
ZXJDdXN0b20uY3BwICovLAogCQkJCTQ5RUVDRjcyMTA1MDhEOUMwMDA5OUZBQiAvKiBKU0Zsb2F0
MzJBcnJheUN1c3RvbS5jcHAgKi8sCiAJCQkJRkU4MEQ3QTYwRTlDMUVEMjAwMEQ2Rjc1IC8qIEpT
R2VvbG9jYXRpb25DdXN0b20uY3BwICovLAogCQkJCUJDRTdCMTkyMEQ0RTg2OTYwMDc1QTUzOSAv
KiBKU0hpc3RvcnlDdXN0b20uY3BwICovLApAQCAtMjExNzYsNiArMjExODgsOCBAQAogCQkJCThB
QjRCQzc3MTI2RkRCNzEwMERFQjcyNyAvKiBJZ25vcmVEZXN0cnVjdGl2ZVdyaXRlQ291bnRJbmNy
ZW1lbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDg3Qjg0OTYxMjcyQ0VDODAwQTE0NDE3IC8q
IFNWR0FuaW1hdGVkQW5nbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTc1ODk3OEVEMTI3MDkwRDYw
MDc2RDVBOSAvKiBTcGVlY2hJbnB1dFJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMkU3NTg0
MUUxMjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuaCBpbiBIZWFkZXJzICovLAor
CQkJCTJFNzU4NDFGMTI3NzlBREEwMDYyNjI4QiAvKiBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKQEAgLTIxMjM1LDcgKzIxMjQ5LDYgQEAKIAkJCWlzYSA9IFBCWFByb2pl
Y3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4NDMwODkwMkIxMTAwOEE5RUZD
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAiV2ViQ29yZSIgKi87
CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAyLjQiOwotCQkJZGV2ZWxvcG1lbnRS
ZWdpb24gPSBFbmdsaXNoOwogCQkJaGFzU2Nhbm5lZEZvckVuY29kaW5ncyA9IDE7CiAJCQlrbm93
blJlZ2lvbnMgPSAoCiAJCQkJRW5nbGlzaCwKQEAgLTIzNzMyLDYgKzIzNzQ1LDggQEAKIAkJCQk3
QTFGMkI1MjEyNkM2MUIyMDAwNkE3RTYgLyogSW5zcGVjdG9yQ2xpZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxM0YwMUYxMTI3MEUxOTAwMERGQkE3MSAvKiBDb29raWVTdG9yYWdlTWFjLm1t
IGluIFNvdXJjZXMgKi8sCiAJCQkJNzU4OTc4RUMxMjcwOTBENjAwNzZENUE5IC8qIFNwZWVjaElu
cHV0UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTJFNzU4MkVFMTI3NjRGMjYwMDYyNjI4
QiAvKiBKU0ZpbGVSZWFkZXJDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMkU3NTg0MUQx
Mjc3OUFEQTAwNjI2MjhCIC8qIEZpbGVSZWFkZXJMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTRmlsZVJlYWRlckN1c3RvbS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNGRhYTYwYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNGaWxlUmVhZGVyQ3VzdG9tLmNwcApAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJKU0ZpbGVSZWFk
ZXIuaCIKKworI2luY2x1ZGUgIkFycmF5QnVmZmVyLmgiCisjaW5jbHVkZSAiRmlsZVJlYWRlci5o
IgorI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXIuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitKU1ZhbHVlIEpTRmlsZVJlYWRlcjo6cmVzdWx0KEV4ZWNT
dGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICBGaWxlUmVhZGVyKiBpbXAgPSBpbXBsKCk7CisgICAg
aWYgKGltcC0+cmVhZFR5cGUoKSA9PSBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNBcnJheUJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIFdURjo6Z2V0UHRy
KGltcC0+YXJyYXlCdWZmZXJSZXN1bHQoKSkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGpz
T3duZWRTdHJpbmdPck51bGwoZXhlYywgaW1wLT5zdHJpbmdSZXN1bHQoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhGaWxlUmVhZGVyQ3VzdG9tLmNwcCBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RmlsZVJlYWRlckN1c3RvbS5jcHAKaW5kZXggNWY0ZmI1
Ny4uMGY1NmU3MCAxMDA3NTUKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhGaWxl
UmVhZGVyQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEZpbGVS
ZWFkZXJDdXN0b20uY3BwCkBAIC0yOSw5ICsyOSwxMyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShCTE9CKQorCiAjaW5jbHVkZSAiVjhGaWxlUmVhZGVyLmgiCiAK
ICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVjhBcnJheUJ1
ZmZlci5oIgogI2luY2x1ZGUgIlY4QmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC01Nyw0ICs2MSwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhGaWxlUmVhZGVyOjpjb25z
dHJ1Y3RvckNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZwogICAgIHJldHVybiBhcmdz
LkhvbGRlcigpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhGaWxlUmVhZGVyOjpyZXN1
bHRBY2Nlc3NvckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5GaWxlUmVhZGVyLnJlc3Vs
dC5fZ2V0Iik7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRl
cigpOworICAgIEZpbGVSZWFkZXIqIGltcCA9IFY4RmlsZVJlYWRlcjo6dG9OYXRpdmUoaG9sZGVy
KTsKKyAgICBzd2l0Y2ggKGltcC0+cmVhZFR5cGUoKSkgeworICAgIGNhc2UgRmlsZVJlYWRlcjo6
UmVhZEZpbGVBc0FycmF5QnVmZmVyOgorICAgICAgICByZXR1cm4gdG9WOChpbXAtPmFycmF5QnVm
ZmVyUmVzdWx0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiB2OFN0cmluZ09yTnVs
bChpbXAtPnN0cmluZ1Jlc3VsdCgpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBp
L0ZpbGVSZWFkZXIuY3BwIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuY3BwCmluZGV4IDA2
OTFiMjguLmE1NGEzMzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmNw
cAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5jcHAKQEAgLTM0LDIxICszNCwxNyBA
QAogCiAjaW5jbHVkZSAiRmlsZVJlYWRlci5oIgogCi0jaW5jbHVkZSAiQmFzZTY0LmgiCisjaW5j
bHVkZSAiQXJyYXlCdWZmZXIuaCIKICNpbmNsdWRlICJCbG9iLmgiCi0jaW5jbHVkZSAiQmxvYlVS
TC5oIgogI2luY2x1ZGUgIkNyb3NzVGhyZWFkVGFzay5oIgogI2luY2x1ZGUgIkZpbGUuaCIKICNp
bmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUHJvZ3Jlc3NFdmVudC5oIgotI2luY2x1ZGUg
IlJlc291cmNlRXJyb3IuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKLSNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgotI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlICJUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlci5oIgogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC01NywxMCArNTMsNyBAQCBjb25zdCBkb3VibGUgcHJvZ3Jlc3NOb3RpZmlj
YXRpb25JbnRlcnZhbE1TID0gNTA7CiBGaWxlUmVhZGVyOjpGaWxlUmVhZGVyKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoY29udGV4dCwgdGhp
cykKICAgICAsIG1fc3RhdGUoTm9uZSkKLSAgICAsIG1fcmVhZFR5cGUoUmVhZEZpbGVBc0JpbmFy
eVN0cmluZykKLSAgICAsIG1faXNSYXdEYXRhQ29udmVydGVkKGZhbHNlKQotICAgICwgbV9ieXRl
c0xvYWRlZCgwKQotICAgICwgbV90b3RhbEJ5dGVzKDApCisgICAgLCBtX3JlYWRUeXBlKEZpbGVS
ZWFkZXJMb2FkZXI6OlJlYWRBc0JpbmFyeVN0cmluZykKICAgICAsIG1fbGFzdFByb2dyZXNzTm90
aWZpY2F0aW9uVGltZU1TKDApCiB7CiB9CkBAIC04Niw2ICs3OSwxNiBAQCB2b2lkIEZpbGVSZWFk
ZXI6OnN0b3AoKQogICAgIHRlcm1pbmF0ZSgpOwogfQogCit2b2lkIEZpbGVSZWFkZXI6OnJlYWRB
c0FycmF5QnVmZmVyKEJsb2IqIGJsb2IpCit7CisgICAgaWYgKCFibG9iKQorICAgICAgICByZXR1
cm47CisKKyAgICBMT0coRmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYXJyYXkgYnVm
ZmVyOiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+
aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0YSgp
IDogIiIpOworCisgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRB
c0FycmF5QnVmZmVyKTsKK30KKwogdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNCaW5hcnlTdHJpbmco
QmxvYiogYmxvYikKIHsKICAgICBpZiAoIWJsb2IpCkBAIC05Myw3ICs5Niw3IEBAIHZvaWQgRmls
ZVJlYWRlcjo6cmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqIGJsb2IpCiAKICAgICBMT0coRmlsZUFQ
SSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgYmluYXJ5OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCku
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxl
Kj4oYmxvYiktPnBhdGgoKS51dGY4KCkuZGF0YSgpIDogIiIpOwogCi0gICAgcmVhZEludGVybmFs
KGJsb2IsIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpOworICAgIHJlYWRJbnRlcm5hbChibG9iLCBG
aWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNCaW5hcnlTdHJpbmcpOwogfQogCiB2b2lkIEZpbGVSZWFk
ZXI6OnJlYWRBc1RleHQoQmxvYiogYmxvYiwgY29uc3QgU3RyaW5nJiBlbmNvZGluZykKQEAgLTEw
Myw5ICsxMDYsOCBAQCB2b2lkIEZpbGVSZWFkZXI6OnJlYWRBc1RleHQoQmxvYiogYmxvYiwgY29u
c3QgU3RyaW5nJiBlbmNvZGluZykKIAogICAgIExPRyhGaWxlQVBJLCAiRmlsZVJlYWRlcjogcmVh
ZGluZyBhcyB0ZXh0OiAlcyAlc1xuIiwgYmxvYi0+dXJsKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSwgYmxvYi0+aXNGaWxlKCkgPyBzdGF0aWNfY2FzdDxGaWxlKj4oYmxvYiktPnBhdGgoKS51dGY4
KCkuZGF0YSgpIDogIiIpOwogCi0gICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpCi0gICAgICAg
IG1fZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoZW5jb2RpbmcpOwotICAgIHJlYWRJbnRlcm5hbChi
bG9iLCBSZWFkRmlsZUFzVGV4dCk7CisgICAgbV9lbmNvZGluZyA9IGVuY29kaW5nOworICAgIHJl
YWRJbnRlcm5hbChibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkQXNUZXh0KTsKIH0KIAogdm9p
ZCBGaWxlUmVhZGVyOjpyZWFkQXNEYXRhVVJMKEJsb2IqIGJsb2IpCkBAIC0xMTUsOCArMTE3LDcg
QEAgdm9pZCBGaWxlUmVhZGVyOjpyZWFkQXNEYXRhVVJMKEJsb2IqIGJsb2IpCiAKICAgICBMT0co
RmlsZUFQSSwgIkZpbGVSZWFkZXI6IHJlYWRpbmcgYXMgZGF0YSBVUkw6ICVzICVzXG4iLCBibG9i
LT51cmwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBibG9iLT5pc0ZpbGUoKSA/IHN0YXRpY19j
YXN0PEZpbGUqPihibG9iKS0+cGF0aCgpLnV0ZjgoKS5kYXRhKCkgOiAiIik7CiAKLSAgICBtX2Zp
bGVUeXBlID0gYmxvYi0+dHlwZSgpOwotICAgIHJlYWRJbnRlcm5hbChibG9iLCBSZWFkRmlsZUFz
RGF0YVVSTCk7CisgICAgcmVhZEludGVybmFsKGJsb2IsIEZpbGVSZWFkZXJMb2FkZXI6OlJlYWRB
c0RhdGFVUkwpOwogfQogCiBzdGF0aWMgdm9pZCBkZWxheWVkU3RhcnQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIEZpbGVSZWFkZXIqIHJlYWRlcikKQEAgLTEyNCw3ICsxMjUsNyBAQCBzdGF0aWMg
dm9pZCBkZWxheWVkU3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVSZWFkZXIqIHJl
YWRlcikKICAgICByZWFkZXItPnN0YXJ0KCk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6cmVhZElu
dGVybmFsKEJsb2IqIGJsb2IsIFJlYWRUeXBlIHR5cGUpCit2b2lkIEZpbGVSZWFkZXI6OnJlYWRJ
bnRlcm5hbChCbG9iKiBibG9iLCBGaWxlUmVhZGVyTG9hZGVyOjpSZWFkVHlwZSB0eXBlKQogewog
ICAgIC8vIHJlYWRBcyoqKiBtZXRob2RzKCkgY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4g
T25seSB0aGUgbGFzdCBjYWxsIGJlZm9yZSB0aGUgYWN0dWFsIHJlYWRpbmcgaGFwcGVucyBpcyBw
cm9jZXNzZWQuCiAgICAgaWYgKG1fc3RhdGUgIT0gTm9uZSAmJiBtX3N0YXRlICE9IFN0YXJ0aW5n
KQpAQCAtMTU5LDcgKzE2MCw2IEBAIHZvaWQgRmlsZVJlYWRlcjo6ZG9BYm9ydCgpCiB7CiAgICAg
dGVybWluYXRlKCk7CiAKLSAgICBtX2J1aWxkZXIuY2xlYXIoKTsKICAgICBtX2Vycm9yID0gRmls
ZUVycm9yOjpjcmVhdGUoRmlsZUVycm9yOjpBQk9SVF9FUlIpOwogCiAgICAgZmlyZUV2ZW50KGV2
ZW50TmFtZXMoKS5lcnJvckV2ZW50KTsKQEAgLTE3MSw3NSArMTcxLDI5IEBAIHZvaWQgRmlsZVJl
YWRlcjo6dGVybWluYXRlKCkKIHsKICAgICBpZiAobV9sb2FkZXIpIHsKICAgICAgICAgbV9sb2Fk
ZXItPmNhbmNlbCgpOwotICAgICAgICBjbGVhbnVwKCk7CisgICAgICAgIG1fbG9hZGVyID0gMDsK
ICAgICB9CiAgICAgbV9zdGF0ZSA9IENvbXBsZXRlZDsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpj
bGVhbnVwKCkKLXsKLSAgICBtX2xvYWRlciA9IDA7Ci0gICAgVGhyZWFkYWJsZUJsb2JSZWdpc3Ry
eTo6dW5yZWdpc3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nKTsKLSAgICBtX3VybEZvclJlYWRp
bmcgPSBLVVJMKCk7Ci19Ci0KIHZvaWQgRmlsZVJlYWRlcjo6c3RhcnQoKQogewogICAgIG1fc3Rh
dGUgPSBPcGVuaW5nOwogCi0gICAgLy8gVGhlIGJsb2IgaXMgcmVhZCBieSByb3V0aW5nIHRocm91
Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4gYSB0ZW1wb3JhcnkgcHVibGljIHVy
bC4KLSAgICBtX3VybEZvclJlYWRpbmcgPSBCbG9iVVJMOjpjcmVhdGVQdWJsaWNVUkwoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBUaHJlYWRhYmxlQmxv
YlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nLCBtX2Jsb2ItPnVybCgp
KTsKLQotICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KG1fdXJsRm9yUmVhZGluZyk7Ci0gICAg
cmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLQotICAgIFRocmVhZGFibGVMb2FkZXJPcHRp
b25zIG9wdGlvbnM7Ci0gICAgb3B0aW9ucy5zZW5kTG9hZENhbGxiYWNrcyA9IHRydWU7Ci0gICAg
b3B0aW9ucy5zbmlmZkNvbnRlbnQgPSBmYWxzZTsKLSAgICBvcHRpb25zLmZvcmNlUHJlZmxpZ2h0
ID0gZmFsc2U7Ci0gICAgb3B0aW9ucy5hbGxvd0NyZWRlbnRpYWxzID0gdHJ1ZTsKLSAgICBvcHRp
b25zLmNyb3NzT3JpZ2luUmVxdWVzdFBvbGljeSA9IERlbnlDcm9zc09yaWdpblJlcXVlc3RzOwot
Ci0gICAgbV9sb2FkZXIgPSBUaHJlYWRhYmxlTG9hZGVyOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCB0aGlzLCByZXF1ZXN0LCBvcHRpb25zKTsKKyAgICBtX2xvYWRlciA9IGFkb3B0
UHRyKG5ldyBGaWxlUmVhZGVyTG9hZGVyKG1fcmVhZFR5cGUsIHRoaXMpKTsKKyAgICBtX2xvYWRl
ci0+c2V0RW5jb2RpbmcobV9lbmNvZGluZyk7CisgICAgbV9sb2FkZXItPnNldERhdGFUeXBlKG1f
YmxvYi0+dHlwZSgpKTsKKyAgICBtX2xvYWRlci0+c3RhcnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCBtX2Jsb2IuZ2V0KCkpOwogfQogCi12b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVSZXNw
b25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK3ZvaWQgRmlsZVJlYWRlcjo6
ZGlkU3RhcnRMb2FkaW5nKCkKIHsKLSAgICBpZiAocmVzcG9uc2UuaHR0cFN0YXR1c0NvZGUoKSAh
PSAyMDApIHsKLSAgICAgICAgZmFpbGVkKHJlc3BvbnNlLmh0dHBTdGF0dXNDb2RlKCkpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgbV9zdGF0ZSA9IFJlYWRpbmc7CiAgICAgZmlyZUV2
ZW50KGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCk7Ci0KLSAgICBtX3RvdGFsQnl0ZXMgPSBy
ZXNwb25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpk
aWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit2b2lk
IEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKCkKIHsKLSAgICBBU1NFUlQoZGF0YSAmJiBsZW5n
dGhSZWNlaXZlZCk7Ci0KLSAgICAvLyBCYWlsIG91dCBpZiB3ZSBoYXZlIGFib3J0ZWQgdGhlIHJl
YWRpbmcuCi0gICAgaWYgKG1fc3RhdGUgPT0gQ29tcGxldGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBzd2l0Y2ggKG1fcmVhZFR5cGUpIHsKLSAgICBjYXNlIFJlYWRGaWxlQXNCaW5hcnlTdHJp
bmc6Ci0gICAgICAgIG1fYnVpbGRlci5hcHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxlbmd0aFJlY2VpdmVkKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUmVhZEZpbGVBc1Rl
eHQ6Ci0gICAgY2FzZSBSZWFkRmlsZUFzRGF0YVVSTDoKLSAgICAgICAgbV9yYXdEYXRhLmFwcGVu
ZChkYXRhLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoUmVjZWl2ZWQpKTsKLSAgICAgICAg
bV9pc1Jhd0RhdGFDb252ZXJ0ZWQgPSBmYWxzZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgbV9ieXRlc0xv
YWRlZCArPSBsZW5ndGhSZWNlaXZlZDsKLQogICAgIC8vIEZpcmUgdGhlIHByb2dyZXNzIGV2ZW50
IGF0IGxlYXN0IGV2ZXJ5IDUwbXMuCiAgICAgZG91YmxlIG5vdyA9IFdURjo6Y3VycmVudFRpbWVN
UygpOwogICAgIGlmICghbV9sYXN0UHJvZ3Jlc3NOb3RpZmljYXRpb25UaW1lTVMpCkBAIC0yNTAs
NTMgKzIwNCwzMyBAQCB2b2lkIEZpbGVSZWFkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIq
IGRhdGEsIGludCBsZW5ndGhSZWNlaXZlZCkKICAgICB9CiB9CiAKLXZvaWQgRmlsZVJlYWRlcjo6
ZGlkRmluaXNoTG9hZGluZyh1bnNpZ25lZCBsb25nKQordm9pZCBGaWxlUmVhZGVyOjpkaWRGaW5p
c2hMb2FkaW5nKCkKIHsKICAgICBtX3N0YXRlID0gQ29tcGxldGVkOwogCiAgICAgZmlyZUV2ZW50
KGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpOwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkubG9h
ZGVuZEV2ZW50KTsKLQotICAgIGNsZWFudXAoKTsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpkaWRG
YWlsKGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBGaWxlUmVhZGVyOjpkaWRGYWlsKGludCBl
cnJvckNvZGUpCiB7CiAgICAgLy8gSWYgd2UncmUgYWJvcnRpbmcsIGRvIG5vdCBwcm9jZWVkIHdp
dGggbm9ybWFsIGVycm9yIGhhbmRsaW5nIHNpbmNlIGl0IGlzIGNvdmVyZWQgaW4gYWJvcnRpbmcg
Y29kZS4KICAgICBpZiAobV9zdGF0ZSA9PSBBYm9ydGluZykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gVHJlYXQgYXMgaW50ZXJuYWwgZXJyb3IuCi0gICAgZmFpbGVkKDUwMCk7Ci19Ci0KLXZv
aWQgRmlsZVJlYWRlcjo6ZmFpbGVkKGludCBodHRwU3RhdHVzQ29kZSkKLXsKICAgICBtX3N0YXRl
ID0gQ29tcGxldGVkOwogCi0gICAgbV9lcnJvciA9IEZpbGVFcnJvcjo6Y3JlYXRlKGh0dHBTdGF0
dXNDb2RlVG9FcnJvckNvZGUoaHR0cFN0YXR1c0NvZGUpKTsKKyAgICBtX2Vycm9yID0gRmlsZUVy
cm9yOjpjcmVhdGUoc3RhdGljX2Nhc3Q8RmlsZUVycm9yOjpFcnJvckNvZGU+KGVycm9yQ29kZSkp
OwogICAgIGZpcmVFdmVudChldmVudE5hbWVzKCkuZXJyb3JFdmVudCk7CiAgICAgZmlyZUV2ZW50
KGV2ZW50TmFtZXMoKS5sb2FkZW5kRXZlbnQpOwotCi0gICAgY2xlYW51cCgpOwotfQotCi1GaWxl
RXJyb3I6OkVycm9yQ29kZSBGaWxlUmVhZGVyOjpodHRwU3RhdHVzQ29kZVRvRXJyb3JDb2RlKGlu
dCBodHRwU3RhdHVzQ29kZSkKLXsKLSAgICBzd2l0Y2ggKGh0dHBTdGF0dXNDb2RlKSB7Ci0gICAg
ICAgIGNhc2UgNDAzOgotICAgICAgICAgICAgcmV0dXJuIEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJS
OwotICAgICAgICBjYXNlIDQwNDoKLSAgICAgICAgICAgIHJldHVybiBGaWxlRXJyb3I6Ok5PVF9G
T1VORF9FUlI7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gRmlsZUVycm9y
OjpOT1RfUkVBREFCTEVfRVJSOwotICAgIH0KIH0KIAogdm9pZCBGaWxlUmVhZGVyOjpmaXJlRXZl
bnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKQogewogICAgIC8vIEZJWE1FOiB0aGUgY3VycmVu
dCBQcm9ncmVzc0V2ZW50IHVzZXMgInVuc2lnbmVkIGxvbmciIGZvciB0b3RhbCBhbmQgbG9hZGVk
IGF0dHJpYnV0ZXMuIE5lZWQgdG8gdGFsayB3aXRoIHRoZSBzcGVjIHdyaXRlciB0byByZXNvbHZl
IHRoZSBpc3N1ZS4KLSAgICBkaXNwYXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSh0eXBl
LCB0cnVlLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ieXRlc0xvYWRlZCksIHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX3RvdGFsQnl0ZXMpKSk7CisgICAgdW5zaWduZWQgYnl0ZXNMb2FkZWQgPSBt
X2xvYWRlciA/IG1fbG9hZGVyLT5ieXRlc0xvYWRlZCgpIDogMDsKKyAgICB1bnNpZ25lZCB0b3Rh
bEJ5dGVzID0gbV9sb2FkZXIgPyBtX2xvYWRlci0+dG90YWxCeXRlcygpIDogMDsKKyAgICBkaXNw
YXRjaEV2ZW50KFByb2dyZXNzRXZlbnQ6OmNyZWF0ZSh0eXBlLCB0cnVlLCBieXRlc0xvYWRlZCwg
dG90YWxCeXRlcykpOwogfQogCiBGaWxlUmVhZGVyOjpSZWFkeVN0YXRlIEZpbGVSZWFkZXI6OnJl
YWR5U3RhdGUoKSBjb25zdApAQCAtMzE2LDY1ICsyNTAsMTQgQEAgRmlsZVJlYWRlcjo6UmVhZHlT
dGF0ZSBGaWxlUmVhZGVyOjpyZWFkeVN0YXRlKCkgY29uc3QKICAgICByZXR1cm4gRU1QVFk7CiB9
CiAKLVN0cmluZyBGaWxlUmVhZGVyOjpyZXN1bHQoKQorUGFzc1JlZlB0cjxBcnJheUJ1ZmZlcj4g
RmlsZVJlYWRlcjo6YXJyYXlCdWZmZXJSZXN1bHQoKSBjb25zdAogewotICAgIC8vIElmIHJlYWRp
bmcgYXMgYmluYXJ5IHN0cmluZywgd2UgY2FuIHJldHVybiB0aGUgcmVzdWx0IGltbWVkaWF0ZWx5
LgotICAgIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcpCi0gICAgICAg
IHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKLQotICAgIC8vIElmIHdlIGFscmVhZHkgY29u
dmVydCB0aGUgcmF3IGRhdGEgcmVjZWl2ZWQgc28gZmFyLCB3ZSBjYW4gcmV0dXJuIHRoZSByZXN1
bHQgbm93LgotICAgIGlmIChtX2lzUmF3RGF0YUNvbnZlcnRlZCkKLSAgICAgICAgcmV0dXJuIG1f
YnVpbGRlci50b1N0cmluZygpOwotICAgIG1faXNSYXdEYXRhQ29udmVydGVkID0gdHJ1ZTsKLQot
ICAgIGlmIChtX3JlYWRUeXBlID09IFJlYWRGaWxlQXNUZXh0KQotICAgICAgICBjb252ZXJ0VG9U
ZXh0KCk7Ci0gICAgLy8gRm9yIGRhdGEgVVJMLCB3ZSBvbmx5IGRvIHRoZSBjb3ZlcnNpb24gdW50
aWwgd2UgcmVjZWl2ZSBhbGwgdGhlIHJhdyBkYXRhLgotICAgIGVsc2UgaWYgKG1fcmVhZFR5cGUg
PT0gUmVhZEZpbGVBc0RhdGFVUkwgJiYgbV9zdGF0ZSA9PSBDb21wbGV0ZWQpCi0gICAgICAgIGNv
bnZlcnRUb0RhdGFVUkwobV9yYXdEYXRhLCBtX2ZpbGVUeXBlLCBtX2J1aWxkZXIpOwotCi0gICAg
cmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOworICAgIHJldHVybiBtX2xvYWRlciA/IG1fbG9h
ZGVyLT5hcnJheUJ1ZmZlclJlc3VsdCgpIDogMDsKIH0KIAotdm9pZCBGaWxlUmVhZGVyOjpjb252
ZXJ0VG9UZXh0KCkKK1N0cmluZyBGaWxlUmVhZGVyOjpzdHJpbmdSZXN1bHQoKQogewotICAgIGlm
ICghbV9yYXdEYXRhLnNpemUoKSkgewotICAgICAgICBtX2J1aWxkZXIuY2xlYXIoKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIERlY29kZSB0aGUgZGF0YS4KLSAgICAvLyBUaGUg
RmlsZSBBUEkgc3BlYyBzYXlzIHRoYXQgd2Ugc2hvdWxkIHVzZSB0aGUgc3VwcGxpZWQgZW5jb2Rp
bmcgaWYgaXQgaXMgdmFsaWQuIEhvd2V2ZXIsIHdlIGNob29zZSB0byBpZ25vcmUgdGhpcwotICAg
IC8vIHJlcXVpcmVtZW50IGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgV2ViS2l0
IGRlY29kZXMgdGhlIHdlYiBjb250ZW50OiBhbHdheXMgaGFzIHRoZSBCT00gb3ZlcnJpZGUgdGhl
Ci0gICAgLy8gcHJvdmlkZWQgZW5jb2RpbmcuICAgICAKLSAgICAvLyBGSVhNRTogY29uc2lkZXIg
c3VwcG9ydGluZyBpbmNyZW1lbnRhbCBkZWNvZGluZyB0byBpbXByb3ZlIHRoZSBwZXJmLgotICAg
IGlmICghbV9kZWNvZGVyKQotICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVy
OjpjcmVhdGUoInRleHQvcGxhaW4iLCBtX2VuY29kaW5nLmlzVmFsaWQoKSA/IG1fZW5jb2Rpbmcg
OiBVVEY4RW5jb2RpbmcoKSk7Ci0gICAgbV9idWlsZGVyLmNsZWFyKCk7Ci0gICAgbV9idWlsZGVy
LmFwcGVuZChtX2RlY29kZXItPmRlY29kZSgmbV9yYXdEYXRhLmF0KDApLCBtX3Jhd0RhdGEuc2l6
ZSgpKSk7Ci0KLSAgICBpZiAobV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYgIW1fZXJyb3IpCi0gICAg
ICAgIG1fYnVpbGRlci5hcHBlbmQobV9kZWNvZGVyLT5mbHVzaCgpKTsKLX0KLQotdm9pZCBGaWxl
UmVhZGVyOjpjb252ZXJ0VG9EYXRhVVJMKGNvbnN0IFZlY3RvcjxjaGFyPiYgcmF3RGF0YSwgY29u
c3QgU3RyaW5nJiBmaWxlVHlwZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKLXsKLSAgICBidWls
ZGVyLmNsZWFyKCk7Ci0gICAgYnVpbGRlci5hcHBlbmQoImRhdGE6Iik7Ci0KLSAgICBpZiAoIXJh
d0RhdGEuc2l6ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWZpbGVUeXBlLmlzRW1w
dHkoKSkgewotICAgICAgICBidWlsZGVyLmFwcGVuZChmaWxlVHlwZSk7Ci0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCI7YmFzZTY0LCIpOwotICAgIH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiYmFzZTY0LCIpOwotCi0gICAgVmVjdG9yPGNoYXI+IG91dDsKLSAgICBiYXNlNjRFbmNvZGUo
cmF3RGF0YSwgb3V0KTsKLSAgICBvdXQuYXBwZW5kKCdcMCcpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KG91dC5kYXRhKCkpOworICAgIHJldHVybiBtX2xvYWRlciA/IG1fbG9hZGVyLT5zdHJpbmdSZXN1
bHQoKSA6ICIiOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2ZpbGVhcGkvRmlsZVJlYWRlci5oIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaApp
bmRleCAzZjc2YWQ2Li4wNDUxM2YzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlci5oCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmgKQEAgLTM2LDI0ICszNiwx
OSBAQAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCiAjaW5jbHVkZSAiRmlsZUVycm9yLmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUg
IlRleHRFbmNvZGluZy5oIgotI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKLSNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIkZpbGVSZWFkZXJMb2FkZXIuaCIK
KyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVp
bGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIEFycmF5QnVmZmVyOwogY2xhc3MgQmxvYjsKIGNsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7Ci1jbGFzcyBUZXh0UmVzb3VyY2VEZWNvZGVyOwotY2xhc3MgVGhyZWFk
YWJsZUxvYWRlcjsKIAotY2xhc3MgRmlsZVJlYWRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEZpbGVS
ZWFkZXI+LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1Ymxp
YyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50IHsKK2NsYXNzIEZpbGVSZWFkZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxGaWxlUmVhZGVyPiwgcHVibGljIEFjdGl2ZURPTU9iamVjdCwgcHVibGljIEV2ZW50
VGFyZ2V0LCBwdWJsaWMgRmlsZVJlYWRlckxvYWRlckNsaWVudCB7CiBwdWJsaWM6CiAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RmlsZVJlYWRlcj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQpCiAgICAgewpAQCAtNjgsNiArNjMsNyBAQCBwdWJsaWM6CiAgICAgICAgIERPTkUg
PSAyCiAgICAgfTsKIAorICAgIHZvaWQgcmVhZEFzQXJyYXlCdWZmZXIoQmxvYiopOwogICAgIHZv
aWQgcmVhZEFzQmluYXJ5U3RyaW5nKEJsb2IqKTsKICAgICB2b2lkIHJlYWRBc1RleHQoQmxvYios
IGNvbnN0IFN0cmluZyYgZW5jb2RpbmcgPSAiIik7CiAgICAgdm9pZCByZWFkQXNEYXRhVVJMKEJs
b2IqKTsKQEAgLTc4LDExICs3NCw5IEBAIHB1YmxpYzoKIAogICAgIFJlYWR5U3RhdGUgcmVhZHlT
dGF0ZSgpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8RmlsZUVycm9yPiBlcnJvcigpIHsgcmV0dXJu
IG1fZXJyb3I7IH0KLSAgICBTdHJpbmcgcmVzdWx0KCk7Ci0KLSAgICAvLyBIZWxwZXIgbWV0aG9k
cywgYWxzbyB1c2VkIGJ5IEZpbGVSZWFkZXJTeW5jLgotICAgIHN0YXRpYyBGaWxlRXJyb3I6OkVy
cm9yQ29kZSBodHRwU3RhdHVzQ29kZVRvRXJyb3JDb2RlKGludCBodHRwU3RhdHVzQ29kZSk7Ci0g
ICAgc3RhdGljIHZvaWQgY29udmVydFRvRGF0YVVSTChjb25zdCBWZWN0b3I8Y2hhcj4mIHJhd0Rh
dGEsIGNvbnN0IFN0cmluZyYgZmlsZVR5cGUsIFN0cmluZ0J1aWxkZXImKTsKKyAgICBGaWxlUmVh
ZGVyTG9hZGVyOjpSZWFkVHlwZSByZWFkVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZFR5cGU7
IH0KKyAgICBQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBhcnJheUJ1ZmZlclJlc3VsdCgpIGNvbnN0
OworICAgIFN0cmluZyBzdHJpbmdSZXN1bHQoKTsKIAogICAgIC8vIEFjdGl2ZURPTU9iamVjdAog
ICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29uc3Q7CkBAIC05MywxMSArODcsMTEgQEAg
cHVibGljOgogICAgIHZpcnR1YWwgRmlsZVJlYWRlciogdG9GaWxlUmVhZGVyKCkgeyByZXR1cm4g
dGhpczsgfQogICAgIHZpcnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIEFjdGl2ZURPTU9iamVjdDo6c2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpOyB9CiAKLSAgICAvLyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50Ci0gICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOwotICAgIHZp
cnR1YWwgdm9pZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7Ci0g
ICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgIC8vIEZp
bGVSZWFkZXJMb2FkZXJDbGllbnQKKyAgICB2aXJ0dWFsIHZvaWQgZGlkU3RhcnRMb2FkaW5nKCk7
CisgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKCk7CisgICAgdmlydHVhbCB2b2lkIGRp
ZEZpbmlzaExvYWRpbmcoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChpbnQgZXJyb3JDb2Rl
KTsKIAogICAgIHVzaW5nIFJlZkNvdW50ZWQ8RmlsZVJlYWRlcj46OnJlZjsKICAgICB1c2luZyBS
ZWZDb3VudGVkPEZpbGVSZWFkZXI+OjpkZXJlZjsKQEAgLTExMCwxMSArMTA0LDYgQEAgcHVibGlj
OgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIobG9hZGVuZCk7CiAKIHByaXZh
dGU6Ci0gICAgZW51bSBSZWFkVHlwZSB7Ci0gICAgICAgIFJlYWRGaWxlQXNCaW5hcnlTdHJpbmcs
Ci0gICAgICAgIFJlYWRGaWxlQXNUZXh0LAotICAgICAgICBSZWFkRmlsZUFzRGF0YVVSTAotICAg
IH07CiAgICAgZW51bSBJbnRlcm5hbFN0YXRlIHsKICAgICAgICAgTm9uZSwKICAgICAgICAgU3Rh
cnRpbmcsCkBAIC0xMzMsMzggKzEyMiwxOSBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgRXZlbnRU
YXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdldERhdGEoKSB7IHJldHVybiAmbV9ldmVudFRhcmdl
dERhdGE7IH0KIAogICAgIHZvaWQgdGVybWluYXRlKCk7Ci0gICAgdm9pZCBjbGVhbnVwKCk7Ci0g
ICAgdm9pZCByZWFkSW50ZXJuYWwoQmxvYiosIFJlYWRUeXBlKTsKLSAgICB2b2lkIGZhaWxlZChp
bnQgaHR0cFN0YXR1c0NvZGUpOworICAgIHZvaWQgcmVhZEludGVybmFsKEJsb2IqLCBGaWxlUmVh
ZGVyTG9hZGVyOjpSZWFkVHlwZSk7CiAgICAgdm9pZCBmaXJlRXJyb3JFdmVudChpbnQgaHR0cFN0
YXR1c0NvZGUpOwogICAgIHZvaWQgZmlyZUV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7
Ci0gICAgdm9pZCBjb252ZXJ0VG9UZXh0KCk7Ci0gICAgdm9pZCBjb252ZXJ0VG9EYXRhVVJMKCk7
CiAKICAgICBJbnRlcm5hbFN0YXRlIG1fc3RhdGU7CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwogCiAgICAgUmVmUHRyPEJsb2I+IG1fYmxvYjsKLSAgICBLVVJMIG1fdXJs
Rm9yUmVhZGluZzsKLSAgICBSZWFkVHlwZSBtX3JlYWRUeXBlOwotICAgIFRleHRFbmNvZGluZyBt
X2VuY29kaW5nOwotCi0gICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7Ci0KLSAgICAvLyBUaGUg
cmF3IGRhdGEuIFdlIGhhdmUgdG8ga2VlcCB0cmFjayBvZiBhbGwgdGhlIHJhdyBkYXRhIGZvciBp
dCB0byBiZSBjb252ZXJ0ZWQgdG8gdGV4dCBvciBkYXRhIFVSTCBkYXRhLgotICAgIFZlY3Rvcjxj
aGFyPiBtX3Jhd0RhdGE7Ci0gICAgYm9vbCBtX2lzUmF3RGF0YUNvbnZlcnRlZDsKLQotICAgIC8v
IFRoZSBkZWNvZGVyIHVzZWQgdG8gZGVjb2RlIHRoZSB0ZXh0IGRhdGEuCi0gICAgUmVmUHRyPFRl
eHRSZXNvdXJjZURlY29kZXI+IG1fZGVjb2RlcjsKLQotICAgIC8vIE5lZWRlZCB0byBjcmVhdGUg
ZGF0YSBVUkwuCi0gICAgU3RyaW5nIG1fZmlsZVR5cGU7CisgICAgRmlsZVJlYWRlckxvYWRlcjo6
UmVhZFR5cGUgbV9yZWFkVHlwZTsKKyAgICBTdHJpbmcgbV9lbmNvZGluZzsKIAotICAgIFJlZlB0
cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKKyAgICBPd25QdHI8RmlsZVJlYWRlckxvYWRl
cj4gbV9sb2FkZXI7CiAgICAgUmVmUHRyPEZpbGVFcnJvcj4gbV9lcnJvcjsKLSAgICBsb25nIGxv
bmcgbV9ieXRlc0xvYWRlZDsKLSAgICBsb25nIGxvbmcgbV90b3RhbEJ5dGVzOwogICAgIGRvdWJs
ZSBtX2xhc3RQcm9ncmVzc05vdGlmaWNhdGlvblRpbWVNUzsKIH07CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyLmlkbCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVy
LmlkbAppbmRleCBmZWJiMjMxLi5lYmM2ZmZkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2ZpbGVhcGkv
RmlsZVJlYWRlci5pZGwKKysrIGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXIuaWRsCkBAIC00
NCw2ICs0NCw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVu
c2lnbmVkIHNob3J0IHJlYWR5U3RhdGU7CiAKICAgICAgICAgLy8gYXN5bmMgcmVhZCBtZXRob2Rz
CisgICAgICAgIHZvaWQgcmVhZEFzQXJyYXlCdWZmZXIoaW4gQmxvYiBibG9iKTsKICAgICAgICAg
dm9pZCByZWFkQXNCaW5hcnlTdHJpbmcoaW4gQmxvYiBibG9iKTsKICAgICAgICAgdm9pZCByZWFk
QXNUZXh0KGluIEJsb2IgYmxvYiwgaW4gW09wdGlvbmFsXSBET01TdHJpbmcgZW5jb2RpbmcpOwog
ICAgICAgICB2b2lkIHJlYWRBc0RhdGFVUkwoaW4gQmxvYiBibG9iKTsKQEAgLTUxLDcgKzUyLDcg
QEAgbW9kdWxlIGh0bWwgewogICAgICAgICB2b2lkIGFib3J0KCk7CiAKICAgICAgICAgLy8gZmls
ZSBkYXRhCi0gICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBbQ29udmVydFNjcmlwdFN0cmluZ10g
RE9NU3RyaW5nIHJlc3VsdDsKKyAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFtDdXN0b21dIERP
TU9iamVjdCByZXN1bHQ7CiAKICAgICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIEZpbGVFcnJvciBl
cnJvcjsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3Bw
IGIvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2FkZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjE1NmE1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2Zp
bGVhcGkvRmlsZVJlYWRlckxvYWRlci5jcHAKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJGaWxlUmVhZGVyTG9hZGVy
LmgiCisKKyNpbmNsdWRlICJBcnJheUJ1ZmZlci5oIgorI2luY2x1ZGUgIkJhc2U2NC5oIgorI2lu
Y2x1ZGUgIkJsb2IuaCIKKyNpbmNsdWRlICJCbG9iVVJMLmgiCisjaW5jbHVkZSAiRmlsZVJlYWRl
ckxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUg
IlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVC
bG9iUmVnaXN0cnkuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitGaWxlUmVhZGVyTG9hZGVyOjpGaWxlUmVhZGVyTG9hZGVyKFJlYWRU
eXBlIHJlYWRUeXBlLCBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50KiBjbGllbnQpCisgICAgOiBtX3Jl
YWRUeXBlKHJlYWRUeXBlKQorICAgICwgbV9jbGllbnQoY2xpZW50KQorICAgICwgbV9pc1Jhd0Rh
dGFDb252ZXJ0ZWQoZmFsc2UpCisgICAgLCBtX3N0cmluZ1Jlc3VsdCgiIikKKyAgICAsIG1fYnl0
ZXNMb2FkZWQoMCkKKyAgICAsIG1fdG90YWxCeXRlcygwKQorICAgICwgbV9lcnJvckNvZGUoMCkK
K3sKK30KKworRmlsZVJlYWRlckxvYWRlcjo6fkZpbGVSZWFkZXJMb2FkZXIoKQoreworICAgIHRl
cm1pbmF0ZSgpOworICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJM
KG1fdXJsRm9yUmVhZGluZyk7Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxvYWRlcjo6c3RhcnQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYikK
K3sKKyAgICAvLyBUaGUgYmxvYiBpcyByZWFkIGJ5IHJvdXRpbmcgdGhyb3VnaCB0aGUgcmVxdWVz
dCBoYW5kbGluZyBsYXllciBnaXZlbiBhIHRlbXBvcmFyeSBwdWJsaWMgdXJsLgorICAgIG1fdXJs
Rm9yUmVhZGluZyA9IEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChzY3JpcHRFeGVjdXRpb25Db250
ZXh0LT5zZWN1cml0eU9yaWdpbigpKTsKKyAgICBUaHJlYWRhYmxlQmxvYlJlZ2lzdHJ5OjpyZWdp
c3RlckJsb2JVUkwobV91cmxGb3JSZWFkaW5nLCBibG9iLT51cmwoKSk7CisKKyAgICAvLyBDb25z
dHJ1Y3QgYW5kIGxvYWQgdGhlIHJlcXVlc3QuCisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
bV91cmxGb3JSZWFkaW5nKTsKKyAgICByZXF1ZXN0LnNldEhUVFBNZXRob2QoIkdFVCIpOworCisg
ICAgVGhyZWFkYWJsZUxvYWRlck9wdGlvbnMgb3B0aW9uczsKKyAgICBvcHRpb25zLnNlbmRMb2Fk
Q2FsbGJhY2tzID0gdHJ1ZTsKKyAgICBvcHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOworICAg
IG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKKyAgICBvcHRpb25zLmFsbG93Q3JlZGVu
dGlhbHMgPSB0cnVlOworICAgIG9wdGlvbnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gRGVu
eUNyb3NzT3JpZ2luUmVxdWVzdHM7CisKKyAgICBpZiAobV9jbGllbnQpCisgICAgICAgIG1fbG9h
ZGVyID0gVGhyZWFkYWJsZUxvYWRlcjo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIHRo
aXMsIHJlcXVlc3QsIG9wdGlvbnMpOworICAgIGVsc2UKKyAgICAgICAgVGhyZWFkYWJsZUxvYWRl
cjo6bG9hZFJlc291cmNlU3luY2hyb25vdXNseShzY3JpcHRFeGVjdXRpb25Db250ZXh0LCByZXF1
ZXN0LCAqdGhpcywgb3B0aW9ucyk7Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxvYWRlcjo6Y2FuY2Vs
KCkKK3sKKyAgICBtX2Vycm9yQ29kZSA9IEZpbGVFcnJvcjo6QUJPUlRfRVJSOworICAgIHRlcm1p
bmF0ZSgpOworfQorCit2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OnRlcm1pbmF0ZSgpCit7CisgICAg
aWYgKG1fbG9hZGVyKSB7CisgICAgICAgIG1fbG9hZGVyLT5jYW5jZWwoKTsKKyAgICAgICAgY2xl
YW51cCgpOworICAgIH0KK30KKwordm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpjbGVhbnVwKCkKK3sK
KyAgICBtX2xvYWRlciA9IDA7CisKKyAgICAvLyBJZiB3ZSBnZXQgYW55IGVycm9yLCB3ZSBkbyBu
b3QgbmVlZCB0byBrZWVwIGEgYnVmZmVyIGFyb3VuZC4KKyAgICBpZiAobV9lcnJvckNvZGUpIHsK
KyAgICAgICAgbV9yYXdEYXRhID0gMDsKKyAgICAgICAgbV9zdHJpbmdSZXN1bHQgPSAiIjsKKyAg
ICB9Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxvYWRlcjo6ZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0
IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIGlmIChyZXNwb25zZS5odHRwU3Rh
dHVzQ29kZSgpICE9IDIwMCkgeworICAgICAgICBmYWlsZWQoaHR0cFN0YXR1c0NvZGVUb0Vycm9y
Q29kZShyZXNwb25zZS5odHRwU3RhdHVzQ29kZSgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogU3VwcG9ydCByZWFkaW5nIG1vcmUgdGhhbiB0aGUgY3VycmVudCBz
aXplIGxpbWl0IG9mIEFycmF5QnVmZmVyLgorICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBs
b25nIGxvbmc+KHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0aCgpKSA+ICBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpIHsKKyAgICAgICAgZmFpbGVkKEZpbGVFcnJvcjo6
Tk9UX1JFQURBQkxFX0VSUik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV90b3RhbEJ5
dGVzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJlc3BvbnNlLmV4cGVjdGVkQ29udGVudExlbmd0
aCgpKTsKKworICAgIEFTU0VSVCghbV9yYXdEYXRhKTsKKyAgICBtX3Jhd0RhdGEgPSBBcnJheUJ1
ZmZlcjo6Y3JlYXRlKHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RvdGFsQnl0ZXMpLCAxKTsKKwor
ICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZFN0YXJ0TG9hZGluZygpOwor
fQorCit2b2lkIEZpbGVSZWFkZXJMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGhSZWNlaXZlZCkKK3sKKyAgICBBU1NFUlQoZGF0YSAmJiBsZW5ndGhSZWNl
aXZlZCA+IDApOworCisgICAgLy8gQmFpbCBvdXQgaWYgd2UgZW5jb3VuZXRyIGFuIGVycm9yLgor
ICAgIGlmIChtX2Vycm9yQ29kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVtY3B5KHN0YXRp
Y19jYXN0PGNoYXIqPihtX3Jhd0RhdGEtPmRhdGEoKSkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9ieXRlc0xvYWRlZCksIGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihsZW5ndGhSZWNlaXZl
ZCkpOworICAgIG1fYnl0ZXNMb2FkZWQgKz0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJl
Y2VpdmVkKTsKKyAgICBtX3Jhd0RhdGEtPnNldEJ5dGVMZW5ndGgobV9ieXRlc0xvYWRlZCk7CisK
KyAgICBtX2lzUmF3RGF0YUNvbnZlcnRlZCA9IGZhbHNlOworCisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlkUmVjZWl2ZURhdGEoKTsKK30KKwordm9pZCBGaWxlUmVhZGVy
TG9hZGVyOjpkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcpCit7CisgICAgY2xlYW51cCgp
OworICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgbV9jbGllbnQtPmRpZEZpbmlzaExvYWRpbmco
KTsKK30KKwordm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpkaWRGYWlsKGNvbnN0IFJlc291cmNlRXJy
b3ImKQoreworICAgIC8vIElmIHdlJ3JlIGFib3J0aW5nLCBkbyBub3QgcHJvY2VlZCB3aXRoIG5v
cm1hbCBlcnJvciBoYW5kbGluZyBzaW5jZSBpdCBpcyBjb3ZlcmVkIGluIGFib3J0aW5nIGNvZGUu
CisgICAgaWYgKG1fZXJyb3JDb2RlID09IEZpbGVFcnJvcjo6QUJPUlRfRVJSKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmYWlsZWQoRmlsZUVycm9yOjpOT1RfUkVBREFCTEVfRVJSKTsKK30KKwor
dm9pZCBGaWxlUmVhZGVyTG9hZGVyOjpmYWlsZWQoaW50IGVycm9yQ29kZSkKK3sKKyAgICBtX2Vy
cm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICBjbGVhbnVwKCk7CisgICAgaWYgKG1fY2xpZW50KQor
ICAgICAgICBtX2NsaWVudC0+ZGlkRmFpbChtX2Vycm9yQ29kZSk7Cit9CisKK0ZpbGVFcnJvcjo6
RXJyb3JDb2RlIEZpbGVSZWFkZXJMb2FkZXI6Omh0dHBTdGF0dXNDb2RlVG9FcnJvckNvZGUoaW50
IGh0dHBTdGF0dXNDb2RlKQoreworICAgIHN3aXRjaCAoaHR0cFN0YXR1c0NvZGUpIHsKKyAgICBj
YXNlIDQwMzoKKyAgICAgICAgcmV0dXJuIEZpbGVFcnJvcjo6U0VDVVJJVFlfRVJSOworICAgIGNh
c2UgNDA0OgorICAgICAgICByZXR1cm4gRmlsZUVycm9yOjpOT1RfRk9VTkRfRVJSOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBGaWxlRXJyb3I6Ok5PVF9SRUFEQUJMRV9FUlI7CisgICAg
fQorfQorCitQYXNzUmVmUHRyPEFycmF5QnVmZmVyPiBGaWxlUmVhZGVyTG9hZGVyOjphcnJheUJ1
ZmZlclJlc3VsdCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fcmVhZFR5cGUgPT0gUmVhZEFzQXJy
YXlCdWZmZXIpOworCisgICAgLy8gSWYgdGhlIGxvYWRpbmcgaXMgbm90IHN0YXJ0ZWQgb3IgYW4g
ZXJyb3Igb2NjdXJzLCByZXR1cm4gYW4gZW1wdHkgcmVzdWx0LgorICAgIGlmICghbV9yYXdEYXRh
IHx8IG1fZXJyb3JDb2RlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8vIFdlIHN1cHBvcnQg
cmV0dXJuaW5nIHRoZSBwYXJ0aWFsIGRhdGEuCisgICAgcmV0dXJuIG1fcmF3RGF0YTsKK30KKwor
U3RyaW5nIEZpbGVSZWFkZXJMb2FkZXI6OnN0cmluZ1Jlc3VsdCgpCit7CisgICAgQVNTRVJUKG1f
cmVhZFR5cGUgIT0gUmVhZEFzQXJyYXlCdWZmZXIpOworCisgICAgLy8gSWYgdGhlIGxvYWRpbmcg
aXMgbm90IHN0YXJ0ZWQgb3IgYW4gZXJyb3Igb2NjdXJzLCByZXR1cm4gYW4gZW1wdHkgcmVzdWx0
LgorICAgIGlmICghbV9yYXdEYXRhIHx8IG1fZXJyb3JDb2RlKQorICAgICAgICByZXR1cm4gbV9z
dHJpbmdSZXN1bHQ7CisKKyAgICAvLyBJZiBhbHJlYWR5IGNvbnZlcnRlZCBmcm9tIHRoZSByYXcg
ZGF0YSwgcmV0dXJuIHRoZSByZXN1bHQgbm93LgorICAgIGlmIChtX2lzUmF3RGF0YUNvbnZlcnRl
ZCkKKyAgICAgICAgcmV0dXJuIG1fc3RyaW5nUmVzdWx0OworCisgICAgaWYgKG1fcmVhZFR5cGUg
PT0gUmVhZEFzQmluYXJ5U3RyaW5nKQorICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9IFN0cmluZyhz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4obV9yYXdEYXRhLT5kYXRhKCkpLCBtX3Jhd0RhdGEtPmJ5
dGVMZW5ndGgoKSk7CisgICAgZWxzZSBpZiAobV9yZWFkVHlwZSA9PSBSZWFkQXNUZXh0KQorICAg
ICAgICBjb252ZXJ0VG9UZXh0KCk7CisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChtX3JlYWRU
eXBlID09IFJlYWRBc0RhdGFVUkwpOworICAgICAgICAvLyBQYXJ0aWFsIGRhdGEgaXMgbm90IHN1
cHBvcnRlZCB3aGVuIHJlYWRpbmcgYXMgZGF0YSBVUkwuCisgICAgICAgIGlmIChpc0NvbXBsZXRl
ZCgpKQorICAgICAgICAgICAgY29udmVydFRvRGF0YVVSTCgpOworICAgIH0KKyAgICAKKyAgICBy
ZXR1cm4gbV9zdHJpbmdSZXN1bHQ7Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxvYWRlcjo6Y29udmVy
dFRvVGV4dCgpCit7CisgICAgaWYgKCFtX3Jhd0RhdGEtPmJ5dGVMZW5ndGgoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy8gRGVjb2RlIHRoZSBkYXRhLgorICAgIC8vIFRoZSBGaWxlIEFQSSBz
cGVjIHNheXMgdGhhdCB3ZSBzaG91bGQgdXNlIHRoZSBzdXBwbGllZCBlbmNvZGluZyBpZiBpdCBp
cyB2YWxpZC4gSG93ZXZlciwgd2UgY2hvb3NlIHRvIGlnbm9yZSB0aGlzCisgICAgLy8gcmVxdWly
ZW1lbnQgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIGhvdyBXZWJLaXQgZGVjb2RlcyB0
aGUgd2ViIGNvbnRlbnQ6IGFsd2F5cyBoYXMgdGhlIEJPTSBvdmVycmlkZSB0aGUKKyAgICAvLyBw
cm92aWRlZCBlbmNvZGluZy4gICAgIAorICAgIC8vIEZJWE1FOiBjb25zaWRlciBzdXBwb3J0aW5n
IGluY3JlbWVudGFsIGRlY29kaW5nIHRvIGltcHJvdmUgdGhlIHBlcmYuCisgICAgU3RyaW5nQnVp
bGRlciBidWlsZGVyOworICAgIGlmICghbV9kZWNvZGVyKQorICAgICAgICBtX2RlY29kZXIgPSBU
ZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUoInRleHQvcGxhaW4iLCBtX2VuY29kaW5nLmlzVmFs
aWQoKSA/IG1fZW5jb2RpbmcgOiBVVEY4RW5jb2RpbmcoKSk7CisgICAgYnVpbGRlci5hcHBlbmQo
bV9kZWNvZGVyLT5kZWNvZGUoc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fcmF3RGF0YS0+ZGF0
YSgpKSwgbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCkpKTsKKworICAgIGlmIChpc0NvbXBsZXRlZCgp
KQorICAgICAgICBidWlsZGVyLmFwcGVuZChtX2RlY29kZXItPmZsdXNoKCkpOworCisgICAgbV9z
dHJpbmdSZXN1bHQgPSBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK3ZvaWQgRmlsZVJlYWRlckxv
YWRlcjo6Y29udmVydFRvRGF0YVVSTCgpCit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwor
ICAgIGJ1aWxkZXIuYXBwZW5kKCJkYXRhOiIpOworCisgICAgaWYgKCFtX3Jhd0RhdGEtPmJ5dGVM
ZW5ndGgoKSkgeworICAgICAgICBtX3N0cmluZ1Jlc3VsdCA9IGJ1aWxkZXIudG9TdHJpbmcoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9kYXRhVHlwZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9kYXRhVHlwZSk7CisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCI7YmFzZTY0LCIpOworICAgIH0gZWxzZQorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
YmFzZTY0LCIpOworCisgICAgVmVjdG9yPGNoYXI+IG91dDsKKyAgICBiYXNlNjRFbmNvZGUoc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KG1fcmF3RGF0YS0+ZGF0YSgpKSwgbV9yYXdEYXRhLT5ieXRl
TGVuZ3RoKCksIG91dCk7CisgICAgb3V0LmFwcGVuZCgnXDAnKTsKKyAgICBidWlsZGVyLmFwcGVu
ZChvdXQuZGF0YSgpKTsKKworICAgIG1fc3RyaW5nUmVzdWx0ID0gYnVpbGRlci50b1N0cmluZygp
OworfQorCitib29sIEZpbGVSZWFkZXJMb2FkZXI6OmlzQ29tcGxldGVkKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yYXdEYXRhLT5ieXRlTGVuZ3RoKCkgPT0gbV90b3RhbEJ5dGVzOworfQorCit2
b2lkIEZpbGVSZWFkZXJMb2FkZXI6OnNldEVuY29kaW5nKGNvbnN0IFN0cmluZyYgZW5jb2Rpbmcp
Cit7CisgICAgaWYgKCFlbmNvZGluZy5pc0VtcHR5KCkpCisgICAgICAgIG1fZW5jb2RpbmcgPSBU
ZXh0RW5jb2RpbmcoZW5jb2RpbmcpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisgCisj
ZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKKwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0Zp
bGVSZWFkZXJMb2FkZXIuaCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTE1ZWUwMQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyLmgKQEAgLTAsMCArMSwxMTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBGaWxlUmVhZGVyTG9hZGVyX2gKKyNkZWZpbmUgRmlsZVJlYWRlckxvYWRlcl9oCisK
KyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkZpbGVFcnJvci5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlTG9h
ZGVyQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBcnJheUJ1ZmZl
cjsKK2NsYXNzIEJsb2I7CitjbGFzcyBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50OworY2xhc3MgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFRleHRSZXNvdXJjZURlY29kZXI7CitjbGFzcyBU
aHJlYWRhYmxlTG9hZGVyOworCitjbGFzcyBGaWxlUmVhZGVyTG9hZGVyIDogcHVibGljIFRocmVh
ZGFibGVMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIGVudW0gUmVhZFR5cGUgeworICAgICAg
ICBSZWFkQXNBcnJheUJ1ZmZlciwKKyAgICAgICAgUmVhZEFzQmluYXJ5U3RyaW5nLAorICAgICAg
ICBSZWFkQXNUZXh0LAorICAgICAgICBSZWFkQXNEYXRhVVJMCisgICAgfTsKKworICAgIC8vIElm
IGNsaWVudCBpcyBnaXZlbiwgZG8gdGhlIGxvYWRpbmcgYXN5bmNocm9ub3VzbHkuIE90aGVyd2lz
ZSwgbG9hZCBzeW5jaHJvbm91c2x5LgorICAgIEZpbGVSZWFkZXJMb2FkZXIoUmVhZFR5cGUsIEZp
bGVSZWFkZXJMb2FkZXJDbGllbnQqKTsKKyAgICB+RmlsZVJlYWRlckxvYWRlcigpOworCisgICAg
dm9pZCBzdGFydChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgQmxvYiopOworICAgIHZvaWQgY2Fu
Y2VsKCk7CisKKyAgICAvLyBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVSZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqLCBpbnQpOworICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5pc2hMb2FkaW5nKHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgdmlydHVh
bCB2b2lkIGRpZEZhaWwoY29uc3QgUmVzb3VyY2VFcnJvciYpOworCisgICAgU3RyaW5nIHN0cmlu
Z1Jlc3VsdCgpOworICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IGFycmF5QnVmZmVyUmVzdWx0
KCkgY29uc3Q7CisgICAgdW5zaWduZWQgYnl0ZXNMb2FkZWQoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVzTG9hZGVkOyB9CisgICAgdW5zaWduZWQgdG90YWxCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dG90YWxCeXRlczsgfQorICAgIGludCBlcnJvckNvZGUoKSBjb25zdCB7IHJldHVybiBtX2Vycm9y
Q29kZTsgfQorCisgICAgdm9pZCBzZXRFbmNvZGluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lk
IHNldERhdGFUeXBlKGNvbnN0IFN0cmluZyYgZGF0YVR5cGUpIHsgbV9kYXRhVHlwZSA9IGRhdGFU
eXBlOyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgdGVybWluYXRlKCk7CisgICAgdm9pZCBj
bGVhbnVwKCk7CisgICAgdm9pZCBmYWlsZWQoaW50IGVycm9yQ29kZSk7CisgICAgdm9pZCBjb252
ZXJ0VG9UZXh0KCk7CisgICAgdm9pZCBjb252ZXJ0VG9EYXRhVVJMKCk7CisKKyAgICBib29sIGlz
Q29tcGxldGVkKCkgY29uc3Q7CisKKyAgICBzdGF0aWMgRmlsZUVycm9yOjpFcnJvckNvZGUgaHR0
cFN0YXR1c0NvZGVUb0Vycm9yQ29kZShpbnQpOworCisgICAgUmVhZFR5cGUgbV9yZWFkVHlwZTsK
KyAgICBGaWxlUmVhZGVyTG9hZGVyQ2xpZW50KiBtX2NsaWVudDsKKyAgICBUZXh0RW5jb2Rpbmcg
bV9lbmNvZGluZzsKKyAgICBTdHJpbmcgbV9kYXRhVHlwZTsKKworICAgIEtVUkwgbV91cmxGb3JS
ZWFkaW5nOworICAgIFJlZlB0cjxUaHJlYWRhYmxlTG9hZGVyPiBtX2xvYWRlcjsKKworICAgIFJl
ZlB0cjxBcnJheUJ1ZmZlcj4gbV9yYXdEYXRhOworICAgIGJvb2wgbV9pc1Jhd0RhdGFDb252ZXJ0
ZWQ7CisKKyAgICBTdHJpbmcgbV9zdHJpbmdSZXN1bHQ7CisKKyAgICAvLyBUaGUgZGVjb2RlciB1
c2VkIHRvIGRlY29kZSB0aGUgdGV4dCBkYXRhLgorICAgIFJlZlB0cjxUZXh0UmVzb3VyY2VEZWNv
ZGVyPiBtX2RlY29kZXI7CisKKyAgICB1bnNpZ25lZCBtX2J5dGVzTG9hZGVkOworICAgIHVuc2ln
bmVkIG1fdG90YWxCeXRlczsKKyAgICBpbnQgbV9lcnJvckNvZGU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2VuZGlmIC8vIEZpbGVS
ZWFkZXJMb2FkZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJMb2Fk
ZXJDbGllbnQuaCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjYjhhZAotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyTG9hZGVyQ2xpZW50LmgKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAq
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEZpbGVSZWFkZXJMb2FkZXJDbGllbnRfaAorI2RlZmluZSBGaWxlUmVhZGVy
TG9hZGVyQ2xpZW50X2gKKworI2lmIEVOQUJMRShCTE9CKQorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEZpbGVSZWFkZXJMb2FkZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwg
fkZpbGVSZWFkZXJMb2FkZXJDbGllbnQoKSB7fQorCisgICAgdmlydHVhbCB2b2lkIGRpZFN0YXJ0
TG9hZGluZygpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWRpbmcoKSA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRpZEZhaWwoaW50IGVycm9yQ29kZSkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKKyNlbmRpZiAvLyBGaWxlUmVhZGVyTG9hZGVy
Q2xpZW50X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAg
Yi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuY3BwCmluZGV4IDk5ZjVhODkuLjg1ZTdm
NTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5jcHAKKysrIGIv
V2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmNwcApAQCAtMzQsMTYyICszNCw2NiBAQAog
CiAjaW5jbHVkZSAiRmlsZVJlYWRlclN5bmMuaCIKIAotI2luY2x1ZGUgIkJhc2U2NC5oIgorI2lu
Y2x1ZGUgIkFycmF5QnVmZmVyLmgiCiAjaW5jbHVkZSAiQmxvYi5oIgogI2luY2x1ZGUgIkJsb2JV
UkwuaCIKICNpbmNsdWRlICJGaWxlRXhjZXB0aW9uLmgiCi0jaW5jbHVkZSAiRmlsZVJlYWRlci5o
IgotI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlc291cmNlUmVzcG9u
c2UuaCIKLSNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCi0jaW5jbHVkZSAiVGV4
dEVuY29kaW5nLmgiCi0jaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUg
IlRocmVhZGFibGVCbG9iUmVnaXN0cnkuaCIKLSNpbmNsdWRlICJUaHJlYWRhYmxlTG9hZGVyLmgi
CisjaW5jbHVkZSAiRmlsZVJlYWRlckxvYWRlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRmlsZVJlYWRlclN5bmNMb2FkZXIg
OiBwdWJsaWMgVGhyZWFkYWJsZUxvYWRlckNsaWVudCB7Ci1wdWJsaWM6Ci0gICAgLy8gSWYgdGhl
IG91dHB1dCByZXN1bHQgaXMgcHJvdmlkZWQsIHVzZSBpdC4gT3RoZXJ3aXNlLCBzYXZlIGl0IGFz
IHRoZSByYXcgZGF0YS4KLSAgICBGaWxlUmVhZGVyU3luY0xvYWRlcihTdHJpbmdCdWlsZGVyKik7
Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSBodHRwIHN0YXR1cyBjb2RlLgotICAgIHZvaWQgc3RhcnQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIEV4Y2VwdGlv
bkNvZGUmKTsKLQotICAgIC8vIFRocmVhZGFibGVMb2FkZXJDbGllbnQKLSAgICB2aXJ0dWFsIHZv
aWQgZGlkUmVjZWl2ZVJlc3BvbnNlKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciosIGludCk7Ci0gICAgdmlydHVhbCB2
b2lkIGRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKLSAgICB2aXJ0
dWFsIHZvaWQgZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0KLSAgICBjb25zdCBWZWN0
b3I8Y2hhcj4mIHJhd0RhdGEoKSBjb25zdCB7IHJldHVybiBtX3Jhd0RhdGE7IH0KLQotcHJpdmF0
ZToKLSAgICAvLyBUaGUgb3V0cHV0IHJlc3VsdC4gVGhlIGNhbGxlciBwcm92aWRlcyB0aGlzIGlu
IG9yZGVyIHRvIGxvYWQgdGhlIGJpbmFyeSBkYXRhIGRpcmVjdGx5LgotICAgIFN0cmluZ0J1aWxk
ZXIqIG1fYnVpbGRlcjsKLQotICAgIC8vIFRoZSByYXcgZGF0YS4gVGhlIGNhbGxlciBkb2VzIG5v
dCBwcm92aWRlIHRoZSBhYm92ZSBvdXRwdXQgcmVzdWx0IGFuZCB3ZSBuZWVkIHRvIHNhdmUgaXQg
aGVyZS4KLSAgICBWZWN0b3I8Y2hhcj4gbV9yYXdEYXRhOwotCi0gICAgaW50IG1faHR0cFN0YXR1
c0NvZGU7ICAgIAotfTsKLQotRmlsZVJlYWRlclN5bmNMb2FkZXI6OkZpbGVSZWFkZXJTeW5jTG9h
ZGVyKFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIpCi0gICAgOiBtX2J1aWxkZXIoYnVpbGRlcikKLSAg
ICAsIG1faHR0cFN0YXR1c0NvZGUoMCkKLXsKLX0KLQotdm9pZCBGaWxlUmVhZGVyU3luY0xvYWRl
cjo6c3RhcnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBFeGNlcHRpb25Db2RlJiBlYykKK0ZpbGVS
ZWFkZXJTeW5jOjpGaWxlUmVhZGVyU3luYygpCiB7Ci0gICAgVGhyZWFkYWJsZUxvYWRlck9wdGlv
bnMgb3B0aW9uczsKLSAgICBvcHRpb25zLnNlbmRMb2FkQ2FsbGJhY2tzID0gdHJ1ZTsKLSAgICBv
cHRpb25zLnNuaWZmQ29udGVudCA9IGZhbHNlOwotICAgIG9wdGlvbnMuZm9yY2VQcmVmbGlnaHQg
PSBmYWxzZTsKLSAgICBvcHRpb25zLmFsbG93Q3JlZGVudGlhbHMgPSB0cnVlOwotICAgIG9wdGlv
bnMuY3Jvc3NPcmlnaW5SZXF1ZXN0UG9saWN5ID0gRGVueUNyb3NzT3JpZ2luUmVxdWVzdHM7Ci0K
LSAgICBUaHJlYWRhYmxlTG9hZGVyOjpsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQsIHJlcXVlc3QsICp0aGlzLCBvcHRpb25zKTsKLQotICAgIGVjID0gKG1f
aHR0cFN0YXR1c0NvZGUgPT0gMjAwKSA/IDAgOiBGaWxlRXhjZXB0aW9uOjpFcnJvckNvZGVUb0V4
Y2VwdGlvbkNvZGUoRmlsZVJlYWRlcjo6aHR0cFN0YXR1c0NvZGVUb0Vycm9yQ29kZShtX2h0dHBT
dGF0dXNDb2RlKSk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlclN5bmNMb2FkZXI6OmRpZFJlY2VpdmVS
ZXNwb25zZShjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK1Bhc3NSZWZQdHI8QXJy
YXlCdWZmZXI+IEZpbGVSZWFkZXJTeW5jOjpyZWFkQXNBcnJheUJ1ZmZlcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKLSAgICBtX2h0dHBTdGF0dXNDb2RlID0gcmVzcG9uc2UuaHR0cFN0YXR1c0Nv
ZGUoKTsKLX0KKyAgICBpZiAoIWJsb2IpCisgICAgICAgIHJldHVybiAwOwogCi12b2lkIEZpbGVS
ZWFkZXJTeW5jTG9hZGVyOjpkaWRSZWNlaXZlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVu
Z3RoUmVjZWl2ZWQpCi17Ci0gICAgaWYgKG1fYnVpbGRlcikKLSAgICAgICAgbV9idWlsZGVyLT5h
cHBlbmQoZGF0YSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aFJlY2VpdmVkKSk7Ci0gICAg
ZWxzZQotICAgICAgICBtX3Jhd0RhdGEuYXBwZW5kKGRhdGEsIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihsZW5ndGhSZWNlaXZlZCkpOwotfQorICAgIEZpbGVSZWFkZXJMb2FkZXIgbG9hZGVyKEZpbGVS
ZWFkZXJMb2FkZXI6OlJlYWRBc0FycmF5QnVmZmVyLCAwKTsKKyAgICBzdGFydExvYWRpbmcoc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCwgbG9hZGVyLCBibG9iLCBlYyk7CiAKLXZvaWQgRmlsZVJlYWRl
clN5bmNMb2FkZXI6OmRpZEZpbmlzaExvYWRpbmcodW5zaWduZWQgbG9uZykKLXsKLX0KLQotdm9p
ZCBGaWxlUmVhZGVyU3luY0xvYWRlcjo6ZGlkRmFpbChjb25zdCBSZXNvdXJjZUVycm9yJikKLXsK
LSAgICAvLyBUcmVhdCBhcyBpbnRlcm5hbCBlcnJvci4KLSAgICBtX2h0dHBTdGF0dXNDb2RlID0g
NTAwOworICAgIHJldHVybiBsb2FkZXIuYXJyYXlCdWZmZXJSZXN1bHQoKTsKIH0KIAogU3RyaW5n
IEZpbGVSZWFkZXJTeW5jOjpyZWFkQXNCaW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgaWYgKCFibG9iKQotICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7
CisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCwgYmxvYiwgUmVhZEFzQmluYXJ5U3RyaW5nLCBlYyk7Ci0gICAgcmV0dXJuIG1fYnVpbGRl
ci50b1N0cmluZygpOworICAgIEZpbGVSZWFkZXJMb2FkZXIgbG9hZGVyKEZpbGVSZWFkZXJMb2Fk
ZXI6OlJlYWRBc0JpbmFyeVN0cmluZywgMCk7CisgICAgc3RhcnRMb2FkaW5nKHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQsIGxvYWRlciwgYmxvYiwgZWMpOworICAgIHJldHVybiBsb2FkZXIuc3RyaW5n
UmVzdWx0KCk7CiB9CiAKIFN0cmluZyBGaWxlUmVhZGVyU3luYzo6cmVhZEFzVGV4dChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBjb25z
dCBTdHJpbmcmIGVuY29kaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIWJsb2Ip
Ci0gICAgICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgcmV0dXJuIFN0
cmluZygpOwogCi0gICAgbV9lbmNvZGluZyA9IGVuY29kaW5nOwotICAgIHJlYWQoc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgYmxvYiwgUmVhZEFzVGV4dCwgZWMpOwotICAgIHJldHVybiBtX2J1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICBGaWxlUmVhZGVyTG9hZGVyIGxvYWRlcihGaWxlUmVhZGVyTG9h
ZGVyOjpSZWFkQXNUZXh0LCAwKTsKKyAgICBsb2FkZXIuc2V0RW5jb2RpbmcoZW5jb2RpbmcpOwor
ICAgIHN0YXJ0TG9hZGluZyhzY3JpcHRFeGVjdXRpb25Db250ZXh0LCBsb2FkZXIsIGJsb2IsIGVj
KTsKKyAgICByZXR1cm4gbG9hZGVyLnN0cmluZ1Jlc3VsdCgpOwogfQogCiBTdHJpbmcgRmlsZVJl
YWRlclN5bmM6OnJlYWRBc0RhdGFVUkwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYg
KCFibG9iKQotICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKIAotICAgIHJlYWQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgYmxvYiwg
UmVhZEFzRGF0YVVSTCwgZWMpOwotICAgIHJldHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKLX0K
LQotdm9pZCBGaWxlUmVhZGVyU3luYzo6cmVhZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3Jp
cHRFeGVjdXRpb25Db250ZXh0LCBCbG9iKiBibG9iLCBSZWFkVHlwZSByZWFkVHlwZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gVGhlIGJsb2IgaXMgcmVhZCBieSByb3V0aW5nIHRocm91
Z2ggdGhlIHJlcXVlc3QgaGFuZGxpbmcgbGF5ZXIgZ2l2ZW4gdGhlIHRlbXBvcmFyeSBwdWJsaWMg
dXJsLgotICAgIEtVUkwgdXJsRm9yUmVhZGluZyA9IEJsb2JVUkw6OmNyZWF0ZVB1YmxpY1VSTChz
Y3JpcHRFeGVjdXRpb25Db250ZXh0LT5zZWN1cml0eU9yaWdpbigpKTsKLSAgICBUaHJlYWRhYmxl
QmxvYlJlZ2lzdHJ5OjpyZWdpc3RlckJsb2JVUkwodXJsRm9yUmVhZGluZywgYmxvYi0+dXJsKCkp
OwotCi0gICAgUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QodXJsRm9yUmVhZGluZyk7Ci0gICAgcmVx
dWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKLQotICAgIEZpbGVSZWFkZXJTeW5jTG9hZGVyIGxv
YWRlcigocmVhZFR5cGUgPT0gUmVhZEFzQmluYXJ5U3RyaW5nKSA/ICZtX2J1aWxkZXIgOiAwKTsK
LSAgICBsb2FkZXIuc3RhcnQoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgcmVxdWVzdCwgZWMpOwot
ICAgIFRocmVhZGFibGVCbG9iUmVnaXN0cnk6OnVucmVnaXN0ZXJCbG9iVVJMKHVybEZvclJlYWRp
bmcpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3dpdGNoIChyZWFkVHlw
ZSkgewotICAgIGNhc2UgUmVhZEFzQmluYXJ5U3RyaW5nOgotICAgICAgICAvLyBOb3RoaW5nIHRv
IGRvIHNpbmNlIHdlIG5lZWQgbm8gY29udmVyc2lvbi4KLSAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgUmVhZEFzVGV4dDoKLSAgICAgICAgY29udmVydFRvVGV4dChsb2FkZXIucmF3RGF0YSgpLmRh
dGEoKSwgbG9hZGVyLnJhd0RhdGEoKS5zaXplKCksIG1fYnVpbGRlcik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICBjYXNlIFJlYWRBc0RhdGFVUkw6Ci0gICAgICAgIEZpbGVSZWFkZXI6OmNvbnZlcnRU
b0RhdGFVUkwobG9hZGVyLnJhd0RhdGEoKSwgYmxvYi0+dHlwZSgpLCBtX2J1aWxkZXIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgRmls
ZVJlYWRlckxvYWRlciBsb2FkZXIoRmlsZVJlYWRlckxvYWRlcjo6UmVhZEFzRGF0YVVSTCwgMCk7
CisgICAgbG9hZGVyLnNldERhdGFUeXBlKGJsb2ItPnR5cGUoKSk7CisgICAgc3RhcnRMb2FkaW5n
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsIGxvYWRlciwgYmxvYiwgZWMpOworICAgIHJldHVybiBs
b2FkZXIuc3RyaW5nUmVzdWx0KCk7CiB9CiAKLXZvaWQgRmlsZVJlYWRlclN5bmM6OmNvbnZlcnRU
b1RleHQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIp
Cit2b2lkIEZpbGVSZWFkZXJTeW5jOjpzdGFydExvYWRpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgRmlsZVJlYWRlckxvYWRlciYgbG9hZGVyLCBCbG9i
KiBibG9iLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAoIXNpemUpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIERlY29kZSB0aGUgZGF0YS4KLSAgICAvLyBUaGUgRmlsZSBBUEkgc3Bl
YyBzYXlzIHRoYXQgd2Ugc2hvdWxkIHVzZSB0aGUgc3VwcGxpZWQgZW5jb2RpbmcgaWYgaXQgaXMg
dmFsaWQuIEhvd2V2ZXIsIHdlIGNob29zZSB0byBpZ25vcmUgdGhpcwotICAgIC8vIHJlcXVpcmVt
ZW50IGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBob3cgV2ViS2l0IGRlY29kZXMgdGhl
IHdlYiBjb250ZW50OiBhbHdheXMgaGF2ZSB0aGUgQk9NIG92ZXJyaWRlIHRoZQotICAgIC8vIHBy
b3ZpZGVkIGVuY29kaW5nLiAgICAgCi0gICAgLy8gRklYTUU6IGNvbnNpZGVyIHN1cHBvcnRpbmcg
aW5jcmVtZW50YWwgZGVjb2RpbmcgdG8gaW1wcm92ZSB0aGUgcGVyZi4KLSAgICBSZWZQdHI8VGV4
dFJlc291cmNlRGVjb2Rlcj4gZGVjb2RlciA9IFRleHRSZXNvdXJjZURlY29kZXI6OmNyZWF0ZSgi
dGV4dC9wbGFpbiIsIG1fZW5jb2RpbmcuaXNFbXB0eSgpID8gVVRGOEVuY29kaW5nKCkgOiBUZXh0
RW5jb2RpbmcobV9lbmNvZGluZykpOwotICAgIGJ1aWxkZXIuY2xlYXIoKTsKLSAgICBidWlsZGVy
LmFwcGVuZChkZWNvZGVyLT5kZWNvZGUoZGF0YSwgc2l6ZSkpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KGRlY29kZXItPmZsdXNoKCkpOworICAgIGxvYWRlci5zdGFydChzY3JpcHRFeGVjdXRpb25Db250
ZXh0LCBibG9iKTsKKyAgICBlYyA9IEZpbGVFeGNlcHRpb246OkVycm9yQ29kZVRvRXhjZXB0aW9u
Q29kZShsb2FkZXIuZXJyb3JDb2RlKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJlYWRlclN5bmMuaCBiL1dlYkNvcmUvZmls
ZWFwaS9GaWxlUmVhZGVyU3luYy5oCmluZGV4IGNiMGUwMGQuLjc5YjYzN2YgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvZmlsZWFwaS9GaWxlUmVhZGVyU3luYy5oCisrKyBiL1dlYkNvcmUvZmlsZWFwaS9G
aWxlUmVhZGVyU3luYy5oCkBAIC0zNCwxMyArMzQsMTUgQEAKICNpZiBFTkFCTEUoQkxPQikKIAog
I2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXJyYXlCdWZmZXI7CiBj
bGFzcyBCbG9iOworY2xhc3MgRmlsZVJlYWRlckxvYWRlcjsKIGNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CiAKIGNsYXNzIEZpbGVSZWFkZXJTeW5jIDogcHVibGljIFJlZkNvdW50ZWQ8Rmls
ZVJlYWRlclN5bmM+IHsKQEAgLTUyLDYgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
RmlsZVJlYWRlclN5bmMoKSB7IH0KIAorICAgIFBhc3NSZWZQdHI8QXJyYXlCdWZmZXI+IHJlYWRB
c0FycmF5QnVmZmVyKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIFN0cmluZyByZWFkQXNCaW5hcnlTdHJpbmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIEJsb2IqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgU3RyaW5nIHJlYWRBc1RleHQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQmxvYiogYmxvYiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiAgICAgewpAQCAtNjEsMjAgKzY0LDkgQEAgcHVibGljOgogICAgIFN0
cmluZyByZWFkQXNEYXRhVVJMKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgRXhjZXB0
aW9uQ29kZSYpOwogCiBwcml2YXRlOgotICAgIGVudW0gUmVhZFR5cGUgewotICAgICAgICBSZWFk
QXNCaW5hcnlTdHJpbmcsCi0gICAgICAgIFJlYWRBc1RleHQsCi0gICAgICAgIFJlYWRBc0RhdGFV
UkwKLSAgICB9OworICAgIEZpbGVSZWFkZXJTeW5jKCk7CiAKLSAgICBGaWxlUmVhZGVyU3luYygp
IHsgfQotCi0gICAgdm9pZCByZWFkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBCbG9iKiwgUmVh
ZFR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGNvbnZlcnRUb1RleHQoY29uc3QgY2hh
ciogZGF0YSwgaW50IHNpemUsIFN0cmluZ0J1aWxkZXImKTsKLQotICAgIFN0cmluZ0J1aWxkZXIg
bV9idWlsZGVyOwotCi0gICAgU3RyaW5nIG1fZW5jb2Rpbmc7CisgICAgdm9pZCBzdGFydExvYWRp
bmcoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIEZpbGVSZWFkZXJMb2FkZXImLCBCbG9iKiwgRXhj
ZXB0aW9uQ29kZSYpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlkbCBiL1dlYkNvcmUvZmlsZWFwaS9GaWxl
UmVhZGVyU3luYy5pZGwKaW5kZXggNzI4MThiMS4uMzgxZDQ4MyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9maWxlYXBpL0ZpbGVSZWFkZXJTeW5jLmlkbAorKysgYi9XZWJDb3JlL2ZpbGVhcGkvRmlsZVJl
YWRlclN5bmMuaWRsCkBAIC0zNCw2ICszNCw4IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAgQ2Fu
QmVDb25zdHJ1Y3RlZCwKICAgICAgICAgTm9TdGF0aWNUYWJsZXMKICAgICBdIEZpbGVSZWFkZXJT
eW5jIHsKKyAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHRdIEFycmF5QnVm
ZmVyIHJlYWRBc0FycmF5QnVmZmVyKGluIEJsb2IgYmxvYikKKyAgICAgICAgICAgIHJhaXNlcyhG
aWxlRXhjZXB0aW9uKTsKICAgICAgICAgW0NhbGxXaXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQs
IENvbnZlcnRTY3JpcHRTdHJpbmddIERPTVN0cmluZyByZWFkQXNCaW5hcnlTdHJpbmcoaW4gQmxv
YiBibG9iKQogICAgICAgICAgICAgcmFpc2VzKEZpbGVFeGNlcHRpb24pOwogICAgICAgICBbQ2Fs
bFdpdGg9U2NyaXB0RXhlY3V0aW9uQ29udGV4dCwgQ29udmVydFNjcmlwdFN0cmluZ10gRE9NU3Ry
aW5nIHJlYWRBc1RleHQoaW4gQmxvYiBibG9iLCBpbiBbT3B0aW9uYWxdIERPTVN0cmluZyBlbmNv
ZGluZykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZmZXIuY3BwIGIv
V2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKaW5kZXggMDE0Y2MxZS4uZWM4NDkx
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKKysrIGIv
V2ViQ29yZS9odG1sL2NhbnZhcy9BcnJheUJ1ZmZlci5jcHAKQEAgLTUzLDYgKzUzLDcgQEAgUGFz
c1JlZlB0cjxBcnJheUJ1ZmZlcj4gQXJyYXlCdWZmZXI6OmNyZWF0ZShBcnJheUJ1ZmZlciogb3Ro
ZXIpCiAKIEFycmF5QnVmZmVyOjpBcnJheUJ1ZmZlcih2b2lkKiBkYXRhLCB1bnNpZ25lZCBzaXpl
SW5CeXRlcykKICAgICA6IG1fc2l6ZUluQnl0ZXMoc2l6ZUluQnl0ZXMpCisgICAgLCBtX2NhcGFj
aXR5SW5CeXRlcyhzaXplSW5CeXRlcykKICAgICAsIG1fZGF0YShkYXRhKQogewogfQpAQCAtNzIs
NiArNzMsMTIgQEAgdW5zaWduZWQgQXJyYXlCdWZmZXI6OmJ5dGVMZW5ndGgoKSBjb25zdAogICAg
IHJldHVybiBtX3NpemVJbkJ5dGVzOwogfQogCit2b2lkIEFycmF5QnVmZmVyOjpzZXRCeXRlTGVu
Z3RoKHVuc2lnbmVkIHNpemUpCit7CisgICAgQVNTRVJUKHNpemUgPD0gbV9jYXBhY2l0eUluQnl0
ZXMpOworICAgIG1fc2l6ZUluQnl0ZXMgPSBzaXplOworfQorCiBBcnJheUJ1ZmZlcjo6fkFycmF5
QnVmZmVyKCkKIHsKICAgICBXVEY6OmZhc3RGcmVlKG1fZGF0YSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvY2FudmFzL0FycmF5QnVmZmVyLmggYi9XZWJDb3JlL2h0bWwvY2FudmFzL0FycmF5
QnVmZmVyLmgKaW5kZXggZjUzODA4MC4uMjc3MDFmMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L2NhbnZhcy9BcnJheUJ1ZmZlci5oCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvQXJyYXlCdWZm
ZXIuaApAQCAtMzksNiArMzksNyBAQCBjbGFzcyBBcnJheUJ1ZmZlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEFycmF5QnVmZmVyPiB7CiAgICAgdm9pZCogZGF0YSgpOwogICAgIGNvbnN0IHZvaWQqIGRh
dGEoKSBjb25zdDsKICAgICB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRCeXRlTGVuZ3RoKHVuc2lnbmVkKTsKIAogICAgIH5BcnJheUJ1ZmZlcigpOwogCkBAIC00Nyw2
ICs0OCw3IEBAIGNsYXNzIEFycmF5QnVmZmVyIDogcHVibGljIFJlZkNvdW50ZWQ8QXJyYXlCdWZm
ZXI+IHsKICAgICBBcnJheUJ1ZmZlcih1bnNpZ25lZCBudW1FbGVtZW50cywgdW5zaWduZWQgZWxl
bWVudEJ5dGVTaXplKTsKICAgICBzdGF0aWMgdm9pZCogdHJ5QWxsb2NhdGUodW5zaWduZWQgbnVt
RWxlbWVudHMsIHVuc2lnbmVkIGVsZW1lbnRCeXRlU2l6ZSk7CiAgICAgdW5zaWduZWQgbV9zaXpl
SW5CeXRlczsKKyAgICB1bnNpZ25lZCBtX2NhcGFjaXR5SW5CeXRlczsKICAgICB2b2lkKiBtX2Rh
dGE7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xp
ZW50LmggYi9XZWJDb3JlL2xvYWRlci9UaHJlYWRhYmxlTG9hZGVyQ2xpZW50LmgKaW5kZXggYjhh
NjU4NC4uYmNmNjhiZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvVGhyZWFkYWJsZUxvYWRl
ckNsaWVudC5oCisrKyBiL1dlYkNvcmUvbG9hZGVyL1RocmVhZGFibGVMb2FkZXJDbGllbnQuaApA
QCAtMzEsNiArMzEsOCBAQAogI2lmbmRlZiBUaHJlYWRhYmxlTG9hZGVyQ2xpZW50X2gKICNkZWZp
bmUgVGhyZWFkYWJsZUxvYWRlckNsaWVudF9oCiAKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsK
</data>
<flag name="review"
          id="62123"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="62124"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>