<?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>43871</bug_id>
          
          <creation_ts>2010-08-11 13:01:47 -0700</creation_ts>
          <short_desc>[chromium] Chromium side implementation of blob data and blob registry</short_desc>
          <delta_ts>2010-08-18 16:19:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jian Li">jianli</reporter>
          <assigned_to name="Jian Li">jianli</assigned_to>
          <cc>abarth</cc>
    
    <cc>dimich</cc>
    
    <cc>eric</cc>
    
    <cc>fishd</cc>
    
    <cc>kinuko</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>263414</commentid>
    <comment_count>0</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-11 13:01:47 -0700</bug_when>
    <thetext>Need to hook up the logic in chromium webkit to register the blob data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263424</commentid>
    <comment_count>1</comment_count>
      <attachid>64154</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-11 13:22:28 -0700</bug_when>
    <thetext>Created attachment 64154
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263425</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-11 13:24:10 -0700</bug_when>
    <thetext>Attachment 64154 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/BlobRegistryProxy.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/chromium/src/BlobRegistryProxy.h:31:  #ifndef header guard has wrong style, please use: BlobRegistryProxy_h  [build/header_guard] [5]
WebKit/chromium/public/WebBlobRegistry.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 3 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263429</commentid>
    <comment_count>3</comment_count>
      <attachid>64156</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-11 13:30:46 -0700</bug_when>
    <thetext>Created attachment 64156
Proposed Patch

Fixed style errors. The 1st error is false alarm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263430</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-11 13:32:47 -0700</bug_when>
    <thetext>Attachment 64156 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/BlobRegistryProxy.cpp:42:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263483</commentid>
    <comment_count>5</comment_count>
      <attachid>64156</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-11 15:33:59 -0700</bug_when>
    <thetext>Comment on attachment 64156
Proposed Patch

Here&apos;s my pass. Of course, we should get Darin to review the chromium/public files before committing.



There appear to be a lot of places in here that use blob but don&apos;t have #if ENABLE(BLOB) around them (like WebKit/chromium/public/WebBlobRegistry.h or WebKit/chromium/src/WebBlobData.cpp). Does it need to be added?


&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; index 630eeb0..0f0aaa6 100644
&gt; --- a/WebCore/ChangeLog
&gt; +++ b/WebCore/ChangeLog
&gt; @@ -1,3 +1,15 @@
&gt; +2010-08-11  Jian Li  &lt;jianli@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Chromium side implementation of blob data and blob registry.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=43871
&gt; +
&gt; +        Wrap !PLATFORM(CHROMIUM) around BlobRegistry::instance() so that we will

s/we will use/Chromium uses/


&gt; diff --git a/WebKit/chromium/public/WebBlobData.h b/WebKit/chromium/public/WebBlobData.h

&gt; +
&gt; +#ifndef WebBlobData_h
&gt; +#define WebBlobData_h
&gt; +
&gt; +#include &quot;WebData.h&quot;
&gt; +#include &quot;WebFileInfo.h&quot;
&gt; +#include &quot;WebString.h&quot;
&gt; +
&gt; +#if WEBKIT_IMPLEMENTATION
&gt; +namespace WebCore { class BlobData; }
&gt; +namespace WTF { template &lt;typename T&gt; class PassOwnPtr; }
&gt; +#endif
&gt; +
&gt; +namespace WebKit {
&gt; +
&gt; +class WebBlobDataPrivate;
&gt; +
&gt; +class WebBlobData {
&gt; +public:
&gt; +    struct Item {
&gt; +        enum { TypeData, TypeFile, TypeBlob } type;
&gt; +        WebData data;
&gt; +        WebString pathOrURL;
&gt; +        long long offset;
&gt; +        long long length; // -1 means to the end of the file/blob.

&quot;-1 means *go* to the end of the file/blob.&quot;

&gt; +        WebFileInfo fileInfo;
&gt; +    };
&gt; +


&gt; +    WEBKIT_API void assign(const WebBlobData&amp;);

Is this implemented anywhere?


&gt; +    // Sets the values of the item at the given index.

&quot;Sets&quot; sounds like it changes the values at that index.

Perhaps:  &quot;Retrieves the data at the given index.&quot;

&gt; +    WEBKIT_API bool itemAt(size_t index, Item&amp;) const;

I like the parameter name &quot;result&quot; here as it tells me that the function is filling that in.

I also thing the function name should be getItemAt (imo, itemAt would work better if it actually returned the item.)


&gt; diff --git a/WebKit/chromium/public/WebBlobRegistry.h b/WebKit/chromium/public/WebBlobRegistry.h
&gt; +#include &quot;WebBlobStorageData.h&quot;
&gt; +#include &quot;WebCommon.h&quot;

Why do these headers need to be included? (It looks like fwd declarations would be good enough.)

&gt; +    // Note that the ownership of the WebBlobData is passed to the function.
I don&apos;t under this since WebBlobData is passed by reference.

&gt; +    virtual void registerBlobURL(const WebURL&amp;, WebBlobData&amp;) = 0;
&gt; +    virtual void registerBlobURL(const WebURL&amp; url, const WebURL&amp; srcURL) = 0;

The parameter name |url| seems unnecessary here.

&gt; diff --git a/WebKit/chromium/public/WebBlobStorageData.h b/WebKit/chromium/public/WebBlobStorageData.h

&gt; +namespace WebKit {
&gt; +
&gt; +class WebBlobStorageDataPrivate;
&gt; +
&gt; +class WebBlobStorageData {
&gt; +public:
&gt; +    struct Item {
&gt; +        enum { TypeData, TypeFile } type;
&gt; +        WebData data;
&gt; +        WebString path;
&gt; +        long long offset;
&gt; +        long long length; // -1 means to the end of the file/blob.

Same comment as before (about the comment).

&gt; +        WebFileInfo fileInfo;
&gt; +    };
&gt;

&gt; +    // Sets the values of the item at the given index.  Returns false if

Single space after &quot;.&quot; (and same comment as before about the comment).

&gt; +    // index is out of bounds.
&gt; +    WEBKIT_API bool itemAt(size_t index, Item&amp;) const;
&gt; +
&gt; +    WEBKIT_API WebString contentType() const;
&gt; +    WEBKIT_API WebString contentDisposition() const;


&gt; diff --git a/WebKit/chromium/public/WebKitClient.h b/WebKit/chromium/public/WebKitClient.h
&gt; +    // Register a Blob object by its url.
&gt; +    virtual void registerBlobURL(const WebURL&amp;, const WebBlobData&amp;) { }
&gt; +    virtual void registerBlobURL(const WebURL&amp; url, const WebURL&amp; srcURL) { }

|url| param name.

&gt; diff --git a/WebKit/chromium/src/BlobRegistryProxy.cpp b/WebKit/chromium/src/BlobRegistryProxy.cpp
&gt; + * Copyright (C) 2009 Google Inc. All rights reserved.

2010

&gt; +#include &quot;WebBlobData.h&quot;
&gt; +#include &quot;WebKit.h&quot;
&gt; +#include &quot;WebKitClient.h&quot;
&gt; +#include &quot;WebURL.h&quot;
&gt; +
&gt; +#include &quot;BlobData.h&quot;
&gt; +#include &quot;KURL.h&quot;
&gt; +#include &quot;ResourceHandle.h&quot;
&gt; +#include &lt;wtf/StdLibExtras.h&gt;

Why aren&apos;t these sorted?


&gt; +
&gt; +// We are part of the WebKit implementation.
&gt; +using namespace WebKit;
&gt; +
&gt; +namespace WebCore {
&gt; +
&gt; +BlobRegistry&amp; BlobRegistry::instance()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(BlobRegistryProxy, instance, ());

Is threadsafety coming in the future?

&gt; diff --git a/WebKit/chromium/src/BlobRegistryProxy.h b/WebKit/chromium/src/BlobRegistryProxy.h
&gt; +    virtual void registerBlobURL(const KURL&amp; url, const KURL&amp; srcURL);

|url| param name.

&gt; diff --git a/WebKit/chromium/src/WebBlobData.cpp b/WebKit/chromium/src/WebBlobData.cpp

&gt; +class WebBlobDataPrivate : public BlobData {
&gt; +};
&gt; +
&gt; +void WebBlobData::initialize()
&gt; +{
&gt; +    assign(static_cast&lt;WebBlobDataPrivate*&gt;(BlobData::create().leakPtr()));

Make assign take a PassOwnPtr and then avoid calling leakPtr here.


&gt; +bool WebBlobData::itemAt(size_t index, Item&amp; result) const

&gt; +        result.offset = 0;
&gt; +        result.length = 0;
&gt; +        result.fileInfo.modificationTime = 0;

Why aren&apos;t the item.offset, item.length, and item.expectedModificationTime used here (even if they are always 0 in this case)?
If we do this, can we move the copying of offset, length, fileInfo.modificationTime to be outside of/before the switch statement?

&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

Better to not have this in the switch statement.
In this case, you can change the &quot;break;&quot; to &quot;return true;&quot; and then put the &quot;ASSERT_NOT_REACHED();&quot; after the switch statement. Then get the benefit of the compiler enum detection for switch statements plus the not reached assert as a runtime check.


&gt; +void WebBlobData::assign(WebBlobDataPrivate* p)
&gt; +{
&gt; +    if (m_private)
&gt; +        delete m_private;
&gt; +    m_private = p;

Is there no equivalent of OwnPtr used in the chromium api layer?  (Why not use OwnPtr? Of course, you&apos;ll need to more the destructor into this file and then you can get rid of this method and lots of things in here become cleaner.)


&gt; diff --git a/WebKit/chromium/src/WebBlobRegistryImpl.cpp b/WebKit/chromium/src/WebBlobRegistryImpl.cpp
&gt; +namespace WebKit {
&gt; +
&gt; +WebBlobRegistry* WebBlobRegistry::instance()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(WebBlobRegistryImpl, instance, ());

Thread safety?

&gt; +    return &amp;instance;

&gt; diff --git a/WebKit/chromium/src/WebBlobRegistryImpl.h b/WebKit/chromium/src/WebBlobRegistryImpl.h

&gt; +    virtual void registerBlobURL(const WebURL&amp; url, const WebURL&amp; srcURL);
|url| param name.

&gt; diff --git a/WebKit/chromium/src/WebBlobStorageData.cpp b/WebKit/chromium/src/WebBlobStorageData.cpp

&gt; +void WebBlobStorageData::initialize()
&gt; +{
&gt; +    assign(static_cast&lt;WebBlobStorageDataPrivate*&gt;(BlobStorageData::create().releaseRef()));

I find this confusing. It looks wrong to me b/c releaseRef will return a PassRefPtr (which will decrement the ref if nothing is done) and it is casted to a *, so the ref count is lost.

I think this should be a leakRef call, but I really believe that m_private should be a RefPtr and assign should go away.


&gt; +bool WebBlobStorageData::itemAt(size_t index, Item&amp; result) const
&gt; +{
&gt; +    ASSERT(!isNull());
&gt; +
&gt; +    if (index &gt;= m_private-&gt;items().size())
&gt; +        return false;
&gt; +
&gt; +    const BlobStorageDataItem&amp; item = m_private-&gt;items()[index];
&gt; +    switch (item.type) {
&gt; +    case BlobStorageDataItem::Data:
&gt; +        result.type = Item::TypeData;
&gt; +        result.data.assign(item.data.data(), static_cast&lt;size_t&gt;(item.data.length()));
&gt; +        result.offset = item.offset;
&gt; +        result.length = item.length;
&gt; +        break;
&gt; +    case BlobStorageDataItem::File:
&gt; +        result.type = Item::TypeFile;
&gt; +        result.path = item.path;
&gt; +        result.offset = item.offset;
&gt; +        result.length = item.length;
&gt; +        result.fileInfo.modificationTime = item.expectedModificationTime;
&gt; +        break;

&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

Same comments as before on similar code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>263995</commentid>
    <comment_count>6</comment_count>
      <attachid>64266</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 14:51:59 -0700</bug_when>
    <thetext>Created attachment 64266
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264000</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-12 14:56:02 -0700</bug_when>
    <thetext>Attachment 64266 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/chromium/src/BlobRegistryProxy.h:31:  #ifndef header guard has wrong style, please use: BlobRegistryProxy_h  [build/header_guard] [5]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264010</commentid>
    <comment_count>8</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 15:00:37 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; There appear to be a lot of places in here that use blob but don&apos;t have #if ENABLE(BLOB) around them (like WebKit/chromium/public/WebBlobRegistry.h or WebKit/chromium/src/WebBlobData.cpp). Does it need to be added?

Other files under WebKit/chromium/public do not use feature guard. So I am following them.

&gt; &gt; +    // Sets the values of the item at the given index.
&gt; 
&gt; &quot;Sets&quot; sounds like it changes the values at that index.
&gt; 
&gt; Perhaps:  &quot;Retrieves the data at the given index.&quot;
&gt; 
&gt; &gt; +    WEBKIT_API bool itemAt(size_t index, Item&amp;) const;
&gt; 
&gt; I like the parameter name &quot;result&quot; here as it tells me that the function is filling that in.
&gt; 
&gt; I also thing the function name should be getItemAt (imo, itemAt would work better if it actually returned the item.)
&gt; 
I still use itemAt, in order to be consistent the similar function name elementAt in WebHTTPBody.h.

&gt; 
&gt; &gt; diff --git a/WebKit/chromium/public/WebBlobRegistry.h b/WebKit/chromium/public/WebBlobRegistry.h
&gt; &gt; +#include &quot;WebBlobStorageData.h&quot;
&gt; &gt; +#include &quot;WebCommon.h&quot;
&gt; 
&gt; Why do these headers need to be included? (It looks like fwd declarations would be good enough.)
&gt; 
I removed the include of WebCommon.h. However, I still need to include WebBlobStorageData.h since WebBlobStorageData is used as the return type in one function.

&gt; &gt; +// We are part of the WebKit implementation.
&gt; &gt; +using namespace WebKit;
&gt; &gt; +
&gt; &gt; +namespace WebCore {
&gt; &gt; +
&gt; &gt; +BlobRegistry&amp; BlobRegistry::instance()
&gt; &gt; +{
&gt; &gt; +    DEFINE_STATIC_LOCAL(BlobRegistryProxy, instance, ());
&gt; 
&gt; Is threadsafety coming in the future?
I added &quot;ASSERT(isMainThread())&quot; here.

&gt; &gt; +class WebBlobDataPrivate : public BlobData {
&gt; &gt; +};
&gt; &gt; +
&gt; &gt; +void WebBlobData::initialize()
&gt; &gt; +{
&gt; &gt; +    assign(static_cast&lt;WebBlobDataPrivate*&gt;(BbloData::create().leakPtr()));
&gt; 
&gt; Make assign take a PassOwnPtr and then avoid calling leakPtr here.
I cannot do this because WebBlobDataPrivate is inherited from BlobData and BbloData::create() returns PassOwnPtr&lt;BlobData&gt; which is not compatible with PassOwnPtr&lt;WebBlobDataPrivate&gt;.


&gt; &gt; +void WebBlobData::assign(WebBlobDataPrivate* p)
&gt; &gt; +{
&gt; &gt; +    if (m_private)
&gt; &gt; +        delete m_private;
&gt; &gt; +    m_private = p;
&gt; 
&gt; Is there no equivalent of OwnPtr used in the chromium api layer?  (Why not use OwnPtr? Of course, you&apos;ll need to more the destructor into this file and then you can get rid of this method and lots of things in here become cleaner.)
We could use OwnPtr. However, I follow the similar thing done in chromium api layer.

&gt; &gt; +WebBlobRegistry* WebBlobRegistry::instance()
&gt; &gt; +{
&gt; &gt; +    DEFINE_STATIC_LOCAL(WebBlobRegistryImpl, instance, ());
&gt; 
&gt; Thread safety?
I added &quot;ASSERT(isMainThread())&quot;.

&gt; &gt; +void WebBlobStorageData::initialize()
&gt; &gt; +{
&gt; &gt; +    assign(static_cast&lt;WebBlobStorageDataPrivate*&gt;(BlobStorageData::create().releaseRef()));
&gt; 
&gt; I find this confusing. It looks wrong to me b/c releaseRef will return a PassRefPtr (which will decrement the ref if nothing is done) and it is casted to a *, so the ref count is lost.
&gt; 
&gt; I think this should be a leakRef call, but I really believe that m_private should be a RefPtr and assign should go away.
I follow the similar thing done in chromium api layer, like in WebHTTPBody.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264013</commentid>
    <comment_count>9</comment_count>
      <attachid>64269</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 15:02:23 -0700</bug_when>
    <thetext>Created attachment 64269
Proposed Patch

Fixed style error.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264046</commentid>
    <comment_count>10</comment_count>
      <attachid>64269</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-12 15:49:09 -0700</bug_when>
    <thetext>Comment on attachment 64269
Proposed Patch

As discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264065</commentid>
    <comment_count>11</comment_count>
      <attachid>64279</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 16:08:33 -0700</bug_when>
    <thetext>Created attachment 64279
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264071</commentid>
    <comment_count>12</comment_count>
      <attachid>64279</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-08-12 16:21:48 -0700</bug_when>
    <thetext>Comment on attachment 64279
Proposed Patch

WebBlobStorageData::assign(const WebBlobStorageData&amp; other) needs the ref fixed as discussed.

This looks good to me (with that minor fix), and I would r+, but we should have Darin look at the WebKit/chromium/public/* files before committing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264079</commentid>
    <comment_count>13</comment_count>
      <attachid>64283</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 16:30:40 -0700</bug_when>
    <thetext>Created attachment 64283
Proposed Patch

Removed public assign method in WebBlobStorageData since it is not needed. This is to address the last comment from David.

Darin, could you please take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264080</commentid>
    <comment_count>14</comment_count>
      <attachid>64284</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-12 16:32:51 -0700</bug_when>
    <thetext>Created attachment 64284
Proposed Patch

Correct patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264462</commentid>
    <comment_count>15</comment_count>
      <attachid>64284</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-13 12:26:20 -0700</bug_when>
    <thetext>Comment on attachment 64284
Proposed Patch

WebCore/html/BlobRegistryImpl.cpp:75
 +  BlobRegistry&amp; BlobRegistry::instance()
I&apos;m surprised to see BlobRegistry::instance().  Convention for WebCore is
to have a global function named like the class.  I would have expected to
see a global WebCore::blobRegistry() function.  In fact, this seems like
it should be part of platform/network as I would imagine we&apos;ll need to
extend platform/network/FormData.h to support a &quot;blob&quot; type.

WebCore/html/BlobRegistryImpl.cpp:@
 +  bool BlobRegistryImpl::loadResourceSynchronously(const ResourceRequest&amp; request,
it seems odd that WebCore/html/ contains the implementation of an
interface defined in WebCore/platform/.  why is it best for
BlobRegistryImpl.cpp to live here instead of in platform/?

WebKit/chromium/public/WebBlobRegistry.h:44
 +      WEBKIT_API static WebBlobRegistry* instance();
We normally just expose a static &quot;create&quot; function and let the
caller use it as a singleton.  see WebStorageNamespace.h and
WebIDBFactory.h for example.

WebKit/chromium/public/WebBlobRegistry.h:48
 +      virtual void registerBlobURL(const WebURL&amp;, WebBlobData&amp;) = 0;
please document this public API.  it is not obvious what this does.

WebKit/chromium/public/WebBlobRegistry.h:51
 +      virtual WebBlobStorageData getBlobDataFromURL(const WebURL&amp;) = 0;
will getBlobDataFromURL require a synchronous IPC?  why do we need this method?
oh, i see... it is only meant to be used from the in-proc-webkit thread in the
browser process.

WebKit/chromium/public/WebBlobStorageData.h:47
 +  class WebBlobStorageData {
the duplication between WebBlobData, WebBlobStorageData and WebHTTPBody
is most unfortunate.  surely there is a way to avoid this duplication?

WebKit/chromium/public/WebKitClient.h:89
 +      // Register a Blob object by its url.
I would have expected a function here that returns a WebBlobRegistry instead
of adding all of the methods of WebBlobRegistry to WebKitClient.  I realize
that means exposing the getBlobDataFromURL function, but we can just not
implement that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>265616</commentid>
    <comment_count>16</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-17 10:10:06 -0700</bug_when>
    <thetext>I will address your first 2 comments in 2 separated patches and then come back to this one.

(In reply to comment #15)
&gt; (From update of attachment 64284 [details])
&gt; WebCore/html/BlobRegistryImpl.cpp:75
&gt;  +  BlobRegistry&amp; BlobRegistry::instance()
&gt; I&apos;m surprised to see BlobRegistry::instance().  Convention for WebCore is
&gt; to have a global function named like the class.  I would have expected to
&gt; see a global WebCore::blobRegistry() function.  In fact, this seems like
&gt; it should be part of platform/network as I would imagine we&apos;ll need to
&gt; extend platform/network/FormData.h to support a &quot;blob&quot; type.
&gt; 
&gt; WebCore/html/BlobRegistryImpl.cpp:@
&gt;  +  bool BlobRegistryImpl::loadResourceSynchronously(const ResourceRequest&amp; request,
&gt; it seems odd that WebCore/html/ contains the implementation of an
&gt; interface defined in WebCore/platform/.  why is it best for
&gt; BlobRegistryImpl.cpp to live here instead of in platform/?
&gt; 
&gt; WebKit/chromium/public/WebBlobRegistry.h:44
&gt;  +      WEBKIT_API static WebBlobRegistry* instance();
&gt; We normally just expose a static &quot;create&quot; function and let the
&gt; caller use it as a singleton.  see WebStorageNamespace.h and
&gt; WebIDBFactory.h for example.
&gt; 
&gt; WebKit/chromium/public/WebBlobRegistry.h:48
&gt;  +      virtual void registerBlobURL(const WebURL&amp;, WebBlobData&amp;) = 0;
&gt; please document this public API.  it is not obvious what this does.
&gt; 
&gt; WebKit/chromium/public/WebBlobRegistry.h:51
&gt;  +      virtual WebBlobStorageData getBlobDataFromURL(const WebURL&amp;) = 0;
&gt; will getBlobDataFromURL require a synchronous IPC?  why do we need this method?
&gt; oh, i see... it is only meant to be used from the in-proc-webkit thread in the
&gt; browser process.
&gt; 
&gt; WebKit/chromium/public/WebBlobStorageData.h:47
&gt;  +  class WebBlobStorageData {
&gt; the duplication between WebBlobData, WebBlobStorageData and WebHTTPBody
&gt; is most unfortunate.  surely there is a way to avoid this duplication?
&gt; 
&gt; WebKit/chromium/public/WebKitClient.h:89
&gt;  +      // Register a Blob object by its url.
&gt; I would have expected a function here that returns a WebBlobRegistry instead
&gt; of adding all of the methods of WebBlobRegistry to WebKitClient.  I realize
&gt; that means exposing the getBlobDataFromURL function, but we can just not
&gt; implement that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266341</commentid>
    <comment_count>17</comment_count>
      <attachid>64761</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-18 13:33:02 -0700</bug_when>
    <thetext>Created attachment 64761
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266346</commentid>
    <comment_count>18</comment_count>
      <attachid>64763</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-18 13:38:20 -0700</bug_when>
    <thetext>Created attachment 64763
Proposed Patch

Updated 2 files that&apos;re not updated correctly last time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266382</commentid>
    <comment_count>19</comment_count>
      <attachid>64774</attachid>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-18 14:36:30 -0700</bug_when>
    <thetext>Created attachment 64774
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266408</commentid>
    <comment_count>20</comment_count>
      <attachid>64774</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-08-18 15:03:35 -0700</bug_when>
    <thetext>Comment on attachment 64774
Proposed Patch

WebKit/chromium/public/WebBlobStorageData.h:49
 +      struct Item {
how about reusing WebBlobData::Item here?  either with a using
directive or just by typing WebBlobData::Item in place of Item.

WebKit/chromium/public/WebKitClient.h:95
 +      virtual WebBlobRegistry* blobRegistry() { return 0; }
please add a comment indicating if it is OK for a client to return null.
this impacts whether or not the webkit code should null test blobRegistry
before calling methods on it.

WebKit/chromium/public/WebBlobData.h:55
 +          WebFileInfo fileInfo;
i&apos;m concerned that we will need to add more things to WebFileInfo
in the future to support WebFileSystem::getMetadata.  you may only
want to have a timestamp here.

R=me otherwise</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266417</commentid>
    <comment_count>21</comment_count>
    <who name="Kinuko Yasuda">kinuko</who>
    <bug_when>2010-08-18 15:15:51 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 64774 [details])
&gt; WebKit/chromium/public/WebBlobStorageData.h:49
&gt;  +      struct Item {
&gt; how about reusing WebBlobData::Item here?  either with a using
&gt; directive or just by typing WebBlobData::Item in place of Item.
&gt; 
&gt; WebKit/chromium/public/WebKitClient.h:95
&gt;  +      virtual WebBlobRegistry* blobRegistry() { return 0; }
&gt; please add a comment indicating if it is OK for a client to return null.
&gt; this impacts whether or not the webkit code should null test blobRegistry
&gt; before calling methods on it.
&gt; 
&gt; WebKit/chromium/public/WebBlobData.h:55
&gt;  +          WebFileInfo fileInfo;
&gt; i&apos;m concerned that we will need to add more things to WebFileInfo
&gt; in the future to support WebFileSystem::getMetadata.  you may only
&gt; want to have a timestamp here.

Should I define a new WebFileMetadata class that just inherits WebFileInfo for now?

&gt; R=me otherwise</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266432</commentid>
    <comment_count>22</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-08-18 15:49:56 -0700</bug_when>
    <thetext>Committed as http://trac.webkit.org/changeset/65637.

All issues fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266441</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-18 16:19:01 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65637 might have broken Chromium Mac Release
The following changes are on the blame list:
http://trac.webkit.org/changeset/65635
http://trac.webkit.org/changeset/65636
http://trac.webkit.org/changeset/65637</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64154</attachid>
            <date>2010-08-11 13:22:28 -0700</date>
            <delta_ts>2010-08-11 13:30:46 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871</filename>
            <type>text/plain</type>
            <size>35385</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjMwZWViMC4uMGYwYWFhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wOC0xMSAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
QmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpIHNvIHRoYXQgd2Ugd2lsbAorICAgICAgICB1c2UgdGhl
IGltcGxlbWVudGF0aW9uIGluIFdlYktpdCBDaHJvbWl1bS4KKworICAgICAgICAqIGh0bWwvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisKIDIwMTAtMDgtMTEgIEtldmluIE9sbGl2aWVyICA8a2V2aW5v
QHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4LCBXZWJET01dIEJ1aWxkIGZpeC4gRml4
IGNhbGxiYWNrIHBhcmFtcyBhbmQgV2ViQ29yZTo6U3RyaW5nIC0+IFdURjo6U3RyaW5nIGZpeGVz
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvV2ViQ29y
ZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDc0ZTUxNzUuLjU0MmI0YzAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTcxLDExICs3MSwxMyBAQCBib29sIEJsb2JSZWdp
c3RyeUltcGw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmICFQTEFURk9STShDSFJPTUlV
TSkKIEJsb2JSZWdpc3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCiB7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJbXBsLCBpbnN0YW5jZSwgKCkpOwogICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KKyNlbmRpZgogCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OmFwcGVuZFN0
b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdlRGF0YSwgY29uc3QgQmxvYlN0
b3JhZ2VEYXRhSXRlbUxpc3QmIGl0ZW1zKQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTRhY2M1NS4uOTQw
MGE2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMTEgIEppYW4gTGkg
IDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBv
ZiBibG9iIGRhdGEgYW5kIGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg3MQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAg
ICAgICAgKiBwdWJsaWMvV2ViQmxvYkRhdGEuaDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dl
YkJsb2JSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYlN0b3JhZ2VE
YXRhLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJLaXRDbGllbnQuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViS2l0Q2xpZW50OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJLaXRDbGllbnQ6OnVucmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKiBzcmMvQmxvYlJl
Z2lzdHJ5UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvQmxvYlJlZ2lzdHJ5UHJveHku
aDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JEYXRhLmNwcDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
QmxvYlJlZ2lzdHJ5SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViQmxvYlN0b3JhZ2VE
YXRhLmNwcDogQWRkZWQuCisKIDIwMTAtMDgtMTEgIEphbWVzIEhhd2tpbnMgIDxqaGF3a2luc0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRG1pdHJ5IFRpdG92LgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCAxMjNhZWQ1Li43ZjYyNGU4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYgKzEx
OSw5IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENs
aWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQmxvYkRhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVnaXN0
cnkuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkNhbnZhcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2FyZC5o
JywKQEAgLTI4NCw2ICsyODcsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQb3B1
cE1lbnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGll
bnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJ
bXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywKKyAg
ICAgICAgICAgICAgICAnc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvQm91bmRPYmplY3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2JqZWN0
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAtMzcx
LDYgKzM3NiwxMCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJCbG9iRGF0YS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9yLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYkRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Uw
YzBiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0
YS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJCbG9iRGF0YV9oCisjZGVmaW5lIFdlYkJs
b2JEYXRhX2gKKworI2luY2x1ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5o
IgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCitu
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25QdHI7IH0KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGFQcml2YXRlOworCitjbGFzcyBXZWJCbG9i
RGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlwZURh
dGEsIFR5cGVGaWxlLCBUeXBlQmxvYiB9IHR5cGU7CisgICAgICAgIFdlYkRhdGEgZGF0YTsKKyAg
ICAgICAgV2ViU3RyaW5nIHBhdGhPclVSTDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAg
ICAgICAgbG9uZyBsb25nIGxlbmd0aDsgLy8gLTEgbWVhbnMgdG8gdGhlIGVuZCBvZiB0aGUgZmls
ZS9ibG9iLgorICAgICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldl
YkJsb2JEYXRhKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJCbG9iRGF0YSgpIDogbV9wcml2YXRl
KDApIHsgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBXRUJLSVRf
QVBJIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkJs
b2JEYXRhJik7CisKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7
IH0KKworICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcy4KKyAgICBXRUJLSVRfQVBJ
IHNpemVfdCBpdGVtQ291bnQoKSBjb25zdDsKKworICAgIC8vIFNldHMgdGhlIHZhbHVlcyBvZiB0
aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXguICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gaW5k
ZXggaXMgb3V0IG9mIGJvdW5kcy4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBp
bmRleCwgSXRlbSYpIGNvbnN0OworCisgICAgLy8gQXBwZW5kcyB0byB0aGUgbGlzdCBvZiBpdGVt
cy4KKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRGF0YShjb25zdCBXZWJEYXRhJik7CisgICAg
V0VCS0lUX0FQSSB2b2lkIGFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCk7Cisg
ICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwg
bG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCwgY29uc3QgV2ViRmlsZUluZm8mKTsK
KyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kQmxvYihjb25zdCBXZWJTdHJpbmcmIGJsb2JVUkws
IGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgV0VCS0lUX0FQSSBX
ZWJTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0Q29u
dGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJik7CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBj
b250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0Q29udGVu
dERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCisgICAgV2ViQmxvYkRhdGEoY29uc3QgV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JE
YXRhPiYpOworICAgIFdlYkJsb2JEYXRhJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzT3duUHRy
PFdlYkNvcmU6OkJsb2JEYXRhPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc093blB0cjxXZWJD
b3JlOjpCbG9iRGF0YT4oKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdl
YkJsb2JEYXRhUHJpdmF0ZSopOworICAgIFdlYkJsb2JEYXRhUHJpdmF0ZSogbV9wcml2YXRlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iRGF0YV9oCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5jOWJjMjMxCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
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
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJC
bG9iUmVnaXN0cnlfaAorI2RlZmluZSBXZWJCbG9iUmVnaXN0cnlfaAorCisjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCisjaW5jbHVkZSAiV2ViQmxvYlN0b3JhZ2VEYXRhLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJCbG9iRGF0YTsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdl
YlVSTDsKKworY2xhc3MgV2ViQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBXRUJLSVRfQVBJ
IHN0YXRpYyBXZWJCbG9iUmVnaXN0cnkqIGluc3RhbmNlKCk7CisKKyAgICB2aXJ0dWFsIH5XZWJC
bG9iUmVnaXN0cnkoKSB7IH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGUgb3duZXJzaGlwIG9mIHRo
ZSBXZWJCbG9iRGF0YSBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgV2ViQmxvYkRhdGEmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2Vi
VVJMJiBzcmNVUkwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViVVJMJikgPSAwOworICAgIHZpcnR1YWwgV2ViQmxvYlN0b3JhZ2VEYXRhIGdldEJsb2JE
YXRhRnJvbVVSTChjb25zdCBXZWJVUkwmKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFdlYkJsb2JSZWdpc3RyeV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJCbG9iU3RvcmFnZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mYzkxOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJC
bG9iU3RvcmFnZURhdGEuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJCbG9iU3RvcmFnZURh
dGFfaAorI2RlZmluZSBXZWJCbG9iU3RvcmFnZURhdGFfaAorCisjaW5jbHVkZSAiV2ViRGF0YS5o
IgorI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQmxvYlN0
b3JhZ2VEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz
IFBhc3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
QmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZTsKKworY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhIHsKK3B1
YmxpYzoKKyAgICBzdHJ1Y3QgSXRlbSB7CisgICAgICAgIGVudW0geyBUeXBlRGF0YSwgVHlwZUZp
bGUgfSB0eXBlOworICAgICAgICBXZWJEYXRhIGRhdGE7CisgICAgICAgIFdlYlN0cmluZyBwYXRo
OworICAgICAgICBsb25nIGxvbmcgb2Zmc2V0OworICAgICAgICBsb25nIGxvbmcgbGVuZ3RoOyAv
LyAtMSBtZWFucyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlL2Jsb2IuCisgICAgICAgIFdlYkZpbGVJ
bmZvIGZpbGVJbmZvOworICAgIH07CisKKyAgICB+V2ViQmxvYlN0b3JhZ2VEYXRhKCkgeyByZXNl
dCgpOyB9CisKKyAgICBXZWJCbG9iU3RvcmFnZURhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKyAg
ICBXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgV2ViQmxvYlN0b3JhZ2VEYXRhJiBiKSA6IG1fcHJp
dmF0ZSgwKSB7IGFzc2lnbihiKTsgfQorICAgIFdlYkJsb2JTdG9yYWdlRGF0YSYgb3BlcmF0b3I9
KGNvbnN0IFdlYkJsb2JTdG9yYWdlRGF0YSYgYikKKyAgICB7CisgICAgICAgIGFzc2lnbihiKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCBpbml0
aWFsaXplKCk7CisgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0FQSSB2
b2lkIGFzc2lnbihjb25zdCBXZWJCbG9iU3RvcmFnZURhdGEmKTsKKworICAgIGJvb2wgaXNOdWxs
KCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVt
YmVyIG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0Owor
CisgICAgLy8gU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBpbmRleC4g
IFJldHVybnMgZmFsc2UgaWYKKyAgICAvLyBpbmRleCBpcyBvdXQgb2YgYm91bmRzLgorICAgIFdF
QktJVF9BUEkgYm9vbCBpdGVtQXQoc2l6ZV90IGluZGV4LCBJdGVtJikgY29uc3Q7CisKKyAgICBX
RUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkg
V2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+Jik7CisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhJiBvcGVy
YXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsK
KyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPigp
IGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oV2ViQmxvYlN0b3Jh
Z2VEYXRhUHJpdmF0ZSopOworICAgIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqIG1fcHJpdmF0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQmxvYlN0b3Jh
Z2VEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50
LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCmluZGV4IDU5NTlhMWMu
LmYwNzcwYmMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaApAQCAtNDcsNiAr
NDcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhv
c3Q7CiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKK2NsYXNzIFdlYkJsb2JE
YXRhOwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29va2llSmFyOwogY2xhc3MgV2Vi
RmlsZVN5c3RlbTsKQEAgLTgzLDYgKzg0LDE1IEBAIHB1YmxpYzoKICAgICAvLyBNYXkgcmV0dXJu
IG51bGwuCiAgICAgdmlydHVhbCBXZWJDb29raWVKYXIqIGNvb2tpZUphcigpIHsgcmV0dXJuIDA7
IH0KIAorICAgIC8vIEJsb2IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gUmVnaXN0ZXIgYSBCbG9iIG9iamVj
dCBieSBpdHMgdXJsLgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2Vi
VVJMJiwgY29uc3QgV2ViQmxvYkRhdGEmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBXZWJVUkwmIHNyY1VSTCkgeyB9CisKKyAg
ICAvLyBVbnJlZ2lzdGVyIGEgQmxvYiBvYmplY3QgYnkgaXRzIHVybC4KKyAgICB2aXJ0dWFsIHZv
aWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJikgeyB9CisKICAgICAvLyBET00gU3Rv
cmFnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiAgICAgLy8gUmV0dXJuIGEgTG9jYWxTdG9yYWdlIG5hbWVzcGFjZSB0aGF0IGNvcnJlc3BvbmRz
IHRvIHRoZSBmb2xsb3dpbmcgcGF0aC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
QmxvYlJlZ2lzdHJ5UHJveHkuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQ
cm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2ZDE2MgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3Bw
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQkxPQikK
KworI2luY2x1ZGUgIkJsb2JSZWdpc3RyeVByb3h5LmgiCisKKyNpbmNsdWRlICJXZWJCbG9iRGF0
YS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYlVSTC5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJLVVJM
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisKKy8vIFdlIGFyZSBwYXJ0IG9mIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24uCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Jsb2JSZWdp
c3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChCbG9iUmVnaXN0cnlQcm94eSwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7
Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJM
JiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQoreworICAgIFdlYkJsb2JEYXRh
IHdlYkJsb2JEYXRhKGJsb2JEYXRhKTsKKyAgICB3ZWJLaXRDbGllbnQoKS0+cmVnaXN0ZXJCbG9i
VVJMKHVybCwgd2ViQmxvYkRhdGEpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdp
c3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQg
QmxvYlJlZ2lzdHJ5UHJveHk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICB3ZWJLaXRDbGllbnQoKS0+dW5yZWdpc3RlckJsb2JVUkwodXJsKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvQmxvYlJlZ2lzdHJ5UHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5
UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjE4Y2IwCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeV9oCisjZGVmaW5lIFdlYkJsb2JS
ZWdpc3RyeV9oCisKKyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJsb2JSZWdpc3RyeVByb3h5IDogcHVi
bGljIEJsb2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxv
YlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJik7CisKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KikgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgYm9vbCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNo
YXI+JiBkYXRhKSB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgfkJs
b2JSZWdpc3RyeVByb3h5KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2VuZGlmIC8vIFdlYkJsb2JSZWdpc3RyeV9oCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JEYXRhLmNwcCBiL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmVmYmJkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJs
b2JEYXRhLmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
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
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJCbG9iRGF0YS5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKwordXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCbG9iRGF0YVBy
aXZhdGUgOiBwdWJsaWMgQmxvYkRhdGEgeworfTsKKwordm9pZCBXZWJCbG9iRGF0YTo6aW5pdGlh
bGl6ZSgpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkJsb2JEYXRhUHJpdmF0ZSo+KEJs
b2JEYXRhOjpjcmVhdGUoKS5sZWFrUHRyKCkpKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6cmVz
ZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKworc2l6ZV90IFdlYkJsb2JEYXRhOjppdGVtQ291
bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZh
dGUtPml0ZW1zKCkuc2l6ZSgpOworfQorCitib29sIFdlYkJsb2JEYXRhOjppdGVtQXQoc2l6ZV90
IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisK
KyAgICBpZiAoaW5kZXggPj0gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9wcml2YXRlLT5p
dGVtcygpW2luZGV4XTsKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2UgQmxvYkRh
dGFJdGVtOjpEYXRhOgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVEYXRhOworICAg
ICAgICByZXN1bHQuZGF0YS5hc3NpZ24oaXRlbS5kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6
ZV90PihpdGVtLmRhdGEubGVuZ3RoKCkpKTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVSTC5yZXNl
dCgpOworICAgICAgICByZXN1bHQub2Zmc2V0ID0gMDsKKyAgICAgICAgcmVzdWx0Lmxlbmd0aCA9
IDA7CisgICAgICAgIHJlc3VsdC5maWxlSW5mby5tb2RpZmljYXRpb25UaW1lID0gMDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6CisgICAgICAgIHJlc3VsdC50
eXBlID0gSXRlbTo6VHlwZUZpbGU7CisgICAgICAgIHJlc3VsdC5kYXRhLnJlc2V0KCk7CisgICAg
ICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBpdGVtLnBhdGg7CisgICAgICAgIHJlc3VsdC5vZmZzZXQg
PSBpdGVtLm9mZnNldDsKKyAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IGl0ZW0ubGVuZ3RoOworICAg
ICAgICByZXN1bHQuZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSA9IGl0ZW0uZXhwZWN0ZWRNb2Rp
ZmljYXRpb25UaW1lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6Qmxv
YjoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlQmxvYjsKKyAgICAgICAgcmVzdWx0
LmRhdGEucmVzZXQoKTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVSTCA9IGl0ZW0udXJsOworICAg
ICAgICByZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7CisgICAgICAgIHJlc3VsdC5sZW5ndGgg
PSBpdGVtLmxlbmd0aDsKKyAgICAgICAgcmVzdWx0LmZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUg
PSAwOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6
OmFwcGVuZERhdGEoY29uc3QgV2ViRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZERhdGEoQ1N0cmluZyhkYXRhLmRhdGEoKSwgZGF0YS5z
aXplKCkpKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJp
bmcmIGZpbGVQYXRoKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+
YXBwZW5kRmlsZShmaWxlUGF0aCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVuZEZpbGUo
Y29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxl
bmd0aCwgY29uc3QgV2ViRmlsZUluZm8mIGZpbGVJbmZvKQoreworICAgIEFTU0VSVCghaXNOdWxs
KCkpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCwgb2Zmc2V0LCBsZW5ndGgs
IGZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjphcHBl
bmRCbG9iKGNvbnN0IFdlYlN0cmluZyYgYmxvYlVSTCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBs
b25nIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPmFw
cGVuZEJsb2IoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGJsb2JVUkwpLCBvZmZzZXQsIGxlbmd0aCk7
Cit9CisKK1dlYlN0cmluZyBXZWJCbG9iRGF0YTo6Y29udGVudFR5cGUoKSBjb25zdAoreworICAg
IEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRUeXBlKCk7
Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OnNldENvbnRlbnRUeXBlKGNvbnN0IFdlYlN0cmluZyYg
Y29udGVudFR5cGUpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5z
ZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7Cit9CisKK1dlYlN0cmluZyBXZWJCbG9iRGF0YTo6
Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRpb24oKTsKK30KKwordm9pZCBXZWJC
bG9iRGF0YTo6c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgY29udGVudERp
c3Bvc2l0aW9uKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+c2V0
Q29udGVudERpc3Bvc2l0aW9uKGNvbnRlbnREaXNwb3NpdGlvbik7Cit9CisKK1dlYkJsb2JEYXRh
OjpXZWJCbG9iRGF0YShjb25zdCBQYXNzT3duUHRyPEJsb2JEYXRhPiYgZGF0YSkKKyAgICA6IG1f
cHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJCbG9iRGF0YVByaXZhdGUqPihkYXRhLmxlYWtQdHIoKSkp
Cit7Cit9CisKK1dlYkJsb2JEYXRhJiBXZWJCbG9iRGF0YTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NP
d25QdHI8QmxvYkRhdGE+JiBkYXRhKQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJCbG9i
RGF0YVByaXZhdGUqPihkYXRhLmxlYWtQdHIoKSkpOworICAgIHJldHVybiAqdGhpczsKK30KKwor
V2ViQmxvYkRhdGE6Om9wZXJhdG9yIFBhc3NPd25QdHI8QmxvYkRhdGE+KCkKK3sKKyAgICBXZWJC
bG9iRGF0YVByaXZhdGUqIHRlbXAgPSBtX3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0gMDsKKyAg
ICByZXR1cm4gYWRvcHRQdHIodGVtcCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFzc2lnbihX
ZWJCbG9iRGF0YVByaXZhdGUqIHApCit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgZGVs
ZXRlIG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDE5ODMKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC0wLDAgKzEs
ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
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
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5SW1wbC5o
IgorCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5SW1wbC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJy
b3IuaCIKKyNpbmNsdWRlICJXZWJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorCisj
aWYgRU5BQkxFKEJMT0IpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJCbG9iUmVnaXN0cnkq
IFdlYkJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
V2ViQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gJmluc3RhbmNl
OworfQorCitXZWJCbG9iUmVnaXN0cnlJbXBsOjpXZWJCbG9iUmVnaXN0cnlJbXBsKCkKKyAgICA6
IG1fYmxvYlJlZ2lzdHJ5KG5ldyBXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsKCkpCit7Cit9CisK
K1dlYkJsb2JSZWdpc3RyeUltcGw6On5XZWJCbG9iUmVnaXN0cnlJbXBsKCkKK3sKK30KKwordm9p
ZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiB1cmws
IFdlYkJsb2JEYXRhJiBibG9iRGF0YSkKK3sKKyAgICBtX2Jsb2JSZWdpc3RyeS0+cmVnaXN0ZXJC
bG9iVVJMKHVybCwgYmxvYkRhdGEpOworfQorCit2b2lkIFdlYkJsb2JSZWdpc3RyeUltcGw6OnJl
Z2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViVVJMJiBzcmNVUkwpCit7
CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7Cit9CisK
K3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJM
JiB1cmwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7Cit9
CisKK1dlYkJsb2JTdG9yYWdlRGF0YSBXZWJCbG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZy
b21VUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIG1fYmxvYlJlZ2lzdHJ5LT5n
ZXRCbG9iRGF0YUZyb21VUkwodXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
QmxvYlJlZ2lzdHJ5SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJ
bXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzYzQ0NAotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeUltcGxfaAorI2RlZmluZSBXZWJC
bG9iUmVnaXN0cnlJbXBsX2gKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiV2ViQmxv
YlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7IGNsYXNzIEJsb2JSZWdpc3RyeUltcGw7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYkJsb2JSZWdpc3RyeUltcGwgOiBwdWJsaWMgV2ViQmxvYlJlZ2lzdHJ5IHsKK3B1Ymxp
YzoKKyAgICBXZWJCbG9iUmVnaXN0cnlJbXBsKCk7CisgICAgdmlydHVhbCB+V2ViQmxvYlJlZ2lz
dHJ5SW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJV
UkwmLCBXZWJCbG9iRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlVSTCYgc3JjVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQg
dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJik7CisgICAgdmlydHVhbCBXZWJCbG9iU3Rv
cmFnZURhdGEgZ2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IFdlYlVSTCYpOworCitwcml2YXRlOgor
ICAgIFdURjo6T3duUHRyPFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw+IG1fYmxvYlJlZ2lzdHJ5
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikK
KworI2VuZGlmIC8vIFdlYkJsb2JSZWdpc3RyeUltcGxfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJCbG9iU3RvcmFnZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmI5NjIwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JT
dG9yYWdlRGF0YS5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViQmxvYlN0b3JhZ2VEYXRhLmgiCisKKyNpbmNsdWRlICJCbG9iU3RvcmFnZURhdGEu
aCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitj
bGFzcyBXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlIDogcHVibGljIEJsb2JTdG9yYWdlRGF0YSB7
Cit9OworCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0YTo6aW5pdGlhbGl6ZSgpCit7CisgICAgYXNz
aWduKHN0YXRpY19jYXN0PFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqPihCbG9iU3RvcmFnZURh
dGE6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKSkpOworfQorCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0
YTo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJCbG9iU3RvcmFnZURh
dGE6OmFzc2lnbihjb25zdCBXZWJCbG9iU3RvcmFnZURhdGEmIG90aGVyKQoreworICAgIFdlYkJs
b2JTdG9yYWdlRGF0YVByaXZhdGUqIHAgPSBjb25zdF9jYXN0PFdlYkJsb2JTdG9yYWdlRGF0YVBy
aXZhdGUqPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5yZWYoKTsK
KyAgICBhc3NpZ24ocCk7Cit9CisKK3NpemVfdCBXZWJCbG9iU3RvcmFnZURhdGE6Oml0ZW1Db3Vu
dCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+aXRlbXMoKS5zaXplKCk7Cit9CisKK2Jvb2wgV2ViQmxvYlN0b3JhZ2VEYXRhOjppdGVtQXQo
c2l6ZV90IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwo
KSk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQmxvYlN0b3JhZ2VEYXRhSXRlbSYgaXRlbSA9
IG1fcHJpdmF0ZS0+aXRlbXMoKVtpbmRleF07CisgICAgc3dpdGNoIChpdGVtLnR5cGUpIHsKKyAg
ICBjYXNlIEJsb2JTdG9yYWdlRGF0YUl0ZW06OkRhdGE6CisgICAgICAgIHJlc3VsdC50eXBlID0g
SXRlbTo6VHlwZURhdGE7CisgICAgICAgIHJlc3VsdC5kYXRhLmFzc2lnbihpdGVtLmRhdGEuZGF0
YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0YS5sZW5ndGgoKSkpOworICAgICAgICBy
ZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7CisgICAgICAgIHJlc3VsdC5sZW5ndGggPSBpdGVt
Lmxlbmd0aDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbG9iU3RvcmFnZURhdGFJdGVtOjpG
aWxlOgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVGaWxlOworICAgICAgICByZXN1
bHQucGF0aCA9IGl0ZW0ucGF0aDsKKyAgICAgICAgcmVzdWx0Lm9mZnNldCA9IGl0ZW0ub2Zmc2V0
OworICAgICAgICByZXN1bHQubGVuZ3RoID0gaXRlbS5sZW5ndGg7CisgICAgICAgIHJlc3VsdC5m
aWxlSW5mby5tb2RpZmljYXRpb25UaW1lID0gaXRlbS5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWU7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JTdG9y
YWdlRGF0YTo6Y29udGVudFR5cGUoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRUeXBlKCk7Cit9CisKK1dlYlN0cmluZyBXZWJC
bG9iU3RvcmFnZURhdGE6OmNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudERpc3Bvc2l0aW9uKCk7
Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YTo6V2ViQmxvYlN0b3JhZ2VEYXRhKGNvbnN0IFBhc3NS
ZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKKyAgICA6IG1fcHJpdmF0ZShzdGF0aWNfY2Fz
dDxXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlKj4oZGF0YS5yZWxlYXNlUmVmKCkpKQoreworfQor
CitXZWJCbG9iU3RvcmFnZURhdGEmIFdlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3I9KGNvbnN0
IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKK3sKKyAgICBhc3NpZ24oc3RhdGlj
X2Nhc3Q8V2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSo+KGRhdGEucmVsZWFzZVJlZigpKSk7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitXZWJCbG9iU3RvcmFnZURhdGE6Om9wZXJhdG9yIFBhc3NS
ZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZTsK
K30KKwordm9pZCBXZWJCbG9iU3RvcmFnZURhdGE6OmFzc2lnbihXZWJCbG9iU3RvcmFnZURhdGFQ
cml2YXRlKiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkgdGhlIGNh
bGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYoKTsKKyAg
ICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="commit-queue"
          id="52652"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64156</attachid>
            <date>2010-08-11 13:30:46 -0700</date>
            <delta_ts>2010-08-12 14:51:59 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_2</filename>
            <type>text/plain</type>
            <size>35391</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjMwZWViMC4uMGYwYWFhNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wOC0xMSAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
QmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpIHNvIHRoYXQgd2Ugd2lsbAorICAgICAgICB1c2UgdGhl
IGltcGxlbWVudGF0aW9uIGluIFdlYktpdCBDaHJvbWl1bS4KKworICAgICAgICAqIGh0bWwvQmxv
YlJlZ2lzdHJ5SW1wbC5jcHA6CisKIDIwMTAtMDgtMTEgIEtldmluIE9sbGl2aWVyICA8a2V2aW5v
QHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4LCBXZWJET01dIEJ1aWxkIGZpeC4gRml4
IGNhbGxiYWNrIHBhcmFtcyBhbmQgV2ViQ29yZTo6U3RyaW5nIC0+IFdURjo6U3RyaW5nIGZpeGVz
LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwIGIvV2ViQ29y
ZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDc0ZTUxNzUuLjU0MmI0YzAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTcxLDExICs3MSwxMyBAQCBib29sIEJsb2JSZWdp
c3RyeUltcGw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmICFQTEFURk9STShDSFJPTUlV
TSkKIEJsb2JSZWdpc3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCiB7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJbXBsLCBpbnN0YW5jZSwgKCkpOwogICAgIHJldHVy
biBpbnN0YW5jZTsKIH0KKyNlbmRpZgogCiB2b2lkIEJsb2JSZWdpc3RyeUltcGw6OmFwcGVuZFN0
b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdlRGF0YSwgY29uc3QgQmxvYlN0
b3JhZ2VEYXRhSXRlbUxpc3QmIGl0ZW1zKQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggOTRhY2M1NS4uOTQw
MGE2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgtMTEgIEppYW4gTGkg
IDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBv
ZiBibG9iIGRhdGEgYW5kIGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg3MQorCisgICAgICAgICogV2ViS2l0Lmd5cDoKKyAg
ICAgICAgKiBwdWJsaWMvV2ViQmxvYkRhdGEuaDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dl
YkJsb2JSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYlN0b3JhZ2VE
YXRhLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJLaXRDbGllbnQuaDoKKyAgICAgICAg
KFdlYktpdDo6V2ViS2l0Q2xpZW50OjpyZWdpc3RlckJsb2JVUkwpOgorICAgICAgICAoV2ViS2l0
OjpXZWJLaXRDbGllbnQ6OnVucmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKiBzcmMvQmxvYlJl
Z2lzdHJ5UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvQmxvYlJlZ2lzdHJ5UHJveHku
aDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JEYXRhLmNwcDogQWRkZWQuCisgICAgICAg
ICogc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
QmxvYlJlZ2lzdHJ5SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2ViQmxvYlN0b3JhZ2VE
YXRhLmNwcDogQWRkZWQuCisKIDIwMTAtMDgtMTEgIEphbWVzIEhhd2tpbnMgIDxqaGF3a2luc0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRG1pdHJ5IFRpdG92LgpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAppbmRleCAxMjNhZWQ1Li43ZjYyNGU4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYgKzEx
OSw5IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENs
aWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdwdWJs
aWMvV2ViQmxvYkRhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVnaXN0
cnkuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcsCiAg
ICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL1dlYkNhbnZhcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2FyZC5o
JywKQEAgLTI4NCw2ICsyODcsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQb3B1
cE1lbnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGll
bnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJ
bXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywKKyAg
ICAgICAgICAgICAgICAnc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvQm91bmRPYmplY3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2JqZWN0
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAtMzcx
LDYgKzM3NiwxMCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJCbG9iRGF0YS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywKKyAg
ICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9yLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYkRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Uw
YzBiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0
YS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJCbG9iRGF0YV9oCisjZGVmaW5lIFdlYkJs
b2JEYXRhX2gKKworI2luY2x1ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5o
IgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCitu
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25QdHI7IH0KKyNlbmRpZgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGFQcml2YXRlOworCitjbGFzcyBXZWJCbG9i
RGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlwZURh
dGEsIFR5cGVGaWxlLCBUeXBlQmxvYiB9IHR5cGU7CisgICAgICAgIFdlYkRhdGEgZGF0YTsKKyAg
ICAgICAgV2ViU3RyaW5nIHBhdGhPclVSTDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAg
ICAgICAgbG9uZyBsb25nIGxlbmd0aDsgLy8gLTEgbWVhbnMgdG8gdGhlIGVuZCBvZiB0aGUgZmls
ZS9ibG9iLgorICAgICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldl
YkJsb2JEYXRhKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJCbG9iRGF0YSgpIDogbV9wcml2YXRl
KDApIHsgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBXRUJLSVRf
QVBJIHZvaWQgcmVzZXQoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXNzaWduKGNvbnN0IFdlYkJs
b2JEYXRhJik7CisKKyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7
IH0KKworICAgIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcy4KKyAgICBXRUJLSVRfQVBJ
IHNpemVfdCBpdGVtQ291bnQoKSBjb25zdDsKKworICAgIC8vIFNldHMgdGhlIHZhbHVlcyBvZiB0
aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXguICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gaW5k
ZXggaXMgb3V0IG9mIGJvdW5kcy4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBp
bmRleCwgSXRlbSYpIGNvbnN0OworCisgICAgLy8gQXBwZW5kcyB0byB0aGUgbGlzdCBvZiBpdGVt
cy4KKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRGF0YShjb25zdCBXZWJEYXRhJik7CisgICAg
V0VCS0lUX0FQSSB2b2lkIGFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCk7Cisg
ICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwg
bG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCwgY29uc3QgV2ViRmlsZUluZm8mKTsK
KyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kQmxvYihjb25zdCBXZWJTdHJpbmcmIGJsb2JVUkws
IGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpOworCisgICAgV0VCS0lUX0FQSSBX
ZWJTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0Q29u
dGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJik7CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBj
b250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIHZvaWQgc2V0Q29udGVu
dERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCisgICAgV2ViQmxvYkRhdGEoY29uc3QgV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JE
YXRhPiYpOworICAgIFdlYkJsb2JEYXRhJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzT3duUHRy
PFdlYkNvcmU6OkJsb2JEYXRhPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc093blB0cjxXZWJD
b3JlOjpCbG9iRGF0YT4oKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIHZvaWQgYXNzaWduKFdl
YkJsb2JEYXRhUHJpdmF0ZSopOworICAgIFdlYkJsb2JEYXRhUHJpdmF0ZSogbV9wcml2YXRlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iRGF0YV9oCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5mOWY1ZWE1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
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
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJC
bG9iUmVnaXN0cnlfaAorI2RlZmluZSBXZWJCbG9iUmVnaXN0cnlfaAorCisjaW5jbHVkZSAiV2Vi
QmxvYlN0b3JhZ2VEYXRhLmgiCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJCbG9iRGF0YTsKK2NsYXNzIFdlYlN0cmluZzsKK2NsYXNzIFdl
YlVSTDsKKworY2xhc3MgV2ViQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBXRUJLSVRfQVBJ
IHN0YXRpYyBXZWJCbG9iUmVnaXN0cnkqIGluc3RhbmNlKCk7CisKKyAgICB2aXJ0dWFsIH5XZWJC
bG9iUmVnaXN0cnkoKSB7IH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGUgb3duZXJzaGlwIG9mIHRo
ZSBXZWJCbG9iRGF0YSBpcyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgV2ViQmxvYkRhdGEmKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2Vi
VVJMJiBzcmNVUkwpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViVVJMJikgPSAwOworICAgIHZpcnR1YWwgV2ViQmxvYlN0b3JhZ2VEYXRhIGdldEJsb2JE
YXRhRnJvbVVSTChjb25zdCBXZWJVUkwmKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKKworI2VuZGlmIC8vIFdlYkJsb2JSZWdpc3RyeV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJCbG9iU3RvcmFnZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li5mYzkxOWY0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJC
bG9iU3RvcmFnZURhdGEuaApAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJCbG9iU3RvcmFnZURh
dGFfaAorI2RlZmluZSBXZWJCbG9iU3RvcmFnZURhdGFfaAorCisjaW5jbHVkZSAiV2ViRGF0YS5o
IgorI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQmxvYlN0
b3JhZ2VEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz
IFBhc3NSZWZQdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
QmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZTsKKworY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhIHsKK3B1
YmxpYzoKKyAgICBzdHJ1Y3QgSXRlbSB7CisgICAgICAgIGVudW0geyBUeXBlRGF0YSwgVHlwZUZp
bGUgfSB0eXBlOworICAgICAgICBXZWJEYXRhIGRhdGE7CisgICAgICAgIFdlYlN0cmluZyBwYXRo
OworICAgICAgICBsb25nIGxvbmcgb2Zmc2V0OworICAgICAgICBsb25nIGxvbmcgbGVuZ3RoOyAv
LyAtMSBtZWFucyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlL2Jsb2IuCisgICAgICAgIFdlYkZpbGVJ
bmZvIGZpbGVJbmZvOworICAgIH07CisKKyAgICB+V2ViQmxvYlN0b3JhZ2VEYXRhKCkgeyByZXNl
dCgpOyB9CisKKyAgICBXZWJCbG9iU3RvcmFnZURhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKyAg
ICBXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgV2ViQmxvYlN0b3JhZ2VEYXRhJiBiKSA6IG1fcHJp
dmF0ZSgwKSB7IGFzc2lnbihiKTsgfQorICAgIFdlYkJsb2JTdG9yYWdlRGF0YSYgb3BlcmF0b3I9
KGNvbnN0IFdlYkJsb2JTdG9yYWdlRGF0YSYgYikKKyAgICB7CisgICAgICAgIGFzc2lnbihiKTsK
KyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCBpbml0
aWFsaXplKCk7CisgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0FQSSB2
b2lkIGFzc2lnbihjb25zdCBXZWJCbG9iU3RvcmFnZURhdGEmKTsKKworICAgIGJvb2wgaXNOdWxs
KCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVt
YmVyIG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0Owor
CisgICAgLy8gU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBpdGVtIGF0IHRoZSBnaXZlbiBpbmRleC4g
IFJldHVybnMgZmFsc2UgaWYKKyAgICAvLyBpbmRleCBpcyBvdXQgb2YgYm91bmRzLgorICAgIFdF
QktJVF9BUEkgYm9vbCBpdGVtQXQoc2l6ZV90IGluZGV4LCBJdGVtJikgY29uc3Q7CisKKyAgICBX
RUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkg
V2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExF
TUVOVEFUSU9OCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+Jik7CisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhJiBvcGVy
YXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsK
KyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPigp
IGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgdm9pZCBhc3NpZ24oV2ViQmxvYlN0b3Jh
Z2VEYXRhUHJpdmF0ZSopOworICAgIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqIG1fcHJpdmF0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQmxvYlN0b3Jh
Z2VEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50
LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCmluZGV4IDU5NTlhMWMu
LmYwNzcwYmMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50
LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaApAQCAtNDcsNiAr
NDcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhv
c3Q7CiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudDsKK2NsYXNzIFdlYkJsb2JE
YXRhOwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29va2llSmFyOwogY2xhc3MgV2Vi
RmlsZVN5c3RlbTsKQEAgLTgzLDYgKzg0LDE1IEBAIHB1YmxpYzoKICAgICAvLyBNYXkgcmV0dXJu
IG51bGwuCiAgICAgdmlydHVhbCBXZWJDb29raWVKYXIqIGNvb2tpZUphcigpIHsgcmV0dXJuIDA7
IH0KIAorICAgIC8vIEJsb2IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gUmVnaXN0ZXIgYSBCbG9iIG9iamVj
dCBieSBpdHMgdXJsLgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2Vi
VVJMJiwgY29uc3QgV2ViQmxvYkRhdGEmKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFdlYlVSTCYgdXJsLCBjb25zdCBXZWJVUkwmIHNyY1VSTCkgeyB9CisKKyAg
ICAvLyBVbnJlZ2lzdGVyIGEgQmxvYiBvYmplY3QgYnkgaXRzIHVybC4KKyAgICB2aXJ0dWFsIHZv
aWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJikgeyB9CisKICAgICAvLyBET00gU3Rv
cmFnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
CiAgICAgLy8gUmV0dXJuIGEgTG9jYWxTdG9yYWdlIG5hbWVzcGFjZSB0aGF0IGNvcnJlc3BvbmRz
IHRvIHRoZSBmb2xsb3dpbmcgcGF0aC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
QmxvYlJlZ2lzdHJ5UHJveHkuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQ
cm94eS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE2ZDE2MgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3Bw
CkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQkxPQikK
KworI2luY2x1ZGUgIkJsb2JSZWdpc3RyeVByb3h5LmgiCisKKyNpbmNsdWRlICJXZWJCbG9iRGF0
YS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYlVSTC5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJLVVJM
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisKKy8vIFdlIGFyZSBwYXJ0IG9mIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24uCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0Jsb2JSZWdp
c3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChCbG9iUmVnaXN0cnlQcm94eSwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7
Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJM
JiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQoreworICAgIFdlYkJsb2JEYXRh
IHdlYkJsb2JEYXRhKGJsb2JEYXRhKTsKKyAgICB3ZWJLaXRDbGllbnQoKS0+cmVnaXN0ZXJCbG9i
VVJMKHVybCwgd2ViQmxvYkRhdGEpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdp
c3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQg
QmxvYlJlZ2lzdHJ5UHJveHk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICB3ZWJLaXRDbGllbnQoKS0+dW5yZWdpc3RlckJsb2JVUkwodXJsKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvQmxvYlJlZ2lzdHJ5UHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5
UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWYyYmI1Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JSZWdpc3RyeVByb3h5X2gKKyNkZWZpbmUgQmxvYlJl
Z2lzdHJ5UHJveHlfaAorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9iUmVnaXN0
cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iUmVnaXN0cnlQcm94eSA6
IHB1YmxpYyBCbG9iUmVnaXN0cnkgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
ckJsb2JVUkwoY29uc3QgS1VSTCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3JjVVJM
KTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYpOworCisg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNvdXJjZUhhbmRs
ZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCopIHsgcmV0dXJu
IDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZFJlc291cmNlU3luY2hyb25vdXNseShjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25zZSYsIFZlY3Rv
cjxjaGFyPiYgZGF0YSkgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICB2aXJ0dWFs
IH5CbG9iUmVnaXN0cnlQcm94eSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKKyNlbmRpZiAvLyBCbG9iUmVnaXN0cnlQcm94eV9o
CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JEYXRhLmNwcCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmVmYmJkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkJsb2JEYXRhLmNwcApAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJCbG9iRGF0YS5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCbG9i
RGF0YVByaXZhdGUgOiBwdWJsaWMgQmxvYkRhdGEgeworfTsKKwordm9pZCBXZWJCbG9iRGF0YTo6
aW5pdGlhbGl6ZSgpCit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkJsb2JEYXRhUHJpdmF0
ZSo+KEJsb2JEYXRhOjpjcmVhdGUoKS5sZWFrUHRyKCkpKTsKK30KKwordm9pZCBXZWJCbG9iRGF0
YTo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKworc2l6ZV90IFdlYkJsb2JEYXRhOjpp
dGVtQ291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBt
X3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpOworfQorCitib29sIFdlYkJsb2JEYXRhOjppdGVtQXQo
c2l6ZV90IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwo
KSk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVtID0gbV9wcml2
YXRlLT5pdGVtcygpW2luZGV4XTsKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2Ug
QmxvYkRhdGFJdGVtOjpEYXRhOgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVEYXRh
OworICAgICAgICByZXN1bHQuZGF0YS5hc3NpZ24oaXRlbS5kYXRhLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihpdGVtLmRhdGEubGVuZ3RoKCkpKTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVS
TC5yZXNldCgpOworICAgICAgICByZXN1bHQub2Zmc2V0ID0gMDsKKyAgICAgICAgcmVzdWx0Lmxl
bmd0aCA9IDA7CisgICAgICAgIHJlc3VsdC5maWxlSW5mby5tb2RpZmljYXRpb25UaW1lID0gMDsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6CisgICAgICAgIHJl
c3VsdC50eXBlID0gSXRlbTo6VHlwZUZpbGU7CisgICAgICAgIHJlc3VsdC5kYXRhLnJlc2V0KCk7
CisgICAgICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBpdGVtLnBhdGg7CisgICAgICAgIHJlc3VsdC5v
ZmZzZXQgPSBpdGVtLm9mZnNldDsKKyAgICAgICAgcmVzdWx0Lmxlbmd0aCA9IGl0ZW0ubGVuZ3Ro
OworICAgICAgICByZXN1bHQuZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSA9IGl0ZW0uZXhwZWN0
ZWRNb2RpZmljYXRpb25UaW1lOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJsb2JEYXRhSXRl
bTo6QmxvYjoKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlQmxvYjsKKyAgICAgICAg
cmVzdWx0LmRhdGEucmVzZXQoKTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVSTCA9IGl0ZW0udXJs
OworICAgICAgICByZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7CisgICAgICAgIHJlc3VsdC5s
ZW5ndGggPSBpdGVtLmxlbmd0aDsKKyAgICAgICAgcmVzdWx0LmZpbGVJbmZvLm1vZGlmaWNhdGlv
blRpbWUgPSAwOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViQmxv
YkRhdGE6OmFwcGVuZERhdGEoY29uc3QgV2ViRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZERhdGEoQ1N0cmluZyhkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCkpKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25zdCBX
ZWJTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJp
dmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVu
ZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBs
b25nIGxlbmd0aCwgY29uc3QgV2ViRmlsZUluZm8mIGZpbGVJbmZvKQoreworICAgIEFTU0VSVCgh
aXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCwgb2Zmc2V0LCBs
ZW5ndGgsIGZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUpOworfQorCit2b2lkIFdlYkJsb2JEYXRh
OjphcHBlbmRCbG9iKGNvbnN0IFdlYlN0cmluZyYgYmxvYlVSTCwgbG9uZyBsb25nIG9mZnNldCwg
bG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZh
dGUtPmFwcGVuZEJsb2IoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGJsb2JVUkwpLCBvZmZzZXQsIGxl
bmd0aCk7Cit9CisKK1dlYlN0cmluZyBXZWJCbG9iRGF0YTo6Y29udGVudFR5cGUoKSBjb25zdAor
eworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRU
eXBlKCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OnNldENvbnRlbnRUeXBlKGNvbnN0IFdlYlN0
cmluZyYgY29udGVudFR5cGUpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2
YXRlLT5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7Cit9CisKK1dlYlN0cmluZyBXZWJCbG9i
RGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRpb24oKTsKK30KKwordm9p
ZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgY29u
dGVudERpc3Bvc2l0aW9uKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0
ZS0+c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnRlbnREaXNwb3NpdGlvbik7Cit9CisKK1dlYkJs
b2JEYXRhOjpXZWJCbG9iRGF0YShjb25zdCBQYXNzT3duUHRyPEJsb2JEYXRhPiYgZGF0YSkKKyAg
ICA6IG1fcHJpdmF0ZShzdGF0aWNfY2FzdDxXZWJCbG9iRGF0YVByaXZhdGUqPihkYXRhLmxlYWtQ
dHIoKSkpCit7Cit9CisKK1dlYkJsb2JEYXRhJiBXZWJCbG9iRGF0YTo6b3BlcmF0b3I9KGNvbnN0
IFBhc3NPd25QdHI8QmxvYkRhdGE+JiBkYXRhKQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxX
ZWJCbG9iRGF0YVByaXZhdGUqPihkYXRhLmxlYWtQdHIoKSkpOworICAgIHJldHVybiAqdGhpczsK
K30KKworV2ViQmxvYkRhdGE6Om9wZXJhdG9yIFBhc3NPd25QdHI8QmxvYkRhdGE+KCkKK3sKKyAg
ICBXZWJCbG9iRGF0YVByaXZhdGUqIHRlbXAgPSBtX3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0g
MDsKKyAgICByZXR1cm4gYWRvcHRQdHIodGVtcCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFz
c2lnbihXZWJCbG9iRGF0YVByaXZhdGUqIHApCit7CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAg
ICAgZGVsZXRlIG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lz
dHJ5SW1wbC5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NDE5ODMKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC0w
LDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5
SW1wbC5oIgorCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5SW1wbC5oIgorI2luY2x1ZGUgIlJlc291
cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJXZWJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIldlYlVSTC5o
IgorCisjaWYgRU5BQkxFKEJMT0IpCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitXZWJCbG9iUmVn
aXN0cnkqIFdlYkJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQoreworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoV2ViQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gJmlu
c3RhbmNlOworfQorCitXZWJCbG9iUmVnaXN0cnlJbXBsOjpXZWJCbG9iUmVnaXN0cnlJbXBsKCkK
KyAgICA6IG1fYmxvYlJlZ2lzdHJ5KG5ldyBXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsKCkpCit7
Cit9CisKK1dlYkJsb2JSZWdpc3RyeUltcGw6On5XZWJCbG9iUmVnaXN0cnlJbXBsKCkKK3sKK30K
Kwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJM
JiB1cmwsIFdlYkJsb2JEYXRhJiBibG9iRGF0YSkKK3sKKyAgICBtX2Jsb2JSZWdpc3RyeS0+cmVn
aXN0ZXJCbG9iVVJMKHVybCwgYmxvYkRhdGEpOworfQorCit2b2lkIFdlYkJsb2JSZWdpc3RyeUlt
cGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViVVJMJiBzcmNV
UkwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7
Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3Qg
V2ViVVJMJiB1cmwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnVucmVnaXN0ZXJCbG9iVVJMKHVy
bCk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YSBXZWJCbG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9i
RGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIG1fYmxvYlJlZ2lz
dHJ5LT5nZXRCbG9iRGF0YUZyb21VUkwodXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVn
aXN0cnlJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUzYzQ0NAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1w
bC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeUltcGxfaAorI2RlZmlu
ZSBXZWJCbG9iUmVnaXN0cnlJbXBsX2gKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAi
V2ViQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7IGNsYXNzIEJsb2JSZWdpc3RyeUltcGw7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeUltcGwgOiBwdWJsaWMgV2ViQmxvYlJlZ2lzdHJ5IHsK
K3B1YmxpYzoKKyAgICBXZWJCbG9iUmVnaXN0cnlJbXBsKCk7CisgICAgdmlydHVhbCB+V2ViQmxv
YlJlZ2lzdHJ5SW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25z
dCBXZWJVUkwmLCBXZWJCbG9iRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JV
UkwoY29uc3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlVSTCYgc3JjVVJMKTsKKyAgICB2aXJ0dWFs
IHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJik7CisgICAgdmlydHVhbCBXZWJC
bG9iU3RvcmFnZURhdGEgZ2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IFdlYlVSTCYpOworCitwcml2
YXRlOgorICAgIFdURjo6T3duUHRyPFdlYkNvcmU6OkJsb2JSZWdpc3RyeUltcGw+IG1fYmxvYlJl
Z2lzdHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUo
QkxPQikKKworI2VuZGlmIC8vIFdlYkJsb2JSZWdpc3RyeUltcGxfaApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmI5NjIwMTAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkJsb2JTdG9yYWdlRGF0YS5jcHAKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViQmxvYlN0b3JhZ2VEYXRhLmgiCisKKyNpbmNsdWRlICJCbG9iU3RvcmFn
ZURhdGEuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlIDogcHVibGljIEJsb2JTdG9yYWdl
RGF0YSB7Cit9OworCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0YTo6aW5pdGlhbGl6ZSgpCit7Cisg
ICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqPihCbG9iU3Rv
cmFnZURhdGE6OmNyZWF0ZSgpLnJlbGVhc2VSZWYoKSkpOworfQorCit2b2lkIFdlYkJsb2JTdG9y
YWdlRGF0YTo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKwordm9pZCBXZWJCbG9iU3Rv
cmFnZURhdGE6OmFzc2lnbihjb25zdCBXZWJCbG9iU3RvcmFnZURhdGEmIG90aGVyKQoreworICAg
IFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqIHAgPSBjb25zdF9jYXN0PFdlYkJsb2JTdG9yYWdl
RGF0YVByaXZhdGUqPihvdGhlci5tX3ByaXZhdGUpOworICAgIGlmIChwKQorICAgICAgICBwLT5y
ZWYoKTsKKyAgICBhc3NpZ24ocCk7Cit9CisKK3NpemVfdCBXZWJCbG9iU3RvcmFnZURhdGE6Oml0
ZW1Db3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXRlbXMoKS5zaXplKCk7Cit9CisKK2Jvb2wgV2ViQmxvYlN0b3JhZ2VEYXRhOjpp
dGVtQXQoc2l6ZV90IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFp
c051bGwoKSk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQmxvYlN0b3JhZ2VEYXRhSXRlbSYg
aXRlbSA9IG1fcHJpdmF0ZS0+aXRlbXMoKVtpbmRleF07CisgICAgc3dpdGNoIChpdGVtLnR5cGUp
IHsKKyAgICBjYXNlIEJsb2JTdG9yYWdlRGF0YUl0ZW06OkRhdGE6CisgICAgICAgIHJlc3VsdC50
eXBlID0gSXRlbTo6VHlwZURhdGE7CisgICAgICAgIHJlc3VsdC5kYXRhLmFzc2lnbihpdGVtLmRh
dGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0YS5sZW5ndGgoKSkpOworICAg
ICAgICByZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7CisgICAgICAgIHJlc3VsdC5sZW5ndGgg
PSBpdGVtLmxlbmd0aDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCbG9iU3RvcmFnZURhdGFJ
dGVtOjpGaWxlOgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVGaWxlOworICAgICAg
ICByZXN1bHQucGF0aCA9IGl0ZW0ucGF0aDsKKyAgICAgICAgcmVzdWx0Lm9mZnNldCA9IGl0ZW0u
b2Zmc2V0OworICAgICAgICByZXN1bHQubGVuZ3RoID0gaXRlbS5sZW5ndGg7CisgICAgICAgIHJl
c3VsdC5maWxlSW5mby5tb2RpZmljYXRpb25UaW1lID0gaXRlbS5leHBlY3RlZE1vZGlmaWNhdGlv
blRpbWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworV2ViU3RyaW5nIFdlYkJs
b2JTdG9yYWdlRGF0YTo6Y29udGVudFR5cGUoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxs
KCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRUeXBlKCk7Cit9CisKK1dlYlN0cmlu
ZyBXZWJCbG9iU3RvcmFnZURhdGE6OmNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudERpc3Bvc2l0
aW9uKCk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YTo6V2ViQmxvYlN0b3JhZ2VEYXRhKGNvbnN0
IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKKyAgICA6IG1fcHJpdmF0ZShzdGF0
aWNfY2FzdDxXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlKj4oZGF0YS5yZWxlYXNlUmVmKCkpKQor
eworfQorCitXZWJCbG9iU3RvcmFnZURhdGEmIFdlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3I9
KGNvbnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKK3sKKyAgICBhc3NpZ24o
c3RhdGljX2Nhc3Q8V2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSo+KGRhdGEucmVsZWFzZVJlZigp
KSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJCbG9iU3RvcmFnZURhdGE6Om9wZXJhdG9y
IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZTsKK30KKwordm9pZCBXZWJCbG9iU3RvcmFnZURhdGE6OmFzc2lnbihXZWJCbG9iU3RvcmFn
ZURhdGFQcml2YXRlKiBwKQoreworICAgIC8vIHAgaXMgYWxyZWFkeSByZWYnZCBmb3IgdXMgYnkg
dGhlIGNhbGxlcgorICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIG1fcHJpdmF0ZS0+ZGVyZWYo
KTsKKyAgICBtX3ByaXZhdGUgPSBwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="52654"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="52655"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64266</attachid>
            <date>2010-08-12 14:51:59 -0700</date>
            <delta_ts>2010-08-12 15:02:23 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_3</filename>
            <type>text/plain</type>
            <size>35033</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTcyZmUzOS4uNGJlZGFmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wOC0xMiAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
QmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpIHNvIHRoYXQgY2hyb21pdW0KKyAgICAgICAgdXNlcyB0
aGUgaW1wbGVtZW50YXRpb24gaW4gV2ViS2l0IENocm9taXVtLgorCisgICAgICAgICogaHRtbC9C
bG9iUmVnaXN0cnlJbXBsLmNwcDoKKwogMjAxMC0wOC0xMiAgQmVuIE11cmRvY2ggIDxiZW5tQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9i
UmVnaXN0cnlJbXBsLmNwcAppbmRleCA3NGU1MTc1Li41NDJiNGMwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JSZWdp
c3RyeUltcGwuY3BwCkBAIC03MSwxMSArNzEsMTMgQEAgYm9vbCBCbG9iUmVnaXN0cnlJbXBsOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBCbG9iUmVn
aXN0cnkmIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CisjZW5kaWYKIAogdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbXMo
QmxvYlN0b3JhZ2VEYXRhKiBibG9iU3RvcmFnZURhdGEsIGNvbnN0IEJsb2JTdG9yYWdlRGF0YUl0
ZW1MaXN0JiBpdGVtcykKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZkOTI5MzEuLmYxMzU0Y2IgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTA4LTEyICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbY2hyb21pdW1dIENocm9taXVtIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgYmxvYiBkYXRh
IGFuZCBibG9iIHJlZ2lzdHJ5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDM4NzEKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVi
bGljL1dlYkJsb2JEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJCbG9iUmVnaXN0
cnkuaDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YktpdENsaWVudDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0Q2xp
ZW50Ojp1bnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5
LmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9XZWJCbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJC
bG9iUmVnaXN0cnlJbXBsLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JSZWdpc3Ry
eUltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHA6IEFk
ZGVkLgorCiAyMDEwLTA4LTEyICBKb2huIEdyZWdnICA8am9obm55Z0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAxMjNhZWQ1
Li43ZjYyNGU4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYgKzExOSw5IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmxvYkRhdGEuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaCcsCisgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNhbnZhcy5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2FyZC5oJywKQEAgLTI4NCw2ICsyODcs
OCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmgnLAorICAgICAgICAg
ICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQm91bmRPYmplY3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2JqZWN0LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAtMzcxLDYgKzM3NiwxMCBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJCbG9iRGF0YS5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ2FjaGUu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9yLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJkNjFjCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCkBAIC0wLDAgKzEsOTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYkJsb2JEYXRhX2gKKyNkZWZpbmUgV2ViQmxvYkRhdGFfaAorCisjaW5jbHVk
ZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsg
Y2xhc3MgQmxvYkRhdGE7IH0KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgUGFzc093blB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJCbG9iRGF0YVByaXZhdGU7CisKK2NsYXNzIFdlYkJsb2JEYXRhIHsKK3B1YmxpYzoKKyAg
ICBzdHJ1Y3QgSXRlbSB7CisgICAgICAgIGVudW0geyBUeXBlRGF0YSwgVHlwZUZpbGUsIFR5cGVC
bG9iIH0gdHlwZTsKKyAgICAgICAgV2ViRGF0YSBkYXRhOworICAgICAgICBXZWJTdHJpbmcgcGF0
aE9yVVJMOworICAgICAgICBsb25nIGxvbmcgb2Zmc2V0OworICAgICAgICBsb25nIGxvbmcgbGVu
Z3RoOyAvLyAtMSBtZWFucyBnbyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlL2Jsb2IuCisgICAgICAg
IFdlYkZpbGVJbmZvIGZpbGVJbmZvOworICAgIH07CisKKyAgICB+V2ViQmxvYkRhdGEoKSB7IHJl
c2V0KCk7IH0KKworICAgIFdlYkJsb2JEYXRhKCkgOiBtX3ByaXZhdGUoMCkgeyB9CisKKyAgICBX
RUJLSVRfQVBJIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgp
OworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9CisKKyAg
ICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMuCisgICAgV0VCS0lUX0FQSSBzaXplX3Qg
aXRlbUNvdW50KCkgY29uc3Q7CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIHZhbHVlcyBvZiB0aGUg
aXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXguICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gaW5kZXgg
aXMgb3V0IG9mIGJvdW5kcy4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBpbmRl
eCwgSXRlbSYgcmVzdWx0KSBjb25zdDsKKworICAgIC8vIEFwcGVuZHMgdG8gdGhlIGxpc3Qgb2Yg
aXRlbXMuCisgICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZERhdGEoY29uc3QgV2ViRGF0YSYpOwor
ICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgp
OworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBh
dGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGNvbnN0IFdlYkZpbGVJbmZv
Jik7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZEJsb2IoY29uc3QgV2ViU3RyaW5nJiBibG9i
VVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAgIFdFQktJVF9B
UEkgV2ViU3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSB2b2lkIHNl
dENvbnRlbnRUeXBlKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgV0VCS0lUX0FQSSBXZWJTdHJp
bmcgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSB2b2lkIHNldENv
bnRlbnREaXNwb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmKTsKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgIFdlYkJsb2JEYXRhKGNvbnN0IFdURjo6UGFzc093blB0cjxXZWJDb3JlOjpC
bG9iRGF0YT4mKTsKKyAgICBXZWJCbG9iRGF0YSYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc093
blB0cjxXZWJDb3JlOjpCbG9iRGF0YT4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NPd25QdHI8
V2ViQ29yZTo6QmxvYkRhdGE+KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2ln
bihXZWJCbG9iRGF0YVByaXZhdGUqKTsKKyAgICBXZWJCbG9iRGF0YVByaXZhdGUqIG1fcHJpdmF0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQmxvYkRhdGFf
aApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaCBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4YWMxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
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
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViQmxvYlJlZ2lzdHJ5X2gKKyNkZWZpbmUgV2ViQmxvYlJlZ2lzdHJ5X2gKKworI2luY2x1ZGUg
IldlYkJsb2JTdG9yYWdlRGF0YS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
QmxvYkRhdGE7CitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7CisKK2NsYXNzIFdlYkJs
b2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViQmxvYlJlZ2lz
dHJ5KiBpbnN0YW5jZSgpOworCisgICAgdmlydHVhbCB+V2ViQmxvYlJlZ2lzdHJ5KCkgeyB9CisK
KyAgICAvLyBOb3RlIHRoYXQgdGhlIG93bmVyc2hpcCBvZiB0aGUgV2ViQmxvYkRhdGEgaXMgcGFz
c2VkIHRvIHRoZSBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNv
bnN0IFdlYlVSTCYsIFdlYkJsb2JEYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
ckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJikgPSAwOworICAgIHZp
cnR1YWwgV2ViQmxvYlN0b3JhZ2VEYXRhIGdldEJsb2JEYXRhRnJvbVVSTChjb25zdCBXZWJVUkwm
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkJsb2JS
ZWdpc3RyeV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JTdG9y
YWdlRGF0YS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk2OTk3Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaApAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJCbG9iU3RvcmFnZURhdGFfaAorI2RlZmluZSBXZWJCbG9iU3Rv
cmFnZURhdGFfaAorCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkZpbGVJbmZv
LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
K25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQmxvYlN0b3JhZ2VEYXRhOyB9CituYW1lc3BhY2Ug
V1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZTsK
KworY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgSXRlbSB7
CisgICAgICAgIGVudW0geyBUeXBlRGF0YSwgVHlwZUZpbGUgfSB0eXBlOworICAgICAgICBXZWJE
YXRhIGRhdGE7CisgICAgICAgIFdlYlN0cmluZyBwYXRoOworICAgICAgICBsb25nIGxvbmcgb2Zm
c2V0OworICAgICAgICBsb25nIGxvbmcgbGVuZ3RoOyAvLyAtMSBtZWFucyBnbyB0byB0aGUgZW5k
IG9mIHRoZSBmaWxlL2Jsb2IuCisgICAgICAgIFdlYkZpbGVJbmZvIGZpbGVJbmZvOworICAgIH07
CisKKyAgICB+V2ViQmxvYlN0b3JhZ2VEYXRhKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJCbG9i
U3RvcmFnZURhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKyAgICBXZWJCbG9iU3RvcmFnZURhdGEo
Y29uc3QgV2ViQmxvYlN0b3JhZ2VEYXRhJiBiKSA6IG1fcHJpdmF0ZSgwKSB7IGFzc2lnbihiKTsg
fQorICAgIFdlYkJsb2JTdG9yYWdlRGF0YSYgb3BlcmF0b3I9KGNvbnN0IFdlYkJsb2JTdG9yYWdl
RGF0YSYgYikKKyAgICB7CisgICAgICAgIGFzc2lnbihiKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lU
X0FQSSB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFzc2lnbihjb25zdCBXZWJC
bG9iU3RvcmFnZURhdGEmKTsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1f
cHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgorICAgIFdF
QktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0cmlldmVzIHRo
ZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4LiBSZXR1cm5zIGZhbHNlIGlm
CisgICAgLy8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXRl
bUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25zdDsKKworICAgIFdFQktJVF9BUEkg
V2ViU3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcg
Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
KyAgICBXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJs
b2JTdG9yYWdlRGF0YT4mKTsKKyAgICBXZWJCbG9iU3RvcmFnZURhdGEmIG9wZXJhdG9yPShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPiYpOworICAgIG9wZXJh
dG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+KCkgY29uc3Q7Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJCbG9iU3RvcmFnZURhdGFQcml2
YXRlKik7CisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iU3RvcmFnZURhdGFfaApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaCBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKaW5kZXggNTk1OWExYy4uMjUxZDU4NiAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCkBAIC00Nyw2ICs0Nyw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNz
IFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50OworY2xhc3MgV2ViQmxvYkRhdGE7CiBjbGFz
cyBXZWJDbGlwYm9hcmQ7CiBjbGFzcyBXZWJDb29raWVKYXI7CiBjbGFzcyBXZWJGaWxlU3lzdGVt
OwpAQCAtODMsNiArODQsMTUgQEAgcHVibGljOgogICAgIC8vIE1heSByZXR1cm4gbnVsbC4KICAg
ICB2aXJ0dWFsIFdlYkNvb2tpZUphciogY29va2llSmFyKCkgeyByZXR1cm4gMDsgfQogCisgICAg
Ly8gQmxvYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSZWdpc3RlciBhIEJsb2Igb2JqZWN0IGJ5IGl0cyB1
cmwuCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBjb25z
dCBXZWJCbG9iRGF0YSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwpIHsgfQorCisgICAgLy8gVW5yZWdpc3Rl
ciBhIEJsb2Igb2JqZWN0IGJ5IGl0cyB1cmwuCisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFdlYlVSTCYpIHsgfQorCiAgICAgLy8gRE9NIFN0b3JhZ2UgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFJldHVy
biBhIExvY2FsU3RvcmFnZSBuYW1lc3BhY2UgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZm9sbG93
aW5nIHBhdGguCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVBy
b3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjg5YzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmNwcApAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJC
bG9iUmVnaXN0cnlQcm94eS5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJL
VVJMLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJXZWJCbG9iRGF0
YS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorCisvLyBXZSBhcmUgcGFydCBvZiB0aGUgV2ViS2l0IGltcGxl
bWVudGF0aW9uLgordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitCbG9iUmVnaXN0cnkmIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlQ
cm94eSwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgQmxv
YlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25Q
dHI8QmxvYkRhdGE+IGJsb2JEYXRhKQoreworICAgIFdlYkJsb2JEYXRhIHdlYkJsb2JEYXRhKGJs
b2JEYXRhKTsKKyAgICB3ZWJLaXRDbGllbnQoKS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwgd2ViQmxv
YkRhdGEpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit7CisgICAgd2ViS2l0Q2xpZW50KCkt
PnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJv
eHk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICB3ZWJLaXRDbGll
bnQoKS0+dW5yZWdpc3RlckJsb2JVUkwodXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5
UHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDMyNWFhCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIFdlYkJsb2JSZWdpc3RyeV9oCisjZGVmaW5lIFdlYkJsb2JSZWdpc3RyeV9oCisKKyNp
ZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEJsb2JSZWdpc3RyeVByb3h5IDogcHVibGljIEJsb2JSZWdpc3Ry
eSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJM
JiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JV
UkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7CisgICAgdmlydHVhbCB2b2lkIHVu
cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxS
ZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKSB7IHJldHVybiAwOyB9CisgICAgdmlydHVhbCBib29s
IGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3Vy
Y2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEpIHsgcmV0dXJu
IGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+QmxvYlJlZ2lzdHJ5UHJveHkoKSB7
IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShCTE9C
KQorCisjZW5kaWYgLy8gV2ViQmxvYlJlZ2lzdHJ5X2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0
YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzMzhlMwotLS0gL2Rl
di9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCkBAIC0wLDAg
KzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkJsb2JEYXRhLmgiCisK
KyNpbmNsdWRlICJCbG9iRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JEYXRhUHJpdmF0ZSA6IHB1YmxpYyBCbG9i
RGF0YSB7Cit9OworCit2b2lkIFdlYkJsb2JEYXRhOjppbml0aWFsaXplKCkKK3sKKyAgICBhc3Np
Z24oc3RhdGljX2Nhc3Q8V2ViQmxvYkRhdGFQcml2YXRlKj4oQmxvYkRhdGE6OmNyZWF0ZSgpLmxl
YWtQdHIoKSkpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjpyZXNldCgpCit7CisgICAgYXNzaWdu
KDApOworfQorCitzaXplX3QgV2ViQmxvYkRhdGE6Oml0ZW1Db3VudCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXRlbXMoKS5zaXplKCk7
Cit9CisKK2Jvb2wgV2ViQmxvYkRhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3Vs
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGlmIChpbmRleCA+PSBt
X3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
b25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX3ByaXZhdGUtPml0ZW1zKClbaW5kZXhdOworICAg
IHJlc3VsdC5vZmZzZXQgPSBpdGVtLm9mZnNldDsKKyAgICByZXN1bHQubGVuZ3RoID0gaXRlbS5s
ZW5ndGg7CisgICAgcmVzdWx0LmZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4cGVj
dGVkTW9kaWZpY2F0aW9uVGltZTsKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2Ug
QmxvYkRhdGFJdGVtOjpEYXRhOgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVEYXRh
OworICAgICAgICByZXN1bHQuZGF0YS5hc3NpZ24oaXRlbS5kYXRhLmRhdGEoKSwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihpdGVtLmRhdGEubGVuZ3RoKCkpKTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVS
TC5yZXNldCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6
RmlsZToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlRmlsZTsKKyAgICAgICAgcmVz
dWx0LmRhdGEucmVzZXQoKTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVSTCA9IGl0ZW0ucGF0aDsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkJsb2I6CisgICAg
ICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZUJsb2I7CisgICAgICAgIHJlc3VsdC5kYXRhLnJl
c2V0KCk7CisgICAgICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBpdGVtLnVybDsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRGF0YShjb25zdCBXZWJEYXRhJiBk
YXRhKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRGF0
YShDU3RyaW5nKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOworfQorCit2b2lkIFdlYkJsb2JE
YXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgpCit7CisgICAgQVNTRVJU
KCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZpbGVQYXRoKTsKK30KKwor
dm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBs
b25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBXZWJGaWxlSW5mbyYgZmls
ZUluZm8pCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5hcHBlbmRG
aWxlKGZpbGVQYXRoLCBvZmZzZXQsIGxlbmd0aCwgZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSk7
Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVuZEJsb2IoY29uc3QgV2ViU3RyaW5nJiBibG9i
VVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIEFTU0VSVCgh
aXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kQmxvYihLVVJMKFBhcnNlZFVSTFN0cmlu
ZywgYmxvYlVSTCksIG9mZnNldCwgbGVuZ3RoKTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JEYXRh
Ojpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6c2V0
Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJiBjb250ZW50VHlwZSkKK3sKKyAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsK
K30KKworV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdAor
eworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRE
aXNwb3NpdGlvbigpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjpzZXRDb250ZW50RGlzcG9zaXRp
b24oY29uc3QgV2ViU3RyaW5nJiBjb250ZW50RGlzcG9zaXRpb24pCit7CisgICAgQVNTRVJUKCFp
c051bGwoKSk7CisgICAgbV9wcml2YXRlLT5zZXRDb250ZW50RGlzcG9zaXRpb24oY29udGVudERp
c3Bvc2l0aW9uKTsKK30KKworV2ViQmxvYkRhdGE6OldlYkJsb2JEYXRhKGNvbnN0IFBhc3NPd25Q
dHI8QmxvYkRhdGE+JiBkYXRhKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkJsb2JE
YXRhUHJpdmF0ZSo+KGRhdGEubGVha1B0cigpKSkKK3sKK30KKworV2ViQmxvYkRhdGEmIFdlYkJs
b2JEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxCbG9iRGF0YT4mIGRhdGEpCit7Cisg
ICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkJsb2JEYXRhUHJpdmF0ZSo+KGRhdGEubGVha1B0cigp
KSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJCbG9iRGF0YTo6b3BlcmF0b3IgUGFzc093
blB0cjxCbG9iRGF0YT4oKQoreworICAgIFdlYkJsb2JEYXRhUHJpdmF0ZSogdGVtcCA9IG1fcHJp
dmF0ZTsKKyAgICBtX3ByaXZhdGUgPSAwOworICAgIHJldHVybiBhZG9wdFB0cih0ZW1wKTsKK30K
Kwordm9pZCBXZWJCbG9iRGF0YTo6YXNzaWduKFdlYkJsb2JEYXRhUHJpdmF0ZSogcCkKK3sKKyAg
ICBpZiAobV9wcml2YXRlKQorICAgICAgICBkZWxldGUgbV9wcml2YXRlOworICAgIG1fcHJpdmF0
ZSA9IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uOGMwOTNlNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxv
YlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJCbG9iUmVnaXN0cnlJbXBsLmgiCisKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnlJ
bXBsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIldlYkJsb2JEYXRh
LmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKwor
I2lmIEVOQUJMRShCTE9CKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQmxvYlJlZ2lzdHJ5
KiBXZWJCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2ViQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFu
Y2UsICgpKTsKKyAgICByZXR1cm4gJmluc3RhbmNlOworfQorCitXZWJCbG9iUmVnaXN0cnlJbXBs
OjpXZWJCbG9iUmVnaXN0cnlJbXBsKCkKKyAgICA6IG1fYmxvYlJlZ2lzdHJ5KG5ldyBXZWJDb3Jl
OjpCbG9iUmVnaXN0cnlJbXBsKCkpCit7Cit9CisKK1dlYkJsb2JSZWdpc3RyeUltcGw6On5XZWJC
bG9iUmVnaXN0cnlJbXBsKCkKK3sKK30KKwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdp
c3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiB1cmwsIFdlYkJsb2JEYXRhJiBibG9iRGF0YSkKK3sK
KyAgICBtX2Jsb2JSZWdpc3RyeS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxvYkRhdGEpOworfQor
Cit2b2lkIFdlYkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwm
IHVybCwgY29uc3QgV2ViVVJMJiBzcmNVUkwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lz
dGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6
dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgbV9ibG9iUmVnaXN0
cnktPnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YSBXZWJC
bG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7
CisgICAgcmV0dXJuIG1fYmxvYlJlZ2lzdHJ5LT5nZXRCbG9iRGF0YUZyb21VUkwodXJsKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAt
LWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZGE1MTJkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
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
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJs
b2JSZWdpc3RyeUltcGxfaAorI2RlZmluZSBXZWJCbG9iUmVnaXN0cnlJbXBsX2gKKworI2lmIEVO
QUJMRShCTE9CKQorCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JSZWdpc3RyeUltcGw7
IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeUltcGwgOiBw
dWJsaWMgV2ViQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBXZWJCbG9iUmVnaXN0cnlJbXBs
KCk7CisgICAgdmlydHVhbCB+V2ViQmxvYlJlZ2lzdHJ5SW1wbCgpOworCisgICAgdmlydHVhbCB2
b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBXZWJCbG9iRGF0YSYpOworICAgIHZp
cnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBz
cmNVUkwpOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwm
KTsKKyAgICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdlRGF0YSBnZXRCbG9iRGF0YUZyb21VUkwoY29u
c3QgV2ViVVJMJik7CisKK3ByaXZhdGU6CisgICAgV1RGOjpPd25QdHI8V2ViQ29yZTo6QmxvYlJl
Z2lzdHJ5SW1wbD4gbV9ibG9iUmVnaXN0cnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQorCisjZW5kaWYgLy8gV2ViQmxvYlJlZ2lzdHJ5SW1w
bF9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5j
cHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3NzVlOQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcApAQCAtMCwwICsxLDEyOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKwor
I2luY2x1ZGUgIkJsb2JTdG9yYWdlRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUg
OiBwdWJsaWMgQmxvYlN0b3JhZ2VEYXRhIHsKK307CisKK3ZvaWQgV2ViQmxvYlN0b3JhZ2VEYXRh
Ojppbml0aWFsaXplKCkKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQmxvYlN0b3JhZ2VE
YXRhUHJpdmF0ZSo+KEJsb2JTdG9yYWdlRGF0YTo6Y3JlYXRlKCkucmVsZWFzZVJlZigpKSk7Cit9
CisKK3ZvaWQgV2ViQmxvYlN0b3JhZ2VEYXRhOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOwor
fQorCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0YTo6YXNzaWduKGNvbnN0IFdlYkJsb2JTdG9yYWdl
RGF0YSYgb3RoZXIpCit7CisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSogcCA9IGNvbnN0
X2Nhc3Q8V2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAg
aWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKworc2l6ZV90IFdl
YkJsb2JTdG9yYWdlRGF0YTo6aXRlbUNvdW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKTsKK30KKworYm9vbCBX
ZWJCbG9iU3RvcmFnZURhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGlmIChpbmRleCA+PSBtX3ByaXZh
dGUtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBC
bG9iU3RvcmFnZURhdGFJdGVtJiBpdGVtID0gbV9wcml2YXRlLT5pdGVtcygpW2luZGV4XTsKKyAg
ICByZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7CisgICAgcmVzdWx0Lmxlbmd0aCA9IGl0ZW0u
bGVuZ3RoOworICAgIHJlc3VsdC5maWxlSW5mby5tb2RpZmljYXRpb25UaW1lID0gaXRlbS5leHBl
Y3RlZE1vZGlmaWNhdGlvblRpbWU7CisgICAgc3dpdGNoIChpdGVtLnR5cGUpIHsKKyAgICBjYXNl
IEJsb2JTdG9yYWdlRGF0YUl0ZW06OkRhdGE6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6
VHlwZURhdGE7CisgICAgICAgIHJlc3VsdC5kYXRhLmFzc2lnbihpdGVtLmRhdGEuZGF0YSgpLCBz
dGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0YS5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBjYXNlIEJsb2JTdG9yYWdlRGF0YUl0ZW06OkZpbGU6CisgICAgICAgIHJlc3Vs
dC50eXBlID0gSXRlbTo6VHlwZUZpbGU7CisgICAgICAgIHJlc3VsdC5wYXRoID0gaXRlbS5wYXRo
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXZWJTdHJpbmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpj
b250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JTdG9yYWdl
RGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRpb24oKTsKK30KKworV2Vi
QmxvYlN0b3JhZ2VEYXRhOjpXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgUGFzc1JlZlB0cjxCbG9i
U3RvcmFnZURhdGE+JiBkYXRhKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdlYkJsb2JT
dG9yYWdlRGF0YVByaXZhdGUqPihkYXRhLnJlbGVhc2VSZWYoKSkpCit7Cit9CisKK1dlYkJsb2JT
dG9yYWdlRGF0YSYgV2ViQmxvYlN0b3JhZ2VEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0
cjxCbG9iU3RvcmFnZURhdGE+JiBkYXRhKQoreworICAgIGFzc2lnbihzdGF0aWNfY2FzdDxXZWJC
bG9iU3RvcmFnZURhdGFQcml2YXRlKj4oZGF0YS5yZWxlYXNlUmVmKCkpKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3IgUGFzc1JlZlB0cjxCbG9i
U3RvcmFnZURhdGE+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlOworfQorCit2b2lk
IFdlYkJsb2JTdG9yYWdlRGF0YTo6YXNzaWduKFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqIHAp
Cit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisgICAg
aWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0
ZSA9IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="commit-queue"
          id="52799"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64269</attachid>
            <date>2010-08-12 15:02:23 -0700</date>
            <delta_ts>2010-08-12 16:08:33 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_3</filename>
            <type>text/plain</type>
            <size>35039</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTcyZmUzOS4uNGJlZGFmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wOC0xMiAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
QmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpIHNvIHRoYXQgY2hyb21pdW0KKyAgICAgICAgdXNlcyB0
aGUgaW1wbGVtZW50YXRpb24gaW4gV2ViS2l0IENocm9taXVtLgorCisgICAgICAgICogaHRtbC9C
bG9iUmVnaXN0cnlJbXBsLmNwcDoKKwogMjAxMC0wOC0xMiAgQmVuIE11cmRvY2ggIDxiZW5tQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9i
UmVnaXN0cnlJbXBsLmNwcAppbmRleCA3NGU1MTc1Li41NDJiNGMwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JSZWdp
c3RyeUltcGwuY3BwCkBAIC03MSwxMSArNzEsMTMgQEAgYm9vbCBCbG9iUmVnaXN0cnlJbXBsOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBCbG9iUmVn
aXN0cnkmIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CisjZW5kaWYKIAogdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbXMo
QmxvYlN0b3JhZ2VEYXRhKiBibG9iU3RvcmFnZURhdGEsIGNvbnN0IEJsb2JTdG9yYWdlRGF0YUl0
ZW1MaXN0JiBpdGVtcykKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZkOTI5MzEuLmYxMzU0Y2IgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTA4LTEyICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbY2hyb21pdW1dIENocm9taXVtIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgYmxvYiBkYXRh
IGFuZCBibG9iIHJlZ2lzdHJ5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDM4NzEKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVi
bGljL1dlYkJsb2JEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJCbG9iUmVnaXN0
cnkuaDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YktpdENsaWVudDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0Q2xp
ZW50Ojp1bnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5
LmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9XZWJCbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJC
bG9iUmVnaXN0cnlJbXBsLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JSZWdpc3Ry
eUltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHA6IEFk
ZGVkLgorCiAyMDEwLTA4LTEyICBKb2huIEdyZWdnICA8am9obm55Z0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAxMjNhZWQ1
Li43ZjYyNGU4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYgKzExOSw5IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmxvYkRhdGEuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaCcsCisgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNhbnZhcy5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2FyZC5oJywKQEAgLTI4NCw2ICsyODcs
OCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmgnLAorICAgICAgICAg
ICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQm91bmRPYmplY3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2JqZWN0LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAtMzcxLDYgKzM3NiwxMCBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJCbG9iRGF0YS5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ2FjaGUu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9yLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmJkNjFjCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCkBAIC0wLDAgKzEsOTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIFdlYkJsb2JEYXRhX2gKKyNkZWZpbmUgV2ViQmxvYkRhdGFfaAorCisjaW5jbHVk
ZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkZpbGVJbmZvLmgiCisjaW5jbHVkZSAiV2ViU3Ry
aW5nLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KK25hbWVzcGFjZSBXZWJDb3JlIHsg
Y2xhc3MgQmxvYkRhdGE7IH0KK25hbWVzcGFjZSBXVEYgeyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4g
Y2xhc3MgUGFzc093blB0cjsgfQorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJCbG9iRGF0YVByaXZhdGU7CisKK2NsYXNzIFdlYkJsb2JEYXRhIHsKK3B1YmxpYzoKKyAg
ICBzdHJ1Y3QgSXRlbSB7CisgICAgICAgIGVudW0geyBUeXBlRGF0YSwgVHlwZUZpbGUsIFR5cGVC
bG9iIH0gdHlwZTsKKyAgICAgICAgV2ViRGF0YSBkYXRhOworICAgICAgICBXZWJTdHJpbmcgcGF0
aE9yVVJMOworICAgICAgICBsb25nIGxvbmcgb2Zmc2V0OworICAgICAgICBsb25nIGxvbmcgbGVu
Z3RoOyAvLyAtMSBtZWFucyBnbyB0byB0aGUgZW5kIG9mIHRoZSBmaWxlL2Jsb2IuCisgICAgICAg
IFdlYkZpbGVJbmZvIGZpbGVJbmZvOworICAgIH07CisKKyAgICB+V2ViQmxvYkRhdGEoKSB7IHJl
c2V0KCk7IH0KKworICAgIFdlYkJsb2JEYXRhKCkgOiBtX3ByaXZhdGUoMCkgeyB9CisKKyAgICBX
RUJLSVRfQVBJIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgp
OworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9wcml2YXRlOyB9CisKKyAg
ICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMuCisgICAgV0VCS0lUX0FQSSBzaXplX3Qg
aXRlbUNvdW50KCkgY29uc3Q7CisKKyAgICAvLyBSZXRyaWV2ZXMgdGhlIHZhbHVlcyBvZiB0aGUg
aXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXguICBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gaW5kZXgg
aXMgb3V0IG9mIGJvdW5kcy4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBpbmRl
eCwgSXRlbSYgcmVzdWx0KSBjb25zdDsKKworICAgIC8vIEFwcGVuZHMgdG8gdGhlIGxpc3Qgb2Yg
aXRlbXMuCisgICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZERhdGEoY29uc3QgV2ViRGF0YSYpOwor
ICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgp
OworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBh
dGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGNvbnN0IFdlYkZpbGVJbmZv
Jik7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZEJsb2IoY29uc3QgV2ViU3RyaW5nJiBibG9i
VVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKTsKKworICAgIFdFQktJVF9B
UEkgV2ViU3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSB2b2lkIHNl
dENvbnRlbnRUeXBlKGNvbnN0IFdlYlN0cmluZyYpOworCisgICAgV0VCS0lUX0FQSSBXZWJTdHJp
bmcgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSB2b2lkIHNldENv
bnRlbnREaXNwb3NpdGlvbihjb25zdCBXZWJTdHJpbmcmKTsKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgIFdlYkJsb2JEYXRhKGNvbnN0IFdURjo6UGFzc093blB0cjxXZWJDb3JlOjpC
bG9iRGF0YT4mKTsKKyAgICBXZWJCbG9iRGF0YSYgb3BlcmF0b3I9KGNvbnN0IFdURjo6UGFzc093
blB0cjxXZWJDb3JlOjpCbG9iRGF0YT4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NPd25QdHI8
V2ViQ29yZTo6QmxvYkRhdGE+KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2ln
bihXZWJCbG9iRGF0YVByaXZhdGUqKTsKKyAgICBXZWJCbG9iRGF0YVByaXZhdGUqIG1fcHJpdmF0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQmxvYkRhdGFf
aApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaCBi
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ4YWMxOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
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
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
V2ViQmxvYlJlZ2lzdHJ5X2gKKyNkZWZpbmUgV2ViQmxvYlJlZ2lzdHJ5X2gKKworI2luY2x1ZGUg
IldlYkJsb2JTdG9yYWdlRGF0YS5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
QmxvYkRhdGE7CitjbGFzcyBXZWJTdHJpbmc7CitjbGFzcyBXZWJVUkw7CisKK2NsYXNzIFdlYkJs
b2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgV0VCS0lUX0FQSSBzdGF0aWMgV2ViQmxvYlJlZ2lz
dHJ5KiBpbnN0YW5jZSgpOworCisgICAgdmlydHVhbCB+V2ViQmxvYlJlZ2lzdHJ5KCkgeyB9CisK
KyAgICAvLyBOb3RlIHRoYXQgdGhlIG93bmVyc2hpcCBvZiB0aGUgV2ViQmxvYkRhdGEgaXMgcGFz
c2VkIHRvIHRoZSBmdW5jdGlvbi4KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNv
bnN0IFdlYlVSTCYsIFdlYkJsb2JEYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
ckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJikgPSAwOworICAgIHZp
cnR1YWwgV2ViQmxvYlN0b3JhZ2VEYXRhIGdldEJsb2JEYXRhRnJvbVVSTChjb25zdCBXZWJVUkwm
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkJsb2JS
ZWdpc3RyeV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JTdG9y
YWdlRGF0YS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Nzk2OTk3Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaApAQCAtMCww
ICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6
CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
KyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJCbG9iU3RvcmFnZURhdGFfaAorI2RlZmluZSBXZWJCbG9iU3Rv
cmFnZURhdGFfaAorCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkZpbGVJbmZv
LmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
K25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQmxvYlN0b3JhZ2VEYXRhOyB9CituYW1lc3BhY2Ug
V1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZTsK
KworY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgSXRlbSB7
CisgICAgICAgIGVudW0geyBUeXBlRGF0YSwgVHlwZUZpbGUgfSB0eXBlOworICAgICAgICBXZWJE
YXRhIGRhdGE7CisgICAgICAgIFdlYlN0cmluZyBwYXRoOworICAgICAgICBsb25nIGxvbmcgb2Zm
c2V0OworICAgICAgICBsb25nIGxvbmcgbGVuZ3RoOyAvLyAtMSBtZWFucyBnbyB0byB0aGUgZW5k
IG9mIHRoZSBmaWxlL2Jsb2IuCisgICAgICAgIFdlYkZpbGVJbmZvIGZpbGVJbmZvOworICAgIH07
CisKKyAgICB+V2ViQmxvYlN0b3JhZ2VEYXRhKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJCbG9i
U3RvcmFnZURhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKyAgICBXZWJCbG9iU3RvcmFnZURhdGEo
Y29uc3QgV2ViQmxvYlN0b3JhZ2VEYXRhJiBiKSA6IG1fcHJpdmF0ZSgwKSB7IGFzc2lnbihiKTsg
fQorICAgIFdlYkJsb2JTdG9yYWdlRGF0YSYgb3BlcmF0b3I9KGNvbnN0IFdlYkJsb2JTdG9yYWdl
RGF0YSYgYikKKyAgICB7CisgICAgICAgIGFzc2lnbihiKTsKKyAgICAgICAgcmV0dXJuICp0aGlz
OworICAgIH0KKworICAgIFdFQktJVF9BUEkgdm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lU
X0FQSSB2b2lkIHJlc2V0KCk7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFzc2lnbihjb25zdCBXZWJC
bG9iU3RvcmFnZURhdGEmKTsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1f
cHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgorICAgIFdF
QktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0cmlldmVzIHRo
ZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4LiBSZXR1cm5zIGZhbHNlIGlm
CisgICAgLy8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4KKyAgICBXRUJLSVRfQVBJIGJvb2wgaXRl
bUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25zdDsKKworICAgIFdFQktJVF9BUEkg
V2ViU3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcg
Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
KyAgICBXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJs
b2JTdG9yYWdlRGF0YT4mKTsKKyAgICBXZWJCbG9iU3RvcmFnZURhdGEmIG9wZXJhdG9yPShjb25z
dCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPiYpOworICAgIG9wZXJh
dG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+KCkgY29uc3Q7Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICB2b2lkIGFzc2lnbihXZWJCbG9iU3RvcmFnZURhdGFQcml2
YXRlKik7CisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSogbV9wcml2YXRlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iU3RvcmFnZURhdGFfaApk
aWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaCBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKaW5kZXggNTk1OWExYy4uMjUxZDU4NiAx
MDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCkBAIC00Nyw2ICs0Nyw3IEBAIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNz
IFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50OworY2xhc3MgV2ViQmxvYkRhdGE7CiBjbGFz
cyBXZWJDbGlwYm9hcmQ7CiBjbGFzcyBXZWJDb29raWVKYXI7CiBjbGFzcyBXZWJGaWxlU3lzdGVt
OwpAQCAtODMsNiArODQsMTUgQEAgcHVibGljOgogICAgIC8vIE1heSByZXR1cm4gbnVsbC4KICAg
ICB2aXJ0dWFsIFdlYkNvb2tpZUphciogY29va2llSmFyKCkgeyByZXR1cm4gMDsgfQogCisgICAg
Ly8gQmxvYiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyAgICAvLyBSZWdpc3RlciBhIEJsb2Igb2JqZWN0IGJ5IGl0cyB1
cmwuCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBjb25z
dCBXZWJCbG9iRGF0YSYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwpIHsgfQorCisgICAgLy8gVW5yZWdpc3Rl
ciBhIEJsb2Igb2JqZWN0IGJ5IGl0cyB1cmwuCisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFdlYlVSTCYpIHsgfQorCiAgICAgLy8gRE9NIFN0b3JhZ2UgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogICAgIC8vIFJldHVy
biBhIExvY2FsU3RvcmFnZSBuYW1lc3BhY2UgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZm9sbG93
aW5nIHBhdGguCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVBy
b3h5LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNjg5YzIKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmNwcApAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJC
bG9iUmVnaXN0cnlQcm94eS5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJL
VVJMLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJXZWJCbG9iRGF0
YS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorCisvLyBXZSBhcmUgcGFydCBvZiB0aGUgV2ViS2l0IGltcGxl
bWVudGF0aW9uLgordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitCbG9iUmVnaXN0cnkmIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQoreworICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlQ
cm94eSwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK3ZvaWQgQmxv
YlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1cmwsIFBhc3NPd25Q
dHI8QmxvYkRhdGE+IGJsb2JEYXRhKQoreworICAgIFdlYkJsb2JEYXRhIHdlYkJsb2JEYXRhKGJs
b2JEYXRhKTsKKyAgICB3ZWJLaXRDbGllbnQoKS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwgd2ViQmxv
YkRhdGEpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit7CisgICAgd2ViS2l0Q2xpZW50KCkt
PnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJv
eHk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sKKyAgICB3ZWJLaXRDbGll
bnQoKS0+dW5yZWdpc3RlckJsb2JVUkwodXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5
UHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2VjODEzCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oCkBAIC0wLDAgKzEsNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEJsb2JSZWdpc3RyeVByb3h5X2gKKyNkZWZpbmUgQmxvYlJlZ2lzdHJ5UHJveHlfaAor
CisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnkuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iUmVnaXN0cnlQcm94eSA6IHB1YmxpYyBCbG9iUmVn
aXN0cnkgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3Qg
S1VSTCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpOworICAgIHZpcnR1YWwgdm9p
ZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJik7CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KikgeyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwg
Ym9vbCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFJl
c291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNoYXI+JiBkYXRhKSB7IHJl
dHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgfkJsb2JSZWdpc3RyeVByb3h5
KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
QkxPQikKKworI2VuZGlmIC8vIEJsb2JSZWdpc3RyeVByb3h5X2gKZGlmZiAtLWdpdCBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJC
bG9iRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2UzMzhlMwot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCkBA
IC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkJsb2JEYXRh
LmgiCisKKyNpbmNsdWRlICJCbG9iRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JEYXRhUHJpdmF0ZSA6IHB1Ymxp
YyBCbG9iRGF0YSB7Cit9OworCit2b2lkIFdlYkJsb2JEYXRhOjppbml0aWFsaXplKCkKK3sKKyAg
ICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQmxvYkRhdGFQcml2YXRlKj4oQmxvYkRhdGE6OmNyZWF0
ZSgpLmxlYWtQdHIoKSkpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjpyZXNldCgpCit7CisgICAg
YXNzaWduKDApOworfQorCitzaXplX3QgV2ViQmxvYkRhdGE6Oml0ZW1Db3VudCgpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXRlbXMoKS5z
aXplKCk7Cit9CisKK2Jvb2wgV2ViQmxvYkRhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0m
IHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGlmIChpbmRl
eCA+PSBtX3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX3ByaXZhdGUtPml0ZW1zKClbaW5kZXhd
OworICAgIHJlc3VsdC5vZmZzZXQgPSBpdGVtLm9mZnNldDsKKyAgICByZXN1bHQubGVuZ3RoID0g
aXRlbS5sZW5ndGg7CisgICAgcmVzdWx0LmZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUgPSBpdGVt
LmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgeworICAg
IGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5
cGVEYXRhOworICAgICAgICByZXN1bHQuZGF0YS5hc3NpZ24oaXRlbS5kYXRhLmRhdGEoKSwgc3Rh
dGljX2Nhc3Q8c2l6ZV90PihpdGVtLmRhdGEubGVuZ3RoKCkpKTsKKyAgICAgICAgcmVzdWx0LnBh
dGhPclVSTC5yZXNldCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEJsb2JEYXRh
SXRlbTo6RmlsZToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlRmlsZTsKKyAgICAg
ICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVSTCA9IGl0ZW0u
cGF0aDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkJsb2I6
CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZUJsb2I7CisgICAgICAgIHJlc3VsdC5k
YXRhLnJlc2V0KCk7CisgICAgICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBpdGVtLnVybDsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRGF0YShjb25zdCBXZWJE
YXRhJiBkYXRhKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBw
ZW5kRGF0YShDU3RyaW5nKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSkpOworfQorCit2b2lkIFdl
YkJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgpCit7CisgICAg
QVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZpbGVQYXRoKTsK
K30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQ
YXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBXZWJGaWxlSW5m
byYgZmlsZUluZm8pCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5h
cHBlbmRGaWxlKGZpbGVQYXRoLCBvZmZzZXQsIGxlbmd0aCwgZmlsZUluZm8ubW9kaWZpY2F0aW9u
VGltZSk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVuZEJsb2IoY29uc3QgV2ViU3RyaW5n
JiBibG9iVVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoKQoreworICAgIEFT
U0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kQmxvYihLVVJMKFBhcnNlZFVS
TFN0cmluZywgYmxvYlVSTCksIG9mZnNldCwgbGVuZ3RoKTsKK30KKworV2ViU3RyaW5nIFdlYkJs
b2JEYXRhOjpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKK30KKwordm9pZCBXZWJCbG9iRGF0
YTo6c2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJiBjb250ZW50VHlwZSkKK3sKKyAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPnNldENvbnRlbnRUeXBlKGNvbnRlbnRU
eXBlKTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250ZW50RGlzcG9zaXRpb24oKSBj
b25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNv
bnRlbnREaXNwb3NpdGlvbigpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjpzZXRDb250ZW50RGlz
cG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiBjb250ZW50RGlzcG9zaXRpb24pCit7CisgICAgQVNT
RVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5zZXRDb250ZW50RGlzcG9zaXRpb24oY29u
dGVudERpc3Bvc2l0aW9uKTsKK30KKworV2ViQmxvYkRhdGE6OldlYkJsb2JEYXRhKGNvbnN0IFBh
c3NPd25QdHI8QmxvYkRhdGE+JiBkYXRhKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdl
YkJsb2JEYXRhUHJpdmF0ZSo+KGRhdGEubGVha1B0cigpKSkKK3sKK30KKworV2ViQmxvYkRhdGEm
IFdlYkJsb2JEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxCbG9iRGF0YT4mIGRhdGEp
Cit7CisgICAgYXNzaWduKHN0YXRpY19jYXN0PFdlYkJsb2JEYXRhUHJpdmF0ZSo+KGRhdGEubGVh
a1B0cigpKSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJCbG9iRGF0YTo6b3BlcmF0b3Ig
UGFzc093blB0cjxCbG9iRGF0YT4oKQoreworICAgIFdlYkJsb2JEYXRhUHJpdmF0ZSogdGVtcCA9
IG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSAwOworICAgIHJldHVybiBhZG9wdFB0cih0ZW1w
KTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXNzaWduKFdlYkJsb2JEYXRhUHJpdmF0ZSogcCkK
K3sKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBkZWxldGUgbV9wcml2YXRlOworICAgIG1f
cHJpdmF0ZSA9IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uOGMwOTNlNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXZWJCbG9iUmVnaXN0cnlJbXBsLmgiCisKKyNpbmNsdWRlICJCbG9iUmVn
aXN0cnlJbXBsLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIldlYkJs
b2JEYXRhLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKworI2lmIEVOQUJMRShCTE9CKQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQmxvYlJl
Z2lzdHJ5KiBXZWJCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2ViQmxvYlJlZ2lzdHJ5SW1wbCwg
aW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gJmluc3RhbmNlOworfQorCitXZWJCbG9iUmVnaXN0
cnlJbXBsOjpXZWJCbG9iUmVnaXN0cnlJbXBsKCkKKyAgICA6IG1fYmxvYlJlZ2lzdHJ5KG5ldyBX
ZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsKCkpCit7Cit9CisKK1dlYkJsb2JSZWdpc3RyeUltcGw6
On5XZWJCbG9iUmVnaXN0cnlJbXBsKCkKK3sKK30KKwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBs
OjpyZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiB1cmwsIFdlYkJsb2JEYXRhJiBibG9iRGF0
YSkKK3sKKyAgICBtX2Jsb2JSZWdpc3RyeS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxvYkRhdGEp
OworfQorCit2b2lkIFdlYkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBX
ZWJVUkwmIHVybCwgY29uc3QgV2ViVVJMJiBzcmNVUkwpCit7CisgICAgbV9ibG9iUmVnaXN0cnkt
PnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5
SW1wbDo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgbV9ibG9i
UmVnaXN0cnktPnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0
YSBXZWJCbG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJiB1
cmwpCit7CisgICAgcmV0dXJuIG1fYmxvYlJlZ2lzdHJ5LT5nZXRCbG9iRGF0YUZyb21VUkwodXJs
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1MTJkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYkJsb2JSZWdpc3RyeUltcGxfaAorI2RlZmluZSBXZWJCbG9iUmVnaXN0cnlJbXBsX2gKKwor
I2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JSZWdpc3Ry
eUltcGw7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeUlt
cGwgOiBwdWJsaWMgV2ViQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBXZWJCbG9iUmVnaXN0
cnlJbXBsKCk7CisgICAgdmlydHVhbCB+V2ViQmxvYlJlZ2lzdHJ5SW1wbCgpOworCisgICAgdmly
dHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBXZWJCbG9iRGF0YSYpOwor
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2Vi
VVJMJiBzcmNVUkwpOworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBX
ZWJVUkwmKTsKKyAgICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdlRGF0YSBnZXRCbG9iRGF0YUZyb21V
UkwoY29uc3QgV2ViVVJMJik7CisKK3ByaXZhdGU6CisgICAgV1RGOjpPd25QdHI8V2ViQ29yZTo6
QmxvYlJlZ2lzdHJ5SW1wbD4gbV9ibG9iUmVnaXN0cnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShCTE9CKQorCisjZW5kaWYgLy8gV2ViQmxvYlJlZ2lz
dHJ5SW1wbF9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdl
RGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ3NzVlOQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcApAQCAtMCwwICsx
LDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0Ogor
ICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisg
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEu
aCIKKworI2luY2x1ZGUgIkJsb2JTdG9yYWdlRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVBy
aXZhdGUgOiBwdWJsaWMgQmxvYlN0b3JhZ2VEYXRhIHsKK307CisKK3ZvaWQgV2ViQmxvYlN0b3Jh
Z2VEYXRhOjppbml0aWFsaXplKCkKK3sKKyAgICBhc3NpZ24oc3RhdGljX2Nhc3Q8V2ViQmxvYlN0
b3JhZ2VEYXRhUHJpdmF0ZSo+KEJsb2JTdG9yYWdlRGF0YTo6Y3JlYXRlKCkucmVsZWFzZVJlZigp
KSk7Cit9CisKK3ZvaWQgV2ViQmxvYlN0b3JhZ2VEYXRhOjpyZXNldCgpCit7CisgICAgYXNzaWdu
KDApOworfQorCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0YTo6YXNzaWduKGNvbnN0IFdlYkJsb2JT
dG9yYWdlRGF0YSYgb3RoZXIpCit7CisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSogcCA9
IGNvbnN0X2Nhc3Q8V2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7
CisgICAgaWYgKHApCisgICAgICAgIHAtPnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKworc2l6
ZV90IFdlYkJsb2JTdG9yYWdlRGF0YTo6aXRlbUNvdW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKTsKK30KKwor
Ym9vbCBXZWJCbG9iU3RvcmFnZURhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3Vs
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGlmIChpbmRleCA+PSBt
X3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
b25zdCBCbG9iU3RvcmFnZURhdGFJdGVtJiBpdGVtID0gbV9wcml2YXRlLT5pdGVtcygpW2luZGV4
XTsKKyAgICByZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7CisgICAgcmVzdWx0Lmxlbmd0aCA9
IGl0ZW0ubGVuZ3RoOworICAgIHJlc3VsdC5maWxlSW5mby5tb2RpZmljYXRpb25UaW1lID0gaXRl
bS5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWU7CisgICAgc3dpdGNoIChpdGVtLnR5cGUpIHsKKyAg
ICBjYXNlIEJsb2JTdG9yYWdlRGF0YUl0ZW06OkRhdGE6CisgICAgICAgIHJlc3VsdC50eXBlID0g
SXRlbTo6VHlwZURhdGE7CisgICAgICAgIHJlc3VsdC5kYXRhLmFzc2lnbihpdGVtLmRhdGEuZGF0
YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0YS5sZW5ndGgoKSkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEJsb2JTdG9yYWdlRGF0YUl0ZW06OkZpbGU6CisgICAgICAg
IHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZUZpbGU7CisgICAgICAgIHJlc3VsdC5wYXRoID0gaXRl
bS5wYXRoOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXZWJTdHJpbmcgV2ViQmxvYlN0b3JhZ2VE
YXRhOjpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JT
dG9yYWdlRGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRpb24oKTsKK30K
KworV2ViQmxvYlN0b3JhZ2VEYXRhOjpXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgUGFzc1JlZlB0
cjxCbG9iU3RvcmFnZURhdGE+JiBkYXRhKQorICAgIDogbV9wcml2YXRlKHN0YXRpY19jYXN0PFdl
YkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqPihkYXRhLnJlbGVhc2VSZWYoKSkpCit7Cit9CisKK1dl
YkJsb2JTdG9yYWdlRGF0YSYgV2ViQmxvYlN0b3JhZ2VEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFz
c1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+JiBkYXRhKQoreworICAgIGFzc2lnbihzdGF0aWNfY2Fz
dDxXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlKj4oZGF0YS5yZWxlYXNlUmVmKCkpKTsKKyAgICBy
ZXR1cm4gKnRoaXM7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3IgUGFzc1JlZlB0
cjxCbG9iU3RvcmFnZURhdGE+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlOworfQor
Cit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0YTo6YXNzaWduKFdlYkJsb2JTdG9yYWdlRGF0YVByaXZh
dGUqIHApCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVy
CisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1f
cHJpdmF0ZSA9IHA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="52801"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="52802"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64279</attachid>
            <date>2010-08-12 16:08:33 -0700</date>
            <delta_ts>2010-08-12 16:30:40 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_4</filename>
            <type>text/plain</type>
            <size>34937</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTcyZmUzOS4uNGJlZGFmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wOC0xMiAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
QmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpIHNvIHRoYXQgY2hyb21pdW0KKyAgICAgICAgdXNlcyB0
aGUgaW1wbGVtZW50YXRpb24gaW4gV2ViS2l0IENocm9taXVtLgorCisgICAgICAgICogaHRtbC9C
bG9iUmVnaXN0cnlJbXBsLmNwcDoKKwogMjAxMC0wOC0xMiAgQmVuIE11cmRvY2ggIDxiZW5tQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9i
UmVnaXN0cnlJbXBsLmNwcAppbmRleCA3NGU1MTc1Li41NDJiNGMwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JSZWdp
c3RyeUltcGwuY3BwCkBAIC03MSwxMSArNzEsMTMgQEAgYm9vbCBCbG9iUmVnaXN0cnlJbXBsOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBCbG9iUmVn
aXN0cnkmIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CisjZW5kaWYKIAogdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbXMo
QmxvYlN0b3JhZ2VEYXRhKiBibG9iU3RvcmFnZURhdGEsIGNvbnN0IEJsb2JTdG9yYWdlRGF0YUl0
ZW1MaXN0JiBpdGVtcykKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZkOTI5MzEuLmYxMzU0Y2IgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTA4LTEyICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbY2hyb21pdW1dIENocm9taXVtIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgYmxvYiBkYXRh
IGFuZCBibG9iIHJlZ2lzdHJ5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDM4NzEKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVi
bGljL1dlYkJsb2JEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJCbG9iUmVnaXN0
cnkuaDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YktpdENsaWVudDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0Q2xp
ZW50Ojp1bnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5
LmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9XZWJCbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJC
bG9iUmVnaXN0cnlJbXBsLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JSZWdpc3Ry
eUltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHA6IEFk
ZGVkLgorCiAyMDEwLTA4LTEyICBKb2huIEdyZWdnICA8am9obm55Z0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAxMjNhZWQ1
Li43ZjYyNGU4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYgKzExOSw5IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmxvYkRhdGEuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaCcsCisgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNhbnZhcy5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2FyZC5oJywKQEAgLTI4NCw2ICsyODcs
OCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmgnLAorICAgICAgICAg
ICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQm91bmRPYmplY3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2JqZWN0LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAtMzcxLDYgKzM3NiwxMCBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJCbG9iRGF0YS5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ2FjaGUu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9yLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNjYjM2Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCkBAIC0wLDAgKzEsMTAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJCbG9iRGF0YV9oCisjZGVmaW5lIFdlYkJsb2JEYXRhX2gKKworI2luY2x1
ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYlN0
cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7
IGNsYXNzIEJsb2JEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGNsYXNzIFBhc3NPd25QdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViQmxvYkRhdGFQcml2YXRlOworCitjbGFzcyBXZWJCbG9iRGF0YSB7CitwdWJsaWM6Cisg
ICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlwZURhdGEsIFR5cGVGaWxlLCBUeXBl
QmxvYiB9IHR5cGU7CisgICAgICAgIFdlYkRhdGEgZGF0YTsKKyAgICAgICAgV2ViU3RyaW5nIHBh
dGhPclVSTDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAgICAgICAgbG9uZyBsb25nIGxl
bmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS9ibG9iLgorICAgICAg
ICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldlYkJsb2JEYXRhKCkgeyBy
ZXNldCgpOyB9CisKKyAgICBXZWJCbG9iRGF0YSgpIDogbV9wcml2YXRlKDApIHsgfQorCisgICAg
V0VCS0lUX0FQSSB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQo
KTsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisg
ICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgc2l6ZV90
IGl0ZW1Db3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0cmlldmVzIHRoZSB2YWx1ZXMgb2YgdGhl
IGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4LiAgUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGluZGV4
IGlzIG91dCBvZiBib3VuZHMuCisgICAgV0VCS0lUX0FQSSBib29sIGl0ZW1BdChzaXplX3QgaW5k
ZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3Q7CisKKyAgICAvLyBBcHBlbmRzIHRvIHRoZSBsaXN0IG9m
IGl0ZW1zLgorICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmKTsK
KyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRo
KTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQ
YXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBXZWJGaWxlSW5m
byYpOworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFdlYlN0cmluZyYgYmxv
YlVSTCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7CisKKyAgICBXRUJLSVRf
QVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgdm9pZCBz
ZXRDb250ZW50VHlwZShjb25zdCBXZWJTdHJpbmcmKTsKKworICAgIFdFQktJVF9BUEkgV2ViU3Ry
aW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OworICAgIFdFQktJVF9BUEkgdm9pZCBzZXRD
b250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJik7CisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyAgICBXZWJCbG9iRGF0YShjb25zdCBXVEY6OlBhc3NPd25QdHI8V2ViQ29yZTo6
QmxvYkRhdGE+Jik7CisgICAgV2ViQmxvYkRhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NP
d25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzT3duUHRy
PFdlYkNvcmU6OkJsb2JEYXRhPigpOworI2VuZGlmCisKK3ByaXZhdGU6CisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgdm9pZCBhc3NpZ24oY29uc3QgV1RGOjpQYXNzT3duUHRyPFdlYkNv
cmU6OkJsb2JEYXRhPiYpOworI2VuZGlmCisgICAgV2ViQmxvYkRhdGFQcml2YXRlKiBtX3ByaXZh
dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkJsb2JEYXRh
X2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0M2YzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYkJsb2JSZWdpc3RyeV9oCisjZGVmaW5lIFdlYkJsb2JSZWdpc3RyeV9oCisKKyNpbmNsdWRl
ICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YkJsb2JEYXRhOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMOworCitjbGFzcyBXZWJC
bG9iUmVnaXN0cnkgeworcHVibGljOgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkJsb2JSZWdp
c3RyeSogaW5zdGFuY2UoKTsKKworICAgIHZpcnR1YWwgfldlYkJsb2JSZWdpc3RyeSgpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBXZWJCbG9i
RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVS
TCYsIGNvbnN0IFdlYlVSTCYgc3JjVVJMKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdl
RGF0YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJikgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iUmVnaXN0cnlfaApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOWY5N2MyYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
QmxvYlN0b3JhZ2VEYXRhX2gKKyNkZWZpbmUgV2ViQmxvYlN0b3JhZ2VEYXRhX2gKKworI2luY2x1
ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYlN0
cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7
IGNsYXNzIEJsb2JTdG9yYWdlRGF0YTsgfQorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGU7CisKK2NsYXNzIFdlYkJsb2JTdG9y
YWdlRGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlw
ZURhdGEsIFR5cGVGaWxlIH0gdHlwZTsKKyAgICAgICAgV2ViRGF0YSBkYXRhOworICAgICAgICBX
ZWJTdHJpbmcgcGF0aDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAgICAgICAgbG9uZyBs
b25nIGxlbmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS9ibG9iLgor
ICAgICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldlYkJsb2JTdG9y
YWdlRGF0YSgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkgOiBtX3By
aXZhdGUoMCkgeyB9CisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKGNvbnN0IFdlYkJsb2JTdG9yYWdl
RGF0YSYgYikgOiBtX3ByaXZhdGUoMCkgeyBhc3NpZ24oYik7IH0KKyAgICBXZWJCbG9iU3RvcmFn
ZURhdGEmIG9wZXJhdG9yPShjb25zdCBXZWJCbG9iU3RvcmFnZURhdGEmIGIpCisgICAgeworICAg
ICAgICBhc3NpZ24oYik7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBXRUJL
SVRfQVBJIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIFdFQktJVF9BUEkgdm9pZCByZXNldCgpOwor
ICAgIFdFQktJVF9BUEkgdm9pZCBhc3NpZ24oY29uc3QgV2ViQmxvYlN0b3JhZ2VEYXRhJik7CisK
KyAgICBib29sIGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIC8v
IFJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtcy4KKyAgICBXRUJLSVRfQVBJIHNpemVfdCBpdGVt
Q291bnQoKSBjb25zdDsKKworICAgIC8vIFJldHJpZXZlcyB0aGUgdmFsdWVzIG9mIHRoZSBpdGVt
IGF0IHRoZSBnaXZlbiBpbmRleC4gUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGluZGV4IGlzIG91
dCBvZiBib3VuZHMuCisgICAgV0VCS0lUX0FQSSBib29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIEl0
ZW0mIHJlc3VsdCkgY29uc3Q7CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlw
ZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigp
IGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViQmxvYlN0b3JhZ2VE
YXRhKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+Jik7Cisg
ICAgV2ViQmxvYlN0b3JhZ2VEYXRhJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6Cisj
aWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBhc3NpZ24oY29uc3QgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKKyNlbmRpZgorICAgIFdlYkJsb2JT
dG9yYWdlRGF0YVByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViQmxvYlN0b3JhZ2VEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YktpdENsaWVudC5oCmluZGV4IDU5NTlhMWMuLjI1MWQ1ODYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaApAQCAtNDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
Y2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3Q7CiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hl
SG9zdENsaWVudDsKK2NsYXNzIFdlYkJsb2JEYXRhOwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xh
c3MgV2ViQ29va2llSmFyOwogY2xhc3MgV2ViRmlsZVN5c3RlbTsKQEAgLTgzLDYgKzg0LDE1IEBA
IHB1YmxpYzoKICAgICAvLyBNYXkgcmV0dXJuIG51bGwuCiAgICAgdmlydHVhbCBXZWJDb29raWVK
YXIqIGNvb2tpZUphcigpIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIEJsb2IgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisg
ICAgLy8gUmVnaXN0ZXIgYSBCbG9iIG9iamVjdCBieSBpdHMgdXJsLgorICAgIHZpcnR1YWwgdm9p
ZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViQmxvYkRhdGEmKSB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYsIGNvbnN0IFdl
YlVSTCYgc3JjVVJMKSB7IH0KKworICAgIC8vIFVucmVnaXN0ZXIgYSBCbG9iIG9iamVjdCBieSBp
dHMgdXJsLgorICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwm
KSB7IH0KKwogICAgIC8vIERPTSBTdG9yYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgICAvLyBSZXR1cm4gYSBMb2NhbFN0b3JhZ2UgbmFt
ZXNwYWNlIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIGZvbGxvd2luZyBwYXRoLgpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45MDY4OWMyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9CbG9iUmVnaXN0cnlQcm94eS5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5UHJveHkuaCIK
KworI2luY2x1ZGUgIkJsb2JEYXRhLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiV2ViQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJL
aXQuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNp
bmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KworLy8gV2UgYXJlIHBhcnQgb2YgdGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbi4KK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmxvYlJlZ2lzdHJ5JiBC
bG9iUmVnaXN0cnk6Omluc3RhbmNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQmxvYlJlZ2lzdHJ5UHJveHksIGluc3RhbmNlLCAoKSk7
CisgICAgcmV0dXJuIGluc3RhbmNlOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdp
c3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0
YSkKK3sKKyAgICBXZWJCbG9iRGF0YSB3ZWJCbG9iRGF0YShibG9iRGF0YSk7CisgICAgd2ViS2l0
Q2xpZW50KCktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHdlYkJsb2JEYXRhKTsKK30KKwordm9pZCBC
bG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
S1VSTCYgc3JjVVJMKQoreworICAgIHdlYktpdENsaWVudCgpLT5yZWdpc3RlckJsb2JVUkwodXJs
LCBzcmNVUkwpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojp1bnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBLVVJMJiB1cmwpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnVucmVnaXN0ZXJCbG9i
VVJMKHVybCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmggYi9XZWJLaXQvY2hy
b21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uM2NlYzgxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
QmxvYlJlZ2lzdHJ5UHJveHkuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iUmVnaXN0cnlQ
cm94eV9oCisjZGVmaW5lIEJsb2JSZWdpc3RyeVByb3h5X2gKKworI2lmIEVOQUJMRShCTE9CKQor
CisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQmxvYlJlZ2lzdHJ5UHJveHkgOiBwdWJsaWMgQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAg
ICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJs
b2JEYXRhPik7CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwg
Y29uc3QgS1VSTCYgc3JjVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwo
Y29uc3QgS1VSTCYpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBj
cmVhdGVSZXNvdXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRs
ZUNsaWVudCopIHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZFJlc291cmNlU3lu
Y2hyb25vdXNseShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3Vy
Y2VSZXNwb25zZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgeyByZXR1cm4gZmFsc2U7IH0KKworcHJp
dmF0ZToKKyAgICB2aXJ0dWFsIH5CbG9iUmVnaXN0cnlQcm94eSgpIHsgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKKyNlbmRpZiAvLyBC
bG9iUmVnaXN0cnlQcm94eV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJs
b2JEYXRhLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YmI1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JEYXRhLmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJCbG9iRGF0YS5oIgorCisjaW5jbHVkZSAiQmxv
YkRhdGEuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitjbGFzcyBXZWJCbG9iRGF0YVByaXZhdGUgOiBwdWJsaWMgQmxvYkRhdGEgeworfTsKKwor
dm9pZCBXZWJCbG9iRGF0YTo6aW5pdGlhbGl6ZSgpCit7CisgICAgYXNzaWduKEJsb2JEYXRhOjpj
cmVhdGUoKSk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OnJlc2V0KCkKK3sKKyAgICBhc3NpZ24o
MCk7Cit9CisKK3NpemVfdCBXZWJCbG9iRGF0YTo6aXRlbUNvdW50KCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKTsK
K30KKworYm9vbCBXZWJCbG9iRGF0YTo6aXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0
KSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworCisgICAgaWYgKGluZGV4ID49IG1f
cHJpdmF0ZS0+aXRlbXMoKS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNv
bnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9IG1fcHJpdmF0ZS0+aXRlbXMoKVtpbmRleF07CisgICAg
cmVzdWx0Lm9mZnNldCA9IGl0ZW0ub2Zmc2V0OworICAgIHJlc3VsdC5sZW5ndGggPSBpdGVtLmxl
bmd0aDsKKyAgICByZXN1bHQuZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSA9IGl0ZW0uZXhwZWN0
ZWRNb2RpZmljYXRpb25UaW1lOworICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7CisgICAgY2FzZSBC
bG9iRGF0YUl0ZW06OkRhdGE6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZURhdGE7
CisgICAgICAgIHJlc3VsdC5kYXRhLmFzc2lnbihpdGVtLmRhdGEuZGF0YSgpLCBzdGF0aWNfY2Fz
dDxzaXplX3Q+KGl0ZW0uZGF0YS5sZW5ndGgoKSkpOworICAgICAgICByZXN1bHQucGF0aE9yVVJM
LnJlc2V0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpG
aWxlOgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVGaWxlOworICAgICAgICByZXN1
bHQuZGF0YS5yZXNldCgpOworICAgICAgICByZXN1bHQucGF0aE9yVVJMID0gaXRlbS5wYXRoOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6QmxvYjoKKyAgICAg
ICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlQmxvYjsKKyAgICAgICAgcmVzdWx0LmRhdGEucmVz
ZXQoKTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVSTCA9IGl0ZW0udXJsOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjphcHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmIGRh
dGEpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5hcHBlbmREYXRh
KENTdHJpbmcoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7Cit9CisKK3ZvaWQgV2ViQmxvYkRh
dGE6OmFwcGVuZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCkKK3sKKyAgICBBU1NFUlQo
IWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBhdGgpOworfQorCit2
b2lkIFdlYkJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgsIGxv
bmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGNvbnN0IFdlYkZpbGVJbmZvJiBmaWxl
SW5mbykKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZEZp
bGUoZmlsZVBhdGgsIG9mZnNldCwgbGVuZ3RoLCBmaWxlSW5mby5tb2RpZmljYXRpb25UaW1lKTsK
K30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kQmxvYihjb25zdCBXZWJTdHJpbmcmIGJsb2JV
UkwsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgQVNTRVJUKCFp
c051bGwoKSk7CisgICAgbV9wcml2YXRlLT5hcHBlbmRCbG9iKEtVUkwoUGFyc2VkVVJMU3RyaW5n
LCBibG9iVVJMKSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCitXZWJTdHJpbmcgV2ViQmxvYkRhdGE6
OmNvbnRlbnRUeXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5jb250ZW50VHlwZSgpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjpzZXRD
b250ZW50VHlwZShjb25zdCBXZWJTdHJpbmcmIGNvbnRlbnRUeXBlKQoreworICAgIEFTU0VSVCgh
aXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGVudFR5cGUoY29udGVudFR5cGUpOwor
fQorCitXZWJTdHJpbmcgV2ViQmxvYkRhdGE6OmNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0Cit7
CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudERp
c3Bvc2l0aW9uKCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OnNldENvbnRlbnREaXNwb3NpdGlv
bihjb25zdCBXZWJTdHJpbmcmIGNvbnRlbnREaXNwb3NpdGlvbikKK3sKKyAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPnNldENvbnRlbnREaXNwb3NpdGlvbihjb250ZW50RGlz
cG9zaXRpb24pOworfQorCitXZWJCbG9iRGF0YTo6V2ViQmxvYkRhdGEoY29uc3QgUGFzc093blB0
cjxCbG9iRGF0YT4mIGRhdGEpCisgICAgOiBtX3ByaXZhdGUoMCkKK3sKKyAgICBhc3NpZ24oZGF0
YSk7Cit9CisKK1dlYkJsb2JEYXRhJiBXZWJCbG9iRGF0YTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NP
d25QdHI8QmxvYkRhdGE+JiBkYXRhKQoreworICAgIGFzc2lnbihkYXRhKTsKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1dlYkJsb2JEYXRhOjpvcGVyYXRvciBQYXNzT3duUHRyPEJsb2JEYXRhPigp
Cit7CisgICAgV2ViQmxvYkRhdGFQcml2YXRlKiB0ZW1wID0gbV9wcml2YXRlOworICAgIG1fcHJp
dmF0ZSA9IDA7CisgICAgcmV0dXJuIGFkb3B0UHRyKHRlbXApOworfQorCit2b2lkIFdlYkJsb2JE
YXRhOjphc3NpZ24oY29uc3QgUGFzc093blB0cjxCbG9iRGF0YT4mIGRhdGEpCit7CisgICAgaWYg
KG1fcHJpdmF0ZSkKKyAgICAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSBz
dGF0aWNfY2FzdDxXZWJCbG9iRGF0YVByaXZhdGUqPihkYXRhLmxlYWtQdHIoKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJC
bG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwOTNlNgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5j
cHAKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJCbG9i
UmVnaXN0cnlJbXBsLmgiCisKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnlJbXBsLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIldlYkJsb2JEYXRhLmgiCisjaW5jbHVkZSAi
V2ViVVJMLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIEVOQUJMRShCTE9C
KQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViQmxvYlJlZ2lzdHJ5KiBXZWJCbG9iUmVnaXN0
cnk6Omluc3RhbmNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoV2ViQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKKyAgICBy
ZXR1cm4gJmluc3RhbmNlOworfQorCitXZWJCbG9iUmVnaXN0cnlJbXBsOjpXZWJCbG9iUmVnaXN0
cnlJbXBsKCkKKyAgICA6IG1fYmxvYlJlZ2lzdHJ5KG5ldyBXZWJDb3JlOjpCbG9iUmVnaXN0cnlJ
bXBsKCkpCit7Cit9CisKK1dlYkJsb2JSZWdpc3RyeUltcGw6On5XZWJCbG9iUmVnaXN0cnlJbXBs
KCkKK3sKK30KKwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViVVJMJiB1cmwsIFdlYkJsb2JEYXRhJiBibG9iRGF0YSkKK3sKKyAgICBtX2Jsb2JSZWdp
c3RyeS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxvYkRhdGEpOworfQorCit2b2lkIFdlYkJsb2JS
ZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2Vi
VVJMJiBzcmNVUkwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lzdGVyQmxvYlVSTCh1cmws
IHNyY1VSTCk7Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3RlckJsb2JV
UkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnVucmVnaXN0ZXJC
bG9iVVJMKHVybCk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YSBXZWJCbG9iUmVnaXN0cnlJbXBs
OjpnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIG1f
YmxvYlJlZ2lzdHJ5LT5nZXRCbG9iRGF0YUZyb21VUkwodXJsKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJCbG9iUmVnaXN0cnlJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGE1MTJkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJl
Z2lzdHJ5SW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeUltcGxf
aAorI2RlZmluZSBXZWJCbG9iUmVnaXN0cnlJbXBsX2gKKworI2lmIEVOQUJMRShCTE9CKQorCisj
aW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JSZWdpc3RyeUltcGw7IH0KKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeUltcGwgOiBwdWJsaWMgV2ViQmxvYlJl
Z2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBXZWJCbG9iUmVnaXN0cnlJbXBsKCk7CisgICAgdmlydHVh
bCB+V2ViQmxvYlJlZ2lzdHJ5SW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxv
YlVSTChjb25zdCBXZWJVUkwmLCBXZWJCbG9iRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwpOworICAgIHZp
cnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmKTsKKyAgICB2aXJ0dWFs
IFdlYkJsb2JTdG9yYWdlRGF0YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJik7CisK
K3ByaXZhdGU6CisgICAgV1RGOjpPd25QdHI8V2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbD4gbV9i
bG9iUmVnaXN0cnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVO
QUJMRShCTE9CKQorCisjZW5kaWYgLy8gV2ViQmxvYlJlZ2lzdHJ5SW1wbF9oCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNGQyNDQ0YwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworI2luY2x1ZGUgIkJsb2JT
dG9yYWdlRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUgOiBwdWJsaWMgQmxvYlN0
b3JhZ2VEYXRhIHsKK307CisKK3ZvaWQgV2ViQmxvYlN0b3JhZ2VEYXRhOjppbml0aWFsaXplKCkK
K3sKKyAgICBhc3NpZ24oQmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgV2Vi
QmxvYlN0b3JhZ2VEYXRhOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQorCit2b2lkIFdl
YkJsb2JTdG9yYWdlRGF0YTo6YXNzaWduKGNvbnN0IFdlYkJsb2JTdG9yYWdlRGF0YSYgb3RoZXIp
Cit7CisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSogcCA9IGNvbnN0X2Nhc3Q8V2ViQmxv
YlN0b3JhZ2VEYXRhUHJpdmF0ZSo+KG90aGVyLm1fcHJpdmF0ZSk7CisgICAgaWYgKHApCisgICAg
ICAgIHAtPnJlZigpOworICAgIGFzc2lnbihwKTsKK30KKworc2l6ZV90IFdlYkJsb2JTdG9yYWdl
RGF0YTo6aXRlbUNvdW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKTsKK30KKworYm9vbCBXZWJCbG9iU3RvcmFn
ZURhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGlmIChpbmRleCA+PSBtX3ByaXZhdGUtPml0ZW1zKCku
c2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBCbG9iU3RvcmFnZURh
dGFJdGVtJiBpdGVtID0gbV9wcml2YXRlLT5pdGVtcygpW2luZGV4XTsKKyAgICByZXN1bHQub2Zm
c2V0ID0gaXRlbS5vZmZzZXQ7CisgICAgcmVzdWx0Lmxlbmd0aCA9IGl0ZW0ubGVuZ3RoOworICAg
IHJlc3VsdC5maWxlSW5mby5tb2RpZmljYXRpb25UaW1lID0gaXRlbS5leHBlY3RlZE1vZGlmaWNh
dGlvblRpbWU7CisgICAgc3dpdGNoIChpdGVtLnR5cGUpIHsKKyAgICBjYXNlIEJsb2JTdG9yYWdl
RGF0YUl0ZW06OkRhdGE6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZURhdGE7Cisg
ICAgICAgIHJlc3VsdC5kYXRhLmFzc2lnbihpdGVtLmRhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxz
aXplX3Q+KGl0ZW0uZGF0YS5sZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
YXNlIEJsb2JTdG9yYWdlRGF0YUl0ZW06OkZpbGU6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRl
bTo6VHlwZUZpbGU7CisgICAgICAgIHJlc3VsdC5wYXRoID0gaXRlbS5wYXRoOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitXZWJTdHJpbmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpjb250ZW50VHlwZSgp
IGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Y29udGVudFR5cGUoKTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JTdG9yYWdlRGF0YTo6Y29udGVu
dERpc3Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRpb24oKTsKK30KKworV2ViQmxvYlN0b3JhZ2VE
YXRhOjpXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+
JiBkYXRhKQorICAgIDogbV9wcml2YXRlKDApCit7CisgICAgYXNzaWduKGRhdGEpOworfQorCitX
ZWJCbG9iU3RvcmFnZURhdGEmIFdlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3I9KGNvbnN0IFBh
c3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKK3sKKyAgICBhc3NpZ24oZGF0YSk7Cisg
ICAgcmV0dXJuICp0aGlzOworfQorCitXZWJCbG9iU3RvcmFnZURhdGE6Om9wZXJhdG9yIFBhc3NS
ZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZTsK
K30KKwordm9pZCBXZWJCbG9iU3RvcmFnZURhdGE6OmFzc2lnbihjb25zdCBQYXNzUmVmUHRyPEJs
b2JTdG9yYWdlRGF0YT4mIGRhdGEpCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1
cyBieSB0aGUgY2FsbGVyCisgICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5k
ZXJlZigpOworICAgIG1fcHJpdmF0ZSA9IHN0YXRpY19jYXN0PFdlYkJsb2JTdG9yYWdlRGF0YVBy
aXZhdGUqPihkYXRhLmxlYWtSZWYoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="commit-queue"
          id="52816"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64283</attachid>
            <date>2010-08-12 16:30:40 -0700</date>
            <delta_ts>2010-08-12 16:32:51 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_5</filename>
            <type>text/plain</type>
            <size>35797</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAxMzViZmM3Li40OWEzZThjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTAtMDgtMTIgIEdhYm9yIExva2kgIDxsb2tpQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgRml4IHRoZSBhcnJheSBzdWJz
Y3JpcHQgaXMgYWJvdmUgYXJyYXkgYm91bmRzIHdhcm5pbmcgaW4gQnl0ZUFycmF5IG9uIEFSTS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzMzU4CisK
KyAgICAgICAgVGhlIHdhcm5pbmcgaXMgdmVyeSBzaW1pbGFyIHRvIHRoaXMgb25lOiBodHRwOi8v
Z2NjLmdudS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTM3ODYxCisKKyAgICAgICAgKiB3
dGYvQnl0ZUFycmF5LmNwcDoKKyAgICAgICAgKFdURjo6Qnl0ZUFycmF5OjpjcmVhdGUpOgorCiAy
MDEwLTA4LTEyICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFi
b3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9CeXRlQXJyYXkuY3BwIGIvSmF2YVNjcmlwdENvcmUv
d3RmL0J5dGVBcnJheS5jcHAKaW5kZXggNTI2ZjE0Ny4uOTEwYWY1OSAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvd3RmL0J5dGVBcnJheS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL0J5
dGVBcnJheS5jcHAKQEAgLTI1LDEyICsyNSwxMyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiQnl0ZUFycmF5LmgiCisjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgiCiAKIG5hbWVz
cGFjZSBXVEYgewogCiBQYXNzUmVmUHRyPEJ5dGVBcnJheT4gQnl0ZUFycmF5OjpjcmVhdGUoc2l6
ZV90IHNpemUpCiB7Ci0gICAgdW5zaWduZWQgY2hhciogYnVmZmVyID0gbmV3IHVuc2lnbmVkIGNo
YXJbc2l6ZSArIHNpemVvZihCeXRlQXJyYXkpIC0gc2l6ZW9mKHNpemVfdCldOworICAgIHVuc2ln
bmVkIGNoYXIqIGJ1ZmZlciA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemUgKyBPQkpFQ1RfT0ZGU0VU
T0YoQnl0ZUFycmF5LCBtX2RhdGEpXTsKICAgICBBU1NFUlQoKHJlaW50ZXJwcmV0X2Nhc3Q8c2l6
ZV90PihidWZmZXIpICYgMykgPT0gMCk7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoYnVmZmVy
KSBCeXRlQXJyYXkoc2l6ZSkpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9X
ZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxNzJmZTM5Li40YmVkYWY1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTA4LTEyICBKaWFuIExpICA8amlhbmxpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDaHJvbWl1bSBzaWRlIGltcGxlbWVu
dGF0aW9uIG9mIGJsb2IgZGF0YSBhbmQgYmxvYiByZWdpc3RyeS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzODcxCisKKyAgICAgICAgV3JhcCAhUExB
VEZPUk0oQ0hST01JVU0pIGFyb3VuZCBCbG9iUmVnaXN0cnk6Omluc3RhbmNlKCkgc28gdGhhdCBj
aHJvbWl1bQorICAgICAgICB1c2VzIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBXZWJLaXQgQ2hyb21p
dW0uCisKKyAgICAgICAgKiBodG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorCiAyMDEwLTA4LTEy
ICBCZW4gTXVyZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBQ
YXZlbCBGZWxkbWFuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwu
Y3BwIGIvV2ViQ29yZS9odG1sL0Jsb2JSZWdpc3RyeUltcGwuY3BwCmluZGV4IDc0ZTUxNzUuLjU0
MmI0YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcAorKysg
Yi9XZWJDb3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTcxLDExICs3MSwxMyBAQCBi
b29sIEJsb2JSZWdpc3RyeUltcGw6OmxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorI2lmICFQTEFU
Rk9STShDSFJPTUlVTSkKIEJsb2JSZWdpc3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCiB7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJbXBsLCBpbnN0YW5jZSwgKCkp
OwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KKyNlbmRpZgogCiB2b2lkIEJsb2JSZWdpc3RyeUlt
cGw6OmFwcGVuZFN0b3JhZ2VJdGVtcyhCbG9iU3RvcmFnZURhdGEqIGJsb2JTdG9yYWdlRGF0YSwg
Y29uc3QgQmxvYlN0b3JhZ2VEYXRhSXRlbUxpc3QmIGl0ZW1zKQogewpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
NmQ5MjkzMS4uZjEzNTRjYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwor
KysgYi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTAtMDgt
MTIgIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQ2hyb21pdW0gc2lkZSBpbXBs
ZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5kIGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00Mzg3MQorCisgICAgICAgICogV2Vi
S2l0Lmd5cDoKKyAgICAgICAgKiBwdWJsaWMvV2ViQmxvYkRhdGEuaDogQWRkZWQuCisgICAgICAg
ICogcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2Vi
QmxvYlN0b3JhZ2VEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJLaXRDbGllbnQu
aDoKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0Q2xpZW50OjpyZWdpc3RlckJsb2JVUkwpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJLaXRDbGllbnQ6OnVucmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAg
KiBzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvQmxvYlJl
Z2lzdHJ5UHJveHkuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JEYXRhLmNwcDogQWRk
ZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKiBzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvV2Vi
QmxvYlN0b3JhZ2VEYXRhLmNwcDogQWRkZWQuCisKIDIwMTAtMDgtMTIgIEpvaG4gR3JlZ2cgIDxq
b2hubnlnQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCmluZGV4IDEyM2FlZDUuLjdmNjI0ZTggMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0xMTks
NiArMTE5LDkgQEAKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkFwcGxpY2F0aW9uQ2FjaGVI
b3N0Q2xpZW50LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQXR0cmlidXRlLmgnLAog
ICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmluZGluZ3MuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9XZWJCbG9iRGF0YS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkJsb2JS
ZWdpc3RyeS5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNhY2hlLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMvV2ViQ2FudmFzLmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQ2xpcGJv
YXJkLmgnLApAQCAtMjg0LDYgKzI4Nyw4IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9BdXRvRmls
bFBvcHVwTWVudUNsaWVudC5oJywKICAgICAgICAgICAgICAgICAnc3JjL0JhY2tGb3J3YXJkTGlz
dENsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JhY2tGb3J3YXJkTGlzdENs
aWVudEltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAn
LAorICAgICAgICAgICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuaCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9Cb3VuZE9iamVjdC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQm91bmRP
YmplY3QuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWVDbGllbnRJbXBsLmNwcCcsCkBA
IC0zNzEsNiArMzc2LDEwIEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBbmltYXRpb25Db250
cm9sbGVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkF0dHJpYnV0ZS5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViQmluZGluZ3MuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYkJsb2JEYXRhLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJCbG9iUmVnaXN0
cnlJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmgn
LAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJDYWNoZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ29s
b3IuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbW1vbi5jcHAnLApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oIGIvV2ViS2l0L2Nocm9taXVt
L3B1YmxpYy9XZWJCbG9iRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
Ljg1M2NiMzYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJs
b2JEYXRhLmgKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JEYXRhX2gKKyNkZWZpbmUg
V2ViQmxvYkRhdGFfaAorCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkZpbGVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQmxvYkRhdGE7IH0KK25hbWVzcGFjZSBXVEYg
eyB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgUGFzc093blB0cjsgfQorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCbG9iRGF0YVByaXZhdGU7CisKK2NsYXNzIFdl
YkJsb2JEYXRhIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgSXRlbSB7CisgICAgICAgIGVudW0geyBU
eXBlRGF0YSwgVHlwZUZpbGUsIFR5cGVCbG9iIH0gdHlwZTsKKyAgICAgICAgV2ViRGF0YSBkYXRh
OworICAgICAgICBXZWJTdHJpbmcgcGF0aE9yVVJMOworICAgICAgICBsb25nIGxvbmcgb2Zmc2V0
OworICAgICAgICBsb25nIGxvbmcgbGVuZ3RoOyAvLyAtMSBtZWFucyBnbyB0byB0aGUgZW5kIG9m
IHRoZSBmaWxlL2Jsb2IuCisgICAgICAgIFdlYkZpbGVJbmZvIGZpbGVJbmZvOworICAgIH07CisK
KyAgICB+V2ViQmxvYkRhdGEoKSB7IHJlc2V0KCk7IH0KKworICAgIFdlYkJsb2JEYXRhKCkgOiBt
X3ByaXZhdGUoMCkgeyB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgaW5pdGlhbGl6ZSgpOworICAg
IFdFQktJVF9BUEkgdm9pZCByZXNldCgpOworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJl
dHVybiAhbV9wcml2YXRlOyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMu
CisgICAgV0VCS0lUX0FQSSBzaXplX3QgaXRlbUNvdW50KCkgY29uc3Q7CisKKyAgICAvLyBSZXRy
aWV2ZXMgdGhlIHZhbHVlcyBvZiB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXguICBSZXR1cm5z
IGZhbHNlIGlmCisgICAgLy8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4KKyAgICBXRUJLSVRfQVBJ
IGJvb2wgaXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25zdDsKKworICAgIC8v
IEFwcGVuZHMgdG8gdGhlIGxpc3Qgb2YgaXRlbXMuCisgICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVu
ZERhdGEoY29uc3QgV2ViRGF0YSYpOworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRGaWxlKGNv
bnN0IFdlYlN0cmluZyYgZmlsZVBhdGgpOworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRGaWxl
KGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgsIGxvbmcgbG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBs
ZW5ndGgsIGNvbnN0IFdlYkZpbGVJbmZvJik7CisgICAgV0VCS0lUX0FQSSB2b2lkIGFwcGVuZEJs
b2IoY29uc3QgV2ViU3RyaW5nJiBibG9iVVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcg
bGVuZ3RoKTsKKworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7
CisgICAgV0VCS0lUX0FQSSB2b2lkIHNldENvbnRlbnRUeXBlKGNvbnN0IFdlYlN0cmluZyYpOwor
CisgICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSB2b2lkIHNldENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBXZWJTdHJpbmcm
KTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIFdlYkJsb2JEYXRhKGNvbnN0IFdU
Rjo6UGFzc093blB0cjxXZWJDb3JlOjpCbG9iRGF0YT4mKTsKKyAgICBXZWJCbG9iRGF0YSYgb3Bl
cmF0b3I9KGNvbnN0IFdURjo6UGFzc093blB0cjxXZWJDb3JlOjpCbG9iRGF0YT4mKTsKKyAgICBv
cGVyYXRvciBXVEY6OlBhc3NPd25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+KCk7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICB2b2lkIGFzc2lnbihjb25z
dCBXVEY6OlBhc3NPd25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisjZW5kaWYKKyAgICBXZWJC
bG9iRGF0YVByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gV2ViQmxvYkRhdGFfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9XZWJCbG9iUmVnaXN0cnkuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJl
Z2lzdHJ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQzZjM4YQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5LmgK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQmxvYlJlZ2lzdHJ5X2gKKyNkZWZpbmUgV2ViQmxv
YlJlZ2lzdHJ5X2gKKworI2luY2x1ZGUgIldlYkJsb2JTdG9yYWdlRGF0YS5oIgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGE7CitjbGFzcyBXZWJTdHJpbmc7CitjbGFz
cyBXZWJVUkw7CisKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgV0VCS0lU
X0FQSSBzdGF0aWMgV2ViQmxvYlJlZ2lzdHJ5KiBpbnN0YW5jZSgpOworCisgICAgdmlydHVhbCB+
V2ViQmxvYlJlZ2lzdHJ5KCkgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJM
KGNvbnN0IFdlYlVSTCYsIFdlYkJsb2JEYXRhJikgPSAwOworICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJikgPSAwOworICAg
IHZpcnR1YWwgV2ViQmxvYlN0b3JhZ2VEYXRhIGdldEJsb2JEYXRhRnJvbVVSTChjb25zdCBXZWJV
UkwmKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkJs
b2JSZWdpc3RyeV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JT
dG9yYWdlRGF0YS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTY0YzAwCi0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaApAQCAt
MCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJCbG9iU3RvcmFnZURhdGFfaAorI2RlZmluZSBXZWJCbG9i
U3RvcmFnZURhdGFfaAorCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1ZGUgIldlYkZpbGVJ
bmZvLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KK25hbWVzcGFjZSBXZWJDb3JlIHsgY2xhc3MgQmxvYlN0b3JhZ2VEYXRhOyB9CituYW1lc3Bh
Y2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NSZWZQdHI7IH0KKyNlbmRp
ZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0
ZTsKKworY2xhc3MgV2ViQmxvYlN0b3JhZ2VEYXRhIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgSXRl
bSB7CisgICAgICAgIGVudW0geyBUeXBlRGF0YSwgVHlwZUZpbGUgfSB0eXBlOworICAgICAgICBX
ZWJEYXRhIGRhdGE7CisgICAgICAgIFdlYlN0cmluZyBwYXRoOworICAgICAgICBsb25nIGxvbmcg
b2Zmc2V0OworICAgICAgICBsb25nIGxvbmcgbGVuZ3RoOyAvLyAtMSBtZWFucyBnbyB0byB0aGUg
ZW5kIG9mIHRoZSBmaWxlL2Jsb2IuCisgICAgICAgIFdlYkZpbGVJbmZvIGZpbGVJbmZvOworICAg
IH07CisKKyAgICB+V2ViQmxvYlN0b3JhZ2VEYXRhKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJC
bG9iU3RvcmFnZURhdGEoKSA6IG1fcHJpdmF0ZSgwKSB7IH0KKworICAgIFdFQktJVF9BUEkgdm9p
ZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lUX0FQSSB2b2lkIHJlc2V0KCk7CisKKyAgICBib29s
IGlzTnVsbCgpIGNvbnN0IHsgcmV0dXJuICFtX3ByaXZhdGU7IH0KKworICAgIC8vIFJldHVybnMg
dGhlIG51bWJlciBvZiBpdGVtcy4KKyAgICBXRUJLSVRfQVBJIHNpemVfdCBpdGVtQ291bnQoKSBj
b25zdDsKKworICAgIC8vIFJldHJpZXZlcyB0aGUgdmFsdWVzIG9mIHRoZSBpdGVtIGF0IHRoZSBn
aXZlbiBpbmRleC4gUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGluZGV4IGlzIG91dCBvZiBib3Vu
ZHMuCisgICAgV0VCS0lUX0FQSSBib29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3Vs
dCkgY29uc3Q7CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0
OworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0Owor
CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKGNvbnN0
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+Jik7CisgICAgV2ViQmxv
YlN0b3JhZ2VEYXRhJiBvcGVyYXRvcj0oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJs
b2JTdG9yYWdlRGF0YT4mKTsKKyAgICBvcGVyYXRvciBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
QmxvYlN0b3JhZ2VEYXRhPigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisjaWYgV0VCS0lU
X0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBhc3NpZ24oY29uc3QgV1RGOjpQYXNzUmVmUHRyPFdl
YkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKKyNlbmRpZgorICAgIFdlYkJsb2JTdG9yYWdlRGF0
YVByaXZhdGUqIG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5k
aWYgLy8gV2ViQmxvYlN0b3JhZ2VEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViS2l0Q2xpZW50LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVu
dC5oCmluZGV4IDU5NTlhMWMuLjI1MWQ1ODYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViS2l0Q2xpZW50LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRD
bGllbnQuaApAQCAtNDcsNiArNDcsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2Vi
QXBwbGljYXRpb25DYWNoZUhvc3Q7CiBjbGFzcyBXZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVu
dDsKK2NsYXNzIFdlYkJsb2JEYXRhOwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29v
a2llSmFyOwogY2xhc3MgV2ViRmlsZVN5c3RlbTsKQEAgLTgzLDYgKzg0LDE1IEBAIHB1YmxpYzoK
ICAgICAvLyBNYXkgcmV0dXJuIG51bGwuCiAgICAgdmlydHVhbCBXZWJDb29raWVKYXIqIGNvb2tp
ZUphcigpIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIEJsb2IgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgLy8gUmVn
aXN0ZXIgYSBCbG9iIG9iamVjdCBieSBpdHMgdXJsLgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
ckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViQmxvYkRhdGEmKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYsIGNvbnN0IFdlYlVSTCYgc3Jj
VVJMKSB7IH0KKworICAgIC8vIFVucmVnaXN0ZXIgYSBCbG9iIG9iamVjdCBieSBpdHMgdXJsLgor
ICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmKSB7IH0KKwog
ICAgIC8vIERPTSBTdG9yYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKICAgICAvLyBSZXR1cm4gYSBMb2NhbFN0b3JhZ2UgbmFtZXNwYWNlIHRo
YXQgY29ycmVzcG9uZHMgdG8gdGhlIGZvbGxvd2luZyBwYXRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Jsb2JSZWdpc3RyeVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45MDY4OWMyCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVn
aXN0cnlQcm94eS5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5UHJveHkuaCIKKworI2luY2x1
ZGUgIkJsb2JEYXRhLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCisjaW5jbHVkZSAiV2ViQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNp
bmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworLy8gV2Ug
YXJlIHBhcnQgb2YgdGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbi4KK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmxvYlJlZ2lzdHJ5JiBCbG9iUmVnaXN0
cnk6Omluc3RhbmNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoQmxvYlJlZ2lzdHJ5UHJveHksIGluc3RhbmNlLCAoKSk7CisgICAgcmV0
dXJuIGluc3RhbmNlOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdpc3RlckJsb2JV
UkwoY29uc3QgS1VSTCYgdXJsLCBQYXNzT3duUHRyPEJsb2JEYXRhPiBibG9iRGF0YSkKK3sKKyAg
ICBXZWJCbG9iRGF0YSB3ZWJCbG9iRGF0YShibG9iRGF0YSk7CisgICAgd2ViS2l0Q2xpZW50KCkt
PnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHdlYkJsb2JEYXRhKTsKK30KKwordm9pZCBCbG9iUmVnaXN0
cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgS1VSTCYgc3Jj
VVJMKQoreworICAgIHdlYktpdENsaWVudCgpLT5yZWdpc3RlckJsb2JVUkwodXJsLCBzcmNVUkwp
OworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5Ojp1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBL
VVJMJiB1cmwpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnVucmVnaXN0ZXJCbG9iVVJMKHVybCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmggYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Jsb2JSZWdpc3RyeVByb3h5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
M2NlYzgxMwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lz
dHJ5UHJveHkuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBCbG9iUmVnaXN0cnlQcm94eV9oCisj
ZGVmaW5lIEJsb2JSZWdpc3RyeVByb3h5X2gKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVk
ZSAiQmxvYlJlZ2lzdHJ5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQmxvYlJl
Z2lzdHJ5UHJveHkgOiBwdWJsaWMgQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBQYXNzT3duUHRyPEJsb2JEYXRhPik7
CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiwgY29uc3QgS1VS
TCYgc3JjVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VS
TCYpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFJlc291cmNlSGFuZGxlPiBjcmVhdGVSZXNv
dXJjZUhhbmRsZShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUhhbmRsZUNsaWVudCop
IHsgcmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGJvb2wgbG9hZFJlc291cmNlU3luY2hyb25vdXNs
eShjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBSZXNvdXJjZUVycm9yJiwgUmVzb3VyY2VSZXNwb25z
ZSYsIFZlY3RvcjxjaGFyPiYgZGF0YSkgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAg
ICB2aXJ0dWFsIH5CbG9iUmVnaXN0cnlQcm94eSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCisKKyNlbmRpZiAvLyBCbG9iUmVnaXN0
cnlQcm94eV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JEYXRhLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjc4YmI1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkJsb2JEYXRhLmNwcApAQCAtMCwwICsxLDE2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJCbG9iRGF0YS5oIgorCisjaW5jbHVkZSAiQmxvYkRhdGEuaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFz
cyBXZWJCbG9iRGF0YVByaXZhdGUgOiBwdWJsaWMgQmxvYkRhdGEgeworfTsKKwordm9pZCBXZWJC
bG9iRGF0YTo6aW5pdGlhbGl6ZSgpCit7CisgICAgYXNzaWduKEJsb2JEYXRhOjpjcmVhdGUoKSk7
Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OnJlc2V0KCkKK3sKKyAgICBhc3NpZ24oMCk7Cit9CisK
K3NpemVfdCBXZWJCbG9iRGF0YTo6aXRlbUNvdW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKTsKK30KKworYm9v
bCBXZWJCbG9iRGF0YTo6aXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25zdAor
eworICAgIEFTU0VSVCghaXNOdWxsKCkpOworCisgICAgaWYgKGluZGV4ID49IG1fcHJpdmF0ZS0+
aXRlbXMoKS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IEJsb2JE
YXRhSXRlbSYgaXRlbSA9IG1fcHJpdmF0ZS0+aXRlbXMoKVtpbmRleF07CisgICAgcmVzdWx0Lm9m
ZnNldCA9IGl0ZW0ub2Zmc2V0OworICAgIHJlc3VsdC5sZW5ndGggPSBpdGVtLmxlbmd0aDsKKyAg
ICByZXN1bHQuZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSA9IGl0ZW0uZXhwZWN0ZWRNb2RpZmlj
YXRpb25UaW1lOworICAgIHN3aXRjaCAoaXRlbS50eXBlKSB7CisgICAgY2FzZSBCbG9iRGF0YUl0
ZW06OkRhdGE6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZURhdGE7CisgICAgICAg
IHJlc3VsdC5kYXRhLmFzc2lnbihpdGVtLmRhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+
KGl0ZW0uZGF0YS5sZW5ndGgoKSkpOworICAgICAgICByZXN1bHQucGF0aE9yVVJMLnJlc2V0KCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpGaWxlOgorICAg
ICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVGaWxlOworICAgICAgICByZXN1bHQuZGF0YS5y
ZXNldCgpOworICAgICAgICByZXN1bHQucGF0aE9yVVJMID0gaXRlbS5wYXRoOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6QmxvYjoKKyAgICAgICAgcmVzdWx0
LnR5cGUgPSBJdGVtOjpUeXBlQmxvYjsKKyAgICAgICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKKyAg
ICAgICAgcmVzdWx0LnBhdGhPclVSTCA9IGl0ZW0udXJsOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIFdlYkJsb2JEYXRhOjphcHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmIGRhdGEpCit7Cisg
ICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5hcHBlbmREYXRhKENTdHJpbmco
ZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKSk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVu
ZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBhdGgpOworfQorCit2b2lkIFdlYkJs
b2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYgZmlsZVBhdGgsIGxvbmcgbG9uZyBv
ZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgsIGNvbnN0IFdlYkZpbGVJbmZvJiBmaWxlSW5mbykKK3sK
KyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZEZpbGUoZmlsZVBh
dGgsIG9mZnNldCwgbGVuZ3RoLCBmaWxlSW5mby5tb2RpZmljYXRpb25UaW1lKTsKK30KKwordm9p
ZCBXZWJCbG9iRGF0YTo6YXBwZW5kQmxvYihjb25zdCBXZWJTdHJpbmcmIGJsb2JVUkwsIGxvbmcg
bG9uZyBvZmZzZXQsIGxvbmcgbG9uZyBsZW5ndGgpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7
CisgICAgbV9wcml2YXRlLT5hcHBlbmRCbG9iKEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBibG9iVVJM
KSwgb2Zmc2V0LCBsZW5ndGgpOworfQorCitXZWJTdHJpbmcgV2ViQmxvYkRhdGE6OmNvbnRlbnRU
eXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5jb250ZW50VHlwZSgpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjpzZXRDb250ZW50VHlw
ZShjb25zdCBXZWJTdHJpbmcmIGNvbnRlbnRUeXBlKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkp
OworICAgIG1fcHJpdmF0ZS0+c2V0Q29udGVudFR5cGUoY29udGVudFR5cGUpOworfQorCitXZWJT
dHJpbmcgV2ViQmxvYkRhdGE6OmNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudERpc3Bvc2l0aW9u
KCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OnNldENvbnRlbnREaXNwb3NpdGlvbihjb25zdCBX
ZWJTdHJpbmcmIGNvbnRlbnREaXNwb3NpdGlvbikKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
KyAgICBtX3ByaXZhdGUtPnNldENvbnRlbnREaXNwb3NpdGlvbihjb250ZW50RGlzcG9zaXRpb24p
OworfQorCitXZWJCbG9iRGF0YTo6V2ViQmxvYkRhdGEoY29uc3QgUGFzc093blB0cjxCbG9iRGF0
YT4mIGRhdGEpCisgICAgOiBtX3ByaXZhdGUoMCkKK3sKKyAgICBhc3NpZ24oZGF0YSk7Cit9CisK
K1dlYkJsb2JEYXRhJiBXZWJCbG9iRGF0YTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NPd25QdHI8Qmxv
YkRhdGE+JiBkYXRhKQoreworICAgIGFzc2lnbihkYXRhKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK1dlYkJsb2JEYXRhOjpvcGVyYXRvciBQYXNzT3duUHRyPEJsb2JEYXRhPigpCit7CisgICAg
V2ViQmxvYkRhdGFQcml2YXRlKiB0ZW1wID0gbV9wcml2YXRlOworICAgIG1fcHJpdmF0ZSA9IDA7
CisgICAgcmV0dXJuIGFkb3B0UHRyKHRlbXApOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjphc3Np
Z24oY29uc3QgUGFzc093blB0cjxCbG9iRGF0YT4mIGRhdGEpCit7CisgICAgaWYgKG1fcHJpdmF0
ZSkKKyAgICAgICAgZGVsZXRlIG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSBzdGF0aWNfY2Fz
dDxXZWJCbG9iRGF0YVByaXZhdGUqPihkYXRhLmxlYWtQdHIoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVnaXN0
cnlJbXBsLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwOTNlNgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKQEAgLTAs
MCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJCbG9iUmVnaXN0cnlJ
bXBsLmgiCisKKyNpbmNsdWRlICJCbG9iUmVnaXN0cnlJbXBsLmgiCisjaW5jbHVkZSAiUmVzb3Vy
Y2VFcnJvci5oIgorI2luY2x1ZGUgIldlYkJsb2JEYXRhLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgi
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworI2lmIEVOQUJMRShCTE9CKQorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworV2ViQmxvYlJlZ2lzdHJ5KiBXZWJCbG9iUmVnaXN0cnk6Omluc3Rh
bmNlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoV2ViQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gJmlu
c3RhbmNlOworfQorCitXZWJCbG9iUmVnaXN0cnlJbXBsOjpXZWJCbG9iUmVnaXN0cnlJbXBsKCkK
KyAgICA6IG1fYmxvYlJlZ2lzdHJ5KG5ldyBXZWJDb3JlOjpCbG9iUmVnaXN0cnlJbXBsKCkpCit7
Cit9CisKK1dlYkJsb2JSZWdpc3RyeUltcGw6On5XZWJCbG9iUmVnaXN0cnlJbXBsKCkKK3sKK30K
Kwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJM
JiB1cmwsIFdlYkJsb2JEYXRhJiBibG9iRGF0YSkKK3sKKyAgICBtX2Jsb2JSZWdpc3RyeS0+cmVn
aXN0ZXJCbG9iVVJMKHVybCwgYmxvYkRhdGEpOworfQorCit2b2lkIFdlYkJsb2JSZWdpc3RyeUlt
cGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmIHVybCwgY29uc3QgV2ViVVJMJiBzcmNV
UkwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7
Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3Qg
V2ViVVJMJiB1cmwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnVucmVnaXN0ZXJCbG9iVVJMKHVy
bCk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YSBXZWJCbG9iUmVnaXN0cnlJbXBsOjpnZXRCbG9i
RGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIG1fYmxvYlJlZ2lz
dHJ5LT5nZXRCbG9iRGF0YUZyb21VUkwodXJsKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVn
aXN0cnlJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE1MTJkYgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1w
bC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeUltcGxfaAorI2RlZmlu
ZSBXZWJCbG9iUmVnaXN0cnlJbXBsX2gKKworI2lmIEVOQUJMRShCTE9CKQorCisjaW5jbHVkZSAi
V2ViQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7IGNsYXNzIEJsb2JSZWdpc3RyeUltcGw7IH0KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeUltcGwgOiBwdWJsaWMgV2ViQmxvYlJlZ2lzdHJ5IHsK
K3B1YmxpYzoKKyAgICBXZWJCbG9iUmVnaXN0cnlJbXBsKCk7CisgICAgdmlydHVhbCB+V2ViQmxv
YlJlZ2lzdHJ5SW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25z
dCBXZWJVUkwmLCBXZWJCbG9iRGF0YSYpOworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JV
UkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwpOworICAgIHZpcnR1YWwgdm9p
ZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmKTsKKyAgICB2aXJ0dWFsIFdlYkJsb2JT
dG9yYWdlRGF0YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJik7CisKK3ByaXZhdGU6
CisgICAgV1RGOjpPd25QdHI8V2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbD4gbV9ibG9iUmVnaXN0
cnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIEVOQUJMRShCTE9C
KQorCisjZW5kaWYgLy8gV2ViQmxvYlJlZ2lzdHJ5SW1wbF9oCmRpZmYgLS1naXQgYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZTk0NDUzNwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxv
YlN0b3JhZ2VEYXRhLmNwcApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworI2luY2x1ZGUgIkJsb2JTdG9yYWdlRGF0
YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUgOiBwdWJsaWMgQmxvYlN0b3JhZ2VEYXRh
IHsKK307CisKK3ZvaWQgV2ViQmxvYlN0b3JhZ2VEYXRhOjppbml0aWFsaXplKCkKK3sKKyAgICBh
c3NpZ24oQmxvYlN0b3JhZ2VEYXRhOjpjcmVhdGUoKSk7Cit9CisKK3ZvaWQgV2ViQmxvYlN0b3Jh
Z2VEYXRhOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQorCitzaXplX3QgV2ViQmxvYlN0
b3JhZ2VEYXRhOjppdGVtQ291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOwor
ICAgIHJldHVybiBtX3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpOworfQorCitib29sIFdlYkJsb2JT
dG9yYWdlRGF0YTo6aXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25zdAorewor
ICAgIEFTU0VSVCghaXNOdWxsKCkpOworCisgICAgaWYgKGluZGV4ID49IG1fcHJpdmF0ZS0+aXRl
bXMoKS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IEJsb2JTdG9y
YWdlRGF0YUl0ZW0mIGl0ZW0gPSBtX3ByaXZhdGUtPml0ZW1zKClbaW5kZXhdOworICAgIHJlc3Vs
dC5vZmZzZXQgPSBpdGVtLm9mZnNldDsKKyAgICByZXN1bHQubGVuZ3RoID0gaXRlbS5sZW5ndGg7
CisgICAgcmVzdWx0LmZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4cGVjdGVkTW9k
aWZpY2F0aW9uVGltZTsKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2UgQmxvYlN0
b3JhZ2VEYXRhSXRlbTo6RGF0YToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlRGF0
YTsKKyAgICAgICAgcmVzdWx0LmRhdGEuYXNzaWduKGl0ZW0uZGF0YS5kYXRhKCksIHN0YXRpY19j
YXN0PHNpemVfdD4oaXRlbS5kYXRhLmxlbmd0aCgpKSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNhc2UgQmxvYlN0b3JhZ2VEYXRhSXRlbTo6RmlsZToKKyAgICAgICAgcmVzdWx0LnR5cGUg
PSBJdGVtOjpUeXBlRmlsZTsKKyAgICAgICAgcmVzdWx0LnBhdGggPSBpdGVtLnBhdGg7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK1dlYlN0cmluZyBXZWJCbG9iU3RvcmFnZURhdGE6OmNvbnRlbnRU
eXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5jb250ZW50VHlwZSgpOworfQorCitXZWJTdHJpbmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpj
b250ZW50RGlzcG9zaXRpb24oKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnREaXNwb3NpdGlvbigpOworfQorCitXZWJCbG9iU3Rv
cmFnZURhdGE6OldlYkJsb2JTdG9yYWdlRGF0YShjb25zdCBQYXNzUmVmUHRyPEJsb2JTdG9yYWdl
RGF0YT4mIGRhdGEpCisgICAgOiBtX3ByaXZhdGUoMCkKK3sKKyAgICBhc3NpZ24oZGF0YSk7Cit9
CisKK1dlYkJsb2JTdG9yYWdlRGF0YSYgV2ViQmxvYlN0b3JhZ2VEYXRhOjpvcGVyYXRvcj0oY29u
c3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+JiBkYXRhKQoreworICAgIGFzc2lnbihkYXRh
KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3Ig
UGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlOworfQorCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0YTo6YXNzaWduKGNvbnN0IFBhc3NSZWZQ
dHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKK3sKKyAgICAvLyBwIGlzIGFscmVhZHkgcmVmJ2Qg
Zm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZh
dGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gc3RhdGljX2Nhc3Q8V2ViQmxvYlN0b3JhZ2VE
YXRhUHJpdmF0ZSo+KGRhdGEubGVha1JlZigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
Cg==
</data>
<flag name="commit-queue"
          id="52823"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64284</attachid>
            <date>2010-08-12 16:32:51 -0700</date>
            <delta_ts>2010-08-18 13:33:02 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_5</filename>
            <type>text/plain</type>
            <size>34463</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTcyZmUzOS4uNGJlZGFmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wOC0xMiAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
QmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpIHNvIHRoYXQgY2hyb21pdW0KKyAgICAgICAgdXNlcyB0
aGUgaW1wbGVtZW50YXRpb24gaW4gV2ViS2l0IENocm9taXVtLgorCisgICAgICAgICogaHRtbC9C
bG9iUmVnaXN0cnlJbXBsLmNwcDoKKwogMjAxMC0wOC0xMiAgQmVuIE11cmRvY2ggIDxiZW5tQGdv
b2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUvaHRtbC9CbG9i
UmVnaXN0cnlJbXBsLmNwcAppbmRleCA3NGU1MTc1Li41NDJiNGMwIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvQmxvYlJlZ2lzdHJ5SW1wbC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0Jsb2JSZWdp
c3RyeUltcGwuY3BwCkBAIC03MSwxMSArNzEsMTMgQEAgYm9vbCBCbG9iUmVnaXN0cnlJbXBsOjps
b2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCwK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiAhUExBVEZPUk0oQ0hST01JVU0pCiBCbG9iUmVn
aXN0cnkmIEJsb2JSZWdpc3RyeTo6aW5zdGFuY2UoKQogewogICAgIERFRklORV9TVEFUSUNfTE9D
QUwoQmxvYlJlZ2lzdHJ5SW1wbCwgaW5zdGFuY2UsICgpKTsKICAgICByZXR1cm4gaW5zdGFuY2U7
CiB9CisjZW5kaWYKIAogdm9pZCBCbG9iUmVnaXN0cnlJbXBsOjphcHBlbmRTdG9yYWdlSXRlbXMo
QmxvYlN0b3JhZ2VEYXRhKiBibG9iU3RvcmFnZURhdGEsIGNvbnN0IEJsb2JTdG9yYWdlRGF0YUl0
ZW1MaXN0JiBpdGVtcykKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDZkOTI5MzEuLmYxMzU0Y2IgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDEwLTA4LTEyICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbY2hyb21pdW1dIENocm9taXVtIHNpZGUgaW1wbGVtZW50YXRpb24gb2YgYmxvYiBkYXRh
IGFuZCBibG9iIHJlZ2lzdHJ5LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDM4NzEKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVi
bGljL1dlYkJsb2JEYXRhLmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJCbG9iUmVnaXN0
cnkuaDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dlYkJsb2JTdG9yYWdlRGF0YS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViS2l0Q2xpZW50Lmg6CisgICAgICAgIChXZWJLaXQ6Oldl
YktpdENsaWVudDo6cmVnaXN0ZXJCbG9iVVJMKToKKyAgICAgICAgKFdlYktpdDo6V2ViS2l0Q2xp
ZW50Ojp1bnJlZ2lzdGVyQmxvYlVSTCk6CisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5
LmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9XZWJCbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJC
bG9iUmVnaXN0cnlJbXBsLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JSZWdpc3Ry
eUltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHA6IEFk
ZGVkLgorCiAyMDEwLTA4LTEyICBKb2huIEdyZWdnICA8am9obm55Z0Bnb29nbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAxMjNhZWQ1
Li43ZjYyNGU4IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYgKzExOSw5IEBACiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9zdENsaWVudC5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdwdWJsaWMvV2ViQmxvYkRhdGEuaCcs
CisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVnaXN0cnkuaCcsCisgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNhbnZhcy5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2FyZC5oJywKQEAgLTI4NCw2ICsyODcs
OCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGllbnRJbXBsLmgnLAorICAgICAgICAg
ICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywKKyAgICAgICAgICAgICAgICAnc3Jj
L0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQm91bmRPYmplY3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2JqZWN0LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAtMzcxLDYgKzM3NiwxMCBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJCbG9iRGF0YS5jcHAnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAnLAorICAgICAgICAg
ICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3Jj
L1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQ2FjaGUu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9yLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTNjYjM2Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oCkBAIC0wLDAgKzEsMTAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJCbG9iRGF0YV9oCisjZGVmaW5lIFdlYkJsb2JEYXRhX2gKKworI2luY2x1
ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYlN0
cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7
IGNsYXNzIEJsb2JEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGNsYXNzIFBhc3NPd25QdHI7IH0KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xh
c3MgV2ViQmxvYkRhdGFQcml2YXRlOworCitjbGFzcyBXZWJCbG9iRGF0YSB7CitwdWJsaWM6Cisg
ICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlwZURhdGEsIFR5cGVGaWxlLCBUeXBl
QmxvYiB9IHR5cGU7CisgICAgICAgIFdlYkRhdGEgZGF0YTsKKyAgICAgICAgV2ViU3RyaW5nIHBh
dGhPclVSTDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAgICAgICAgbG9uZyBsb25nIGxl
bmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS9ibG9iLgorICAgICAg
ICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldlYkJsb2JEYXRhKCkgeyBy
ZXNldCgpOyB9CisKKyAgICBXZWJCbG9iRGF0YSgpIDogbV9wcml2YXRlKDApIHsgfQorCisgICAg
V0VCS0lUX0FQSSB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQo
KTsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisg
ICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgc2l6ZV90
IGl0ZW1Db3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0cmlldmVzIHRoZSB2YWx1ZXMgb2YgdGhl
IGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4LiAgUmV0dXJucyBmYWxzZSBpZgorICAgIC8vIGluZGV4
IGlzIG91dCBvZiBib3VuZHMuCisgICAgV0VCS0lUX0FQSSBib29sIGl0ZW1BdChzaXplX3QgaW5k
ZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3Q7CisKKyAgICAvLyBBcHBlbmRzIHRvIHRoZSBsaXN0IG9m
IGl0ZW1zLgorICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmREYXRhKGNvbnN0IFdlYkRhdGEmKTsK
KyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQYXRo
KTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25zdCBXZWJTdHJpbmcmIGZpbGVQ
YXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3RoLCBjb25zdCBXZWJGaWxlSW5m
byYpOworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRCbG9iKGNvbnN0IFdlYlN0cmluZyYgYmxv
YlVSTCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxlbmd0aCk7CisKKyAgICBXRUJLSVRf
QVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0OworICAgIFdFQktJVF9BUEkgdm9pZCBz
ZXRDb250ZW50VHlwZShjb25zdCBXZWJTdHJpbmcmKTsKKworICAgIFdFQktJVF9BUEkgV2ViU3Ry
aW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OworICAgIFdFQktJVF9BUEkgdm9pZCBzZXRD
b250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJik7CisKKyNpZiBXRUJLSVRfSU1QTEVN
RU5UQVRJT04KKyAgICBXZWJCbG9iRGF0YShjb25zdCBXVEY6OlBhc3NPd25QdHI8V2ViQ29yZTo6
QmxvYkRhdGE+Jik7CisgICAgV2ViQmxvYkRhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NP
d25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisgICAgb3BlcmF0b3IgV1RGOjpQYXNzT3duUHRy
PFdlYkNvcmU6OkJsb2JEYXRhPigpOworI2VuZGlmCisKK3ByaXZhdGU6CisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgdm9pZCBhc3NpZ24oY29uc3QgV1RGOjpQYXNzT3duUHRyPFdlYkNv
cmU6OkJsb2JEYXRhPiYpOworI2VuZGlmCisgICAgV2ViQmxvYkRhdGFQcml2YXRlKiBtX3ByaXZh
dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkJsb2JEYXRh
X2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYlJlZ2lzdHJ5Lmgg
Yi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0M2YzOGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQv
Y2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IFdlYkJsb2JSZWdpc3RyeV9oCisjZGVmaW5lIFdlYkJsb2JSZWdpc3RyeV9oCisKKyNpbmNsdWRl
ICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdl
YkJsb2JEYXRhOworY2xhc3MgV2ViU3RyaW5nOworY2xhc3MgV2ViVVJMOworCitjbGFzcyBXZWJC
bG9iUmVnaXN0cnkgeworcHVibGljOgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkJsb2JSZWdp
c3RyeSogaW5zdGFuY2UoKTsKKworICAgIHZpcnR1YWwgfldlYkJsb2JSZWdpc3RyeSgpIHsgfQor
CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBXZWJCbG9i
RGF0YSYpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVS
TCYsIGNvbnN0IFdlYlVSTCYgc3JjVVJMKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0
ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdl
RGF0YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJikgPSAwOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iUmVnaXN0cnlfaApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNjk2NGMwMAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmli
dXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2Vi
QmxvYlN0b3JhZ2VEYXRhX2gKKyNkZWZpbmUgV2ViQmxvYlN0b3JhZ2VEYXRhX2gKKworI2luY2x1
ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYlN0
cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7
IGNsYXNzIEJsb2JTdG9yYWdlRGF0YTsgfQorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBl
bmFtZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGU7CisKK2NsYXNzIFdlYkJsb2JTdG9y
YWdlRGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlw
ZURhdGEsIFR5cGVGaWxlIH0gdHlwZTsKKyAgICAgICAgV2ViRGF0YSBkYXRhOworICAgICAgICBX
ZWJTdHJpbmcgcGF0aDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAgICAgICAgbG9uZyBs
b25nIGxlbmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS9ibG9iLgor
ICAgICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldlYkJsb2JTdG9y
YWdlRGF0YSgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkgOiBtX3By
aXZhdGUoMCkgeyB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIFdF
QktJVF9BUEkgdm9pZCByZXNldCgpOworCisgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVy
biAhbV9wcml2YXRlOyB9CisKKyAgICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMuCisg
ICAgV0VCS0lUX0FQSSBzaXplX3QgaXRlbUNvdW50KCkgY29uc3Q7CisKKyAgICAvLyBSZXRyaWV2
ZXMgdGhlIHZhbHVlcyBvZiB0aGUgaXRlbSBhdCB0aGUgZ2l2ZW4gaW5kZXguIFJldHVybnMgZmFs
c2UgaWYKKyAgICAvLyBpbmRleCBpcyBvdXQgb2YgYm91bmRzLgorICAgIFdFQktJVF9BUEkgYm9v
bCBpdGVtQXQoc2l6ZV90IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0OworCisgICAgV0VCS0lU
X0FQSSBXZWJTdHJpbmcgY29udGVudFR5cGUoKSBjb25zdDsKKyAgICBXRUJLSVRfQVBJIFdlYlN0
cmluZyBjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIFdlYkJsb2JTdG9yYWdlRGF0YShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6QmxvYlN0b3JhZ2VEYXRhPiYpOworICAgIFdlYkJsb2JTdG9yYWdlRGF0YSYgb3BlcmF0b3I9
KGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+Jik7CisgICAg
b3BlcmF0b3IgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4oKSBjb25z
dDsKKyNlbmRpZgorCitwcml2YXRlOgorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIHZv
aWQgYXNzaWduKGNvbnN0IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9iU3RvcmFnZURhdGE+
Jik7CisjZW5kaWYKKyAgICBXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRlKiBtX3ByaXZhdGU7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkJsb2JTdG9yYWdlRGF0
YV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJLaXRDbGllbnQuaAppbmRleCA1OTU5YTFjLi4yNTFk
NTg2IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVudC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgKQEAgLTQ3LDYgKzQ3LDcg
QEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Owog
Y2xhc3MgV2ViQXBwbGljYXRpb25DYWNoZUhvc3RDbGllbnQ7CitjbGFzcyBXZWJCbG9iRGF0YTsK
IGNsYXNzIFdlYkNsaXBib2FyZDsKIGNsYXNzIFdlYkNvb2tpZUphcjsKIGNsYXNzIFdlYkZpbGVT
eXN0ZW07CkBAIC04Myw2ICs4NCwxNSBAQCBwdWJsaWM6CiAgICAgLy8gTWF5IHJldHVybiBudWxs
LgogICAgIHZpcnR1YWwgV2ViQ29va2llSmFyKiBjb29raWVKYXIoKSB7IHJldHVybiAwOyB9CiAK
KyAgICAvLyBCbG9iIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIC8vIFJlZ2lzdGVyIGEgQmxvYiBvYmplY3QgYnkg
aXRzIHVybC4KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYs
IGNvbnN0IFdlYkJsb2JEYXRhJikgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVS
TChjb25zdCBXZWJVUkwmLCBjb25zdCBXZWJVUkwmIHNyY1VSTCkgeyB9CisKKyAgICAvLyBVbnJl
Z2lzdGVyIGEgQmxvYiBvYmplY3QgYnkgaXRzIHVybC4KKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdp
c3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJikgeyB9CisKICAgICAvLyBET00gU3RvcmFnZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAgICAgLy8g
UmV0dXJuIGEgTG9jYWxTdG9yYWdlIG5hbWVzcGFjZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBm
b2xsb3dpbmcgcGF0aC4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lz
dHJ5UHJveHkuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA2ODljMgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwCkBAIC0wLDAg
KzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
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
ZGUgIkJsb2JSZWdpc3RyeVByb3h5LmgiCisKKyNpbmNsdWRlICJCbG9iRGF0YS5oIgorI2luY2x1
ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIldlYkJs
b2JEYXRhLmgiCisjaW5jbHVkZSAiV2ViS2l0LmgiCisjaW5jbHVkZSAiV2ViS2l0Q2xpZW50Lmgi
CisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKy8vIFdlIGFyZSBwYXJ0IG9mIHRoZSBXZWJLaXQg
aW1wbGVtZW50YXRpb24uCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0Jsb2JSZWdpc3RyeSYgQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEJsb2JSZWdp
c3RyeVByb3h5LCBpbnN0YW5jZSwgKCkpOworICAgIHJldHVybiBpbnN0YW5jZTsKK30KKwordm9p
ZCBCbG9iUmVnaXN0cnlQcm94eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgUGFz
c093blB0cjxCbG9iRGF0YT4gYmxvYkRhdGEpCit7CisgICAgV2ViQmxvYkRhdGEgd2ViQmxvYkRh
dGEoYmxvYkRhdGEpOworICAgIHdlYktpdENsaWVudCgpLT5yZWdpc3RlckJsb2JVUkwodXJsLCB3
ZWJCbG9iRGF0YSk7Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVS
TChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3sKKyAgICB3ZWJLaXRDbGll
bnQoKS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwgc3JjVVJMKTsKK30KKwordm9pZCBCbG9iUmVnaXN0
cnlQcm94eTo6dW5yZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIHdlYktp
dENsaWVudCgpLT51bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVn
aXN0cnlQcm94eS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZWM4MTMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgKQEAgLTAsMCArMSw1
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZm5kZWYgQmxvYlJlZ2lzdHJ5UHJveHlfaAorI2RlZmluZSBCbG9iUmVnaXN0cnlQcm94
eV9oCisKKyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEJsb2JSZWdpc3RyeVByb3h5IDogcHVibGljIEJs
b2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChj
b25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAgIHZpcnR1YWwgdm9pZCByZWdp
c3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7CisgICAgdmlydHVh
bCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKKworICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKSB7IHJldHVybiAwOyB9CisgICAgdmly
dHVhbCBib29sIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hhcj4mIGRhdGEp
IHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+QmxvYlJlZ2lzdHJ5
UHJveHkoKSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShCTE9CKQorCisjZW5kaWYgLy8gQmxvYlJlZ2lzdHJ5UHJveHlfaApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkJsb2JEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OGJi
NWI5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0YS5j
cHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQmxv
YkRhdGEuaCIKKworI2luY2x1ZGUgIkJsb2JEYXRhLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGFQcml2YXRlIDog
cHVibGljIEJsb2JEYXRhIHsKK307CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmluaXRpYWxpemUoKQor
eworICAgIGFzc2lnbihCbG9iRGF0YTo6Y3JlYXRlKCkpOworfQorCit2b2lkIFdlYkJsb2JEYXRh
OjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQorCitzaXplX3QgV2ViQmxvYkRhdGE6Oml0
ZW1Db3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+aXRlbXMoKS5zaXplKCk7Cit9CisKK2Jvb2wgV2ViQmxvYkRhdGE6Oml0ZW1BdChz
aXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKKworICAgIGlmIChpbmRleCA+PSBtX3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX3ByaXZh
dGUtPml0ZW1zKClbaW5kZXhdOworICAgIHJlc3VsdC5vZmZzZXQgPSBpdGVtLm9mZnNldDsKKyAg
ICByZXN1bHQubGVuZ3RoID0gaXRlbS5sZW5ndGg7CisgICAgcmVzdWx0LmZpbGVJbmZvLm1vZGlm
aWNhdGlvblRpbWUgPSBpdGVtLmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKKyAgICBzd2l0Y2gg
KGl0ZW0udHlwZSkgeworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgorICAgICAgICByZXN1
bHQudHlwZSA9IEl0ZW06OlR5cGVEYXRhOworICAgICAgICByZXN1bHQuZGF0YS5hc3NpZ24oaXRl
bS5kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtLmRhdGEubGVuZ3RoKCkpKTsK
KyAgICAgICAgcmVzdWx0LnBhdGhPclVSTC5yZXNldCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RmlsZToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVt
OjpUeXBlRmlsZTsKKyAgICAgICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKKyAgICAgICAgcmVzdWx0
LnBhdGhPclVSTCA9IGl0ZW0ucGF0aDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBC
bG9iRGF0YUl0ZW06OkJsb2I6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZUJsb2I7
CisgICAgICAgIHJlc3VsdC5kYXRhLnJlc2V0KCk7CisgICAgICAgIHJlc3VsdC5wYXRoT3JVUkwg
PSBpdGVtLnVybDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBw
ZW5kRGF0YShjb25zdCBXZWJEYXRhJiBkYXRhKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOwor
ICAgIG1fcHJpdmF0ZS0+YXBwZW5kRGF0YShDU3RyaW5nKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUo
KSkpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmluZyYg
ZmlsZVBhdGgpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5hcHBl
bmRGaWxlKGZpbGVQYXRoKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25z
dCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVuZ3Ro
LCBjb25zdCBXZWJGaWxlSW5mbyYgZmlsZUluZm8pCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7
CisgICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZpbGVQYXRoLCBvZmZzZXQsIGxlbmd0aCwgZmls
ZUluZm8ubW9kaWZpY2F0aW9uVGltZSk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVuZEJs
b2IoY29uc3QgV2ViU3RyaW5nJiBibG9iVVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcg
bGVuZ3RoKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5k
QmxvYihLVVJMKFBhcnNlZFVSTFN0cmluZywgYmxvYlVSTCksIG9mZnNldCwgbGVuZ3RoKTsKK30K
KworV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKK30K
Kwordm9pZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJiBjb250
ZW50VHlwZSkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPnNldENv
bnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250
ZW50RGlzcG9zaXRpb24oKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmNvbnRlbnREaXNwb3NpdGlvbigpOworfQorCit2b2lkIFdlYkJsb2JE
YXRhOjpzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiBjb250ZW50RGlzcG9z
aXRpb24pCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5zZXRDb250
ZW50RGlzcG9zaXRpb24oY29udGVudERpc3Bvc2l0aW9uKTsKK30KKworV2ViQmxvYkRhdGE6Oldl
YkJsb2JEYXRhKGNvbnN0IFBhc3NPd25QdHI8QmxvYkRhdGE+JiBkYXRhKQorICAgIDogbV9wcml2
YXRlKDApCit7CisgICAgYXNzaWduKGRhdGEpOworfQorCitXZWJCbG9iRGF0YSYgV2ViQmxvYkRh
dGE6Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPEJsb2JEYXRhPiYgZGF0YSkKK3sKKyAgICBh
c3NpZ24oZGF0YSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJCbG9iRGF0YTo6b3BlcmF0
b3IgUGFzc093blB0cjxCbG9iRGF0YT4oKQoreworICAgIFdlYkJsb2JEYXRhUHJpdmF0ZSogdGVt
cCA9IG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSAwOworICAgIHJldHVybiBhZG9wdFB0cih0
ZW1wKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXNzaWduKGNvbnN0IFBhc3NPd25QdHI8Qmxv
YkRhdGE+JiBkYXRhKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIGRlbGV0ZSBtX3By
aXZhdGU7CisgICAgbV9wcml2YXRlID0gc3RhdGljX2Nhc3Q8V2ViQmxvYkRhdGFQcml2YXRlKj4o
ZGF0YS5sZWFrUHRyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjhjMDkzZTYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5
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
ZmlnLmgiCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIgorCisjaW5jbHVkZSAiQmxv
YlJlZ2lzdHJ5SW1wbC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJX
ZWJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisKKyNpZiBFTkFCTEUoQkxPQikKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dlYkJs
b2JSZWdpc3RyeSogV2ViQmxvYlJlZ2lzdHJ5OjppbnN0YW5jZSgpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdlYkJsb2JSZWdpc3RyeUlt
cGwsIGluc3RhbmNlLCAoKSk7CisgICAgcmV0dXJuICZpbnN0YW5jZTsKK30KKworV2ViQmxvYlJl
Z2lzdHJ5SW1wbDo6V2ViQmxvYlJlZ2lzdHJ5SW1wbCgpCisgICAgOiBtX2Jsb2JSZWdpc3RyeShu
ZXcgV2ViQ29yZTo6QmxvYlJlZ2lzdHJ5SW1wbCgpKQoreworfQorCitXZWJCbG9iUmVnaXN0cnlJ
bXBsOjp+V2ViQmxvYlJlZ2lzdHJ5SW1wbCgpCit7Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5
SW1wbDo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYgdXJsLCBXZWJCbG9iRGF0YSYgYmxv
YkRhdGEpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIGJsb2JE
YXRhKTsKK30KKwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViVVJMJiB1cmwsIGNvbnN0IFdlYlVSTCYgc3JjVVJMKQoreworICAgIG1fYmxvYlJlZ2lz
dHJ5LT5yZWdpc3RlckJsb2JVUkwodXJsLCBzcmNVUkwpOworfQorCit2b2lkIFdlYkJsb2JSZWdp
c3RyeUltcGw6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAgIG1f
YmxvYlJlZ2lzdHJ5LT51bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOworfQorCitXZWJCbG9iU3RvcmFn
ZURhdGEgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6Z2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IFdlYlVS
TCYgdXJsKQoreworICAgIHJldHVybiBtX2Jsb2JSZWdpc3RyeS0+Z2V0QmxvYkRhdGFGcm9tVVJM
KHVybCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEJM
T0IpCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwu
aCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNTEyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuaApAQCAtMCwwICsxLDYxIEBACisv
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
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJCbG9iUmVnaXN0cnlJbXBsX2gKKyNkZWZpbmUgV2ViQmxvYlJlZ2lzdHJ5SW1wbF9o
CisKKyNpZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIldlYkJsb2JSZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBCbG9iUmVn
aXN0cnlJbXBsOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCbG9iUmVnaXN0
cnlJbXBsIDogcHVibGljIFdlYkJsb2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgV2ViQmxvYlJl
Z2lzdHJ5SW1wbCgpOworICAgIHZpcnR1YWwgfldlYkJsb2JSZWdpc3RyeUltcGwoKTsKKworICAg
IHZpcnR1YWwgdm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgV2ViQmxvYkRhdGEm
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYsIGNvbnN0
IFdlYlVSTCYgc3JjVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29u
c3QgV2ViVVJMJik7CisgICAgdmlydHVhbCBXZWJCbG9iU3RvcmFnZURhdGEgZ2V0QmxvYkRhdGFG
cm9tVVJMKGNvbnN0IFdlYlVSTCYpOworCitwcml2YXRlOgorICAgIFdURjo6T3duUHRyPFdlYkNv
cmU6OkJsb2JSZWdpc3RyeUltcGw+IG1fYmxvYlJlZ2lzdHJ5OworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2VuZGlmIC8vIFdlYkJsb2JS
ZWdpc3RyeUltcGxfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iU3Rv
cmFnZURhdGEuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NDQ1MzcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKQEAgLTAs
MCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQmxvYlN0b3JhZ2VE
YXRhLmgiCisKKyNpbmNsdWRlICJCbG9iU3RvcmFnZURhdGEuaCIKKwordXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCbG9iU3RvcmFnZURh
dGFQcml2YXRlIDogcHVibGljIEJsb2JTdG9yYWdlRGF0YSB7Cit9OworCit2b2lkIFdlYkJsb2JT
dG9yYWdlRGF0YTo6aW5pdGlhbGl6ZSgpCit7CisgICAgYXNzaWduKEJsb2JTdG9yYWdlRGF0YTo6
Y3JlYXRlKCkpOworfQorCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0YTo6cmVzZXQoKQoreworICAg
IGFzc2lnbigwKTsKK30KKworc2l6ZV90IFdlYkJsb2JTdG9yYWdlRGF0YTo6aXRlbUNvdW50KCkg
Y29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5p
dGVtcygpLnNpemUoKTsKK30KKworYm9vbCBXZWJCbG9iU3RvcmFnZURhdGE6Oml0ZW1BdChzaXpl
X3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsK
KworICAgIGlmIChpbmRleCA+PSBtX3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBCbG9iU3RvcmFnZURhdGFJdGVtJiBpdGVtID0gbV9w
cml2YXRlLT5pdGVtcygpW2luZGV4XTsKKyAgICByZXN1bHQub2Zmc2V0ID0gaXRlbS5vZmZzZXQ7
CisgICAgcmVzdWx0Lmxlbmd0aCA9IGl0ZW0ubGVuZ3RoOworICAgIHJlc3VsdC5maWxlSW5mby5t
b2RpZmljYXRpb25UaW1lID0gaXRlbS5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWU7CisgICAgc3dp
dGNoIChpdGVtLnR5cGUpIHsKKyAgICBjYXNlIEJsb2JTdG9yYWdlRGF0YUl0ZW06OkRhdGE6Cisg
ICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZURhdGE7CisgICAgICAgIHJlc3VsdC5kYXRh
LmFzc2lnbihpdGVtLmRhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0YS5s
ZW5ndGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEJsb2JTdG9yYWdlRGF0
YUl0ZW06OkZpbGU6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZUZpbGU7CisgICAg
ICAgIHJlc3VsdC5wYXRoID0gaXRlbS5wYXRoOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXZWJT
dHJpbmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAgQVNT
RVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKK30K
KworV2ViU3RyaW5nIFdlYkJsb2JTdG9yYWdlRGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29u
c3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250
ZW50RGlzcG9zaXRpb24oKTsKK30KKworV2ViQmxvYlN0b3JhZ2VEYXRhOjpXZWJCbG9iU3RvcmFn
ZURhdGEoY29uc3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+JiBkYXRhKQorICAgIDogbV9w
cml2YXRlKDApCit7CisgICAgYXNzaWduKGRhdGEpOworfQorCitXZWJCbG9iU3RvcmFnZURhdGEm
IFdlYkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8QmxvYlN0b3Jh
Z2VEYXRhPiYgZGF0YSkKK3sKKyAgICBhc3NpZ24oZGF0YSk7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCitXZWJCbG9iU3RvcmFnZURhdGE6Om9wZXJhdG9yIFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VE
YXRhPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZTsKK30KKwordm9pZCBXZWJCbG9i
U3RvcmFnZURhdGE6OmFzc2lnbihjb25zdCBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4mIGRh
dGEpCit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisg
ICAgaWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJp
dmF0ZSA9IHN0YXRpY19jYXN0PFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqPihkYXRhLmxlYWtS
ZWYoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="52824"
          type_id="1"
          status="-"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="52825"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64761</attachid>
            <date>2010-08-18 13:33:02 -0700</date>
            <delta_ts>2010-08-18 13:38:20 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_6</filename>
            <type>text/plain</type>
            <size>34118</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Yjk5MGFjNi4uNzE0NjMyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAogMjAxMC0wOC0xOCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
YmxvYlJlZ2lzdHJ5KCkgc28gdGhhdCBjaHJvbWl1bSB1c2VzIHRoZQorICAgICAgICBpbXBsZW1l
bnRhdGlvbiBpbiBXZWJLaXQgQ2hyb21pdW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorCisyMDEwLTA4LTE4ICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCiAKICAgICAg
ICAgQ2hhbmdlIEJsb2JTdG9yYWdlRGF0YSB0byByZXVzZSBCbG9iRGF0YS4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCBkYWM5NmVhLi4wMGMw
Yjc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
CkBAIC00MiwxMiArNDIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRG
T1JNKENIUk9NSVVNKQogQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJ
bXBsLCBpbnN0YW5jZSwgKCkpOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KKyNlbmRpZgogCiBi
b29sIEJsb2JSZWdpc3RyeUltcGw6OnNob3VsZExvYWRSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwYTA3NzMzLi42MGJhZGZh
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0wOC0xOCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW2Nocm9taXVtXSBDaHJvbWl1bSBzaWRlIGltcGxlbWVudGF0aW9uIG9mIGJs
b2IgZGF0YSBhbmQgYmxvYiByZWdpc3RyeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzODcxCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIHB1YmxpYy9XZWJCbG9iRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViQmxv
YlJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEu
aDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJLaXRDbGllbnQ6OmJsb2JSZWdpc3RyeSk6CisgICAgICAgICogc3JjL0Jsb2JSZWdp
c3RyeVByb3h5LmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5Lmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJCbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAq
IHNyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJs
b2JSZWdpc3RyeUltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0
YS5jcHA6IEFkZGVkLgorCiAyMDEwLTA4LTE3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCBkMTJiZWU3Li42YmRjNWU0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYg
KzExOSw5IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViQmxvYkRhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVn
aXN0cnkuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkNhbnZhcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2Fy
ZC5oJywKQEAgLTI4Nyw2ICsyOTAsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RD
bGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGll
bnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvQm91bmRPYmplY3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2Jq
ZWN0LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAt
Mzc1LDYgKzM4MCwxMCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJCbG9iRGF0YS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9y
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQmxvYkRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
NTNjYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9i
RGF0YS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJCbG9iRGF0YV9oCisjZGVmaW5lIFdl
YkJsb2JEYXRhX2gKKworI2luY2x1ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5m
by5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
CituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25QdHI7IH0KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGFQcml2YXRlOworCitjbGFzcyBXZWJC
bG9iRGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlw
ZURhdGEsIFR5cGVGaWxlLCBUeXBlQmxvYiB9IHR5cGU7CisgICAgICAgIFdlYkRhdGEgZGF0YTsK
KyAgICAgICAgV2ViU3RyaW5nIHBhdGhPclVSTDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsK
KyAgICAgICAgbG9uZyBsb25nIGxlbmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0
aGUgZmlsZS9ibG9iLgorICAgICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisg
ICAgfldlYkJsb2JEYXRhKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJCbG9iRGF0YSgpIDogbV9w
cml2YXRlKDApIHsgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBX
RUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgor
ICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0cmll
dmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4LiAgUmV0dXJucyBm
YWxzZSBpZgorICAgIC8vIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCisgICAgV0VCS0lUX0FQSSBi
b29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3Q7CisKKyAgICAvLyBB
cHBlbmRzIHRvIHRoZSBsaXN0IG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRE
YXRhKGNvbnN0IFdlYkRhdGEmKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25z
dCBXZWJTdHJpbmcmIGZpbGVQYXRoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShj
b25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVu
Z3RoLCBjb25zdCBXZWJGaWxlSW5mbyYpOworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRCbG9i
KGNvbnN0IFdlYlN0cmluZyYgYmxvYlVSTCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxl
bmd0aCk7CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgdm9pZCBzZXRDb250ZW50VHlwZShjb25zdCBXZWJTdHJpbmcmKTsKKwor
ICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgdm9pZCBzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJik7
CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJCbG9iRGF0YShjb25zdCBXVEY6
OlBhc3NPd25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisgICAgV2ViQmxvYkRhdGEmIG9wZXJh
dG9yPShjb25zdCBXVEY6OlBhc3NPd25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisgICAgb3Bl
cmF0b3IgV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JEYXRhPigpOworI2VuZGlmCisKK3By
aXZhdGU6CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBhc3NpZ24oY29uc3Qg
V1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JEYXRhPiYpOworI2VuZGlmCisgICAgV2ViQmxv
YkRhdGFQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYkJsb2JEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYlJlZ2lzdHJ5LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdp
c3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTk4NjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeV9oCisjZGVmaW5lIFdlYkJsb2JS
ZWdpc3RyeV9oCisKKyNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JEYXRhOworY2xhc3MgV2ViVVJMOworCitjbGFzcyBX
ZWJCbG9iUmVnaXN0cnkgeworcHVibGljOgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkJsb2JS
ZWdpc3RyeSogY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5XZWJCbG9iUmVnaXN0cnkoKSB7IH0K
KworICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWVk
IGJsb2IgZGF0YS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVS
TCYsIFdlYkJsb2JEYXRhJikgPSAwOworICAgIAorICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJM
IHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBz
cmNVUkwuCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBj
b25zdCBXZWJVUkwmIHNyY1VSTCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFdlYlVSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdlRGF0
YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJikgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iUmVnaXN0cnlfaApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNGZjYmE0ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQmxv
YlN0b3JhZ2VEYXRhX2gKKyNkZWZpbmUgV2ViQmxvYlN0b3JhZ2VEYXRhX2gKKworI2luY2x1ZGUg
IldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNs
YXNzIEJsb2JTdG9yYWdlRGF0YTsgfQorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGU7CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdl
RGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlwZURh
dGEsIFR5cGVGaWxlIH0gdHlwZTsKKyAgICAgICAgV2ViRGF0YSBkYXRhOworICAgICAgICBXZWJT
dHJpbmcgcGF0aDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAgICAgICAgbG9uZyBsb25n
IGxlbmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS9ibG9iLgorICAg
ICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldlYkJsb2JTdG9yYWdl
RGF0YSgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkgOiBtX3ByaXZh
dGUoMCkgeyB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKworICAgIGJvb2wgaXNO
dWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0
OworCisgICAgLy8gUmV0cmlldmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVu
IGluZGV4LiBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4K
KyAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBj
b25zdDsKKworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7CisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKKyAgICBXZWJCbG9iU3Rv
cmFnZURhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0
b3JhZ2VEYXRhPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9i
U3RvcmFnZURhdGE+KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KKyAgICB2b2lkIGFzc2lnbihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6QmxvYlN0b3JhZ2VEYXRhPiYpOworI2VuZGlmCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhUHJp
dmF0ZSogbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJCbG9iU3RvcmFnZURhdGFfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgK
aW5kZXggNDEwNDE3NS4uMmMyMjJmMiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVu
dC5oCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJBcHBs
aWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Owor
Y2xhc3MgV2ViQmxvYlJlZ2lzdHJ5OwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29v
a2llSmFyOwogY2xhc3MgV2ViRmlsZVV0aWxpdGllczsKQEAgLTg5LDYgKzkwLDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBNYXkgcmV0dXJuIG51bGwuCiAgICAgdmlydHVhbCBXZWJDb29raWVKYXIqIGNv
b2tpZUphcigpIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIEJsb2IgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmly
dHVhbCBXZWJCbG9iUmVnaXN0cnkqIGJsb2JSZWdpc3RyeSgpIHsgcmV0dXJuIDA7IH0KKwogICAg
IC8vIERPTSBTdG9yYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKICAgICAvLyBSZXR1cm4gYSBMb2NhbFN0b3JhZ2UgbmFtZXNwYWNlIHRoYXQg
Y29ycmVzcG9uZHMgdG8gdGhlIGZvbGxvd2luZyBwYXRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Js
b2JSZWdpc3RyeVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45
NDAwY2ZkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0
cnlQcm94eS5jcHAKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
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
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShCTE9CKQorCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5UHJveHkuaCIKKworI2luY2x1ZGUg
IkJsb2JEYXRhLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCisjaW5jbHVkZSAiV2ViQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNs
dWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworLy8gV2UgYXJl
IHBhcnQgb2YgdGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbi4KK3VzaW5nIG5hbWVzcGFjZSBXZWJL
aXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnko
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChCbG9iUmVnaXN0cnlQcm94eSwgaW5zdGFuY2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7
Cit9CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJM
JiB1cmwsIFBhc3NPd25QdHI8QmxvYkRhdGE+IGJsb2JEYXRhKQoreworICAgIFdlYkJsb2JEYXRh
IHdlYkJsb2JEYXRhKGJsb2JEYXRhKTsKKyAgICB3ZWJLaXRDbGllbnQoKS0+cmVnaXN0ZXJCbG9i
VVJMKHVybCwgd2ViQmxvYkRhdGEpOworfQorCit2b2lkIEJsb2JSZWdpc3RyeVByb3h5OjpyZWdp
c3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBLVVJMJiBzcmNVUkwpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQg
QmxvYlJlZ2lzdHJ5UHJveHk6OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCkKK3sK
KyAgICB3ZWJLaXRDbGllbnQoKS0+dW5yZWdpc3RlckJsb2JVUkwodXJsKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9z
cmMvQmxvYlJlZ2lzdHJ5UHJveHkuaCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvQmxvYlJlZ2lzdHJ5
UHJveHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2VjODEzCi0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oCkBA
IC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEJsb2JSZWdpc3RyeVByb3h5X2gKKyNkZWZpbmUgQmxvYlJl
Z2lzdHJ5UHJveHlfaAorCisjaWYgRU5BQkxFKEJMT0IpCisKKyNpbmNsdWRlICJCbG9iUmVnaXN0
cnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCbG9iUmVnaXN0cnlQcm94eSA6
IHB1YmxpYyBCbG9iUmVnaXN0cnkgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCByZWdpc3Rl
ckJsb2JVUkwoY29uc3QgS1VSTCYsIFBhc3NPd25QdHI8QmxvYkRhdGE+KTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBLVVJMJiBzcmNVUkwpOwor
ICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJik7CisKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8UmVzb3VyY2VIYW5kbGU+IGNyZWF0ZVJlc291cmNlSGFuZGxlKGNv
bnN0IFJlc291cmNlUmVxdWVzdCYsIFJlc291cmNlSGFuZGxlQ2xpZW50KikgeyByZXR1cm4gMDsg
fQorICAgIHZpcnR1YWwgYm9vbCBsb2FkUmVzb3VyY2VTeW5jaHJvbm91c2x5KGNvbnN0IFJlc291
cmNlUmVxdWVzdCYsIFJlc291cmNlRXJyb3ImLCBSZXNvdXJjZVJlc3BvbnNlJiwgVmVjdG9yPGNo
YXI+JiBkYXRhKSB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgfkJs
b2JSZWdpc3RyeVByb3h5KCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2VuZGlmIC8vIEJsb2JSZWdpc3RyeVByb3h5X2gKZGlm
ZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYkRhdGEuY3BwIGIvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzhiYjViOQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
QmxvYkRhdGEuY3BwCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEw
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldlYkJsb2JEYXRhLmgiCisKKyNpbmNsdWRlICJCbG9iRGF0YS5oIgorCit1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JEYXRh
UHJpdmF0ZSA6IHB1YmxpYyBCbG9iRGF0YSB7Cit9OworCit2b2lkIFdlYkJsb2JEYXRhOjppbml0
aWFsaXplKCkKK3sKKyAgICBhc3NpZ24oQmxvYkRhdGE6OmNyZWF0ZSgpKTsKK30KKwordm9pZCBX
ZWJCbG9iRGF0YTo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKworc2l6ZV90IFdlYkJs
b2JEYXRhOjppdGVtQ291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpOworfQorCitib29sIFdlYkJsb2JEYXRh
OjppdGVtQXQoc2l6ZV90IGluZGV4LCBJdGVtJiByZXN1bHQpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFpc051bGwoKSk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9wcml2YXRlLT5pdGVtcygpLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQmxvYkRhdGFJdGVtJiBpdGVt
ID0gbV9wcml2YXRlLT5pdGVtcygpW2luZGV4XTsKKyAgICByZXN1bHQub2Zmc2V0ID0gaXRlbS5v
ZmZzZXQ7CisgICAgcmVzdWx0Lmxlbmd0aCA9IGl0ZW0ubGVuZ3RoOworICAgIHJlc3VsdC5maWxl
SW5mby5tb2RpZmljYXRpb25UaW1lID0gaXRlbS5leHBlY3RlZE1vZGlmaWNhdGlvblRpbWU7Cisg
ICAgc3dpdGNoIChpdGVtLnR5cGUpIHsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RGF0YToKKyAg
ICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlRGF0YTsKKyAgICAgICAgcmVzdWx0LmRhdGEu
YXNzaWduKGl0ZW0uZGF0YS5kYXRhKCksIHN0YXRpY19jYXN0PHNpemVfdD4oaXRlbS5kYXRhLmxl
bmd0aCgpKSk7CisgICAgICAgIHJlc3VsdC5wYXRoT3JVUkwucmVzZXQoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkZpbGU6CisgICAgICAgIHJlc3VsdC50
eXBlID0gSXRlbTo6VHlwZUZpbGU7CisgICAgICAgIHJlc3VsdC5kYXRhLnJlc2V0KCk7CisgICAg
ICAgIHJlc3VsdC5wYXRoT3JVUkwgPSBpdGVtLnBhdGg7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpCbG9iOgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06
OlR5cGVCbG9iOworICAgICAgICByZXN1bHQuZGF0YS5yZXNldCgpOworICAgICAgICByZXN1bHQu
cGF0aE9yVVJMID0gaXRlbS51cmw7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViQmxv
YkRhdGE6OmFwcGVuZERhdGEoY29uc3QgV2ViRGF0YSYgZGF0YSkKK3sKKyAgICBBU1NFUlQoIWlz
TnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPmFwcGVuZERhdGEoQ1N0cmluZyhkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCkpKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShjb25zdCBX
ZWJTdHJpbmcmIGZpbGVQYXRoKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJp
dmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVu
ZEZpbGUoY29uc3QgV2ViU3RyaW5nJiBmaWxlUGF0aCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBs
b25nIGxlbmd0aCwgY29uc3QgV2ViRmlsZUluZm8mIGZpbGVJbmZvKQoreworICAgIEFTU0VSVCgh
aXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRmlsZShmaWxlUGF0aCwgb2Zmc2V0LCBs
ZW5ndGgsIGZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUpOworfQorCit2b2lkIFdlYkJsb2JEYXRh
OjphcHBlbmRCbG9iKGNvbnN0IFdlYlN0cmluZyYgYmxvYlVSTCwgbG9uZyBsb25nIG9mZnNldCwg
bG9uZyBsb25nIGxlbmd0aCkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZh
dGUtPmFwcGVuZEJsb2IoS1VSTChQYXJzZWRVUkxTdHJpbmcsIGJsb2JVUkwpLCBvZmZzZXQsIGxl
bmd0aCk7Cit9CisKK1dlYlN0cmluZyBXZWJCbG9iRGF0YTo6Y29udGVudFR5cGUoKSBjb25zdAor
eworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnRU
eXBlKCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OnNldENvbnRlbnRUeXBlKGNvbnN0IFdlYlN0
cmluZyYgY29udGVudFR5cGUpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2
YXRlLT5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7Cit9CisKK1dlYlN0cmluZyBXZWJCbG9i
RGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgp
KTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50RGlzcG9zaXRpb24oKTsKK30KKwordm9p
ZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnN0IFdlYlN0cmluZyYgY29u
dGVudERpc3Bvc2l0aW9uKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0
ZS0+c2V0Q29udGVudERpc3Bvc2l0aW9uKGNvbnRlbnREaXNwb3NpdGlvbik7Cit9CisKK1dlYkJs
b2JEYXRhOjpXZWJCbG9iRGF0YShjb25zdCBQYXNzT3duUHRyPEJsb2JEYXRhPiYgZGF0YSkKKyAg
ICA6IG1fcHJpdmF0ZSgwKQoreworICAgIGFzc2lnbihkYXRhKTsKK30KKworV2ViQmxvYkRhdGEm
IFdlYkJsb2JEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFzc093blB0cjxCbG9iRGF0YT4mIGRhdGEp
Cit7CisgICAgYXNzaWduKGRhdGEpOworICAgIHJldHVybiAqdGhpczsKK30KKworV2ViQmxvYkRh
dGE6Om9wZXJhdG9yIFBhc3NPd25QdHI8QmxvYkRhdGE+KCkKK3sKKyAgICBXZWJCbG9iRGF0YVBy
aXZhdGUqIHRlbXAgPSBtX3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0gMDsKKyAgICByZXR1cm4g
YWRvcHRQdHIodGVtcCk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFzc2lnbihjb25zdCBQYXNz
T3duUHRyPEJsb2JEYXRhPiYgZGF0YSkKK3sKKyAgICBpZiAobV9wcml2YXRlKQorICAgICAgICBk
ZWxldGUgbV9wcml2YXRlOworICAgIG1fcHJpdmF0ZSA9IHN0YXRpY19jYXN0PFdlYkJsb2JEYXRh
UHJpdmF0ZSo+KGRhdGEubGVha1B0cigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwIGIv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjJjNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmNwcApAQCAtMCwwICsxLDgwIEBACisv
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
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkJsb2JSZWdpc3RyeUltcGwuaCIKKworI2lu
Y2x1ZGUgIkJsb2JSZWdpc3RyeUltcGwuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisj
aW5jbHVkZSAiV2ViQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorCisjaWYgRU5BQkxFKEJMT0IpCisKK25hbWVzcGFjZSBXZWJLaXQg
eworCitXZWJCbG9iUmVnaXN0cnkqIFdlYkJsb2JSZWdpc3RyeTo6Y3JlYXRlKCkKK3sKKyAgICBy
ZXR1cm4gbmV3IFdlYkJsb2JSZWdpc3RyeUltcGwoKTsKK30KKworV2ViQmxvYlJlZ2lzdHJ5SW1w
bDo6V2ViQmxvYlJlZ2lzdHJ5SW1wbCgpCisgICAgOiBtX2Jsb2JSZWdpc3RyeShuZXcgV2ViQ29y
ZTo6QmxvYlJlZ2lzdHJ5SW1wbCgpKQoreworfQorCitXZWJCbG9iUmVnaXN0cnlJbXBsOjp+V2Vi
QmxvYlJlZ2lzdHJ5SW1wbCgpCit7Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6cmVn
aXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYgdXJsLCBXZWJCbG9iRGF0YSYgYmxvYkRhdGEpCit7
CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lzdGVyQmxvYlVSTCh1cmwsIGJsb2JEYXRhKTsKK30K
Kwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJM
JiB1cmwsIGNvbnN0IFdlYlVSTCYgc3JjVVJMKQoreworICAgIG1fYmxvYlJlZ2lzdHJ5LT5yZWdp
c3RlckJsb2JVUkwodXJsLCBzcmNVUkwpOworfQorCit2b2lkIFdlYkJsb2JSZWdpc3RyeUltcGw6
OnVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYgdXJsKQoreworICAgIG1fYmxvYlJlZ2lz
dHJ5LT51bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOworfQorCitXZWJCbG9iU3RvcmFnZURhdGEgV2Vi
QmxvYlJlZ2lzdHJ5SW1wbDo6Z2V0QmxvYkRhdGFGcm9tVVJMKGNvbnN0IFdlYlVSTCYgdXJsKQor
eworICAgIHJldHVybiBtX2Jsb2JSZWdpc3RyeS0+Z2V0QmxvYkRhdGFGcm9tVVJMKHVybCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gRU5BQkxFKEJMT0IpCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuaCBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmRhNTEyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuaApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
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
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJC
bG9iUmVnaXN0cnlJbXBsX2gKKyNkZWZpbmUgV2ViQmxvYlJlZ2lzdHJ5SW1wbF9oCisKKyNpZiBF
TkFCTEUoQkxPQikKKworI2luY2x1ZGUgIldlYkJsb2JSZWdpc3RyeS5oIgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeyBjbGFzcyBCbG9iUmVnaXN0cnlJbXBs
OyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCbG9iUmVnaXN0cnlJbXBsIDog
cHVibGljIFdlYkJsb2JSZWdpc3RyeSB7CitwdWJsaWM6CisgICAgV2ViQmxvYlJlZ2lzdHJ5SW1w
bCgpOworICAgIHZpcnR1YWwgfldlYkJsb2JSZWdpc3RyeUltcGwoKTsKKworICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgV2ViQmxvYkRhdGEmKTsKKyAgICB2
aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVSTCYsIGNvbnN0IFdlYlVSTCYg
c3JjVVJMKTsKKyAgICB2aXJ0dWFsIHZvaWQgdW5yZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJM
Jik7CisgICAgdmlydHVhbCBXZWJCbG9iU3RvcmFnZURhdGEgZ2V0QmxvYkRhdGFGcm9tVVJMKGNv
bnN0IFdlYlVSTCYpOworCitwcml2YXRlOgorICAgIFdURjo6T3duUHRyPFdlYkNvcmU6OkJsb2JS
ZWdpc3RyeUltcGw+IG1fYmxvYlJlZ2lzdHJ5OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKKworI2VuZGlmIC8vIFdlYkJsb2JSZWdpc3RyeUlt
cGxfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEu
Y3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iU3RvcmFnZURhdGEuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2NGMyNTQKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKQEAgLTAsMCArMSwxMTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQmxvYlN0b3JhZ2VEYXRhLmgiCisK
KyNpbmNsdWRlICJCbG9iU3RvcmFnZURhdGEuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJCbG9iU3RvcmFnZURhdGFQcml2YXRl
IDogcHVibGljIEJsb2JTdG9yYWdlRGF0YSB7Cit9OworCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0
YTo6cmVzZXQoKQoreworICAgIGFzc2lnbigwKTsKK30KKworc2l6ZV90IFdlYkJsb2JTdG9yYWdl
RGF0YTo6aXRlbUNvdW50KCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5pdGVtcygpLnNpemUoKTsKK30KKworYm9vbCBXZWJCbG9iU3RvcmFn
ZURhdGE6Oml0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBB
U1NFUlQoIWlzTnVsbCgpKTsKKworICAgIGlmIChpbmRleCA+PSBtX3ByaXZhdGUtPml0ZW1zKCku
c2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0m
IGl0ZW0gPSBtX3ByaXZhdGUtPml0ZW1zKClbaW5kZXhdOworICAgIHJlc3VsdC5vZmZzZXQgPSBp
dGVtLm9mZnNldDsKKyAgICByZXN1bHQubGVuZ3RoID0gaXRlbS5sZW5ndGg7CisgICAgcmVzdWx0
LmZpbGVJbmZvLm1vZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4cGVjdGVkTW9kaWZpY2F0aW9uVGlt
ZTsKKyAgICBzd2l0Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRh
OgorICAgICAgICByZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVEYXRhOworICAgICAgICByZXN1bHQu
ZGF0YS5hc3NpZ24oaXRlbS5kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtLmRh
dGEubGVuZ3RoKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBCbG9iRGF0YUl0
ZW06OkZpbGU6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZUZpbGU7CisgICAgICAg
IHJlc3VsdC5wYXRoID0gaXRlbS5wYXRoOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitXZWJTdHJp
bmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAgQVNTRVJU
KCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsKK30KKwor
V2ViU3RyaW5nIFdlYkJsb2JTdG9yYWdlRGF0YTo6Y29udGVudERpc3Bvc2l0aW9uKCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50
RGlzcG9zaXRpb24oKTsKK30KKworV2ViQmxvYlN0b3JhZ2VEYXRhOjpXZWJCbG9iU3RvcmFnZURh
dGEoY29uc3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+JiBkYXRhKQorICAgIDogbV9wcml2
YXRlKDApCit7CisgICAgYXNzaWduKGRhdGEpOworfQorCitXZWJCbG9iU3RvcmFnZURhdGEmIFdl
YkJsb2JTdG9yYWdlRGF0YTo6b3BlcmF0b3I9KGNvbnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VE
YXRhPiYgZGF0YSkKK3sKKyAgICBhc3NpZ24oZGF0YSk7CisgICAgcmV0dXJuICp0aGlzOworfQor
CitXZWJCbG9iU3RvcmFnZURhdGE6Om9wZXJhdG9yIFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRh
PigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZTsKK30KKwordm9pZCBXZWJCbG9iU3Rv
cmFnZURhdGE6OmFzc2lnbihjb25zdCBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4mIGRhdGEp
Cit7CisgICAgLy8gcCBpcyBhbHJlYWR5IHJlZidkIGZvciB1cyBieSB0aGUgY2FsbGVyCisgICAg
aWYgKG1fcHJpdmF0ZSkKKyAgICAgICAgbV9wcml2YXRlLT5kZXJlZigpOworICAgIG1fcHJpdmF0
ZSA9IHN0YXRpY19jYXN0PFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUqPihkYXRhLmxlYWtSZWYo
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="commit-queue"
          id="53394"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64763</attachid>
            <date>2010-08-18 13:38:20 -0700</date>
            <delta_ts>2010-08-18 14:36:30 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_6</filename>
            <type>text/plain</type>
            <size>34396</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Yjk5MGFjNi4uNzE0NjMyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAogMjAxMC0wOC0xOCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
YmxvYlJlZ2lzdHJ5KCkgc28gdGhhdCBjaHJvbWl1bSB1c2VzIHRoZQorICAgICAgICBpbXBsZW1l
bnRhdGlvbiBpbiBXZWJLaXQgQ2hyb21pdW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorCisyMDEwLTA4LTE4ICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCiAKICAgICAg
ICAgQ2hhbmdlIEJsb2JTdG9yYWdlRGF0YSB0byByZXVzZSBCbG9iRGF0YS4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCBkYWM5NmVhLi4wMGMw
Yjc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
CkBAIC00MiwxMiArNDIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRG
T1JNKENIUk9NSVVNKQogQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJ
bXBsLCBpbnN0YW5jZSwgKCkpOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KKyNlbmRpZgogCiBi
b29sIEJsb2JSZWdpc3RyeUltcGw6OnNob3VsZExvYWRSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwYTA3NzMzLi42MGJhZGZh
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0wOC0xOCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW2Nocm9taXVtXSBDaHJvbWl1bSBzaWRlIGltcGxlbWVudGF0aW9uIG9mIGJs
b2IgZGF0YSBhbmQgYmxvYiByZWdpc3RyeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzODcxCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIHB1YmxpYy9XZWJCbG9iRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViQmxv
YlJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEu
aDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJLaXRDbGllbnQ6OmJsb2JSZWdpc3RyeSk6CisgICAgICAgICogc3JjL0Jsb2JSZWdp
c3RyeVByb3h5LmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5Lmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJCbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAq
IHNyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJs
b2JSZWdpc3RyeUltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0
YS5jcHA6IEFkZGVkLgorCiAyMDEwLTA4LTE3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCBkMTJiZWU3Li42YmRjNWU0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYg
KzExOSw5IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViQmxvYkRhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVn
aXN0cnkuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkNhbnZhcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2Fy
ZC5oJywKQEAgLTI4Nyw2ICsyOTAsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RD
bGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGll
bnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvQm91bmRPYmplY3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2Jq
ZWN0LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAt
Mzc1LDYgKzM4MCwxMCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJCbG9iRGF0YS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9y
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQmxvYkRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
NTNjYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9i
RGF0YS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJCbG9iRGF0YV9oCisjZGVmaW5lIFdl
YkJsb2JEYXRhX2gKKworI2luY2x1ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5m
by5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
CituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25QdHI7IH0KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGFQcml2YXRlOworCitjbGFzcyBXZWJC
bG9iRGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlw
ZURhdGEsIFR5cGVGaWxlLCBUeXBlQmxvYiB9IHR5cGU7CisgICAgICAgIFdlYkRhdGEgZGF0YTsK
KyAgICAgICAgV2ViU3RyaW5nIHBhdGhPclVSTDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsK
KyAgICAgICAgbG9uZyBsb25nIGxlbmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0
aGUgZmlsZS9ibG9iLgorICAgICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisg
ICAgfldlYkJsb2JEYXRhKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJCbG9iRGF0YSgpIDogbV9w
cml2YXRlKDApIHsgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBX
RUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgor
ICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0cmll
dmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4LiAgUmV0dXJucyBm
YWxzZSBpZgorICAgIC8vIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCisgICAgV0VCS0lUX0FQSSBi
b29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3Q7CisKKyAgICAvLyBB
cHBlbmRzIHRvIHRoZSBsaXN0IG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRE
YXRhKGNvbnN0IFdlYkRhdGEmKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25z
dCBXZWJTdHJpbmcmIGZpbGVQYXRoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShj
b25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVu
Z3RoLCBjb25zdCBXZWJGaWxlSW5mbyYpOworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRCbG9i
KGNvbnN0IFdlYlN0cmluZyYgYmxvYlVSTCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxl
bmd0aCk7CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgdm9pZCBzZXRDb250ZW50VHlwZShjb25zdCBXZWJTdHJpbmcmKTsKKwor
ICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgdm9pZCBzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJik7
CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJCbG9iRGF0YShjb25zdCBXVEY6
OlBhc3NPd25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisgICAgV2ViQmxvYkRhdGEmIG9wZXJh
dG9yPShjb25zdCBXVEY6OlBhc3NPd25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisgICAgb3Bl
cmF0b3IgV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JEYXRhPigpOworI2VuZGlmCisKK3By
aXZhdGU6CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBhc3NpZ24oY29uc3Qg
V1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JEYXRhPiYpOworI2VuZGlmCisgICAgV2ViQmxv
YkRhdGFQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYkJsb2JEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYlJlZ2lzdHJ5LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdp
c3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTk4NjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeV9oCisjZGVmaW5lIFdlYkJsb2JS
ZWdpc3RyeV9oCisKKyNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JEYXRhOworY2xhc3MgV2ViVVJMOworCitjbGFzcyBX
ZWJCbG9iUmVnaXN0cnkgeworcHVibGljOgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkJsb2JS
ZWdpc3RyeSogY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5XZWJCbG9iUmVnaXN0cnkoKSB7IH0K
KworICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWVk
IGJsb2IgZGF0YS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVS
TCYsIFdlYkJsb2JEYXRhJikgPSAwOworICAgIAorICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJM
IHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBz
cmNVUkwuCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBj
b25zdCBXZWJVUkwmIHNyY1VSTCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFdlYlVSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdlRGF0
YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJikgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iUmVnaXN0cnlfaApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNGZjYmE0ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQmxv
YlN0b3JhZ2VEYXRhX2gKKyNkZWZpbmUgV2ViQmxvYlN0b3JhZ2VEYXRhX2gKKworI2luY2x1ZGUg
IldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNs
YXNzIEJsb2JTdG9yYWdlRGF0YTsgfQorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGU7CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdl
RGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlwZURh
dGEsIFR5cGVGaWxlIH0gdHlwZTsKKyAgICAgICAgV2ViRGF0YSBkYXRhOworICAgICAgICBXZWJT
dHJpbmcgcGF0aDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAgICAgICAgbG9uZyBsb25n
IGxlbmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS9ibG9iLgorICAg
ICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldlYkJsb2JTdG9yYWdl
RGF0YSgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkgOiBtX3ByaXZh
dGUoMCkgeyB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKworICAgIGJvb2wgaXNO
dWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0
OworCisgICAgLy8gUmV0cmlldmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVu
IGluZGV4LiBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4K
KyAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBj
b25zdDsKKworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7CisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKKyAgICBXZWJCbG9iU3Rv
cmFnZURhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0
b3JhZ2VEYXRhPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9i
U3RvcmFnZURhdGE+KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KKyAgICB2b2lkIGFzc2lnbihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6QmxvYlN0b3JhZ2VEYXRhPiYpOworI2VuZGlmCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhUHJp
dmF0ZSogbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJCbG9iU3RvcmFnZURhdGFfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgK
aW5kZXggNDEwNDE3NS4uMmMyMjJmMiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVu
dC5oCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJBcHBs
aWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Owor
Y2xhc3MgV2ViQmxvYlJlZ2lzdHJ5OwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29v
a2llSmFyOwogY2xhc3MgV2ViRmlsZVV0aWxpdGllczsKQEAgLTg5LDYgKzkwLDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBNYXkgcmV0dXJuIG51bGwuCiAgICAgdmlydHVhbCBXZWJDb29raWVKYXIqIGNv
b2tpZUphcigpIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIEJsb2IgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmly
dHVhbCBXZWJCbG9iUmVnaXN0cnkqIGJsb2JSZWdpc3RyeSgpIHsgcmV0dXJuIDA7IH0KKwogICAg
IC8vIERPTSBTdG9yYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKICAgICAvLyBSZXR1cm4gYSBMb2NhbFN0b3JhZ2UgbmFtZXNwYWNlIHRoYXQg
Y29ycmVzcG9uZHMgdG8gdGhlIGZvbGxvd2luZyBwYXRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Js
b2JSZWdpc3RyeVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42
M2RiYzRmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0
cnlQcm94eS5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
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
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShCTE9CKQorCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5UHJveHkuaCIKKworI2luY2x1ZGUg
IkJsb2JEYXRhLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCisjaW5jbHVkZSAiV2ViQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJCbG9iUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKworLy8gV2UgYXJlIHBhcnQgb2YgdGhlIFdlYktpdCBpbXBsZW1l
bnRhdGlvbi4KK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlQcm94eSwgaW5zdGFu
Y2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK0Jsb2JSZWdpc3RyeVByb3h5OjpC
bG9iUmVnaXN0cnlQcm94eSgpCisgICAgOiBtX3dlYkJsb2JSZWdpc3RyeShXZWJLaXQ6OndlYktp
dENsaWVudCgpLT5ibG9iUmVnaXN0cnkoKSkKK3sKK30KKwordm9pZCBCbG9iUmVnaXN0cnlQcm94
eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxCbG9iRGF0YT4g
YmxvYkRhdGEpCit7CisgICAgV2ViQmxvYkRhdGEgd2ViQmxvYkRhdGEoYmxvYkRhdGEpOworICAg
IG1fd2ViQmxvYlJlZ2lzdHJ5LT5yZWdpc3RlckJsb2JVUkwodXJsLCB3ZWJCbG9iRGF0YSk7Cit9
CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3sKKyAgICBtX3dlYkJsb2JSZWdpc3RyeS0+cmVnaXN0
ZXJCbG9iVVJMKHVybCwgc3JjVVJMKTsKK30KKwordm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6dW5y
ZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIG1fd2ViQmxvYlJlZ2lzdHJ5
LT51bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94
eS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMmViYjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQmxvYlJlZ2lzdHJ5UHJveHlfaAorI2RlZmluZSBCbG9iUmVnaXN0cnlQcm94eV9oCisKKyNp
ZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsgY2xhc3MgV2ViQmxvYlJlZ2lzdHJ5OyB9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQmxvYlJlZ2lzdHJ5UHJveHkgOiBwdWJsaWMgQmxvYlJlZ2lzdHJ5IHsKK3B1Ymxp
YzoKKyAgICBCbG9iUmVnaXN0cnlQcm94eSgpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7Cisg
ICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBib29sIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hh
cj4mIGRhdGEpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+Qmxv
YlJlZ2lzdHJ5UHJveHkoKSB7IH0KKworICAgIFdlYktpdDo6V2ViQmxvYlJlZ2lzdHJ5KiBtX3dl
YkJsb2JSZWdpc3RyeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShCTE9CKQorCisjZW5kaWYgLy8gQmxvYlJlZ2lzdHJ5UHJveHlfaApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkJsb2JEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
OGJiNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0
YS5jcHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
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
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
QmxvYkRhdGEuaCIKKworI2luY2x1ZGUgIkJsb2JEYXRhLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGFQcml2YXRl
IDogcHVibGljIEJsb2JEYXRhIHsKK307CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmluaXRpYWxpemUo
KQoreworICAgIGFzc2lnbihCbG9iRGF0YTo6Y3JlYXRlKCkpOworfQorCit2b2lkIFdlYkJsb2JE
YXRhOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQorCitzaXplX3QgV2ViQmxvYkRhdGE6
Oml0ZW1Db3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+aXRlbXMoKS5zaXplKCk7Cit9CisKK2Jvb2wgV2ViQmxvYkRhdGE6Oml0ZW1B
dChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKKworICAgIGlmIChpbmRleCA+PSBtX3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX3By
aXZhdGUtPml0ZW1zKClbaW5kZXhdOworICAgIHJlc3VsdC5vZmZzZXQgPSBpdGVtLm9mZnNldDsK
KyAgICByZXN1bHQubGVuZ3RoID0gaXRlbS5sZW5ndGg7CisgICAgcmVzdWx0LmZpbGVJbmZvLm1v
ZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKKyAgICBzd2l0
Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgorICAgICAgICBy
ZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVEYXRhOworICAgICAgICByZXN1bHQuZGF0YS5hc3NpZ24o
aXRlbS5kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtLmRhdGEubGVuZ3RoKCkp
KTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVSTC5yZXNldCgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RmlsZToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJ
dGVtOjpUeXBlRmlsZTsKKyAgICAgICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKKyAgICAgICAgcmVz
dWx0LnBhdGhPclVSTCA9IGl0ZW0ucGF0aDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBCbG9iRGF0YUl0ZW06OkJsb2I6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZUJs
b2I7CisgICAgICAgIHJlc3VsdC5kYXRhLnJlc2V0KCk7CisgICAgICAgIHJlc3VsdC5wYXRoT3JV
UkwgPSBpdGVtLnVybDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6
YXBwZW5kRGF0YShjb25zdCBXZWJEYXRhJiBkYXRhKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkp
OworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRGF0YShDU3RyaW5nKGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSkpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmlu
ZyYgZmlsZVBhdGgpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5h
cHBlbmRGaWxlKGZpbGVQYXRoKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShj
b25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVu
Z3RoLCBjb25zdCBXZWJGaWxlSW5mbyYgZmlsZUluZm8pCit7CisgICAgQVNTRVJUKCFpc051bGwo
KSk7CisgICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZpbGVQYXRoLCBvZmZzZXQsIGxlbmd0aCwg
ZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVu
ZEJsb2IoY29uc3QgV2ViU3RyaW5nJiBibG9iVVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxv
bmcgbGVuZ3RoKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBw
ZW5kQmxvYihLVVJMKFBhcnNlZFVSTFN0cmluZywgYmxvYlVSTCksIG9mZnNldCwgbGVuZ3RoKTsK
K30KKworV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsK
K30KKwordm9pZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJiBj
b250ZW50VHlwZSkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPnNl
dENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpj
b250ZW50RGlzcG9zaXRpb24oKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnREaXNwb3NpdGlvbigpOworfQorCit2b2lkIFdlYkJs
b2JEYXRhOjpzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiBjb250ZW50RGlz
cG9zaXRpb24pCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5zZXRD
b250ZW50RGlzcG9zaXRpb24oY29udGVudERpc3Bvc2l0aW9uKTsKK30KKworV2ViQmxvYkRhdGE6
OldlYkJsb2JEYXRhKGNvbnN0IFBhc3NPd25QdHI8QmxvYkRhdGE+JiBkYXRhKQorICAgIDogbV9w
cml2YXRlKDApCit7CisgICAgYXNzaWduKGRhdGEpOworfQorCitXZWJCbG9iRGF0YSYgV2ViQmxv
YkRhdGE6Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPEJsb2JEYXRhPiYgZGF0YSkKK3sKKyAg
ICBhc3NpZ24oZGF0YSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJCbG9iRGF0YTo6b3Bl
cmF0b3IgUGFzc093blB0cjxCbG9iRGF0YT4oKQoreworICAgIFdlYkJsb2JEYXRhUHJpdmF0ZSog
dGVtcCA9IG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSAwOworICAgIHJldHVybiBhZG9wdFB0
cih0ZW1wKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXNzaWduKGNvbnN0IFBhc3NPd25QdHI8
QmxvYkRhdGE+JiBkYXRhKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIGRlbGV0ZSBt
X3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0gc3RhdGljX2Nhc3Q8V2ViQmxvYkRhdGFQcml2YXRl
Kj4oZGF0YS5sZWFrUHRyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY2MmM1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIgorCisjaW5jbHVkZSAi
QmxvYlJlZ2lzdHJ5SW1wbC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRl
ICJXZWJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisKKyNpZiBFTkFCTEUoQkxPQikKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YkJsb2JSZWdpc3RyeSogV2ViQmxvYlJlZ2lzdHJ5OjpjcmVhdGUoKQoreworICAgIHJldHVybiBu
ZXcgV2ViQmxvYlJlZ2lzdHJ5SW1wbCgpOworfQorCitXZWJCbG9iUmVnaXN0cnlJbXBsOjpXZWJC
bG9iUmVnaXN0cnlJbXBsKCkKKyAgICA6IG1fYmxvYlJlZ2lzdHJ5KG5ldyBXZWJDb3JlOjpCbG9i
UmVnaXN0cnlJbXBsKCkpCit7Cit9CisKK1dlYkJsb2JSZWdpc3RyeUltcGw6On5XZWJCbG9iUmVn
aXN0cnlJbXBsKCkKK3sKK30KKwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJs
b2JVUkwoY29uc3QgV2ViVVJMJiB1cmwsIFdlYkJsb2JEYXRhJiBibG9iRGF0YSkKK3sKKyAgICBt
X2Jsb2JSZWdpc3RyeS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxvYkRhdGEpOworfQorCit2b2lk
IFdlYkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmIHVybCwg
Y29uc3QgV2ViVVJMJiBzcmNVUkwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lzdGVyQmxv
YlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdp
c3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnVu
cmVnaXN0ZXJCbG9iVVJMKHVybCk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YSBXZWJCbG9iUmVn
aXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAg
cmV0dXJuIG1fYmxvYlJlZ2lzdHJ5LT5nZXRCbG9iRGF0YUZyb21VUkwodXJsKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGE1MTJkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQmxvYlJlZ2lzdHJ5SW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdp
c3RyeUltcGxfaAorI2RlZmluZSBXZWJCbG9iUmVnaXN0cnlJbXBsX2gKKworI2lmIEVOQUJMRShC
TE9CKQorCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JSZWdpc3RyeUltcGw7IH0KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeUltcGwgOiBwdWJsaWMg
V2ViQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBXZWJCbG9iUmVnaXN0cnlJbXBsKCk7Cisg
ICAgdmlydHVhbCB+V2ViQmxvYlJlZ2lzdHJ5SW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBXZWJCbG9iRGF0YSYpOworICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwp
OworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmKTsKKyAg
ICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdlRGF0YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2Vi
VVJMJik7CisKK3ByaXZhdGU6CisgICAgV1RGOjpPd25QdHI8V2ViQ29yZTo6QmxvYlJlZ2lzdHJ5
SW1wbD4gbV9ibG9iUmVnaXN0cnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShCTE9CKQorCisjZW5kaWYgLy8gV2ViQmxvYlJlZ2lzdHJ5SW1wbF9oCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZDY0YzI1NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcApAQCAtMCwwICsxLDExNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworI2luY2x1
ZGUgIkJsb2JTdG9yYWdlRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUgOiBwdWJs
aWMgQmxvYlN0b3JhZ2VEYXRhIHsKK307CisKK3ZvaWQgV2ViQmxvYlN0b3JhZ2VEYXRhOjpyZXNl
dCgpCit7CisgICAgYXNzaWduKDApOworfQorCitzaXplX3QgV2ViQmxvYlN0b3JhZ2VEYXRhOjpp
dGVtQ291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBt
X3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpOworfQorCitib29sIFdlYkJsb2JTdG9yYWdlRGF0YTo6
aXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVCgh
aXNOdWxsKCkpOworCisgICAgaWYgKGluZGV4ID49IG1fcHJpdmF0ZS0+aXRlbXMoKS5zaXplKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9
IG1fcHJpdmF0ZS0+aXRlbXMoKVtpbmRleF07CisgICAgcmVzdWx0Lm9mZnNldCA9IGl0ZW0ub2Zm
c2V0OworICAgIHJlc3VsdC5sZW5ndGggPSBpdGVtLmxlbmd0aDsKKyAgICByZXN1bHQuZmlsZUlu
Zm8ubW9kaWZpY2F0aW9uVGltZSA9IGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lOworICAg
IHN3aXRjaCAoaXRlbS50eXBlKSB7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkRhdGE6CisgICAg
ICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZURhdGE7CisgICAgICAgIHJlc3VsdC5kYXRhLmFz
c2lnbihpdGVtLmRhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0YS5sZW5n
dGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6Rmls
ZToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlRmlsZTsKKyAgICAgICAgcmVzdWx0
LnBhdGggPSBpdGVtLnBhdGg7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1dlYlN0cmluZyBXZWJC
bG9iU3RvcmFnZURhdGE6OmNvbnRlbnRUeXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50VHlwZSgpOworfQorCitXZWJTdHJp
bmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdAoreworICAg
IEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnREaXNwb3Np
dGlvbigpOworfQorCitXZWJCbG9iU3RvcmFnZURhdGE6OldlYkJsb2JTdG9yYWdlRGF0YShjb25z
dCBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4mIGRhdGEpCisgICAgOiBtX3ByaXZhdGUoMCkK
K3sKKyAgICBhc3NpZ24oZGF0YSk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YSYgV2ViQmxvYlN0
b3JhZ2VEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+JiBk
YXRhKQoreworICAgIGFzc2lnbihkYXRhKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkJs
b2JTdG9yYWdlRGF0YTo6b3BlcmF0b3IgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlOworfQorCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0
YTo6YXNzaWduKGNvbnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKK3sKKyAg
ICAvLyBwIGlzIGFscmVhZHkgcmVmJ2QgZm9yIHVzIGJ5IHRoZSBjYWxsZXIKKyAgICBpZiAobV9w
cml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2YXRlID0gc3Rh
dGljX2Nhc3Q8V2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSo+KGRhdGEubGVha1JlZigpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="commit-queue"
          id="53397"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64774</attachid>
            <date>2010-08-18 14:36:30 -0700</date>
            <delta_ts>2010-08-18 15:03:34 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>43871_7</filename>
            <type>text/plain</type>
            <size>34348</size>
            <attacher name="Jian Li">jianli</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
Yjk5MGFjNi4uNzE0NjMyZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwxNyBAQAogMjAxMC0wOC0xOCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CiAKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQ2hyb21pdW0gc2lkZSBpbXBsZW1lbnRhdGlvbiBvZiBibG9iIGRhdGEgYW5k
IGJsb2IgcmVnaXN0cnkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00Mzg3MQorCisgICAgICAgIFdyYXAgIVBMQVRGT1JNKENIUk9NSVVNKSBhcm91bmQg
YmxvYlJlZ2lzdHJ5KCkgc28gdGhhdCBjaHJvbWl1bSB1c2VzIHRoZQorICAgICAgICBpbXBsZW1l
bnRhdGlvbiBpbiBXZWJLaXQgQ2hyb21pdW0uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3Jr
L0Jsb2JSZWdpc3RyeUltcGwuY3BwOgorCisyMDEwLTA4LTE4ICBKaWFuIExpICA8amlhbmxpQGNo
cm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCiAKICAgICAg
ICAgQ2hhbmdlIEJsb2JTdG9yYWdlRGF0YSB0byByZXVzZSBCbG9iRGF0YS4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9CbG9iUmVnaXN0cnlJbXBsLmNwcAppbmRleCBkYWM5NmVhLi4wMGMw
Yjc1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvQmxvYlJlZ2lzdHJ5SW1w
bC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Jsb2JSZWdpc3RyeUltcGwuY3Bw
CkBAIC00MiwxMiArNDIsMTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisjaWYgIVBMQVRG
T1JNKENIUk9NSVVNKQogQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlJ
bXBsLCBpbnN0YW5jZSwgKCkpOwogICAgIHJldHVybiBpbnN0YW5jZTsKIH0KKyNlbmRpZgogCiBi
b29sIEJsb2JSZWdpc3RyeUltcGw6OnNob3VsZExvYWRSZXNvdXJjZShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwYTA3NzMzLi42MGJhZGZh
IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMC0wOC0xOCAgSmlhbiBMaSAgPGpp
YW5saUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW2Nocm9taXVtXSBDaHJvbWl1bSBzaWRlIGltcGxlbWVudGF0aW9uIG9mIGJs
b2IgZGF0YSBhbmQgYmxvYiByZWdpc3RyeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQzODcxCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAg
ICAqIHB1YmxpYy9XZWJCbG9iRGF0YS5oOiBBZGRlZC4KKyAgICAgICAgKiBwdWJsaWMvV2ViQmxv
YlJlZ2lzdHJ5Lmg6IEFkZGVkLgorICAgICAgICAqIHB1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEu
aDogQWRkZWQuCisgICAgICAgICogcHVibGljL1dlYktpdENsaWVudC5oOgorICAgICAgICAoV2Vi
S2l0OjpXZWJLaXRDbGllbnQ6OmJsb2JSZWdpc3RyeSk6CisgICAgICAgICogc3JjL0Jsb2JSZWdp
c3RyeVByb3h5LmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL0Jsb2JSZWdpc3RyeVByb3h5Lmg6
IEFkZGVkLgorICAgICAgICAqIHNyYy9XZWJCbG9iRGF0YS5jcHA6IEFkZGVkLgorICAgICAgICAq
IHNyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmNwcDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJs
b2JSZWdpc3RyeUltcGwuaDogQWRkZWQuCisgICAgICAgICogc3JjL1dlYkJsb2JTdG9yYWdlRGF0
YS5jcHA6IEFkZGVkLgorCiAyMDEwLTA4LTE3ICBJbHlhIFRpa2hvbm92c2t5ICA8bG9pc2xvQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBZdXJ5IFNlbWlraGF0c2t5LgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAppbmRleCBkMTJiZWU3Li42YmRjNWU0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtMTE5LDYg
KzExOSw5IEBACiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJBcHBsaWNhdGlvbkNhY2hlSG9z
dENsaWVudC5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkF0dHJpYnV0ZS5oJywKICAg
ICAgICAgICAgICAgICAncHVibGljL1dlYkJpbmRpbmdzLmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvV2ViQmxvYkRhdGEuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iUmVn
aXN0cnkuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCcs
CiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9XZWJDYWNoZS5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL1dlYkNhbnZhcy5oJywKICAgICAgICAgICAgICAgICAncHVibGljL1dlYkNsaXBib2Fy
ZC5oJywKQEAgLTI4Nyw2ICsyOTAsOCBAQAogICAgICAgICAgICAgICAgICdzcmMvQXV0b0ZpbGxQ
b3B1cE1lbnVDbGllbnQuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RD
bGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9CYWNrRm9yd2FyZExpc3RDbGll
bnRJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvQmxvYlJlZ2lzdHJ5UHJveHkuY3BwJywK
KyAgICAgICAgICAgICAgICAnc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvQm91bmRPYmplY3QuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2Jq
ZWN0LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLApAQCAt
Mzc1LDYgKzM4MCwxMCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJv
bGxlckltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBdHRyaWJ1dGUuY3BwJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkJpbmRpbmdzLmNwcCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJCbG9iRGF0YS5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5
SW1wbC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oJywK
KyAgICAgICAgICAgICAgICAnc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViQ2FjaGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkNvbG9y
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJDb21tb24uY3BwJywKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaCBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQmxvYkRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44
NTNjYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9i
RGF0YS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJCbG9iRGF0YV9oCisjZGVmaW5lIFdl
YkJsb2JEYXRhX2gKKworI2luY2x1ZGUgIldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5m
by5oIgorI2luY2x1ZGUgIldlYlN0cmluZy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9O
CituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JEYXRhOyB9CituYW1lc3BhY2UgV1RGIHsg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNzIFBhc3NPd25QdHI7IH0KKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGFQcml2YXRlOworCitjbGFzcyBXZWJC
bG9iRGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlw
ZURhdGEsIFR5cGVGaWxlLCBUeXBlQmxvYiB9IHR5cGU7CisgICAgICAgIFdlYkRhdGEgZGF0YTsK
KyAgICAgICAgV2ViU3RyaW5nIHBhdGhPclVSTDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsK
KyAgICAgICAgbG9uZyBsb25nIGxlbmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0
aGUgZmlsZS9ibG9iLgorICAgICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisg
ICAgfldlYkJsb2JEYXRhKCkgeyByZXNldCgpOyB9CisKKyAgICBXZWJCbG9iRGF0YSgpIDogbV9w
cml2YXRlKDApIHsgfQorCisgICAgV0VCS0lUX0FQSSB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBX
RUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKworICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1
cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zLgor
ICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0OworCisgICAgLy8gUmV0cmll
dmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVuIGluZGV4LiAgUmV0dXJucyBm
YWxzZSBpZgorICAgIC8vIGluZGV4IGlzIG91dCBvZiBib3VuZHMuCisgICAgV0VCS0lUX0FQSSBi
b29sIGl0ZW1BdChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3Q7CisKKyAgICAvLyBB
cHBlbmRzIHRvIHRoZSBsaXN0IG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRE
YXRhKGNvbnN0IFdlYkRhdGEmKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShjb25z
dCBXZWJTdHJpbmcmIGZpbGVQYXRoKTsKKyAgICBXRUJLSVRfQVBJIHZvaWQgYXBwZW5kRmlsZShj
b25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVu
Z3RoLCBjb25zdCBXZWJGaWxlSW5mbyYpOworICAgIFdFQktJVF9BUEkgdm9pZCBhcHBlbmRCbG9i
KGNvbnN0IFdlYlN0cmluZyYgYmxvYlVSTCwgbG9uZyBsb25nIG9mZnNldCwgbG9uZyBsb25nIGxl
bmd0aCk7CisKKyAgICBXRUJLSVRfQVBJIFdlYlN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0Owor
ICAgIFdFQktJVF9BUEkgdm9pZCBzZXRDb250ZW50VHlwZShjb25zdCBXZWJTdHJpbmcmKTsKKwor
ICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnREaXNwb3NpdGlvbigpIGNvbnN0OworICAg
IFdFQktJVF9BUEkgdm9pZCBzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJik7
CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJCbG9iRGF0YShjb25zdCBXVEY6
OlBhc3NPd25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisgICAgV2ViQmxvYkRhdGEmIG9wZXJh
dG9yPShjb25zdCBXVEY6OlBhc3NPd25QdHI8V2ViQ29yZTo6QmxvYkRhdGE+Jik7CisgICAgb3Bl
cmF0b3IgV1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JEYXRhPigpOworI2VuZGlmCisKK3By
aXZhdGU6CisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdm9pZCBhc3NpZ24oY29uc3Qg
V1RGOjpQYXNzT3duUHRyPFdlYkNvcmU6OkJsb2JEYXRhPiYpOworI2VuZGlmCisgICAgV2ViQmxv
YkRhdGFQcml2YXRlKiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYkJsb2JEYXRhX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvV2ViQmxvYlJlZ2lzdHJ5LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdp
c3RyeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ZTk4NjkKLS0tIC9k
ZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkJsb2JSZWdpc3RyeS5oCkBA
IC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdpc3RyeV9oCisjZGVmaW5lIFdlYkJsb2JS
ZWdpc3RyeV9oCisKKyNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworbmFtZXNwYWNl
IFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JEYXRhOworY2xhc3MgV2ViVVJMOworCitjbGFzcyBX
ZWJCbG9iUmVnaXN0cnkgeworcHVibGljOgorICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkJsb2JS
ZWdpc3RyeSogY3JlYXRlKCk7CisKKyAgICB2aXJ0dWFsIH5XZWJCbG9iUmVnaXN0cnkoKSB7IH0K
KworICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJMIHJlZmVycmluZyB0byB0aGUgc3BlY2lmaWVk
IGJsb2IgZGF0YS4KKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJCbG9iVVJMKGNvbnN0IFdlYlVS
TCYsIFdlYkJsb2JEYXRhJikgPSAwOworICAgIAorICAgIC8vIFJlZ2lzdGVycyBhIGJsb2IgVVJM
IHJlZmVycmluZyB0byB0aGUgYmxvYiBkYXRhIGlkZW50aWZpZWQgYnkgdGhlIHNwZWNpZmllZCBz
cmNVUkwuCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBj
b25zdCBXZWJVUkwmIHNyY1VSTCkgPSAwOworCisgICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJC
bG9iVVJMKGNvbnN0IFdlYlVSTCYpID0gMDsKKyAgICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdlRGF0
YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJikgPSAwOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJCbG9iUmVnaXN0cnlfaApkaWZmIC0tZ2l0IGEv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJCbG9iU3RvcmFnZURhdGEuaCBiL1dlYktpdC9jaHJv
bWl1bS9wdWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNGZjYmE0ZQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9w
dWJsaWMvV2ViQmxvYlN0b3JhZ2VEYXRhLmgKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRp
b24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisg
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQmxv
YlN0b3JhZ2VEYXRhX2gKKyNkZWZpbmUgV2ViQmxvYlN0b3JhZ2VEYXRhX2gKKworI2luY2x1ZGUg
IldlYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlSW5mby5oIgorI2luY2x1ZGUgIldlYlN0cmlu
Zy5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCituYW1lc3BhY2UgV2ViQ29yZSB7IGNs
YXNzIEJsb2JTdG9yYWdlRGF0YTsgfQorbmFtZXNwYWNlIFdURiB7IHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBjbGFzcyBQYXNzUmVmUHRyOyB9CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGU7CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdl
RGF0YSB7CitwdWJsaWM6CisgICAgc3RydWN0IEl0ZW0geworICAgICAgICBlbnVtIHsgVHlwZURh
dGEsIFR5cGVGaWxlIH0gdHlwZTsKKyAgICAgICAgV2ViRGF0YSBkYXRhOworICAgICAgICBXZWJT
dHJpbmcgcGF0aDsKKyAgICAgICAgbG9uZyBsb25nIG9mZnNldDsKKyAgICAgICAgbG9uZyBsb25n
IGxlbmd0aDsgLy8gLTEgbWVhbnMgZ28gdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS9ibG9iLgorICAg
ICAgICBXZWJGaWxlSW5mbyBmaWxlSW5mbzsKKyAgICB9OworCisgICAgfldlYkJsb2JTdG9yYWdl
RGF0YSgpIHsgcmVzZXQoKTsgfQorCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhKCkgOiBtX3ByaXZh
dGUoMCkgeyB9CisKKyAgICBXRUJLSVRfQVBJIHZvaWQgcmVzZXQoKTsKKworICAgIGJvb2wgaXNO
dWxsKCkgY29uc3QgeyByZXR1cm4gIW1fcHJpdmF0ZTsgfQorCisgICAgLy8gUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGl0ZW1zLgorICAgIFdFQktJVF9BUEkgc2l6ZV90IGl0ZW1Db3VudCgpIGNvbnN0
OworCisgICAgLy8gUmV0cmlldmVzIHRoZSB2YWx1ZXMgb2YgdGhlIGl0ZW0gYXQgdGhlIGdpdmVu
IGluZGV4LiBSZXR1cm5zIGZhbHNlIGlmCisgICAgLy8gaW5kZXggaXMgb3V0IG9mIGJvdW5kcy4K
KyAgICBXRUJLSVRfQVBJIGJvb2wgaXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBj
b25zdDsKKworICAgIFdFQktJVF9BUEkgV2ViU3RyaW5nIGNvbnRlbnRUeXBlKCkgY29uc3Q7Cisg
ICAgV0VCS0lUX0FQSSBXZWJTdHJpbmcgY29udGVudERpc3Bvc2l0aW9uKCkgY29uc3Q7CisKKyNp
ZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICBXZWJCbG9iU3RvcmFnZURhdGEoY29uc3QgV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OkJsb2JTdG9yYWdlRGF0YT4mKTsKKyAgICBXZWJCbG9iU3Rv
cmFnZURhdGEmIG9wZXJhdG9yPShjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6QmxvYlN0
b3JhZ2VEYXRhPiYpOworICAgIG9wZXJhdG9yIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpCbG9i
U3RvcmFnZURhdGE+KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyNpZiBXRUJLSVRfSU1Q
TEVNRU5UQVRJT04KKyAgICB2b2lkIGFzc2lnbihjb25zdCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6QmxvYlN0b3JhZ2VEYXRhPiYpOworI2VuZGlmCisgICAgV2ViQmxvYlN0b3JhZ2VEYXRhUHJp
dmF0ZSogbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
LyBXZWJCbG9iU3RvcmFnZURhdGFfaApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViS2l0Q2xpZW50LmgK
aW5kZXggNDEwNDE3NS4uMmMyMjJmMiAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9XZWJLaXRDbGllbnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYktpdENsaWVu
dC5oCkBAIC00OCw2ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJBcHBs
aWNhdGlvbkNhY2hlSG9zdDsKIGNsYXNzIFdlYkFwcGxpY2F0aW9uQ2FjaGVIb3N0Q2xpZW50Owor
Y2xhc3MgV2ViQmxvYlJlZ2lzdHJ5OwogY2xhc3MgV2ViQ2xpcGJvYXJkOwogY2xhc3MgV2ViQ29v
a2llSmFyOwogY2xhc3MgV2ViRmlsZVV0aWxpdGllczsKQEAgLTg5LDYgKzkwLDEwIEBAIHB1Ymxp
YzoKICAgICAvLyBNYXkgcmV0dXJuIG51bGwuCiAgICAgdmlydHVhbCBXZWJDb29raWVKYXIqIGNv
b2tpZUphcigpIHsgcmV0dXJuIDA7IH0KIAorICAgIC8vIEJsb2IgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgdmly
dHVhbCBXZWJCbG9iUmVnaXN0cnkqIGJsb2JSZWdpc3RyeSgpIHsgcmV0dXJuIDA7IH0KKwogICAg
IC8vIERPTSBTdG9yYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAKICAgICAvLyBSZXR1cm4gYSBMb2NhbFN0b3JhZ2UgbmFtZXNwYWNlIHRoYXQg
Y29ycmVzcG9uZHMgdG8gdGhlIGZvbGxvd2luZyBwYXRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Js
b2JSZWdpc3RyeVByb3h5LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
YmI0MzBlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0
cnlQcm94eS5jcHAKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
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
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShCTE9CKQorCisjaW5jbHVkZSAiQmxvYlJlZ2lzdHJ5UHJveHkuaCIKKworI2luY2x1ZGUg
IkJsb2JEYXRhLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCisjaW5jbHVkZSAiV2ViQmxvYkRhdGEuaCIKKyNpbmNsdWRlICJXZWJCbG9iUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJXZWJLaXQuaCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNs
dWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKworLy8gV2UgYXJlIHBhcnQgb2YgdGhlIFdlYktpdCBpbXBsZW1l
bnRhdGlvbi4KK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworQmxvYlJlZ2lzdHJ5JiBibG9iUmVnaXN0cnkoKQoreworICAgIEFTU0VSVChpc01haW5UaHJl
YWQoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChCbG9iUmVnaXN0cnlQcm94eSwgaW5zdGFu
Y2UsICgpKTsKKyAgICByZXR1cm4gaW5zdGFuY2U7Cit9CisKK0Jsb2JSZWdpc3RyeVByb3h5OjpC
bG9iUmVnaXN0cnlQcm94eSgpCisgICAgOiBtX3dlYkJsb2JSZWdpc3RyeShXZWJLaXQ6OndlYktp
dENsaWVudCgpLT5ibG9iUmVnaXN0cnkoKSkKK3sKK30KKwordm9pZCBCbG9iUmVnaXN0cnlQcm94
eTo6cmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmIHVybCwgUGFzc093blB0cjxCbG9iRGF0YT4g
YmxvYkRhdGEpCit7CisgICAgV2ViQmxvYkRhdGEgd2ViQmxvYkRhdGEoYmxvYkRhdGEpOworICAg
IG1fd2ViQmxvYlJlZ2lzdHJ5LT5yZWdpc3RlckJsb2JVUkwodXJsLCB3ZWJCbG9iRGF0YSk7Cit9
CisKK3ZvaWQgQmxvYlJlZ2lzdHJ5UHJveHk6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IEtVUkwmIHNyY1VSTCkKK3sKKyAgICBtX3dlYkJsb2JSZWdpc3RyeS0+cmVnaXN0
ZXJCbG9iVVJMKHVybCwgc3JjVVJMKTsKK30KKwordm9pZCBCbG9iUmVnaXN0cnlQcm94eTo6dW5y
ZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYgdXJsKQoreworICAgIG1fd2ViQmxvYlJlZ2lzdHJ5
LT51bnJlZ2lzdGVyQmxvYlVSTCh1cmwpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94
eS5oIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9CbG9iUmVnaXN0cnlQcm94eS5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMmViYjIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL0Jsb2JSZWdpc3RyeVByb3h5LmgKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQmxvYlJlZ2lzdHJ5UHJveHlfaAorI2RlZmluZSBCbG9iUmVnaXN0cnlQcm94eV9oCisKKyNp
ZiBFTkFCTEUoQkxPQikKKworI2luY2x1ZGUgIkJsb2JSZWdpc3RyeS5oIgorCituYW1lc3BhY2Ug
V2ViS2l0IHsgY2xhc3MgV2ViQmxvYlJlZ2lzdHJ5OyB9CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgQmxvYlJlZ2lzdHJ5UHJveHkgOiBwdWJsaWMgQmxvYlJlZ2lzdHJ5IHsKK3B1Ymxp
YzoKKyAgICBCbG9iUmVnaXN0cnlQcm94eSgpOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
QmxvYlVSTChjb25zdCBLVVJMJiwgUGFzc093blB0cjxCbG9iRGF0YT4pOworICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgS1VSTCYsIGNvbnN0IEtVUkwmIHNyY1VSTCk7Cisg
ICAgdmlydHVhbCB2b2lkIHVucmVnaXN0ZXJCbG9iVVJMKGNvbnN0IEtVUkwmKTsKKworICAgIHZp
cnR1YWwgUGFzc1JlZlB0cjxSZXNvdXJjZUhhbmRsZT4gY3JlYXRlUmVzb3VyY2VIYW5kbGUoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JiwgUmVzb3VyY2VIYW5kbGVDbGllbnQqKSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBib29sIGxvYWRSZXNvdXJjZVN5bmNocm9ub3VzbHkoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JiwgUmVzb3VyY2VFcnJvciYsIFJlc291cmNlUmVzcG9uc2UmLCBWZWN0b3I8Y2hh
cj4mIGRhdGEpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+Qmxv
YlJlZ2lzdHJ5UHJveHkoKSB7IH0KKworICAgIFdlYktpdDo6V2ViQmxvYlJlZ2lzdHJ5KiBtX3dl
YkJsb2JSZWdpc3RyeTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShCTE9CKQorCisjZW5kaWYgLy8gQmxvYlJlZ2lzdHJ5UHJveHlfaApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0YS5jcHAgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkJsb2JEYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
OGJiNWI5Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJCbG9iRGF0
YS5jcHAKQEAgLTAsMCArMSwxNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
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
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2Vi
QmxvYkRhdGEuaCIKKworI2luY2x1ZGUgIkJsb2JEYXRhLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQmxvYkRhdGFQcml2YXRl
IDogcHVibGljIEJsb2JEYXRhIHsKK307CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmluaXRpYWxpemUo
KQoreworICAgIGFzc2lnbihCbG9iRGF0YTo6Y3JlYXRlKCkpOworfQorCit2b2lkIFdlYkJsb2JE
YXRhOjpyZXNldCgpCit7CisgICAgYXNzaWduKDApOworfQorCitzaXplX3QgV2ViQmxvYkRhdGE6
Oml0ZW1Db3VudCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+aXRlbXMoKS5zaXplKCk7Cit9CisKK2Jvb2wgV2ViQmxvYkRhdGE6Oml0ZW1B
dChzaXplX3QgaW5kZXgsIEl0ZW0mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKKworICAgIGlmIChpbmRleCA+PSBtX3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBCbG9iRGF0YUl0ZW0mIGl0ZW0gPSBtX3By
aXZhdGUtPml0ZW1zKClbaW5kZXhdOworICAgIHJlc3VsdC5vZmZzZXQgPSBpdGVtLm9mZnNldDsK
KyAgICByZXN1bHQubGVuZ3RoID0gaXRlbS5sZW5ndGg7CisgICAgcmVzdWx0LmZpbGVJbmZvLm1v
ZGlmaWNhdGlvblRpbWUgPSBpdGVtLmV4cGVjdGVkTW9kaWZpY2F0aW9uVGltZTsKKyAgICBzd2l0
Y2ggKGl0ZW0udHlwZSkgeworICAgIGNhc2UgQmxvYkRhdGFJdGVtOjpEYXRhOgorICAgICAgICBy
ZXN1bHQudHlwZSA9IEl0ZW06OlR5cGVEYXRhOworICAgICAgICByZXN1bHQuZGF0YS5hc3NpZ24o
aXRlbS5kYXRhLmRhdGEoKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihpdGVtLmRhdGEubGVuZ3RoKCkp
KTsKKyAgICAgICAgcmVzdWx0LnBhdGhPclVSTC5yZXNldCgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6RmlsZToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJ
dGVtOjpUeXBlRmlsZTsKKyAgICAgICAgcmVzdWx0LmRhdGEucmVzZXQoKTsKKyAgICAgICAgcmVz
dWx0LnBhdGhPclVSTCA9IGl0ZW0ucGF0aDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2Fz
ZSBCbG9iRGF0YUl0ZW06OkJsb2I6CisgICAgICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZUJs
b2I7CisgICAgICAgIHJlc3VsdC5kYXRhLnJlc2V0KCk7CisgICAgICAgIHJlc3VsdC5wYXRoT3JV
UkwgPSBpdGVtLnVybDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6
YXBwZW5kRGF0YShjb25zdCBXZWJEYXRhJiBkYXRhKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkp
OworICAgIG1fcHJpdmF0ZS0+YXBwZW5kRGF0YShDU3RyaW5nKGRhdGEuZGF0YSgpLCBkYXRhLnNp
emUoKSkpOworfQorCit2b2lkIFdlYkJsb2JEYXRhOjphcHBlbmRGaWxlKGNvbnN0IFdlYlN0cmlu
ZyYgZmlsZVBhdGgpCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5h
cHBlbmRGaWxlKGZpbGVQYXRoKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXBwZW5kRmlsZShj
b25zdCBXZWJTdHJpbmcmIGZpbGVQYXRoLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxvbmcgbGVu
Z3RoLCBjb25zdCBXZWJGaWxlSW5mbyYgZmlsZUluZm8pCit7CisgICAgQVNTRVJUKCFpc051bGwo
KSk7CisgICAgbV9wcml2YXRlLT5hcHBlbmRGaWxlKGZpbGVQYXRoLCBvZmZzZXQsIGxlbmd0aCwg
ZmlsZUluZm8ubW9kaWZpY2F0aW9uVGltZSk7Cit9CisKK3ZvaWQgV2ViQmxvYkRhdGE6OmFwcGVu
ZEJsb2IoY29uc3QgV2ViU3RyaW5nJiBibG9iVVJMLCBsb25nIGxvbmcgb2Zmc2V0LCBsb25nIGxv
bmcgbGVuZ3RoKQoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIG1fcHJpdmF0ZS0+YXBw
ZW5kQmxvYihLVVJMKFBhcnNlZFVSTFN0cmluZywgYmxvYlVSTCksIG9mZnNldCwgbGVuZ3RoKTsK
K30KKworV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpjb250ZW50VHlwZSgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKCFpc051bGwoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29udGVudFR5cGUoKTsK
K30KKwordm9pZCBXZWJCbG9iRGF0YTo6c2V0Q29udGVudFR5cGUoY29uc3QgV2ViU3RyaW5nJiBj
b250ZW50VHlwZSkKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsKKyAgICBtX3ByaXZhdGUtPnNl
dENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlKTsKK30KKworV2ViU3RyaW5nIFdlYkJsb2JEYXRhOjpj
b250ZW50RGlzcG9zaXRpb24oKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAg
IHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnREaXNwb3NpdGlvbigpOworfQorCit2b2lkIFdlYkJs
b2JEYXRhOjpzZXRDb250ZW50RGlzcG9zaXRpb24oY29uc3QgV2ViU3RyaW5nJiBjb250ZW50RGlz
cG9zaXRpb24pCit7CisgICAgQVNTRVJUKCFpc051bGwoKSk7CisgICAgbV9wcml2YXRlLT5zZXRD
b250ZW50RGlzcG9zaXRpb24oY29udGVudERpc3Bvc2l0aW9uKTsKK30KKworV2ViQmxvYkRhdGE6
OldlYkJsb2JEYXRhKGNvbnN0IFBhc3NPd25QdHI8QmxvYkRhdGE+JiBkYXRhKQorICAgIDogbV9w
cml2YXRlKDApCit7CisgICAgYXNzaWduKGRhdGEpOworfQorCitXZWJCbG9iRGF0YSYgV2ViQmxv
YkRhdGE6Om9wZXJhdG9yPShjb25zdCBQYXNzT3duUHRyPEJsb2JEYXRhPiYgZGF0YSkKK3sKKyAg
ICBhc3NpZ24oZGF0YSk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitXZWJCbG9iRGF0YTo6b3Bl
cmF0b3IgUGFzc093blB0cjxCbG9iRGF0YT4oKQoreworICAgIFdlYkJsb2JEYXRhUHJpdmF0ZSog
dGVtcCA9IG1fcHJpdmF0ZTsKKyAgICBtX3ByaXZhdGUgPSAwOworICAgIHJldHVybiBhZG9wdFB0
cih0ZW1wKTsKK30KKwordm9pZCBXZWJCbG9iRGF0YTo6YXNzaWduKGNvbnN0IFBhc3NPd25QdHI8
QmxvYkRhdGE+JiBkYXRhKQoreworICAgIGlmIChtX3ByaXZhdGUpCisgICAgICAgIGRlbGV0ZSBt
X3ByaXZhdGU7CisgICAgbV9wcml2YXRlID0gc3RhdGljX2Nhc3Q8V2ViQmxvYkRhdGFQcml2YXRl
Kj4oZGF0YS5sZWFrUHRyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdp
dCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5jcHAgYi9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY2MmM1MjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkJsb2JSZWdpc3RyeUltcGwuY3BwCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIgorCisjaW5jbHVkZSAi
QmxvYlJlZ2lzdHJ5SW1wbC5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRl
ICJXZWJCbG9iRGF0YS5oIgorI2luY2x1ZGUgIldlYlVSTC5oIgorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CisKKyNpZiBFTkFCTEUoQkxPQikKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1dl
YkJsb2JSZWdpc3RyeSogV2ViQmxvYlJlZ2lzdHJ5OjpjcmVhdGUoKQoreworICAgIHJldHVybiBu
ZXcgV2ViQmxvYlJlZ2lzdHJ5SW1wbCgpOworfQorCitXZWJCbG9iUmVnaXN0cnlJbXBsOjpXZWJC
bG9iUmVnaXN0cnlJbXBsKCkKKyAgICA6IG1fYmxvYlJlZ2lzdHJ5KG5ldyBXZWJDb3JlOjpCbG9i
UmVnaXN0cnlJbXBsKCkpCit7Cit9CisKK1dlYkJsb2JSZWdpc3RyeUltcGw6On5XZWJCbG9iUmVn
aXN0cnlJbXBsKCkKK3sKK30KKwordm9pZCBXZWJCbG9iUmVnaXN0cnlJbXBsOjpyZWdpc3RlckJs
b2JVUkwoY29uc3QgV2ViVVJMJiB1cmwsIFdlYkJsb2JEYXRhJiBibG9iRGF0YSkKK3sKKyAgICBt
X2Jsb2JSZWdpc3RyeS0+cmVnaXN0ZXJCbG9iVVJMKHVybCwgYmxvYkRhdGEpOworfQorCit2b2lk
IFdlYkJsb2JSZWdpc3RyeUltcGw6OnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmIHVybCwg
Y29uc3QgV2ViVVJMJiBzcmNVUkwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnJlZ2lzdGVyQmxv
YlVSTCh1cmwsIHNyY1VSTCk7Cit9CisKK3ZvaWQgV2ViQmxvYlJlZ2lzdHJ5SW1wbDo6dW5yZWdp
c3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAgbV9ibG9iUmVnaXN0cnktPnVu
cmVnaXN0ZXJCbG9iVVJMKHVybCk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YSBXZWJCbG9iUmVn
aXN0cnlJbXBsOjpnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2ViVVJMJiB1cmwpCit7CisgICAg
cmV0dXJuIG1fYmxvYlJlZ2lzdHJ5LT5nZXRCbG9iRGF0YUZyb21VUkwodXJsKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBFTkFCTEUoQkxPQikKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQmxvYlJlZ2lzdHJ5SW1wbC5oIGIvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJCbG9iUmVnaXN0cnlJbXBsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZGE1MTJkYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViQmxvYlJlZ2lzdHJ5SW1wbC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkJsb2JSZWdp
c3RyeUltcGxfaAorI2RlZmluZSBXZWJCbG9iUmVnaXN0cnlJbXBsX2gKKworI2lmIEVOQUJMRShC
TE9CKQorCisjaW5jbHVkZSAiV2ViQmxvYlJlZ2lzdHJ5LmgiCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7IGNsYXNzIEJsb2JSZWdpc3RyeUltcGw7IH0KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JSZWdpc3RyeUltcGwgOiBwdWJsaWMg
V2ViQmxvYlJlZ2lzdHJ5IHsKK3B1YmxpYzoKKyAgICBXZWJCbG9iUmVnaXN0cnlJbXBsKCk7Cisg
ICAgdmlydHVhbCB+V2ViQmxvYlJlZ2lzdHJ5SW1wbCgpOworCisgICAgdmlydHVhbCB2b2lkIHJl
Z2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmLCBXZWJCbG9iRGF0YSYpOworICAgIHZpcnR1YWwg
dm9pZCByZWdpc3RlckJsb2JVUkwoY29uc3QgV2ViVVJMJiwgY29uc3QgV2ViVVJMJiBzcmNVUkwp
OworICAgIHZpcnR1YWwgdm9pZCB1bnJlZ2lzdGVyQmxvYlVSTChjb25zdCBXZWJVUkwmKTsKKyAg
ICB2aXJ0dWFsIFdlYkJsb2JTdG9yYWdlRGF0YSBnZXRCbG9iRGF0YUZyb21VUkwoY29uc3QgV2Vi
VVJMJik7CisKK3ByaXZhdGU6CisgICAgV1RGOjpPd25QdHI8V2ViQ29yZTo6QmxvYlJlZ2lzdHJ5
SW1wbD4gbV9ibG9iUmVnaXN0cnk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIEVOQUJMRShCTE9CKQorCisjZW5kaWYgLy8gV2ViQmxvYlJlZ2lzdHJ5SW1wbF9oCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkJsb2JTdG9yYWdlRGF0YS5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZDlmYjJiMgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQmxvYlN0b3JhZ2VEYXRhLmNwcApAQCAtMCwwICsxLDExNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJCbG9iU3RvcmFnZURhdGEuaCIKKworI2luY2x1
ZGUgIkJsb2JTdG9yYWdlRGF0YS5oIgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkJsb2JTdG9yYWdlRGF0YVByaXZhdGUgOiBwdWJs
aWMgQmxvYlN0b3JhZ2VEYXRhIHsKK307CisKK3ZvaWQgV2ViQmxvYlN0b3JhZ2VEYXRhOjpyZXNl
dCgpCit7CisgICAgYXNzaWduKDApOworfQorCitzaXplX3QgV2ViQmxvYlN0b3JhZ2VEYXRhOjpp
dGVtQ291bnQoKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBt
X3ByaXZhdGUtPml0ZW1zKCkuc2l6ZSgpOworfQorCitib29sIFdlYkJsb2JTdG9yYWdlRGF0YTo6
aXRlbUF0KHNpemVfdCBpbmRleCwgSXRlbSYgcmVzdWx0KSBjb25zdAoreworICAgIEFTU0VSVCgh
aXNOdWxsKCkpOworCisgICAgaWYgKGluZGV4ID49IG1fcHJpdmF0ZS0+aXRlbXMoKS5zaXplKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IEJsb2JEYXRhSXRlbSYgaXRlbSA9
IG1fcHJpdmF0ZS0+aXRlbXMoKVtpbmRleF07CisgICAgcmVzdWx0Lm9mZnNldCA9IGl0ZW0ub2Zm
c2V0OworICAgIHJlc3VsdC5sZW5ndGggPSBpdGVtLmxlbmd0aDsKKyAgICByZXN1bHQuZmlsZUlu
Zm8ubW9kaWZpY2F0aW9uVGltZSA9IGl0ZW0uZXhwZWN0ZWRNb2RpZmljYXRpb25UaW1lOworICAg
IHN3aXRjaCAoaXRlbS50eXBlKSB7CisgICAgY2FzZSBCbG9iRGF0YUl0ZW06OkRhdGE6CisgICAg
ICAgIHJlc3VsdC50eXBlID0gSXRlbTo6VHlwZURhdGE7CisgICAgICAgIHJlc3VsdC5kYXRhLmFz
c2lnbihpdGVtLmRhdGEuZGF0YSgpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGl0ZW0uZGF0YS5sZW5n
dGgoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIEJsb2JEYXRhSXRlbTo6Rmls
ZToKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBJdGVtOjpUeXBlRmlsZTsKKyAgICAgICAgcmVzdWx0
LnBhdGggPSBpdGVtLnBhdGg7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1dlYlN0cmluZyBXZWJC
bG9iU3RvcmFnZURhdGE6OmNvbnRlbnRUeXBlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVs
bCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jb250ZW50VHlwZSgpOworfQorCitXZWJTdHJp
bmcgV2ViQmxvYlN0b3JhZ2VEYXRhOjpjb250ZW50RGlzcG9zaXRpb24oKSBjb25zdAoreworICAg
IEFTU0VSVCghaXNOdWxsKCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRlbnREaXNwb3Np
dGlvbigpOworfQorCitXZWJCbG9iU3RvcmFnZURhdGE6OldlYkJsb2JTdG9yYWdlRGF0YShjb25z
dCBQYXNzUmVmUHRyPEJsb2JTdG9yYWdlRGF0YT4mIGRhdGEpCisgICAgOiBtX3ByaXZhdGUoMCkK
K3sKKyAgICBhc3NpZ24oZGF0YSk7Cit9CisKK1dlYkJsb2JTdG9yYWdlRGF0YSYgV2ViQmxvYlN0
b3JhZ2VEYXRhOjpvcGVyYXRvcj0oY29uc3QgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+JiBk
YXRhKQoreworICAgIGFzc2lnbihkYXRhKTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1dlYkJs
b2JTdG9yYWdlRGF0YTo6b3BlcmF0b3IgUGFzc1JlZlB0cjxCbG9iU3RvcmFnZURhdGE+KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlOworfQorCit2b2lkIFdlYkJsb2JTdG9yYWdlRGF0
YTo6YXNzaWduKGNvbnN0IFBhc3NSZWZQdHI8QmxvYlN0b3JhZ2VEYXRhPiYgZGF0YSkKK3sKKyAg
ICBpZiAobV9wcml2YXRlKQorICAgICAgICBtX3ByaXZhdGUtPmRlcmVmKCk7CisgICAgbV9wcml2
YXRlID0gc3RhdGljX2Nhc3Q8V2ViQmxvYlN0b3JhZ2VEYXRhUHJpdmF0ZSo+KGRhdGEubGVha1Jl
ZigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>
<flag name="review"
          id="53409"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="53410"
          type_id="3"
          status="-"
          setter="jianli"
    />
          </attachment>
      

    </bug>

</bugzilla>