<?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>32214</bug_id>
          
          <creation_ts>2009-12-07 01:21:11 -0800</creation_ts>
          <short_desc>Add WebSocket feature in Worker</short_desc>
          <delta_ts>2010-01-06 18:51:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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="Fumitoshi Ukai">ukai</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>atwilson</cc>
    
    <cc>hamaji</cc>
    
    <cc>levin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>169219</commentid>
    <comment_count>0</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-07 01:21:11 -0800</bug_when>
    <thetext>The Web Socket API spec says WebSocket constructor is visible when the script&apos;s global object is an object implementing the WorkerUtils interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169220</commentid>
    <comment_count>1</comment_count>
      <attachid>44393</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-07 01:56:42 -0800</bug_when>
    <thetext>Created attachment 44393
Add WebSocket feature in Worker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169221</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-07 01:59:50 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44393 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169824</commentid>
    <comment_count>3</comment_count>
      <attachid>44393</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-12-08 15:47:40 -0800</bug_when>
    <thetext>Comment on attachment 44393
Add WebSocket feature in Worker.

+var timeoutID = setTimeout(endTest, 3000);

A general note - I&apos;m not sure if these timeouts are really helpful. They can make the tests fail when the machine is busy, or when running under GuardMalloc. run-webkit-tests has timeout built in already anyway.

+    debug(evt.data);

This test takes extremely little from js-tests. I&apos;d just make it a fully custom one for simplicity, see e.g. websocket/tests/simple-stress.html. 

+#if ENABLE(WEB_SOCKETS)
+#include &quot;JSWebSocketConstructor.h&quot;
+#endif

The #if should be inside JSWebSocketConstructor.h, not at every place we include it. It&apos;s also a mistake that JSEventSourceConstructor.h include is guarded below.

+    virtual ~ProcessWebSocketEventTask() {}

We normally put a space between braces here.

+    ProcessWebSocketMessageEventTask(PassRefPtr&lt;WebSocket&gt; websocket, const String&amp; msg)
+        : ProcessWebSocketEventTask(websocket)
+        , m_msg(msg) {}

And these braces typically go each on its own line.

     RefPtr&lt;WebSocket&gt; m_webSocket;
-    RefPtr&lt;Event&gt; m_event;
+};

An event like this cannot be passed between threads, because WebSocket refcounting is not thread safe. But I&apos;m not sure if that&apos;s what is happening here. What is the reason for splitting ProcessWebSocketEventTask into multiple classes? This is something ChangeLog per-function comments would serve best for.

+        // FIXME: origin, lastEventId, source, messagePort.

What needs to be fixed here? I think that the current arguments are correct. Per their definition in HTML5, they only apply to server-sent events and cross-document messaging. While origin could theoretically apply to WebSocket messages, too, the spec doesn&apos;t make it so.

It looks like the design here is that all cross-platform code is executed inside worker thread/process, with SocketStreamChannel being responsible for communication with loader process/main thread as necessary. The current version of SocketStreamHandleCFNet doesn&apos;t do that, so I don&apos;t see how the included test can pass with it now. Also, this design conflicts with what you suggested in bug 32246 comment 2, or any other case where we may want to share data between all WebSocketChannels.

It would likely be best to document the design, and to discuss it on webkit-dev before updating the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169892</commentid>
    <comment_count>4</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-08 20:25:26 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 44393 [details])
&gt; +var timeoutID = setTimeout(endTest, 3000);
&gt; 
&gt; A general note - I&apos;m not sure if these timeouts are really helpful. They can
&gt; make the tests fail when the machine is busy, or when running under
&gt; GuardMalloc. run-webkit-tests has timeout built in already anyway.
&gt; 
&gt; +    debug(evt.data);
&gt; 
&gt; This test takes extremely little from js-tests. I&apos;d just make it a fully custom
&gt; one for simplicity, see e.g. websocket/tests/simple-stress.html. 
&gt; 
&gt; +#if ENABLE(WEB_SOCKETS)
&gt; +#include &quot;JSWebSocketConstructor.h&quot;
&gt; +#endif
&gt; 
&gt; The #if should be inside JSWebSocketConstructor.h, not at every place we
&gt; include it. It&apos;s also a mistake that JSEventSourceConstructor.h include is
&gt; guarded below.
&gt; 
&gt; +    virtual ~ProcessWebSocketEventTask() {}
&gt; 
&gt; We normally put a space between braces here.
&gt; 
&gt; +    ProcessWebSocketMessageEventTask(PassRefPtr&lt;WebSocket&gt; websocket, const
&gt; String&amp; msg)
&gt; +        : ProcessWebSocketEventTask(websocket)
&gt; +        , m_msg(msg) {}
&gt; 
&gt; And these braces typically go each on its own line.
&gt; 
&gt;      RefPtr&lt;WebSocket&gt; m_webSocket;
&gt; -    RefPtr&lt;Event&gt; m_event;
&gt; +};
&gt; 
&gt; An event like this cannot be passed between threads, because WebSocket
&gt; refcounting is not thread safe. But I&apos;m not sure if that&apos;s what is happening
&gt; here. What is the reason for splitting ProcessWebSocketEventTask into multiple
&gt; classes? This is something ChangeLog per-function comments would serve best
&gt; for.
&gt; 
&gt; +        // FIXME: origin, lastEventId, source, messagePort.
&gt; 
&gt; What needs to be fixed here? I think that the current arguments are correct.
&gt; Per their definition in HTML5, they only apply to server-sent events and
&gt; cross-document messaging. While origin could theoretically apply to WebSocket
&gt; messages, too, the spec doesn&apos;t make it so.
&gt; 
&gt; It looks like the design here is that all cross-platform code is executed
&gt; inside worker thread/process, with SocketStreamChannel being responsible for
&gt; communication with loader process/main thread as necessary. The current version
&gt; of SocketStreamHandleCFNet doesn&apos;t do that, so I don&apos;t see how the included
&gt; test can pass with it now. Also, this design conflicts with what you suggested
&gt; in bug 32246 comment 2, or any other case where we may want to share data
&gt; between all WebSocketChannels.
&gt; 
&gt; It would likely be best to document the design, and to discuss it on webkit-dev
&gt; before updating the patch.

Ok, I&apos;ll write up a document about WebSocket threading design.
Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170371</commentid>
    <comment_count>5</comment_count>
      <attachid>44602</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-10 01:36:07 -0800</bug_when>
    <thetext>Created attachment 44602
Add WebSocket feature in Worker.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>170941</commentid>
    <comment_count>6</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-12-11 14:53:48 -0800</bug_when>
    <thetext>I&apos;m working on this but I won&apos;t quite finish until Monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>171725</commentid>
    <comment_count>7</comment_count>
      <attachid>44602</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-12-14 22:40:59 -0800</bug_when>
    <thetext>Comment on attachment 44602
Add WebSocket feature in Worker.

&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog

This change log lacks any useful content describing why any changes were done.

&gt; 
&gt; diff --git a/WebCore/websockets/ThreadableWebSocketChannel.cpp b/WebCore/websockets/ThreadableWebSocketChannel.cpp
&gt; +#endif  // ENABLE(WORKERS)

One space before end of line comments.

&gt; diff --git a/WebCore/websockets/ThreadableWebSocketChannel.h b/WebCore/websockets/ThreadableWebSocketChannel.h
&gt; +}  // namespace WebCore

One space before end of line comments. (Feel free to improve check-webkit-style :) ).

&gt; +#endif  // ENABLE(WEB_SOCKETS)

One space before end of line comments.

&gt; +#endif  // ThreadableWebSocketChannel_h

One space before end of line comments.

&gt; diff --git a/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h b/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h
&gt; +class ThreadableWebSocketChannelClientWrapper : public ThreadSafeShared&lt;ThreadableWebSocketChannelClientWrapper&gt; {
&gt; +public:
&gt; +    static PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; create(WebSocketChannelClient* client)
&gt; +     {

Indented { too far.

&gt; +         return adoptRef(new ThreadableWebSocketChannelClientWrapper(client));
&gt; +     }

Indented } too far.

&gt; +    void callSyncMethod()
&gt; +    {
&gt; +        m_didProcessMethod = false;

How about &quot;m_syncMethodDone&quot; which mirrors the method names more closely?

&gt; +}  // namespace WebCore

One space before end of line comments.

&gt; +#endif  // ENABLE(WEB_SOCKETS)

One space before end of line comments.

&gt; +#endif  // ThreadableWebSocketChannelClientWrapper_h

One space before end of line comments.


&gt; diff --git a/WebCore/websockets/WebSocket.cpp b/WebCore/websockets/WebSocket.cpp
&gt; -    // FIXME: origin, lastEventId, source, messagePort.

Why are you removing this FIXME? (How was it fixed?)

&gt; diff --git a/WebCore/websockets/WebSocket.h b/WebCore/websockets/WebSocket.h

&gt; +    // ActiveDOMObject
&gt; +    //  virtual bool hasPendingActivity() const;
&gt; +    // virtual void contextDestroyed();
&gt; +    // virtual bool canSuspend() const;
&gt; +    // virtual void suspend();
&gt; +    // virtual void resume();
&gt; +    // virtual void stop();

All of this commented out code should be removed.

&gt;  }  // namespace WebCore

One space before end of line comments.

&gt; diff --git a/WebCore/websockets/WebSocketChannel.h b/WebCore/websockets/WebSocketChannel.h

I can&apos;t tell what changed in here easily and the diff tool in bugzilla isn&apos;t smart enough to notice that many of these line are probably just re-indenting. Please do the reindenting separately since it really makes it much harder to tell what is actually changing.

&gt;  }  // namespace WebCore

One space before end of line comments.

&gt; diff --git a/WebCore/websockets/WebSocketChannelClient.h b/WebCore/websockets/WebSocketChannelClient.h

I really wish that all of these formatting changes were not part of this change (when they are lines of even files that aren&apos;t even part of what you are accomplishing). It makes it harder to get through it and it will make it harder for me to verify the real changes being made.

&gt;  }  // namespace WebCore

One space before end of line comments.

&gt; diff --git a/WebCore/websockets/WebSocketHandshake.h b/WebCore/websockets/WebSocketHandshake.h

This apparently pure formatting change shouldn&apos;t be part of this change. Please do a separate change for these indent fixes.
  
&gt;  }  // namespace WebCore

One space before end of line comments.

&gt; diff --git a/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp b/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp


&gt; +bool WorkerThreadableWebSocketChannel::send(const String&amp; msg)

Use message instead of msg (in several places). (WebKit style is to prefer whole words over abbreviations.)

&gt; +{
&gt; +    return m_bridge.send(msg);
&gt; +}


&gt; +void WorkerThreadableWebSocketChannel::MainThreadBridge::mainThreadDestroy(ScriptExecutionContext* context, MainThreadBridge* thisPtr)
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +    ASSERT_UNUSED(context, context-&gt;isDocument());
&gt; +    delete thisPtr;
&gt; +}

How do we know MainThreadBridge won&apos;t be used anymore after this?


&gt; +void WorkerThreadableWebSocketChannel::MainThreadBridge::waitSyncMethod()
&gt; +{
&gt; +    WorkerRunLoop&amp; runLoop = m_workerContext-&gt;thread()-&gt;runLoop();
&gt; +    MessageQueueWaitResult result = MessageQueueMessageReceived;
&gt; +    ThreadableWebSocketChannelClientWrapper* clientWrapper = static_cast&lt;ThreadableWebSocketChannelClientWrapper*&gt;(m_workerClientWrapper.get());
&gt; +    while (clientWrapper &amp;&amp; clientWrapper-&gt;syncMethodDone() &amp;&amp; result != MessageQueueTerminated) {
&gt; +        result = runLoop.runInMode(m_workerContext.get(), m_taskMode);

You just used m_taskMode on the worker thread.

&gt; +        clientWrapper = static_cast&lt;ThreadableWebSocketChannelClientWrapper*&gt;(m_workerClientWrapper.get());
&gt; +    }
&gt; +    return;

No &quot;return;&quot; needed here.

&gt; +}
&gt; +
&gt; +void WorkerThreadableWebSocketChannel::MainThreadBridge::mainThreadCreateWebSocketChannel(ScriptExecutionContext* context, MainThreadBridge* thisPtr, const KURL&amp; url, const String&amp; protocol)
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +    ASSERT(context-&gt;isDocument());

Should this assert !thisPtr-&gt;m_mainWebSocketChannel here?

&gt; +
&gt; +    thisPtr-&gt;m_mainWebSocketChannel = WebSocketChannel::create(context, thisPtr, url, protocol);
&gt; +    ASSERT(thisPtr-&gt;m_mainWebSocketChannel);
&gt; +}


&gt; +void WorkerThreadableWebSocketChannel::MainThreadBridge::mainThreadSend(ScriptExecutionContext* context, MainThreadBridge* thisPtr, const String&amp; msg)
&gt; +{
&gt; +    ASSERT(isMainThread());
&gt; +    ASSERT_UNUSED(context, context-&gt;isDocument());
&gt; +
&gt; +    if (!thisPtr-&gt;m_mainWebSocketChannel)
&gt; +        return;
&gt; +    if (!thisPtr-&gt;m_workerClientWrapper)
&gt; +        return;

Why not 
  if (!thisPtr-&gt;m_mainWebSocketChannel || !thisPtr-&gt;m_workerClientWrapper)
      return;
?

&gt; +    ASSERT(!thisPtr-&gt;m_workerClientWrapper-&gt;syncMethodDone());
&gt; +    bool sent = thisPtr-&gt;m_mainWebSocketChannel-&gt;send(msg.crossThreadString());

Why are you doing crossThreadString here? &quot;msg&quot; should already have been copied for this thread.

&gt; +    thisPtr-&gt;m_workerContext-&gt;thread()-&gt;workerLoaderProxy().postTaskForModeToWorkerContext(createCallbackTask(&amp;workerContextDidSend, thisPtr-&gt;m_workerClientWrapper, sent), thisPtr-&gt;m_taskMode);
&gt; +}
&gt; +


&gt; +}  // namespace WebCore

One space before end of line comments.

&gt; +#endif  // ENABLE(WEB_SOCKETS)

One space before end of line comments.

&gt; diff --git a/WebCore/websockets/WorkerThreadableWebSocketChannel.h b/WebCore/websockets/WorkerThreadableWebSocketChannel.h

&gt; +class WorkerThreadableWebSocketChannel : public RefCounted&lt;WorkerThreadableWebSocketChannel&gt;, public ThreadableWebSocketChannel {
...
&gt; +    class MainThreadBridge : public WebSocketChannelClient {

I know you&apos;re mirroring what I did for workers and xhr but now that I&apos;ve had a chance to see it again, I don&apos;t think it is a good approach because it seems to lead to bugs too easily where things are ref counted on the wrong thread.

MainThreadBridge should be split into two classes:
  LoaderThreadClient
  WorkerThreadProxy?

Perhaps you can think of better names. Then there would be much less chance of things getting ref counted on the wrong thread.


&gt; +    public:
&gt; +        MainThreadBridge(PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt;, PassRefPtr&lt;WorkerContext&gt;, const String&amp; /* taskMode */, const KURL&amp;, const String&amp; /* protocol */);

Why are all of these parameters commented out?

&gt; +        // ThreadableWebSocketClientWrapper is to be used on the worker context thread.
&gt; +        // The ref counting is done on either thread.
&gt; +        RefPtr&lt;ThreadSafeShared&lt;ThreadableWebSocketChannelClientWrapper&gt; &gt; m_workerClientWrapper;
&gt; +
&gt; +        // WorkerLoaderProxy is to be used on either thread.

Why is this talking about WorkerLoaderProxy?

&gt; +        // WorkerRunLoop is to be used on the worker thread.

Why is this talking about WorkerRunLoop?

&gt; +        // The ref counting is done on either thread.
&gt; +        RefPtr&lt;WorkerContext&gt; m_workerContext;

This is incorrect for lots of reasons:
1. This object is deleted on the main thread so m_workerContext will get deref&apos;ed there which is bad because it isn&apos;t ThreadSafeShared (only RefCounted).
2. Very few methods can be used on this class on the main thread, so it isn&apos;t great to provide access there.
3. It makes it too easy to do unintentional refcounting on the main thread (which is happening already, see #1).

&gt; +        // For use on the main thread.
&gt; +        String m_taskMode;
&gt; +    };
&gt; +
&gt; +    WorkerThreadableWebSocketChannel(WorkerContext*, WebSocketChannelClient*, const String&amp; taskMode, const KURL&amp;, const String&amp;);

What is the const String&amp; parameter for? It needs a name!

&gt; +
&gt; +    RefPtr&lt;WorkerContext&gt; m_workerContext;
&gt; +    RefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; m_workerClientWrapper;
&gt; +    MainThreadBridge&amp; m_bridge;
&gt; +};
&gt; +
&gt; +}  // namespace WebCore

One space before end of line comments.

&gt; +#endif  // ENABLE(WEB_SOCKETS)

One space before end of line comments.

&gt; +#endif  // WorkerThreadableWebSocketChannel_h

One space before end of line comments.

&gt; diff --git a/WebCore/workers/WorkerContext.idl b/WebCore/workers/WorkerContext.idl
&gt; +        attribute [JSCCustomGetter,EnabledAtRuntime] WebSocketConstructor WebSocket;  // Usable with the new operator

One space before end of line comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172145</commentid>
    <comment_count>8</comment_count>
      <attachid>44936</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-15 19:17:18 -0800</bug_when>
    <thetext>Created attachment 44936
Add WebSocket feature in Worker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172146</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-15 19:22:47 -0800</bug_when>
    <thetext>Attachment 44936 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/CrossThreadCopier.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172152</commentid>
    <comment_count>10</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-15 21:17:00 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 44602 [details])
&gt; &gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; 
&gt; This change log lacks any useful content describing why any changes were done.
&gt; 
&gt; &gt; 
&gt; &gt; diff --git a/WebCore/websockets/ThreadableWebSocketChannel.cpp b/WebCore/websockets/ThreadableWebSocketChannel.cpp
&gt; &gt; +#endif  // ENABLE(WORKERS)
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; diff --git a/WebCore/websockets/ThreadableWebSocketChannel.h b/WebCore/websockets/ThreadableWebSocketChannel.h
&gt; &gt; +}  // namespace WebCore
&gt; 
&gt; One space before end of line comments. (Feel free to improve check-webkit-style
&gt; :) ).
&gt; 
&gt; &gt; +#endif  // ENABLE(WEB_SOCKETS)
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; +#endif  // ThreadableWebSocketChannel_h
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; diff --git a/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h b/WebCore/websockets/ThreadableWebSocketChannelClientWrapper.h
&gt; &gt; +class ThreadableWebSocketChannelClientWrapper : public ThreadSafeShared&lt;ThreadableWebSocketChannelClientWrapper&gt; {
&gt; &gt; +public:
&gt; &gt; +    static PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; create(WebSocketChannelClient* client)
&gt; &gt; +     {
&gt; 
&gt; Indented { too far.
&gt; 
&gt; &gt; +         return adoptRef(new ThreadableWebSocketChannelClientWrapper(client));
&gt; &gt; +     }
&gt; 
&gt; Indented } too far.
&gt; 
&gt; &gt; +    void callSyncMethod()
&gt; &gt; +    {
&gt; &gt; +        m_didProcessMethod = false;
&gt; 
&gt; How about &quot;m_syncMethodDone&quot; which mirrors the method names more closely?
&gt; 
&gt; &gt; +}  // namespace WebCore
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; +#endif  // ENABLE(WEB_SOCKETS)
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; +#endif  // ThreadableWebSocketChannelClientWrapper_h
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; 
&gt; &gt; diff --git a/WebCore/websockets/WebSocket.cpp b/WebCore/websockets/WebSocket.cpp
&gt; &gt; -    // FIXME: origin, lastEventId, source, messagePort.
&gt; 
&gt; Why are you removing this FIXME? (How was it fixed?)

As Alexey mentioned in comment #3, it is wrong comment.

&gt; 
&gt; &gt; diff --git a/WebCore/websockets/WebSocket.h b/WebCore/websockets/WebSocket.h
&gt; 
&gt; &gt; +    // ActiveDOMObject
&gt; &gt; +    //  virtual bool hasPendingActivity() const;
&gt; &gt; +    // virtual void contextDestroyed();
&gt; &gt; +    // virtual bool canSuspend() const;
&gt; &gt; +    // virtual void suspend();
&gt; &gt; +    // virtual void resume();
&gt; &gt; +    // virtual void stop();
&gt; 
&gt; All of this commented out code should be removed.
&gt; 
&gt; &gt;  }  // namespace WebCore
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; diff --git a/WebCore/websockets/WebSocketChannel.h b/WebCore/websockets/WebSocketChannel.h
&gt; 
&gt; I can&apos;t tell what changed in here easily and the diff tool in bugzilla isn&apos;t
&gt; smart enough to notice that many of these line are probably just re-indenting.
&gt; Please do the reindenting separately since it really makes it much harder to
&gt; tell what is actually changing.
&gt; 
&gt; &gt;  }  // namespace WebCore
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; diff --git a/WebCore/websockets/WebSocketChannelClient.h b/WebCore/websockets/WebSocketChannelClient.h
&gt; 
&gt; I really wish that all of these formatting changes were not part of this change
&gt; (when they are lines of even files that aren&apos;t even part of what you are
&gt; accomplishing). It makes it harder to get through it and it will make it harder
&gt; for me to verify the real changes being made.
&gt; 
&gt; &gt;  }  // namespace WebCore
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; diff --git a/WebCore/websockets/WebSocketHandshake.h b/WebCore/websockets/WebSocketHandshake.h
&gt; 
&gt; This apparently pure formatting change shouldn&apos;t be part of this change. Please
&gt; do a separate change for these indent fixes.
&gt; 
&gt; &gt;  }  // namespace WebCore
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; diff --git a/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp b/WebCore/websockets/WorkerThreadableWebSocketChannel.cpp
&gt; 
&gt; 
&gt; &gt; +bool WorkerThreadableWebSocketChannel::send(const String&amp; msg)
&gt; 
&gt; Use message instead of msg (in several places). (WebKit style is to prefer
&gt; whole words over abbreviations.)
&gt; 
&gt; &gt; +{
&gt; &gt; +    return m_bridge.send(msg);
&gt; &gt; +}
&gt; 
&gt; 
&gt; &gt; +void WorkerThreadableWebSocketChannel::MainThreadBridge::mainThreadDestroy(ScriptExecutionContext* context, MainThreadBridge* thisPtr)
&gt; &gt; +{
&gt; &gt; +    ASSERT(isMainThread());
&gt; &gt; +    ASSERT_UNUSED(context, context-&gt;isDocument());
&gt; &gt; +    delete thisPtr;
&gt; &gt; +}
&gt; 
&gt; How do we know MainThreadBridge won&apos;t be used anymore after this?
&gt; 
&gt; 
&gt; &gt; +void WorkerThreadableWebSocketChannel::MainThreadBridge::waitSyncMethod()
&gt; &gt; +{
&gt; &gt; +    WorkerRunLoop&amp; runLoop = m_workerContext-&gt;thread()-&gt;runLoop();
&gt; &gt; +    MessageQueueWaitResult result = MessageQueueMessageReceived;
&gt; &gt; +    ThreadableWebSocketChannelClientWrapper* clientWrapper = static_cast&lt;ThreadableWebSocketChannelClientWrapper*&gt;(m_workerClientWrapper.get());
&gt; &gt; +    while (clientWrapper &amp;&amp; clientWrapper-&gt;syncMethodDone() &amp;&amp; result != MessageQueueTerminated) {
&gt; &gt; +        result = runLoop.runInMode(m_workerContext.get(), m_taskMode);
&gt; 
&gt; You just used m_taskMode on the worker thread.
&gt; 
&gt; &gt; +        clientWrapper = static_cast&lt;ThreadableWebSocketChannelClientWrapper*&gt;(m_workerClientWrapper.get());
&gt; &gt; +    }
&gt; &gt; +    return;
&gt; 
&gt; No &quot;return;&quot; needed here.
&gt; 
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void WorkerThreadableWebSocketChannel::MainThreadBridge::mainThreadCreateWebSocketChannel(ScriptExecutionContext* context, MainThreadBridge* thisPtr, const KURL&amp; url, const String&amp; protocol)
&gt; &gt; +{
&gt; &gt; +    ASSERT(isMainThread());
&gt; &gt; +    ASSERT(context-&gt;isDocument());
&gt; 
&gt; Should this assert !thisPtr-&gt;m_mainWebSocketChannel here?
&gt; 
&gt; &gt; +
&gt; &gt; +    thisPtr-&gt;m_mainWebSocketChannel = WebSocketChannel::create(context, thisPtr, url, protocol);
&gt; &gt; +    ASSERT(thisPtr-&gt;m_mainWebSocketChannel);
&gt; &gt; +}
&gt; 
&gt; 
&gt; &gt; +void WorkerThreadableWebSocketChannel::MainThreadBridge::mainThreadSend(ScriptExecutionContext* context, MainThreadBridge* thisPtr, const String&amp; msg)
&gt; &gt; +{
&gt; &gt; +    ASSERT(isMainThread());
&gt; &gt; +    ASSERT_UNUSED(context, context-&gt;isDocument());
&gt; &gt; +
&gt; &gt; +    if (!thisPtr-&gt;m_mainWebSocketChannel)
&gt; &gt; +        return;
&gt; &gt; +    if (!thisPtr-&gt;m_workerClientWrapper)
&gt; &gt; +        return;
&gt; 
&gt; Why not 
&gt;   if (!thisPtr-&gt;m_mainWebSocketChannel || !thisPtr-&gt;m_workerClientWrapper)
&gt;       return;
&gt; ?
&gt; 
&gt; &gt; +    ASSERT(!thisPtr-&gt;m_workerClientWrapper-&gt;syncMethodDone());
&gt; &gt; +    bool sent = thisPtr-&gt;m_mainWebSocketChannel-&gt;send(msg.crossThreadString());
&gt; 
&gt; Why are you doing crossThreadString here? &quot;msg&quot; should already have been copied
&gt; for this thread.
&gt; 
&gt; &gt; +    thisPtr-&gt;m_workerContext-&gt;thread()-&gt;workerLoaderProxy().postTaskForModeToWorkerContext(createCallbackTask(&amp;workerContextDidSend, thisPtr-&gt;m_workerClientWrapper, sent), thisPtr-&gt;m_taskMode);
&gt; &gt; +}
&gt; &gt; +
&gt; 
&gt; 
&gt; &gt; +}  // namespace WebCore
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; +#endif  // ENABLE(WEB_SOCKETS)
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; diff --git a/WebCore/websockets/WorkerThreadableWebSocketChannel.h b/WebCore/websockets/WorkerThreadableWebSocketChannel.h
&gt; 
&gt; &gt; +class WorkerThreadableWebSocketChannel : public RefCounted&lt;WorkerThreadableWebSocketChannel&gt;, public ThreadableWebSocketChannel {
&gt; ...
&gt; &gt; +    class MainThreadBridge : public WebSocketChannelClient {
&gt; 
&gt; I know you&apos;re mirroring what I did for workers and xhr but now that I&apos;ve had a
&gt; chance to see it again, I don&apos;t think it is a good approach because it seems to
&gt; lead to bugs too easily where things are ref counted on the wrong thread.
&gt; 
&gt; MainThreadBridge should be split into two classes:
&gt;   LoaderThreadClient
&gt;   WorkerThreadProxy?
&gt; 
&gt; Perhaps you can think of better names. Then there would be much less chance of
&gt; things getting ref counted on the wrong thread.
&gt; 
&gt; 
&gt; &gt; +    public:
&gt; &gt; +        MainThreadBridge(PassRefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt;, PassRefPtr&lt;WorkerContext&gt;, const String&amp; /* taskMode */, const KURL&amp;, const String&amp; /* protocol */);
&gt; 
&gt; Why are all of these parameters commented out?
&gt; 
&gt; &gt; +        // ThreadableWebSocketClientWrapper is to be used on the worker context thread.
&gt; &gt; +        // The ref counting is done on either thread.
&gt; &gt; +        RefPtr&lt;ThreadSafeShared&lt;ThreadableWebSocketChannelClientWrapper&gt; &gt; m_workerClientWrapper;
&gt; &gt; +
&gt; &gt; +        // WorkerLoaderProxy is to be used on either thread.
&gt; 
&gt; Why is this talking about WorkerLoaderProxy?
&gt; 
&gt; &gt; +        // WorkerRunLoop is to be used on the worker thread.
&gt; 
&gt; Why is this talking about WorkerRunLoop?
&gt; 
&gt; &gt; +        // The ref counting is done on either thread.
&gt; &gt; +        RefPtr&lt;WorkerContext&gt; m_workerContext;
&gt; 
&gt; This is incorrect for lots of reasons:
&gt; 1. This object is deleted on the main thread so m_workerContext will get
&gt; deref&apos;ed there which is bad because it isn&apos;t ThreadSafeShared (only
&gt; RefCounted).
&gt; 2. Very few methods can be used on this class on the main thread, so it isn&apos;t
&gt; great to provide access there.
&gt; 3. It makes it too easy to do unintentional refcounting on the main thread
&gt; (which is happening already, see #1).
&gt; 
&gt; &gt; +        // For use on the main thread.
&gt; &gt; +        String m_taskMode;
&gt; &gt; +    };
&gt; &gt; +
&gt; &gt; +    WorkerThreadableWebSocketChannel(WorkerContext*, WebSocketChannelClient*, const String&amp; taskMode, const KURL&amp;, const String&amp;);
&gt; 
&gt; What is the const String&amp; parameter for? It needs a name!
&gt; 
&gt; &gt; +
&gt; &gt; +    RefPtr&lt;WorkerContext&gt; m_workerContext;
&gt; &gt; +    RefPtr&lt;ThreadableWebSocketChannelClientWrapper&gt; m_workerClientWrapper;
&gt; &gt; +    MainThreadBridge&amp; m_bridge;
&gt; &gt; +};
&gt; &gt; +
&gt; &gt; +}  // namespace WebCore
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; +#endif  // ENABLE(WEB_SOCKETS)
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; +#endif  // WorkerThreadableWebSocketChannel_h
&gt; 
&gt; One space before end of line comments.
&gt; 
&gt; &gt; diff --git a/WebCore/workers/WorkerContext.idl b/WebCore/workers/WorkerContext.idl
&gt; &gt; +        attribute [JSCCustomGetter,EnabledAtRuntime] WebSocketConstructor WebSocket;  // Usable with the new operator
&gt; 
&gt; One space before end of line comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172172</commentid>
    <comment_count>11</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2009-12-15 22:42:24 -0800</bug_when>
    <thetext>&gt; &gt; diff --git a/WebCore/websockets/ThreadableWebSocketChannel.cpp b/WebCore/websockets/ThreadableWebSocketChannel.cpp
&gt; &gt; +#endif  // ENABLE(WORKERS)
&gt; 
&gt; One space before end of line comments.

It seems there are no explicit rule about this but this is the consensus of core WebKit developers. Do you think we should note this rule in style guide explicitly and modify check-webkit-style?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172182</commentid>
    <comment_count>12</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-15 23:45:48 -0800</bug_when>
    <thetext>(In reply to comment #7)

&gt; One space before end of line comments. (Feel free to improve check-webkit-style
&gt; :) ).

Created a patch in https://bugs.webkit.org/show_bug.cgi?id=32597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172257</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-16 04:45:08 -0800</bug_when>
    <thetext>Attachment 44936 did not pass chromium-ews:
Full output: http://webkit-commit-queue.appspot.com/results/128550</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172260</commentid>
    <comment_count>14</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-16 04:54:00 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Attachment 44936 [details] did not pass chromium-ews:
&gt; Full output: http://webkit-commit-queue.appspot.com/results/128550

It is chromium-ews system issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172291</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-16 07:44:29 -0800</bug_when>
    <thetext>&gt; It is chromium-ews system issue.

Thanks.  Not sure what went wrong.  I&apos;ll investigate.  Sorry for the noise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>172296</commentid>
    <comment_count>16</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2009-12-16 07:52:22 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; &gt; &gt; diff --git a/WebCore/websockets/ThreadableWebSocketChannel.cpp b/WebCore/websockets/ThreadableWebSocketChannel.cpp
&gt; &gt; &gt; +#endif  // ENABLE(WORKERS)
&gt; &gt; 
&gt; &gt; One space before end of line comments.
&gt; 
&gt; It seems there are no explicit rule about this but this is the consensus of
&gt; core WebKit developers. Do you think we should note this rule in style guide
&gt; explicitly and modify check-webkit-style?

Yes, see this email where I listed a number of things that there is consensus on but nothing in the webkit style guide:
  http://lists.macosforge.org/pipermail/webkit-dev/2009-September/009807.html

Unfortunately, I haven&apos;t yet done the next step of adding these items to the style guide, but there is consensus on them (see that thread for a few small modifications to those guidelines).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173683</commentid>
    <comment_count>17</comment_count>
      <attachid>45264</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2009-12-20 02:21:07 -0800</bug_when>
    <thetext>Created attachment 45264
Add WebSocket feature in Worker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>173684</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-20 02:23:15 -0800</bug_when>
    <thetext>Attachment 45264 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/CrossThreadCopier.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176956</commentid>
    <comment_count>19</comment_count>
      <attachid>45264</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-04 17:20:40 -0800</bug_when>
    <thetext>Comment on attachment 45264
Add WebSocket feature in Worker

Sorry for the delay (I was reviewing it but it is complicated and then there was a vacation).

My biggest concern is regarding lifetime and cross thread ownership issues. Specifically, MainThreadClient is owned by two threads, so it is ThreadsafeShared which means the final delete may happen on any thread. However, it contains a String which is RefCounted (and not compatible with being deleted on any thread). It would be best if it would be owned by one thread (like it wouldn&apos;t delete itself until a &quot;final&quot; message came through. If that doesn&apos;t seem possible, then it shouldn&apos;t contain any RefCounted objects).


There are some naming things that we probably should address before this gets checked in. (There may be other things but the ownership issue is the biggest.)

&gt; diff --git a/WebCore/websockets/WorkerThreadableWebSocketChannel.h b/WebCore/websockets/WorkerThreadableWebSocketChannel.h
&gt; +class WorkerThreadableWebSocketChannel : public RefCounted&lt;WorkerThreadableWebSocketChannel&gt;, public ThreadableWebSocketChannel {
...
&gt; +    class MainThreadClient : public ThreadSafeShared&lt;MainThreadClient&gt;, public WebSocketChannelClient {

I know MainThreadClient and WorkThreadProxy were my suggestions, but I don&apos;t like them that much now that I see them. Any other ideas?

&gt; +    /* Proxy for MainThreadClient.  Running on the worker thread. */

In general WebKit uses // style comments.

&gt; +    class WorkerThreadProxy {
&gt; +        void callSyncMethod();

Consider setMethodNotCompleted (right now it sounds like this does the sync call).

&gt; +        void waitSyncMethod();

Consider waitForMethodCompletion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177049</commentid>
    <comment_count>20</comment_count>
      <attachid>45866</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-01-04 23:51:25 -0800</bug_when>
    <thetext>Created attachment 45866
Add WebSocket feature in Worker</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177052</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-04 23:53:02 -0800</bug_when>
    <thetext>Attachment 45866 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/CrossThreadCopier.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177764</commentid>
    <comment_count>22</comment_count>
      <attachid>45866</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-06 14:13:02 -0800</bug_when>
    <thetext>Comment on attachment 45866
Add WebSocket feature in Worker

Please consider addressing the nits below and submitting.  Thanks for your patience -- this one was large and complicated to review (due to the threading issues).

&gt; diff --git a/WebCore/websockets/WorkerThreadableWebSocketChannel.h b/WebCore/websockets/WorkerThreadableWebSocketChannel.h
&gt; +private:
&gt; +    // Generated by the bridge.  The Peer and it&apos;s bridge should have idential

s/it&apos;s/its/
s/idential/identical/

&gt; +    // lifetimes.
&gt; +    class Peer : public WebSocketChannelClient {


&gt; +        RefPtr&lt;ThreadSafeShared&lt;ThreadableWebSocketChannelClientWrapper&gt; &gt; m_workerClientWrapper;
&gt; +
&gt; +        WorkerLoaderProxy&amp; m_loaderProxy;
&gt; +
&gt; +        RefPtr&lt;ThreadableWebSocketChannel&gt; m_mainWebSocketChannel;
&gt; +
&gt; +        String m_taskMode;

I don&apos;t understand why the member variables are double spaced (e.g. they have blank lines between all of them), and I find it distracting.


&gt; +    class Bridge : public RefCounted&lt;Bridge&gt; {
&gt; +    private:
&gt; +        static void setWebSocketChannel(ScriptExecutionContext* context, Bridge* thisPtr, Peer* peer, RefPtr&lt;ThreadSafeShared&lt;ThreadableWebSocketChannelClientWrapper&gt; &gt; workerClientWrapper);

param names &quot;context&quot;, &quot;peer&quot;, and &quot;workerClientWrapper&quot; shouldn&apos;t be here.

&gt; +
&gt; +        // Executed on the main thread to create a Peer for this bridge.
&gt; +        static void mainThreadCreateWebSocketChannel(ScriptExecutionContext* context, Bridge* thisPtr, RefPtr&lt;ThreadSafeShared&lt;ThreadableWebSocketChannelClientWrapper&gt; &gt; clientWrapper, const String&amp; taskMode, const KURL&amp; url, const String&amp; protocol);

param names &quot;context&quot;, &quot;clientWrapper&quot;, and &quot;url&quot; shouldn&apos;t be here.


&gt; +        RefPtr&lt;ThreadSafeShared&lt;ThreadableWebSocketChannelClientWrapper&gt; &gt; m_workerClientWrapper;
&gt; +
&gt; +        RefPtr&lt;WorkerContext&gt; m_workerContext;
&gt; +
&gt; +        WorkerLoaderProxy&amp; m_loaderProxy;
&gt; +
&gt; +        String m_taskMode;
&gt; +
&gt; +        Peer* m_peer;

I don&apos;t understand why the member variables are double spaced (e.g. they have blank lines between all of them), and I find it distracting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177912</commentid>
    <comment_count>23</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-01-06 18:34:04 -0800</bug_when>
    <thetext>Committed r52892: &lt;http://trac.webkit.org/changeset/52892&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177914</commentid>
    <comment_count>24</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-01-06 18:39:22 -0800</bug_when>
    <thetext>Is there a reason why this is only enabled for Workers, not SharedWorkers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177915</commentid>
    <comment_count>25</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-01-06 18:47:03 -0800</bug_when>
    <thetext>Actually, it looks like the API *is* defined for both SharedWorkers and dedicated Workers, but the test only tests dedicated Workers. You should add a test for SharedWorkers also.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177917</commentid>
    <comment_count>26</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-06 18:51:59 -0800</bug_when>
    <thetext>Filed https://bugs.webkit.org/show_bug.cgi?id=33285 re the test.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44393</attachid>
            <date>2009-12-07 01:56:42 -0800</date>
            <delta_ts>2009-12-10 01:36:01 -0800</delta_ts>
            <desc>Add WebSocket feature in Worker.</desc>
            <filename>bug-32214-20091207185640.patch</filename>
            <type>text/plain</type>
            <size>18939</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwNWYzZTk1Li5mOTZhOTk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMTIt
MDcgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYlNvY2tldCBmZWF0dXJlIGlu
IFdvcmtlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMyMjE0CisKKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvc2lt
cGxlX3dzaC5weTogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NpbXBs
ZV93c2gucHkuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dv
cmtlci1zaW1wbGUuanM6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy93b3JrZXJz
L3NjcmlwdC10ZXN0cy9URU1QTEFURS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQv
dGVzdHMvd29ya2Vycy9zY3JpcHQtdGVzdHMvd29ya2VyLXNpbXBsZS5qczogQWRkZWQuCisgICAg
ICAgICogd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUu
aHRtbDogQWRkZWQuCisKIDIwMDktMTItMDYgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZV93c2gucHkg
Yi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvc2ltcGxlX3dz
aC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzAyNzFjCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2Vz
L3NpbXBsZV93c2gucHkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJv
bSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0aWwKKworCitkZWYgd2ViX3NvY2tldF9kb19l
eHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAgcGFzcyAjIEFsd2F5cyBhY2NlcHQuCisKKwor
ZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShyZXF1ZXN0KToKKyAgICBtc2d1dGlsLnNlbmRf
bWVzc2FnZShyZXF1ZXN0LCAnSGVsbG8gZnJvbSBTaW1wbGUgV1NILicpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXNpbXBs
ZS5qcyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3Jr
ZXItc2ltcGxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4YTUwMjEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9y
ZXNvdXJjZXMvd29ya2VyLXNpbXBsZS5qcwpAQCAtMCwwICsxLDM3IEBACitpZiAoc2VsZi5wb3N0
TWVzc2FnZSkKKyAgICBydW5UZXN0cygpOworZWxzZQorICAgIG9uY29ubmVjdCA9IGhhbmRsZUNv
bm5lY3QoKTsKKworZnVuY3Rpb24gaGFuZGxlQ29ubmVjdChldmV2bnQpCit7CisgICAgLy8gRm9y
IHNoYXJlZCB3b3JrZXJzLCBjcmVhdGUgYSBmYXV4IHBvc3RNZXNzYWdlKCkgQVBJIHRvIHNlbmQg
bWVzc2FnZSBiYWNrIHRvIHRoZSBwYXJlbnQgcGFnZS4KKyAgICBzZWxmLnBvc3RNZXNzYWdlID0g
ZnVuY3Rpb24gKG1lc3NhZ2UpIHsgZXZlbnQucG9ydHNbMF0ucG9zdE1lc3NhZ2UobWVzc2FnZSk7
IH07CisgICAgcnVuVGVzdHMoKTsKK307CisKK2Z1bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0
cnkgeworCXBvc3RNZXNzYWdlKCJQQVNTOiB3b3JrZXI6IGluaXQiKTsKKwlpZiAoJ1dlYlNvY2tl
dCcgaW4gc2VsZikKKwkgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjogV2ViU29ja2V0IGV4
aXN0cyIpOworCWVsc2UKKwkgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjogbm8gV2ViU29j
a2V0Iik7CisJd3MgPSBuZXcgV2ViU29ja2V0KCd3czovL2xvY2FsaG9zdDo4ODgwL3dlYnNvY2tl
dC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9zaW1wbGUnKTsKKwl3cy5vbm9wZW4gPSBmdW5jdGlv
bigpIHsKKwkgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjogQ29ubmVjdGVkLiIpOworCX07
CisJd3Mub25tZXNzYWdlID0gZnVuY3Rpb24oZXZ0KSB7CisJICAgIHBvc3RNZXNzYWdlKCJQQVNT
OiB3b3JrZXI6IFJlY2VpdmVkOiAnIiArIGV2dC5kYXRhICsgIiciKTsKKwl9OworCXdzLm9uY2xv
c2UgPSBmdW5jdGlvbigpIHsKKwkgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjogQ2xvc2Vk
LiIpOworCSAgICBwb3N0TWVzc2FnZSgiRE9ORSIpOworCX07CisgICAgfSBjYXRjaCAoZSkgewor
CXBvc3RNZXNzYWdlKCJGQUlMOiB3b3JrZXI6IFVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgZSk7
CisgICAgfSBmaW5hbGx5IHsKKwlwb3N0TWVzc2FnZSgiUEFTUzogd29ya2VyOiBzdWNjZXNzZnVs
bHlQYXJzZWQ6IiArIHdzKTsKKyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL3dvcmtlcnMvc2NyaXB0LXRlc3RzL1RFTVBMQVRFLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9zY3JpcHQtdGVzdHMvVEVNUExBVEUuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDQ4ZTBkCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvc2NyaXB0LXRlc3RzL1RF
TVBMQVRFLmh0bWwKQEAgLTAsMCArMSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiPgor
PHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48
L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QtZnVuY3Rpb24uanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJk
ZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJZT1VSX0pTX0ZJTEVfSEVSRSI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9zY3JpcHQtdGVzdHMvd29y
a2VyLXNpbXBsZS5qcyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3Njcmlw
dC10ZXN0cy93b3JrZXItc2ltcGxlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmRkNDVkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvd29ya2Vycy9zY3JpcHQtdGVzdHMvd29ya2VyLXNpbXBsZS5qcwpAQCAtMCwwICsxLDIyIEBA
CitkZXNjcmlwdGlvbigiVGVzdCBmb3IgV2ViIFNvY2tldCBpbiBXb3JrZXIuIik7CisKK2lmICh3
aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBpc1N1Y2Nlc3NmdWxs
eVBhcnNlZCgpOworICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SUQpOworICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpCisJbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgp
OworfQordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoJ3Jlc291cmNlcy93b3JrZXItc2ltcGxlLmpz
Jyk7Cit3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24gKGV2dCkgeworICAgIGRlYnVnKGV2dC5k
YXRhKTsKKyAgICBpZiAoZXZ0LmRhdGEgPT0gIkRPTkUiKQorCWVuZFRlc3QoKTsKK307Cit2YXIg
dGltZW91dElEID0gc2V0VGltZW91dChlbmRUZXN0LCAzMDAwKTsKKwordmFyIHN1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy93b3JrZXJzL3dvcmtlci1zaW1wbGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyYzAxNQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMTUgQEAKK1Rlc3QgZm9yIFdlYiBTb2NrZXQgaW4gV29ya2VyLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1M6IHdvcmtlcjogaW5pdAorUEFTUzogd29ya2Vy
OiBXZWJTb2NrZXQgZXhpc3RzCitQQVNTOiB3b3JrZXI6IHN1Y2Nlc3NmdWxseVBhcnNlZDpbb2Jq
ZWN0IFdlYlNvY2tldF0KK1BBU1M6IHdvcmtlcjogQ29ubmVjdGVkLgorUEFTUzogd29ya2VyOiBS
ZWNlaXZlZDogJ0hlbGxvIGZyb20gU2ltcGxlIFdTSC4nCitQQVNTOiB3b3JrZXI6IENsb3NlZC4K
K0RPTkUKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy93b3JrZXIt
c2ltcGxlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy93b3JrZXIt
c2ltcGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJlZDEzYgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3dv
cmtlci1zaW1wbGUuaHRtbApAQCAtMCwwICsxLDEzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPGxpbmsgcmVsPSJzdHls
ZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9mYXN0L2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vLi4vZmFzdC9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC1mdW5jdGlvbi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy93b3JrZXItc2ltcGxlLmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggODJmNTI4NS4uOWZjOGU0NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAwOS0xMi0wNyAgRnVt
aXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgV2ViU29ja2V0IGZlYXR1cmUgaW4gV29ya2Vy
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIyMTQK
KworICAgICAgICBUZXN0OiB3ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy93b3JrZXItc2ltcGxlLmh0
bWwKKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dvcmtlckNvbnRleHQ6OndlYlNvY2tldCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29udmVydEV2ZW50VGFyZ2V0VG9W
OE9iamVjdCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5o
OgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QUNDRVNTT1JfUlVOVElNRV9FTkFCTEVSKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tl
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrOjp+UHJv
Y2Vzc1dlYlNvY2tldEV2ZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzV2ViU29j
a2V0RXZlbnRUYXNrOjpwZXJmb3JtVGFzayk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzV2Vi
U29ja2V0RXZlbnRUYXNrOjpQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrKToKKyAgICAgICAgKFdl
YkNvcmU6OlByb2Nlc3NXZWJTb2NrZXRPcGVuRXZlbnRUYXNrOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6UHJvY2Vzc1dlYlNvY2tldE9wZW5FdmVudFRhc2s6On5Qcm9jZXNzV2ViU29ja2V0
T3BlbkV2ZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzV2ViU29ja2V0T3BlbkV2
ZW50VGFzazo6UHJvY2Vzc1dlYlNvY2tldE9wZW5FdmVudFRhc2spOgorICAgICAgICAoV2ViQ29y
ZTo6UHJvY2Vzc1dlYlNvY2tldE9wZW5FdmVudFRhc2s6OmNyZWF0ZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlByb2Nlc3NXZWJTb2NrZXRNZXNzYWdlRXZlbnRUYXNrOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UHJvY2Vzc1dlYlNvY2tldE1lc3NhZ2VFdmVudFRhc2s6On5Qcm9jZXNz
V2ViU29ja2V0TWVzc2FnZUV2ZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzV2Vi
U29ja2V0TWVzc2FnZUV2ZW50VGFzazo6UHJvY2Vzc1dlYlNvY2tldE1lc3NhZ2VFdmVudFRhc2sp
OgorICAgICAgICAoV2ViQ29yZTo6UHJvY2Vzc1dlYlNvY2tldE1lc3NhZ2VFdmVudFRhc2s6OmNy
ZWF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NXZWJTb2NrZXRDbG9zZUV2ZW50
VGFzazo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlByb2Nlc3NXZWJTb2NrZXRDbG9zZUV2
ZW50VGFzazo6flByb2Nlc3NXZWJTb2NrZXRDbG9zZUV2ZW50VGFzayk6CisgICAgICAgIChXZWJD
b3JlOjpQcm9jZXNzV2ViU29ja2V0Q2xvc2VFdmVudFRhc2s6OlByb2Nlc3NXZWJTb2NrZXRDbG9z
ZUV2ZW50VGFzayk6CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzV2ViU29ja2V0Q2xvc2VFdmVu
dFRhc2s6OmNyZWF0ZUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkQ29u
bmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OmRpZFJlY2VpdmVNZXNzYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkQ2xvc2UpOgorICAgICAgICAqIHdvcmtl
cnMvV29ya2VyQ29udGV4dC5pZGw6CisKIDIwMDktMTItMDYgIE9saXZlciBIdW50ICA8b2xpdmVy
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAppbmRleCA0OTBk
OWIxLi4zMjk2OTUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29u
dGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRD
dXN0b20uY3BwCkBAIC0zNCw2ICszNCw5IEBACiAjaW5jbHVkZSAiSlNFdmVudExpc3RlbmVyLmgi
CiAjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiSlNN
ZXNzYWdlUG9ydC5oIgorI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKyNpbmNsdWRlICJKU1dlYlNv
Y2tldENvbnN0cnVjdG9yLmgiCisjZW5kaWYKICNpbmNsdWRlICJKU1dvcmtlckxvY2F0aW9uLmgi
CiAjaW5jbHVkZSAiSlNXb3JrZXJOYXZpZ2F0b3IuaCIKICNpbmNsdWRlICJKU1hNTEh0dHBSZXF1
ZXN0Q29uc3RydWN0b3IuaCIKQEAgLTkzLDYgKzk2LDEzIEBAIEpTVmFsdWUgSlNXb3JrZXJDb250
ZXh0Ojp4bWxIdHRwUmVxdWVzdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgcmV0dXJuIGdl
dERPTUNvbnN0cnVjdG9yPEpTWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7
CiB9CiAKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCitKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6
d2ViU29ja2V0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0RE9NQ29u
c3RydWN0b3I8SlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcj4oZXhlYywgdGhpcyk7Cit9CisjZW5kaWYK
KwogSlNWYWx1ZSBKU1dvcmtlckNvbnRleHQ6OmltcG9ydFNjcmlwdHMoRXhlY1N0YXRlKiBleGVj
LCBjb25zdCBBcmdMaXN0JiBhcmdzKQogewogICAgIGlmICghYXJncy5zaXplKCkpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKaW5k
ZXggNDEyZmRlMC4uN2UzYzU0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcApAQCAtMzE5LDYgKzMxOSwxMiBAQCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRU
YXJnZXRUb1Y4T2JqZWN0KAogICAgIGlmIChtcCkKICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIG1wKTsKIAorI2lmIEVOQUJMRShXRUJf
U09DS0VUUykKKyAgICBXZWJTb2NrZXQqIHdlYlNvY2tldCA9IHRhcmdldC0+dG9XZWJTb2NrZXQo
KTsKKyAgICBpZiAod2ViU29ja2V0KQorICAgICAgICByZXR1cm4gY29udmVydFRvVjhPYmplY3Qo
VjhDbGFzc0luZGV4OjpXRUJTT0NLRVQsIHdlYlNvY2tldCk7CisjZW5kaWYKKwogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5o
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmgKaW5kZXggZDI3
MzViZC4uM2UzYzE4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhD
dXN0b21CaW5kaW5nLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21C
aW5kaW5nLmgKQEAgLTY1MCw2ICs2NTAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5B
QkxFKE5PVElGSUNBVElPTlMpCiAgICAgICAgIERFQ0xBUkVfQUNDRVNTT1JfUlVOVElNRV9FTkFC
TEVSKFdvcmtlckNvbnRleHRXZWJraXROb3RpZmljYXRpb25zKTsKICNlbmRpZgorI2lmIEVOQUJM
RShXRUJfU09DS0VUUykKKyAgICAgICAgREVDTEFSRV9BQ0NFU1NPUl9SVU5USU1FX0VOQUJMRVIo
V29ya2VyQ29udGV4dFdlYlNvY2tldCk7CisjZW5kaWYKICNlbmRpZiAvLyBFTkFCTEUoV09SS0VS
UykKIAogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwCmluZGV4IGIyMDYzNWIuLjBhZjM4ODYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAK
QEAgLTkyLDE0ICs5Miw5IEBAIENBTExCQUNLX0ZVTkNfREVDTChXZWJTb2NrZXRDb25zdHJ1Y3Rv
cikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkVtcHR5IFVSTCIsIFY4UHJveHk6OlN5bnRh
eEVycm9yKTsKIAogICAgIC8vIEdldCB0aGUgc2NyaXB0IGV4ZWN1dGlvbiBjb250ZXh0LgotICAg
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSAwOwotICAgIC8vIFRPRE86IFdvcmtl
cnMKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94eTo6
cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCk7Ci0gICAgICAgIGlmICghZnJhbWUpCi0g
ICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiV2ViU29ja2V0IGNvbnN0cnVjdG9yJ3MgYXNz
b2NpYXRlZCBmcmFtZSBpcyBub3QgYXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3Ip
OwotICAgICAgICBjb250ZXh0ID0gZnJhbWUtPmRvY3VtZW50KCk7Ci0gICAgfQorICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBnZXRTY3JpcHRFeGVjdXRpb25Db250ZXh0KCk7
CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiV2ViU29ja2V0
IGNvbnN0cnVjdG9yJ3MgYXNzb2NpYXRlZCBmcmFtZSBpcyBub3QgYXZhaWxhYmxlIiwgVjhQcm94
eTo6UmVmZXJlbmNlRXJyb3IpOwogCiAgICAgY29uc3QgS1VSTCYgdXJsID0gY29udGV4dC0+Y29t
cGxldGVVUkwodG9XZWJDb3JlU3RyaW5nKHVybHN0cmluZykpOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAppbmRleCA5YjY4
YWMwLi4wYzUwNmQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdv
cmtlckNvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJWOFBy
b3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJWOFdvcmtlckNvbnRl
eHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0LmgiCiAjaW5jbHVkZSAiV29y
a2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIgog
CkBAIC01Myw2ICs1NCwxMyBAQCBBQ0NFU1NPUl9SVU5USU1FX0VOQUJMRVIoV29ya2VyQ29udGV4
dFdlYmtpdE5vdGlmaWNhdGlvbnMpCiB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShXRUJfU09DS0VU
UykKK0FDQ0VTU09SX1JVTlRJTUVfRU5BQkxFUihXb3JrZXJDb250ZXh0V2ViU29ja2V0KQorewor
ICAgIHJldHVybiBXZWJTb2NrZXQ6OmlzQXZhaWxhYmxlKCk7Cit9CisjZW5kaWYKKwogQUNDRVNT
T1JfR0VUVEVSKFdvcmtlckNvbnRleHRTZWxmKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5Xb3Jr
ZXJDb250ZXh0LnNlbGYuX2dldCIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAppbmRleCBkYTYw
MDI1Li45NDhjMWQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcApAQCAtNTAsMjUgKzUwLDgx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFz
ayA6IHB1YmxpYyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrIHsKIHB1YmxpYzoKLSAgICB0
eXBlZGVmIHZvaWQgKFdlYlNvY2tldDo6Kk1ldGhvZCkoRXZlbnQqKTsKLSAgICBzdGF0aWMgUGFz
c093blB0cjxQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJT
b2NrZXQ+IHdlYlNvY2tldCwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCi0gICAgewotICAgICAg
ICByZXR1cm4gbmV3IFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2sod2ViU29ja2V0LCBldmVudCk7
Ci0gICAgfQotICAgIHZpcnR1YWwgdm9pZCBwZXJmb3JtVGFzayhTY3JpcHRFeGVjdXRpb25Db250
ZXh0KikKKyAgICB2aXJ0dWFsIH5Qcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrKCkge30KKyAgICB2
b2lkIHBlcmZvcm1UYXNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqKQogICAgIHsKICAgICAgICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgICAgIG1fd2ViU29ja2V0LT5kaXNwYXRjaEV2ZW50
KG1fZXZlbnQuZ2V0KCksIGVjKTsKKyAgICAgICAgUmVmUHRyPEV2ZW50PiBldmVudChjcmVhdGVF
dmVudCgpKTsKKyAgICAgICAgbV93ZWJTb2NrZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCks
IGVjKTsKICAgICAgICAgQVNTRVJUKCFlYyk7CiAgICAgfQorcHJvdGVjdGVkOgorICAgIFByb2Nl
c3NXZWJTb2NrZXRFdmVudFRhc2soUGFzc1JlZlB0cjxXZWJTb2NrZXQ+IHdlYlNvY2tldCkKKyAg
ICAgICAgOiBtX3dlYlNvY2tldCh3ZWJTb2NrZXQpIHt9CiAKLSAgcHJpdmF0ZToKLSAgICBQcm9j
ZXNzV2ViU29ja2V0RXZlbnRUYXNrKFBhc3NSZWZQdHI8V2ViU29ja2V0PiB3ZWJTb2NrZXQsIFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQotICAgICAgICA6IG1fd2ViU29ja2V0KHdlYlNvY2tldCkK
LSAgICAgICAgLCBtX2V2ZW50KGV2ZW50KSB7IH0KKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZl
bnQ+IGNyZWF0ZUV2ZW50KCkgPSAwOwogCiAgICAgUmVmUHRyPFdlYlNvY2tldD4gbV93ZWJTb2Nr
ZXQ7Ci0gICAgUmVmUHRyPEV2ZW50PiBtX2V2ZW50OworfTsKKworY2xhc3MgUHJvY2Vzc1dlYlNv
Y2tldE9wZW5FdmVudFRhc2sgOiBwdWJsaWMgUHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFzayB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8UHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFzaz4g
Y3JlYXRlKFBhc3NSZWZQdHI8V2ViU29ja2V0PiB3ZWJTb2NrZXQpCisgICAgeworICAgICAgICBy
ZXR1cm4gbmV3IFByb2Nlc3NXZWJTb2NrZXRPcGVuRXZlbnRUYXNrKHdlYlNvY2tldCk7CisgICAg
fQorICAgIHZpcnR1YWwgflByb2Nlc3NXZWJTb2NrZXRPcGVuRXZlbnRUYXNrKCkge30KKworcHJp
dmF0ZToKKyAgICBQcm9jZXNzV2ViU29ja2V0T3BlbkV2ZW50VGFzayhQYXNzUmVmUHRyPFdlYlNv
Y2tldD4gd2Vic29ja2V0KQorICAgICAgICA6IFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2sod2Vi
c29ja2V0KSB7fQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50PiBjcmVhdGVFdmVudCgp
CisgICAgeworICAgICAgICByZXR1cm4gRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkub3BlbkV2
ZW50LCBmYWxzZSwgZmFsc2UpOworICAgIH0KK307CisKK2NsYXNzIFByb2Nlc3NXZWJTb2NrZXRN
ZXNzYWdlRXZlbnRUYXNrIDogcHVibGljIFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2sgeworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2s+IGNy
ZWF0ZShQYXNzUmVmUHRyPFdlYlNvY2tldD4gd2ViU29ja2V0LCBjb25zdCBTdHJpbmcmIG1zZykK
KyAgICB7CisgICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1dlYlNvY2tldE1lc3NhZ2VFdmVudFRh
c2sod2ViU29ja2V0LCBtc2cpOworICAgIH0KKyAgICB2aXJ0dWFsIH5Qcm9jZXNzV2ViU29ja2V0
TWVzc2FnZUV2ZW50VGFzaygpIHt9CisKK3ByaXZhdGU6CisgICAgUHJvY2Vzc1dlYlNvY2tldE1l
c3NhZ2VFdmVudFRhc2soUGFzc1JlZlB0cjxXZWJTb2NrZXQ+IHdlYnNvY2tldCwgY29uc3QgU3Ry
aW5nJiBtc2cpCisgICAgICAgIDogUHJvY2Vzc1dlYlNvY2tldEV2ZW50VGFzayh3ZWJzb2NrZXQp
CisgICAgICAgICwgbV9tc2cobXNnKSB7fQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEV2ZW50
PiBjcmVhdGVFdmVudCgpCisgICAgeworICAgICAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldnQg
PSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOworICAgICAgICAvLyBGSVhNRTogb3JpZ2luLCBsYXN0
RXZlbnRJZCwgc291cmNlLCBtZXNzYWdlUG9ydC4KKyAgICAgICAgZXZ0LT5pbml0TWVzc2FnZUV2
ZW50KGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGZhbHNlLCBmYWxzZSwgU2VyaWFsaXplZFNj
cmlwdFZhbHVlOjpjcmVhdGUobV9tc2cpLCAiIiwgIiIsIDAsIDApOworICAgICAgICByZXR1cm4g
ZXZ0OworICAgIH0KKworICAgIGNvbnN0IFN0cmluZyBtX21zZzsKK307CisKK2NsYXNzIFByb2Nl
c3NXZWJTb2NrZXRDbG9zZUV2ZW50VGFzayA6IHB1YmxpYyBQcm9jZXNzV2ViU29ja2V0RXZlbnRU
YXNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxQcm9jZXNzV2ViU29ja2V0RXZl
bnRUYXNrPiBjcmVhdGUoUGFzc1JlZlB0cjxXZWJTb2NrZXQ+IHdlYlNvY2tldCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1dlYlNvY2tldENsb3NlRXZlbnRUYXNrKHdlYlNvY2tl
dCk7CisgICAgfQorICAgIHZpcnR1YWwgflByb2Nlc3NXZWJTb2NrZXRDbG9zZUV2ZW50VGFzaygp
IHt9CisKK3ByaXZhdGU6CisgICAgUHJvY2Vzc1dlYlNvY2tldENsb3NlRXZlbnRUYXNrKFBhc3NS
ZWZQdHI8V2ViU29ja2V0PiB3ZWJzb2NrZXQpCisgICAgICAgIDogUHJvY2Vzc1dlYlNvY2tldEV2
ZW50VGFzayh3ZWJzb2NrZXQpIHt9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RXZlbnQ+IGNy
ZWF0ZUV2ZW50KCkKKyAgICB7CisgICAgICAgIHJldHVybiBFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5jbG9zZUV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgIH0KIH07CiAKIHN0YXRpYyBib29s
IGlzVmFsaWRQcm90b2NvbFN0cmluZyhjb25zdCBXZWJDb3JlOjpTdHJpbmcmIHByb3RvY29sKQpA
QCAtMjAwLDcgKzI1Niw3IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRDb25uZWN0KCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KICAgICBtX3N0YXRlID0gT1BFTjsKLSAgICBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnBvc3RUYXNrKFByb2Nlc3NXZWJTb2NrZXRFdmVudFRhc2s6OmNyZWF0ZSh0aGlz
LCBFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5vcGVuRXZlbnQsIGZhbHNlLCBmYWxzZSkpKTsK
KyAgICBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnBvc3RUYXNrKFByb2Nlc3NXZWJTb2NrZXRP
cGVuRXZlbnRUYXNrOjpjcmVhdGUodGhpcykpOwogfQogCiB2b2lkIFdlYlNvY2tldDo6ZGlkUmVj
ZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtc2cpCkBAIC0yMDgsMTAgKzI2NCw3IEBAIHZvaWQg
V2ViU29ja2V0OjpkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZykKICAgICBMT0co
TmV0d29yaywgIldlYlNvY2tldCAlcCBkaWRSZWNlaXZlTWVzc2FnZSAlcyIsIHRoaXMsIG1zZy51
dGY4KCkuZGF0YSgpKTsKICAgICBpZiAobV9zdGF0ZSAhPSBPUEVOIHx8ICFzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBl
dnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOwotICAgIC8vIEZJWE1FOiBvcmlnaW4sIGxhc3RF
dmVudElkLCBzb3VyY2UsIG1lc3NhZ2VQb3J0LgotICAgIGV2dC0+aW5pdE1lc3NhZ2VFdmVudChl
dmVudE5hbWVzKCkubWVzc2FnZUV2ZW50LCBmYWxzZSwgZmFsc2UsIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZTo6Y3JlYXRlKG1zZyksICIiLCAiIiwgMCwgMCk7Ci0gICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5wb3N0VGFzayhQcm9jZXNzV2ViU29ja2V0RXZlbnRUYXNrOjpjcmVhdGUodGhpcywg
ZXZ0KSk7CisgICAgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLT5wb3N0VGFzayhQcm9jZXNzV2Vi
U29ja2V0TWVzc2FnZUV2ZW50VGFzazo6Y3JlYXRlKHRoaXMsIG1zZykpOwogfQogCiB2b2lkIFdl
YlNvY2tldDo6ZGlkQ2xvc2UoKQpAQCAtMjE5LDcgKzI3Miw3IEBAIHZvaWQgV2ViU29ja2V0Ojpk
aWRDbG9zZSgpCiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXQgJXAgZGlkQ2xvc2UiLCB0aGlz
KTsKICAgICBtX3N0YXRlID0gQ0xPU0VEOwogICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpCi0gICAgICAgIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+cG9zdFRhc2soUHJvY2Vzc1dl
YlNvY2tldEV2ZW50VGFzazo6Y3JlYXRlKHRoaXMsIEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LmNsb3NlRXZlbnQsIGZhbHNlLCBmYWxzZSkpKTsKKyAgICAgICAgc2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCgpLT5wb3N0VGFzayhQcm9jZXNzV2ViU29ja2V0Q2xvc2VFdmVudFRhc2s6OmNyZWF0ZSh0
aGlzKSk7CiB9CiAKIEV2ZW50VGFyZ2V0RGF0YSogV2ViU29ja2V0OjpldmVudFRhcmdldERhdGEo
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsIGIvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCmluZGV4IDBhNTgxN2MuLjIzMDRiMjUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAorKysgYi9XZWJDb3JlL3dv
cmtlcnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTg2LDYgKzg2LDkgQEAgbW9kdWxlIHRocmVhZHMg
ewogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gRXZlbnRTb3VyY2VDb25zdHJ1
Y3RvciBFdmVudFNvdXJjZTsKICNlbmRpZgogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdl
dHRlcl0gWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsKKyNpZiBkZWZp
bmVkKEVOQUJMRV9XRUJfU09DS0VUUykgJiYgRU5BQkxFX1dFQl9TT0NLRVRTCisgICAgICAgIGF0
dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyLEVuYWJsZWRBdFJ1bnRpbWVdIFdlYlNvY2tldENvbnN0
cnVjdG9yIFdlYlNvY2tldDsgIC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyNlbmRp
ZgogICAgIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44602</attachid>
            <date>2009-12-10 01:36:07 -0800</date>
            <delta_ts>2009-12-15 19:17:11 -0800</delta_ts>
            <desc>Add WebSocket feature in Worker.</desc>
            <filename>bug-32214-20091210183605.patch</filename>
            <type>text/plain</type>
            <size>67854</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmN2JlOGE0Li44OGY2YWRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTIt
MTAgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYlNvY2tldCBmZWF0dXJlIGlu
IFdvcmtlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMyMjE0CisKKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvc2lt
cGxlX3dzaC5weTogQ29waWVkIGZyb20gTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3NpbXBs
ZV93c2gucHkuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dv
cmtlci1zaW1wbGUuanM6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy93b3JrZXJz
L3dvcmtlci1zaW1wbGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXQv
dGVzdHMvd29ya2Vycy93b3JrZXItc2ltcGxlLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEyLTA5ICBN
YWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
T2xpdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29y
a2Vycy9yZXNvdXJjZXMvc2ltcGxlX3dzaC5weSBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy93b3JrZXJzL3Jlc291cmNlcy9zaW1wbGVfd3NoLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmZjMDI3MWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJz
b2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvc2ltcGxlX3dzaC5weQpAQCAtMCwwICsxLDM4
IEBACisjIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0
aW9uLgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworCitmcm9tIG1vZF9weXdlYnNvY2tldCBpbXBvcnQgbXNn
dXRpbAorCisKK2RlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hhbmRzaGFrZShyZXF1ZXN0KToKKyAg
ICBwYXNzICMgQWx3YXlzIGFjY2VwdC4KKworCitkZWYgd2ViX3NvY2tldF90cmFuc2Zlcl9kYXRh
KHJlcXVlc3QpOgorICAgIG1zZ3V0aWwuc2VuZF9tZXNzYWdlKHJlcXVlc3QsICdIZWxsbyBmcm9t
IFNpbXBsZSBXU0guJykKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93
b3JrZXJzL3Jlc291cmNlcy93b3JrZXItc2ltcGxlLmpzIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1zaW1wbGUuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uOTgyNWI0OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItc2ltcGxlLmpzCkBA
IC0wLDAgKzEsMzcgQEAKK2lmIChzZWxmLnBvc3RNZXNzYWdlKQorICAgIHJ1blRlc3RzKCk7Citl
bHNlCisgICAgb25jb25uZWN0ID0gaGFuZGxlQ29ubmVjdCgpOworCitmdW5jdGlvbiBoYW5kbGVD
b25uZWN0KGV2ZXZudCkKK3sKKyAgICAvLyBGb3Igc2hhcmVkIHdvcmtlcnMsIGNyZWF0ZSBhIGZh
dXggcG9zdE1lc3NhZ2UoKSBBUEkgdG8gc2VuZCBtZXNzYWdlIGJhY2sgdG8gdGhlIHBhcmVudCBw
YWdlLgorICAgIHNlbGYucG9zdE1lc3NhZ2UgPSBmdW5jdGlvbiAobWVzc2FnZSkgeyBldmVudC5w
b3J0c1swXS5wb3N0TWVzc2FnZShtZXNzYWdlKTsgfTsKKyAgICBydW5UZXN0cygpOworfTsKKwor
ZnVuY3Rpb24gcnVuVGVzdHMoKQoreworICAgIHRyeSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJQ
QVNTOiB3b3JrZXI6IGluaXQiKTsKKyAgICAgICAgaWYgKCdXZWJTb2NrZXQnIGluIHNlbGYpCisg
ICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogd29ya2VyOiBXZWJTb2NrZXQgZXhpc3RzIik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiB3b3JrZXI6IG5v
IFdlYlNvY2tldCIpOworICAgICAgICB3cyA9IG5ldyBXZWJTb2NrZXQoJ3dzOi8vbG9jYWxob3N0
Ojg4ODAvd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZScpOworICAgICAg
ICB3cy5vbm9wZW4gPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNT
OiB3b3JrZXI6IENvbm5lY3RlZC4iKTsKKyAgICAgICAgfTsKKyAgICAgICAgd3Mub25tZXNzYWdl
ID0gZnVuY3Rpb24oZXZ0KSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogd29ya2Vy
OiBSZWNlaXZlZDogJyIgKyBldnQuZGF0YSArICInIik7CisgICAgICAgIH07CisgICAgICAgIHdz
Lm9uY2xvc2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiB3
b3JrZXI6IENsb3NlZC4iKTsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJET05FIik7CisgICAg
ICAgIH07CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBwb3N0TWVzc2FnZSgiRkFJTDogd29y
a2VyOiBVbmV4cGVjdGVkIGV4Y2VwdGlvbjogIiArIGUpOworICAgIH0gZmluYWxseSB7CisgICAg
ICAgIHBvc3RNZXNzYWdlKCJQQVNTOiB3b3JrZXI6IHN1Y2Nlc3NmdWxseVBhcnNlZDoiICsgd3Mp
OworICAgIH0KK307CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29y
a2Vycy93b3JrZXItc2ltcGxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjE2NWE4NDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy93b3JrZXItc2ltcGxlLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDEzIEBACitUZXN0IGZvciBXZWIgU29ja2V0IGluIFdvcmtlci4KKworT24gc3VjY2Vz
cywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkg
IlRFU1QgQ09NUExFVEUiLgorCitQQVNTOiB3b3JrZXI6IGluaXQKK1BBU1M6IHdvcmtlcjogV2Vi
U29ja2V0IGV4aXN0cworUEFTUzogd29ya2VyOiBzdWNjZXNzZnVsbHlQYXJzZWQ6W29iamVjdCBX
ZWJTb2NrZXRdCitQQVNTOiB3b3JrZXI6IENvbm5lY3RlZC4KK1BBU1M6IHdvcmtlcjogUmVjZWl2
ZWQ6ICdIZWxsbyBmcm9tIFNpbXBsZSBXU0guJworUEFTUzogd29ya2VyOiBDbG9zZWQuCitET05F
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy93b3JrZXJzL3dvcmtlci1zaW1wbGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0
cy93b3JrZXJzL3dvcmtlci1zaW1wbGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5iYzI0ZTcyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS5odG1sCkBAIC0wLDAgKzEsMzUgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
PC9oZWFkPgorPGJvZHk+Cis8cD5UZXN0IGZvciBXZWIgU29ja2V0IGluIFdvcmtlci48L3A+Cis8
cD48L3A+Cis8cD5PbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuPC9wPgorPHByZSBpZD1sb2c+Cis8
L3ByZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9s
bGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpLmlubmVySFRNTCArPSBtZXNzYWdlICsgIlxu
IjsKK30KKworZnVuY3Rpb24gZW5kVGVzdCgpCit7CisgICAgbG9nKCJURVNUIENPTVBMRVRFIik7
CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworfQordmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoJ3Jl
c291cmNlcy93b3JrZXItc2ltcGxlLmpzJyk7Cit3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24g
KGV2dCkgeworICAgIGxvZyhldnQuZGF0YSk7CisgICAgaWYgKGV2dC5kYXRhID09ICJET05FIikK
KyAgICAgICAgZW5kVGVzdCgpOworfTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYmM0
YjFmLi5hODAxZTY4IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3Jl
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDA5LTEyLTEwICBGdW1pdG9zaGkgVWthaSAg
PHVrYWlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCBXZWJTb2NrZXQgZmVhdHVyZSBpbiBXb3JrZXIuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjIxNAorCisgICAgICAgIFRl
c3Q6IHdlYnNvY2tldC90ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUuaHRtbAorCisgICAgICAg
ICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMv
SlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29u
dGV4dDo6d2ViU29ja2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5Ojpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5n
cy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZV
TkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9SVU5USU1FX0VOQUJMRVIpOgor
ICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ojo6Y29weSk6CisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKyAg
ICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldHMvVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWwuaDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaDogQWRkZWQuCisgICAgICAgICogd2Vic29j
a2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAg
ICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Lmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6Oik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXQ6OnRvV2ViU29ja2V0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNv
Y2tldDo6cmVmRXZlbnRUYXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkZXJl
ZkV2ZW50VGFyZ2V0KToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpyZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpkZXJlZlRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxDbGll
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWxDbGllbnQ6On5XZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWxDbGll
bnQ6OmRpZENvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENsaWVu
dDo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5l
bENsaWVudDo6ZGlkQ2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Q2hhbm5lbENs
aWVudDo6V2ViU29ja2V0Q2hhbm5lbENsaWVudCk6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6
KToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
LmNwcDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbC5oOiBBZGRlZC4KKyAgICAgICAgKiB3b3JrZXJzL1dvcmtlckNvbnRleHQuaWRs
OgorCiAyMDA5LTEyLTA5ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGY4ZmEzMDIuLjEzZTUzZjMgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQpAQCAtMzM5MCw2ICszMzkwLDE1IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgXAogCVdlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXRIYW5kc2hha2UuaAogCitpZiBFTkFCTEVfV09SS0VSUword2ViY29yZV9zb3Vy
Y2VzICs9IFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwu
Y3BwIFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBc
CisJV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlci5oIFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuY3BwIFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWwuaAorZW5kaWYKKwogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1FcnJvci5oIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaCBcCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGQyMmNmNDguLmI2
MmJkNzcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC0zNTM3LDYgKzM1MzcsOSBAQAogICAgICAgICAgICAgJ3N2Zy9TeW5jaHJv
bml6YWJsZVByb3BlcnR5Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9TeW5jaHJv
bml6YWJsZVByb3BlcnR5Q29udHJvbGxlci5oJywKICAgICAgICAgICAgICdzdmcvU3luY2hyb25p
emFibGVUeXBlV3JhcHBlci5oJywKKyAgICAgICAgICAgICd3ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmNwcCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oJywKKyAgICAgICAgICAgICd3ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oJywKICAgICAgICAgICAgICd3ZWJzb2NrZXRz
L1dlYlNvY2tldC5jcHAnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0LmgnLAog
ICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAnLApAQCAtMzU0NCw2
ICszNTQ3LDggQEAKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxDbGll
bnQuaCcsCiAgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuY3BwJywK
ICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oJywKKyAgICAgICAg
ICAgICd3ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCcsCisg
ICAgICAgICAgICAnd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5o
JywKICAgICAgICAgICAgICd3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCcsCiAgICAgICAgICAg
ICAnd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oJywKICAgICAgICAgICAgICd3b3JrZXJzL0RlZGlj
YXRlZFdvcmtlckNvbnRleHQuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8g
Yi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGJmZWVlNjEuLmU3Y2Y2NzUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMzE3MCw2
ICszMTcwLDEyIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvU29ja2V0
U3RyZWFtSGFuZGxlU291cC5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q3VzdG9t
LmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAKKworY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1dPUktFUlM9MSkgeworU09VUkNFUyArPSBcCisgICAgd2Vi
c29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgXAorICAgIHdlYnNvY2tldHMv
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCit9CiB9CiAKICMgR0VORVJBVE9S
IDE6IElETCBjb21waWxlcgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKaW5kZXgg
MDk5NDVmNS4uZTVmYzU0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBA
IC00MzAyNyw2ICs0MzAyNywxOCBAQAogCQkJTmFtZT0id2Vic29ja2V0cyINCiAJCQk+DQogCQkJ
PEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNcVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCINCisJ
CQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNv
Y2tldHNcVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRz
XFdlYlNvY2tldC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtNDMwNTQsNiArNDMwNjYs
MTQgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNcV2ViU29ja2V0SGFuZHNoYWtl
LmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIu
Llx3ZWJzb2NrZXRzXFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCINCisJCQkJ
Pg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tl
dHNcV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCiAJCTwvRmlsdGVyPg0KIAkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNvbmZpZy5o
Ig0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
IGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMmQwYjgw
NC4uNTFiZjE0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTk2Myw2ICs5NjMsMTEgQEAKIAkJNTEwRDRBNEUxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNv
Y2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTEwRDRBNDcxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWwuY3BwICov
OyB9OwogCQk1MTBENEE0RjEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRBNDgxMDMx
NzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWwuaCAqLzsgfTsKIAkJNTEwRDRBNTAxMDMx
NzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWxDbGllbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTQ5MTAzMTc3QTIwMDQ5RUE1NCAv
KiBXZWJTb2NrZXRDaGFubmVsQ2xpZW50LmggKi87IH07CisJCTUxMTIyNDcyMTBDRkI4QzYwMDgw
OTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyMjQ3MTEwQ0ZCOEM2MDA4MDk5RDcgLyog
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovOyB9OworCQk1MTEyMjQ3NDEwQ0ZCOEQ4
MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMTIyNDczMTBDRkI4RDgwMDgwOTlENyAv
KiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oICovOyB9OworCQk1MTEyMjQ3NjEwQ0ZCOEU4
MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyMjQ3NTEwQ0ZC
OEU4MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgg
Ki87IH07CisJCTUxMTIyNDc4MTBDRkI4RjQwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MTEyMjQ3NzEwQ0ZCOEY0MDA4MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuY3BwICovOyB9OworCQk1MTEyMjQ3QTEwQ0ZCOEZGMDA4MDk5RDcgLyogV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMTIyNDc5MTBDRkI4RkYwMDgwOTlENyAvKiBXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oICovOyB9OwogCQk1MTE2RDk3NzBDRjE3N0JEMDBD
MkI4NEQgLyogRGF0YWJhc2VEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA1MTE2RDk3NTBDRjE3N0JEMDBDMkI4NEQgLyogRGF0YWJhc2VEZXRh
aWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
NTExRjIzMTcwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTMwREMxNjBEQTAw
NEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suY3BwICovOyB9OwogCQk1MTFGMjMxODBEQzE2MERB
MDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3Rv
cmFnZVRhc2suaCAqLzsgfTsKQEAgLTYyNzMsNiArNjI3OCwxMSBAQAogCQk1MTBENEE0NzEwMzE3
N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXZWJTb2NrZXRDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTEwRDRBNDgxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU29ja2V0Q2hhbm5lbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEE0OTEwMzE3N0EyMDA0OUVBNTQgLyog
V2ViU29ja2V0Q2hhbm5lbENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUxMTIyNDcxMTBDRkI4QzYwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMTIyNDczMTBD
RkI4RDgwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyMjQ3NTEwQ0ZCOEU4MDA4MDk5RDcgLyogVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyMjQ3NzEwQ0ZCOEY0MDA4MDk5RDcg
LyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyMjQ3OTEwQ0ZCOEZGMDA4MDk5RDcg
LyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExNkQ5NzUwQ0YxNzdCRDAwQzJCODREIC8qIERhdGFi
YXNlRGV0YWlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRhYmFzZURl
dGFpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRjIzMTMwREMxNjBEQTAw
NEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMUYyMzE0MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsU3RvcmFnZVRhc2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTcxLDYgKzEwOTgxLDExIEBACiAJCTUxOEEzNEJE
MTAyNkM4MzEwMDFCNjg5NiAvKiB3ZWJzb2NrZXRzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTEyMjQ3OTEwQ0ZCOEZGMDA4MDk5RDcgLyogV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCAqLywKKwkJCQk1MTEyMjQ3NzEwQ0ZCOEY0MDA4
MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovLAorCQkJCTUx
MTIyNDc1MTBDRkI4RTgwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXIuaCAqLywKKwkJCQk1MTEyMjQ3MzEwQ0ZCOEQ4MDA4MDk5RDcgLyogVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuaCAqLywKKwkJCQk1MTEyMjQ3MTEwQ0ZCOEM2MDA4MDk5RDcgLyog
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovLAogCQkJCTUxOEEzNEJFMTAyNkM4MzEw
MDFCNjg5NiAvKiBXZWJTb2NrZXQuY3BwICovLAogCQkJCTUxOEEzNEJGMTAyNkM4MzEwMDFCNjg5
NiAvKiBXZWJTb2NrZXQuaCAqLywKIAkJCQk1MThBMzRDMDEwMjZDODMxMDAxQjY4OTYgLyogV2Vi
U29ja2V0LmlkbCAqLywKQEAgLTE4MjQ2LDYgKzE4MjYxLDkgQEAKIAkJCQk3QURFNzIyNjEwQ0JC
QjlCMDA2QjNCM0EgLyogQ29udGV4dE1lbnVTZWxlY3Rpb25IYW5kbGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwQzNGMUY1QjEwQzg4NzEyMDBENzJDRTEgLyogV2ViR0xVbmlmb3JtTG9jYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBDNDUzNDI4MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdM
VW5pZm9ybUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTEyMjQ3NDEwQ0ZCOEQ4MDA4
MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUxMTIyNDc2MTBDRkI4RTgwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMTIyNDdBMTBDRkI4RkYwMDgwOTlE
NyAvKiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBA
IC0yMDQwMyw2ICsyMDQyMSw4IEBACiAJCQkJNTk5RDFFMzIxMEM5N0Q2RTAwRTBFRjEyIC8qIGpu
aV91dGlsaXR5X3ByaXZhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEMzRjFGNUExMEM4ODcx
MjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBDNDUzNDI3MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTUxMTIyNDcyMTBDRkI4QzYwMDgwOTlENyAvKiBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MTEyMjQ3ODEwQ0ZCOEY0
MDA4MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3Ry
dWN0b3IuaCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCmlu
ZGV4IDA2OTY0N2EuLjhhNjdlNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNX
ZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvci5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIEpTV2ViU29ja2V0Q29u
c3RydWN0b3JfaAogI2RlZmluZSBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKIAorI2lmIEVOQUJM
RShXRUJfU09DS0VUUykKKwogI2luY2x1ZGUgIkpTRE9NQmluZGluZy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC00Nyw0ICs0OSw2IEBAIGNsYXNzIEpTV2ViU29ja2V0Q29uc3RydWN0b3Ig
OiBwdWJsaWMgRE9NQ29uc3RydWN0b3JPYmplY3QgewogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCisjZW5kaWYgIC8vIEVOQUJMRShXRUJfU09DS0VUUykKKwogI2VuZGlmICAvLyBKU1dlYlNv
Y2tldENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcAppbmRleCA0OTBkOWIxLi5hYjI4Njc0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCkBAIC0zMiw4ICszMiwxMCBAQAogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIkpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU1dvcmtlckxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSlNXb3JrZXJOYXZpZ2F0
b3IuaCIKICNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCIKQEAgLTQzLDEw
ICs0NSw2IEBACiAjaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSA8aW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuaD4KIAotI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKLSNpbmNsdWRl
ICJKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCIKLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05Myw2ICs5MSwxMyBAQCBKU1ZhbHVlIEpT
V29ya2VyQ29udGV4dDo6eG1sSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I+KGV4
ZWMsIHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorSlNWYWx1ZSBKU1dvcmtl
ckNvbnRleHQ6OndlYlNvY2tldChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGdldERPTUNvbnN0cnVjdG9yPEpTV2ViU29ja2V0Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwor
fQorI2VuZGlmCisKIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIWFyZ3Muc2l6ZSgp
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuY3BwCmluZGV4IDQxMmZkZTAuLjdlM2M1NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTMxOSw2ICszMTksMTIg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29u
dmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdCgKICAgICBpZiAobXApCiAgICAgICAgIHJldHVybiBj
b252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBtcCk7CiAKKyNpZiBF
TkFCTEUoV0VCX1NPQ0tFVFMpCisgICAgV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSB0YXJnZXQtPnRv
V2ViU29ja2V0KCk7CisgICAgaWYgKHdlYlNvY2tldCkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V0VCU09DS0VULCB3ZWJTb2NrZXQpOworI2VuZGlmCisK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3Rv
bUJpbmRpbmcuaCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5o
CmluZGV4IGUzY2Q2NTcuLjViZjk0OWMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q3VzdG9tQmluZGluZy5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tQmluZGluZy5oCkBAIC02NDksNiArNjQ5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI2lmIEVOQUJMRShOT1RJRklDQVRJT05TKQogICAgICAgICBERUNMQVJFX0FDQ0VTU09SX1JV
TlRJTUVfRU5BQkxFUihXb3JrZXJDb250ZXh0V2Via2l0Tm90aWZpY2F0aW9ucyk7CiAjZW5kaWYK
KyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisgICAgICAgIERFQ0xBUkVfQUNDRVNTT1JfUlVOVElN
RV9FTkFCTEVSKFdvcmtlckNvbnRleHRXZWJTb2NrZXQpOworI2VuZGlmCiAjZW5kaWYgLy8gRU5B
QkxFKFdPUktFUlMpCiAKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcAppbmRleCBiMjA2MzViLi4w
YWYzODg2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tl
dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRD
dXN0b20uY3BwCkBAIC05MiwxNCArOTIsOSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV2ViU29ja2V0
Q29uc3RydWN0b3IpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJFbXB0eSBVUkwiLCBWOFBy
b3h5OjpTeW50YXhFcnJvcik7CiAKICAgICAvLyBHZXQgdGhlIHNjcmlwdCBleGVjdXRpb24gY29u
dGV4dC4KLSAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gMDsKLSAgICAvLyBU
T0RPOiBXb3JrZXJzCi0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIEZyYW1lKiBmcmFtZSA9
IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDdXJyZW50Q29udGV4dCgpOwotICAgICAgICBpZiAo
IWZyYW1lKQotICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIldlYlNvY2tldCBjb25zdHJ1
Y3RvcidzIGFzc29jaWF0ZWQgZnJhbWUgaXMgbm90IGF2YWlsYWJsZSIsIFY4UHJveHk6OlJlZmVy
ZW5jZUVycm9yKTsKLSAgICAgICAgY29udGV4dCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIH0K
KyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0ID0gZ2V0U2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
IldlYlNvY2tldCBjb25zdHJ1Y3RvcidzIGFzc29jaWF0ZWQgZnJhbWUgaXMgbm90IGF2YWlsYWJs
ZSIsIFY4UHJveHk6OlJlZmVyZW5jZUVycm9yKTsKIAogICAgIGNvbnN0IEtVUkwmIHVybCA9IGNv
bnRleHQtPmNvbXBsZXRlVVJMKHRvV2ViQ29yZVN0cmluZyh1cmxzdHJpbmcpKTsKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNw
cCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAK
aW5kZXggOWI2OGFjMC4uMGM1MDZkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCkBAIC00MSw2ICs0MSw3IEBACiAjaW5j
bHVkZSAiVjhQcm94eS5oIgogI2luY2x1ZGUgIlY4VXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiVjhX
b3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIldlYlNvY2tldC5oIgogI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHQuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuaCIKIApAQCAtNTMsNiArNTQsMTMgQEAgQUNDRVNTT1JfUlVOVElNRV9FTkFCTEVSKFdv
cmtlckNvbnRleHRXZWJraXROb3RpZmljYXRpb25zKQogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
V0VCX1NPQ0tFVFMpCitBQ0NFU1NPUl9SVU5USU1FX0VOQUJMRVIoV29ya2VyQ29udGV4dFdlYlNv
Y2tldCkKK3sKKyAgICByZXR1cm4gV2ViU29ja2V0Ojppc0F2YWlsYWJsZSgpOworfQorI2VuZGlm
CisKIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJDb250ZXh0U2VsZikKIHsKICAgICBJTkNfU1RBVFMo
TCJET00uV29ya2VyQ29udGV4dC5zZWxmLl9nZXQiKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5jcHAKaW5kZXggZDAyZGE2Yy4uYzE5NzljNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9w
bGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkNyb3NzVGhy
ZWFkQ29waWVyLmgiCiAKKyNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCkBAIC0zOSw2ICs0MCwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0Nyb3Nz
VGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgS1VSTD46OlR5cGUgQ3Jvc3NUaHJlYWRDb3BpZXJCYXNl
PGZhbHNlLCBLVVJMPjo6Y29weShjb25zdCBLVVJMJiB1cmwpCit7CisgICAgcmV0dXJuIHVybC5j
b3B5KCk7Cit9CisKIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgU3RyaW5nPjo6VHlwZSBD
cm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz46OmNvcHkoY29uc3QgU3RyaW5nJiBz
dHIpCiB7CiAgICAgcmV0dXJuIHN0ci5jcm9zc1RocmVhZFN0cmluZygpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENvcGllci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9D
cm9zc1RocmVhZENvcGllci5oCmluZGV4IDJiZGY1N2QuLjU5MWE1NDUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmgKQEAgLTQwLDYgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCisgICAgY2xhc3MgS1VSTDsKICAgICBjbGFzcyBSZXNvdXJjZUVycm9yOwogICAgIGNs
YXNzIFJlc291cmNlUmVxdWVzdDsKICAgICBjbGFzcyBSZXNvdXJjZVJlc3BvbnNlOwpAQCAtOTQs
NiArOTUsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB9CiAgICAgfTsKIAorICAg
IHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgS1VSTD4gewor
ICAgICAgICB0eXBlZGVmIEtVUkwgVHlwZTsKKyAgICAgICAgc3RhdGljIFR5cGUgY29weShjb25z
dCBLVVJMJik7CisgICAgfTsKKwogICAgIHRlbXBsYXRlPD4gc3RydWN0IENyb3NzVGhyZWFkQ29w
aWVyQmFzZTxmYWxzZSwgU3RyaW5nPiB7CiAgICAgICAgIHR5cGVkZWYgU3RyaW5nIFR5cGU7CiAg
ICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgU3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIGIvV2ViQ29yZS93
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5lMzdiNThkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMCwwICsxLDczIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
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
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKworI2luY2x1
ZGUgIlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJTb2NrZXRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oIgor
I2luY2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCisj
aW5jbHVkZSAiV29ya2VyVGhyZWFkLmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIgd2ViU29ja2V0Q2hhbm5lbE1vZGVbXSA9
ICJ3ZWJTb2NrZXRDaGFubmVsTW9kZSI7CisKK1Bhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw+IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgQVNTRVJUKGNvbnRl
eHQpOworICAgIEFTU0VSVChjbGllbnQpOworCisjaWYgRU5BQkxFKFdPUktFUlMpCisgICAgaWYg
KGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKSB7CisgICAgICAgIFdvcmtlckNvbnRleHQqIHdv
cmtlckNvbnRleHQgPSBzdGF0aWNfY2FzdDxXb3JrZXJDb250ZXh0Kj4oY29udGV4dCk7CisgICAg
ICAgIFdvcmtlclJ1bkxvb3AmIHJ1bkxvb3AgPSB3b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+cnVu
TG9vcCgpOworICAgICAgICBTdHJpbmcgbW9kZSA9IHdlYlNvY2tldENoYW5uZWxNb2RlOworICAg
ICAgICBtb2RlLmFwcGVuZChTdHJpbmc6Om51bWJlcihydW5Mb29wLmNyZWF0ZVVuaXF1ZUlkKCkp
KTsKKyAgICAgICAgcmV0dXJuIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjcmVh
dGUod29ya2VyQ29udGV4dCwgY2xpZW50LCBtb2RlLCB1cmwsIHByb3RvY29sKTsKKyAgICB9Cisj
ZW5kaWYgIC8vIEVOQUJMRShXT1JLRVJTKQorCisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1l
bnQoKSk7CisgICAgcmV0dXJuIFdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShjb250ZXh0LCBjbGll
bnQsIHVybCwgcHJvdG9jb2wpOworfQorCit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgIC8vIEVOQUJMRShXRUJfU09DS0VUUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0
cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uZWZmNjBmNQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbF9oCisjZGVmaW5lIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsX2gK
KworI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgS1VSTDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBTdHJpbmc7
CitjbGFzcyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50OworCitjbGFzcyBUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbCA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+IGNyZWF0ZShTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIC8qIHByb3RvY29sICovKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0KCkgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgLyogbXNnICovKSA9IDA7Cisg
ICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjbG9zZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgp
ID0gMDsgLy8gV2lsbCBzdXBwcmVzcyBkaWRDbG9zZSgpLgorCisgICAgdm9pZCByZWYoKSB7IHJl
ZlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKCk7IH0KKyAgICB2b2lkIGRlcmVmKCkgeyBkZXJl
ZlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgflRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJl
ZlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXJl
ZlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKCkgPSAwOworfTsKKworfSAgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmICAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAgLy8g
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oIGIvV2ViQ29yZS93
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhMDIzNjYKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
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
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXJfaAorI2RlZmluZSBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXJfaAorCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiV2ViU29j
a2V0Q2hhbm5lbENsaWVudC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmlu
ZzsKKworY2xhc3MgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyIDogcHVi
bGljIFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiBjcmVhdGUoV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xp
ZW50KQorICAgICB7CisgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcihjbGllbnQpKTsKKyAgICAgfQorCisgICAgdm9pZCBj
YWxsU3luY01ldGhvZCgpCisgICAgeworICAgICAgICBtX2RpZFByb2Nlc3NNZXRob2QgPSBmYWxz
ZTsKKyAgICB9CisgICAgYm9vbCBzeW5jTWV0aG9kRG9uZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9kaWRQcm9jZXNzTWV0aG9kOworICAgIH0KKworICAgIGJvb2wgc2VudCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9zZW50OworICAgIH0KKyAgICB2b2lkIHNldFNl
bnQoYm9vbCBzZW50KQorICAgIHsKKyAgICAgICAgbV9zZW50ID0gc2VudDsKKyAgICAgICAgbV9k
aWRQcm9jZXNzTWV0aG9kID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb25nIGJ1ZmZl
cmVkQW1vdW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcmVkQW1vdW50
OworICAgIH0KKyAgICB2b2lkIHNldEJ1ZmZlcmVkQW1vdW50KHVuc2lnbmVkIGxvbmcgYnVmZmVy
ZWRBbW91bnQpCisgICAgeworICAgICAgICBtX2J1ZmZlcmVkQW1vdW50ID0gYnVmZmVyZWRBbW91
bnQ7CisgICAgICAgIG1fZGlkUHJvY2Vzc01ldGhvZCA9IHRydWU7CisgICAgfQorCisgICAgdm9p
ZCBjbGVhckNsaWVudCgpCisgICAgeworICAgICAgICBtX2NsaWVudCA9IDA7CisgICAgfQorCisg
ICAgdm9pZCBkaWRDb25uZWN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAg
ICAgICAgIG1fY2xpZW50LT5kaWRDb25uZWN0KCk7CisgICAgfQorCisgICAgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZykKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVu
dCkKKyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZShtc2cpOworICAgIH0K
KworICAgIHZvaWQgZGlkQ2xvc2UoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICAgICAgbV9jbGllbnQtPmRpZENsb3NlKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAg
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKFdlYlNvY2tldENoYW5uZWxD
bGllbnQqIGNsaWVudCkKKyAgICAgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgICAgICwgbV9k
aWRQcm9jZXNzTWV0aG9kKGZhbHNlKQorICAgICAgICAsIG1fc2VudChmYWxzZSkKKyAgICAgICAg
LCBtX2J1ZmZlcmVkQW1vdW50KDApCisgICAgeworICAgIH0KKworICAgIFdlYlNvY2tldENoYW5u
ZWxDbGllbnQqIG1fY2xpZW50OworICAgIGJvb2wgbV9kaWRQcm9jZXNzTWV0aG9kOworICAgIGJv
b2wgbV9zZW50OworICAgIHVuc2lnbmVkIGxvbmcgbV9idWZmZXJlZEFtb3VudDsKK307CisKK30g
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQor
CisjZW5kaWYgIC8vIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1dlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IGVlNzgxNzQuLjM5YzE1YWIgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXQuY3BwCkBAIC00Myw2ICs0Myw3IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgog
I2luY2x1ZGUgIk1lc3NhZ2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgogI2luY2x1ZGUg
IldlYlNvY2tldENoYW5uZWwuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAg
LTEyNiw3ICsxMjcsNyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmws
IGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBtX2NoYW5uZWwgPSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlzLCBtX3VybCwgbV9wcm90b2NvbCk7CisgICAgbV9jaGFu
bmVsID0gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIHRoaXMsIG1fdXJsLCBtX3Byb3RvY29sKTsKICAgICBtX2NoYW5uZWwtPmNvbm5l
Y3QoKTsKIH0KIApAQCAtMTkyLDcgKzE5Myw2IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRSZWNlaXZl
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZykKICAgICBpZiAobV9zdGF0ZSAhPSBPUEVOIHx8ICFz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8TWVz
c2FnZUV2ZW50PiBldnQgPSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOwotICAgIC8vIEZJWE1FOiBv
cmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIG1lc3NhZ2VQb3J0LgogICAgIGV2dC0+aW5pdE1l
c3NhZ2VFdmVudChldmVudE5hbWVzKCkubWVzc2FnZUV2ZW50LCBmYWxzZSwgZmFsc2UsIFNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZTo6Y3JlYXRlKG1zZyksICIiLCAiIiwgMCwgMCk7CiAgICAgZGlzcGF0
Y2hFdmVudChldnQpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCmluZGV4IDllY2JlZDcuLjU2ZWY0
YjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAorKysgYi9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKQEAgLTQ1LDc5ICs0NSw3OSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTdHJpbmc7Ci0gICAgY2xhc3MgV2ViU29ja2V0Q2hh
bm5lbDsKK2NsYXNzIFN0cmluZzsKK2NsYXNzIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOwog
Ci0gICAgY2xhc3MgV2ViU29ja2V0IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0PiwgcHVi
bGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwdWJsaWMgV2ViU29ja2V0
Q2hhbm5lbENsaWVudCB7Ci0gICAgcHVibGljOgorY2xhc3MgV2ViU29ja2V0IDogcHVibGljIFJl
ZkNvdW50ZWQ8V2ViU29ja2V0PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZlRE9N
T2JqZWN0LCBwdWJsaWMgV2ViU29ja2V0Q2hhbm5lbENsaWVudCB7CitwdWJsaWM6CiAjaWYgVVNF
KFY4KQotICAgICAgICBzdGF0aWMgdm9pZCBzZXRJc0F2YWlsYWJsZShib29sKTsKLSAgICAgICAg
c3RhdGljIGJvb2wgaXNBdmFpbGFibGUoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRJc0F2YWlsYWJs
ZShib29sKTsKKyAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogI2VuZGlmCi0gICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYlNvY2tldD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqIGNvbnRleHQpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTb2NrZXQoY29udGV4dCkpOyB9
Ci0gICAgICAgIHZpcnR1YWwgfldlYlNvY2tldCgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YlNvY2tldD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpIHsgcmV0dXJu
IGFkb3B0UmVmKG5ldyBXZWJTb2NrZXQoY29udGV4dCkpOyB9CisgICAgdmlydHVhbCB+V2ViU29j
a2V0KCk7CiAKLSAgICAgICAgZW51bSBTdGF0ZSB7Ci0gICAgICAgICAgICBDT05ORUNUSU5HID0g
MCwKLSAgICAgICAgICAgIE9QRU4gPSAxLAotICAgICAgICAgICAgQ0xPU0VEID0gMgotICAgICAg
ICB9OworICAgIGVudW0gU3RhdGUgeworICAgICAgICBDT05ORUNUSU5HID0gMCwKKyAgICAgICAg
T1BFTiA9IDEsCisgICAgICAgIENMT1NFRCA9IDIKKyAgICB9OwogCi0gICAgICAgIHZvaWQgY29u
bmVjdChjb25zdCBLVVJMJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgICAgICB2b2lkIGNvbm5lY3Qo
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGNvbm5lY3QoY29uc3QgS1VSTCYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGNv
bm5lY3QoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUm
KTsKIAotICAgICAgICBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29k
ZSYpOwogCi0gICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIGNsb3NlKCk7CiAKLSAgICAg
ICAgY29uc3QgS1VSTCYgdXJsKCkgY29uc3Q7Ci0gICAgICAgIFN0YXRlIHJlYWR5U3RhdGUoKSBj
b25zdDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIGNvbnN0OworICAg
IGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0OworICAgIFN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdDsK
KyAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3Q7CiAKLSAgICAgICAgREVG
SU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihvcGVuKTsKLSAgICAgICAgREVGSU5FX0FUVFJJ
QlVURV9FVkVOVF9MSVNURU5FUihtZXNzYWdlKTsKLSAgICAgICAgREVGSU5FX0FUVFJJQlVURV9F
VkVOVF9MSVNURU5FUihjbG9zZSk7CisgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5F
UihvcGVuKTsKKyAgICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKG1lc3NhZ2UpOwor
ICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVORVIoY2xvc2UpOwogCi0gICAgICAgIC8v
IEV2ZW50VGFyZ2V0Ci0gICAgICAgIHZpcnR1YWwgV2ViU29ja2V0KiB0b1dlYlNvY2tldCgpIHsg
cmV0dXJuIHRoaXM7IH0KKyAgICAvLyBFdmVudFRhcmdldAorICAgIHZpcnR1YWwgV2ViU29ja2V0
KiB0b1dlYlNvY2tldCgpIHsgcmV0dXJuIHRoaXM7IH0KIAotICAgICAgICB2aXJ0dWFsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBj
b25zdDsKIAotICAgICAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICAgICAgLy8gIHZpcnR1YWwg
Ym9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKLSAgICAgICAgLy8gdmlydHVhbCB2b2lk
IGNvbnRleHREZXN0cm95ZWQoKTsKLSAgICAgICAgLy8gdmlydHVhbCBib29sIGNhblN1c3BlbmQo
KSBjb25zdDsKLSAgICAgICAgLy8gdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKLSAgICAgICAgLy8g
dmlydHVhbCB2b2lkIHJlc3VtZSgpOwotICAgICAgICAvLyB2aXJ0dWFsIHZvaWQgc3RvcCgpOwor
ICAgIC8vIEFjdGl2ZURPTU9iamVjdAorICAgIC8vICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0Fj
dGl2aXR5KCkgY29uc3Q7CisgICAgLy8gdmlydHVhbCB2b2lkIGNvbnRleHREZXN0cm95ZWQoKTsK
KyAgICAvLyB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgpIGNvbnN0OworICAgIC8vIHZpcnR1YWwg
dm9pZCBzdXNwZW5kKCk7CisgICAgLy8gdmlydHVhbCB2b2lkIHJlc3VtZSgpOworICAgIC8vIHZp
cnR1YWwgdm9pZCBzdG9wKCk7CiAKLSAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXQ+
OjpyZWY7Ci0gICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6ZGVyZWY7CisgICAg
dXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXQ+OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxX
ZWJTb2NrZXQ+OjpkZXJlZjsKIAotICAgICAgICAvLyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb25uZWN0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZyk7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRDbG9zZSgpOworICAgIC8vIFdlYlNvY2tldENoYW5uZWxDbGllbnQKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29ubmVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShj
b25zdCBTdHJpbmcmIG1zZyk7CisgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKCk7CiAKLSAgICBw
cml2YXRlOgotICAgICAgICBXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOworcHJp
dmF0ZToKKyAgICBXZWJTb2NrZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KLSAgICAgICAgdmlydHVh
bCB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSB7IGRlcmVmKCk7IH0KLSAgICAgICAgdmlydHVhbCBF
dmVudFRhcmdldERhdGEqIGV2ZW50VGFyZ2V0RGF0YSgpOwotICAgICAgICB2aXJ0dWFsIEV2ZW50
VGFyZ2V0RGF0YSogZW5zdXJlRXZlbnRUYXJnZXREYXRhKCk7CisgICAgdmlydHVhbCB2b2lkIHJl
ZkV2ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFy
Z2V0KCkgeyBkZXJlZigpOyB9CisgICAgdmlydHVhbCBFdmVudFRhcmdldERhdGEqIGV2ZW50VGFy
Z2V0RGF0YSgpOworICAgIHZpcnR1YWwgRXZlbnRUYXJnZXREYXRhKiBlbnN1cmVFdmVudFRhcmdl
dERhdGEoKTsKIAotICAgICAgICB2b2lkIGRpc3BhdGNoT3BlbkV2ZW50KEV2ZW50Kik7Ci0gICAg
ICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdlRXZlbnQoRXZlbnQqKTsKLSAgICAgICAgdm9pZCBkaXNw
YXRjaENsb3NlRXZlbnQoRXZlbnQqKTsKKyAgICB2b2lkIGRpc3BhdGNoT3BlbkV2ZW50KEV2ZW50
Kik7CisgICAgdm9pZCBkaXNwYXRjaE1lc3NhZ2VFdmVudChFdmVudCopOworICAgIHZvaWQgZGlz
cGF0Y2hDbG9zZUV2ZW50KEV2ZW50Kik7CiAKLSAgICAgICAgUmVmUHRyPFdlYlNvY2tldENoYW5u
ZWw+IG1fY2hhbm5lbDsKKyAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+IG1f
Y2hhbm5lbDsKIAotICAgICAgICBTdGF0ZSBtX3N0YXRlOwotICAgICAgICBLVVJMIG1fdXJsOwot
ICAgICAgICBTdHJpbmcgbV9wcm90b2NvbDsKLSAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZl
bnRUYXJnZXREYXRhOwotICAgIH07CisgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICBLVVJMIG1fdXJs
OworICAgIFN0cmluZyBtX3Byb3RvY29sOworICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFy
Z2V0RGF0YTsKK307CiAKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmggYi9XZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IDE0YjFlOGMuLmY3ZmU1ZDYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmgKKysrIGIvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldENoYW5uZWwuaApAQCAtMzQsNDkgKzM0LDU3IEBACiAjaWYgRU5BQkxFKFdF
Ql9TT0NLRVRTKQogCiAjaW5jbHVkZSAiU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LmgiCisjaW5j
bHVkZSAiVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCIKICNpbmNsdWRlICJXZWJTb2NrZXRI
YW5kc2hha2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLSAgICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwotICAgIGNsYXNzIFN0
cmluZzsKLSAgICBjbGFzcyBTb2NrZXRTdHJlYW1IYW5kbGU7Ci0gICAgY2xhc3MgU29ja2V0U3Ry
ZWFtRXJyb3I7Ci0gICAgY2xhc3MgV2ViU29ja2V0Q2hhbm5lbENsaWVudDsKLQotICAgIGNsYXNz
IFdlYlNvY2tldENoYW5uZWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJTb2NrZXRDaGFubmVsPiwg
cHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCB7Ci0gICAgcHVibGljOgotICAgICAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50LCBjb25zdCBL
VVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBX
ZWJTb2NrZXRDaGFubmVsKGNvbnRleHQsIGNsaWVudCwgdXJsLCBwcm90b2NvbCkpOyB9Ci0gICAg
ICAgIHZpcnR1YWwgfldlYlNvY2tldENoYW5uZWwoKTsKLQotICAgICAgICB2b2lkIGNvbm5lY3Qo
KTsKLSAgICAgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbXNnKTsKLSAgICAgICAgdW5zaWdu
ZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIGNvbnN0OwotICAgICAgICB2b2lkIGNsb3NlKCk7Ci0g
ICAgICAgIHZvaWQgZGlzY29ubmVjdCgpOyAvLyBXaWxsIHN1cHByZXNzIGRpZENsb3NlKCkuCi0K
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpZE9wZW4oU29ja2V0U3RyZWFtSGFuZGxlKik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShTb2NrZXRTdHJlYW1IYW5kbGUqKTsKLSAgICAgICAg
dmlydHVhbCB2b2lkIGRpZFJlY2VpdmVEYXRhKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IGNo
YXIqLCBpbnQpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmFpbChTb2NrZXRTdHJlYW1IYW5k
bGUqLCBjb25zdCBTb2NrZXRTdHJlYW1FcnJvciYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
UmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0
IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5j
ZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShTb2NrZXRTdHJlYW1IYW5kbGUqLCBjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV2ViU29ja2V0
Q2hhbm5lbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCos
IGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLQotICAgICAgICBib29sIGFwcGVuZFRvQnVm
ZmVyKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pOwotICAgICAgICB2b2lkIHNraXBCdWZmZXIo
aW50IGxlbik7Ci0KLSAgICAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogbV9jb250ZXh0Owot
ICAgICAgICBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBtX2NsaWVudDsKLSAgICAgICAgV2ViU29j
a2V0SGFuZHNoYWtlIG1faGFuZHNoYWtlOwotICAgICAgICBSZWZQdHI8U29ja2V0U3RyZWFtSGFu
ZGxlPiBtX2hhbmRsZTsKLSAgICAgICAgY2hhciogbV9idWZmZXI7Ci0gICAgICAgIGludCBtX2J1
ZmZlclNpemU7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbV91bmhhbmRsZWRCdWZmZXJTaXplOwot
ICAgIH07CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3RyaW5nOworY2xh
c3MgU29ja2V0U3RyZWFtSGFuZGxlOworY2xhc3MgU29ja2V0U3RyZWFtRXJyb3I7CitjbGFzcyBX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50OworCitjbGFzcyBXZWJTb2NrZXRDaGFubmVsIDogcHVibGlj
IFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQsIHB1YmxpYyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCB7CitwdWJsaWM6CisgICAg
c3RhdGljIFBhc3NSZWZQdHI8V2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKSB7IHJldHVybiBhZG9wdFJlZihuZXcg
V2ViU29ja2V0Q2hhbm5lbChjb250ZXh0LCBjbGllbnQsIHVybCwgcHJvdG9jb2wpKTsgfQorICAg
IHZpcnR1YWwgfldlYlNvY2tldENoYW5uZWwoKTsKKworICAgIHZpcnR1YWwgdm9pZCBjb25uZWN0
KCk7CisgICAgdmlydHVhbCBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtc2cpOworICAgIHZpcnR1
YWwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCk7IC8vIFdpbGwgc3VwcHJl
c3MgZGlkQ2xvc2UoKS4KKworICAgIHZpcnR1YWwgdm9pZCBkaWRPcGVuKFNvY2tldFN0cmVhbUhh
bmRsZSopOworICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZShTb2NrZXRTdHJlYW1IYW5kbGUqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZURhdGEoU29ja2V0U3RyZWFtSGFuZGxlKiwgY29u
c3QgY2hhciosIGludCk7CisgICAgdmlydHVhbCB2b2lkIGRpZEZhaWwoU29ja2V0U3RyZWFtSGFu
ZGxlKiwgY29uc3QgU29ja2V0U3RyZWFtRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IEF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhl
bnRpY2F0aW9uQ2hhbGxlbmdlKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJik7CisKKyAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+
OjpyZWY7CisgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXRDaGFubmVsPjo6ZGVyZWY7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVmVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWwoKSB7IGRlcmVmKCk7IH0KKworcHJpdmF0ZToKKyAgICBXZWJTb2NrZXRDaGFubmVs
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiwgY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYpOworCisgICAgYm9vbCBhcHBlbmRUb0J1ZmZlcihjb25zdCBj
aGFyKiBkYXRhLCBpbnQgbGVuKTsKKyAgICB2b2lkIHNraXBCdWZmZXIoaW50IGxlbik7CisKKyAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgV2ViU29ja2V0Q2hhbm5l
bENsaWVudCogbV9jbGllbnQ7CisgICAgV2ViU29ja2V0SGFuZHNoYWtlIG1faGFuZHNoYWtlOwor
ICAgIFJlZlB0cjxTb2NrZXRTdHJlYW1IYW5kbGU+IG1faGFuZGxlOworICAgIGNoYXIqIG1fYnVm
ZmVyOworICAgIGludCBtX2J1ZmZlclNpemU7CisgICAgdW5zaWduZWQgbG9uZyBtX3VuaGFuZGxl
ZEJ1ZmZlclNpemU7Cit9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oIGIvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaAppbmRleCA0NjNjYWRhLi4wYjA0MGE1
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5o
CisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50LmgKQEAgLTM1
LDE2ICszNSwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHZpcnR1YWwgfldlYlNvY2tl
dENoYW5uZWxDbGllbnQoKSB7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZENvbm5lY3QoKSB7
IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYp
IHsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoKSB7IH0KLQotICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgV2ViU29ja2V0Q2hhbm5lbENsaWVudCgpIHsgfQotICAgIH07CitjbGFzcyBX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJTb2NrZXRD
aGFubmVsQ2xpZW50KCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZENvbm5lY3QoKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJikgeyB9CisgICAg
dmlydHVhbCB2b2lkIGRpZENsb3NlKCkgeyB9CisKK3Byb3RlY3RlZDoKKyAgICBXZWJTb2NrZXRD
aGFubmVsQ2xpZW50KCkgeyB9Cit9OwogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmggYi9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmgKaW5kZXggZDVkYmU2OC4uNTY0OWJhMyAx
MDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oCisrKyBi
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaApAQCAtMzksNzIgKzM5LDcy
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7Ci0gICAgY2xhc3MgSFRUUEhlYWRlck1hcDsKK2NsYXNzIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ7CitjbGFzcyBIVFRQSGVhZGVyTWFwOwogCi0gICAgY2xhc3MgV2ViU29ja2V0SGFuZHNo
YWtlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIGVudW0gTW9k
ZSB7Ci0gICAgICAgICAgICBJbmNvbXBsZXRlLCBOb3JtYWwsIEZhaWxlZCwgQ29ubmVjdGVkCi0g
ICAgICAgIH07Ci0gICAgICAgIFdlYlNvY2tldEhhbmRzaGFrZShjb25zdCBLVVJMJiwgY29uc3Qg
U3RyaW5nJiBwcm90b2NvbCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwotICAgICAgICB+V2Vi
U29ja2V0SGFuZHNoYWtlKCk7CitjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2UgOiBwdWJsaWMgTm9u
Y29weWFibGUgeworcHVibGljOgorICAgIGVudW0gTW9kZSB7CisgICAgICAgIEluY29tcGxldGUs
IE5vcm1hbCwgRmFpbGVkLCBDb25uZWN0ZWQKKyAgICB9OworICAgIFdlYlNvY2tldEhhbmRzaGFr
ZShjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCwgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCopOworICAgIH5XZWJTb2NrZXRIYW5kc2hha2UoKTsKIAotICAgICAgICBjb25zdCBLVVJM
JiB1cmwoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRVUkwoY29uc3QgS1VSTCYpOwotICAgICAg
ICBjb25zdCBTdHJpbmcgaG9zdCgpIGNvbnN0OworICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0
OworICAgIHZvaWQgc2V0VVJMKGNvbnN0IEtVUkwmKTsKKyAgICBjb25zdCBTdHJpbmcgaG9zdCgp
IGNvbnN0OwogCi0gICAgICAgIGNvbnN0IFN0cmluZyYgY2xpZW50UHJvdG9jb2woKSBjb25zdDsK
LSAgICAgICAgdm9pZCBzZXRDbGllbnRQcm90b2NvbChjb25zdCBTdHJpbmcmIHByb3RvY29sKTsK
KyAgICBjb25zdCBTdHJpbmcmIGNsaWVudFByb3RvY29sKCkgY29uc3Q7CisgICAgdm9pZCBzZXRD
bGllbnRQcm90b2NvbChjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKIAotICAgICAgICBib29sIHNl
Y3VyZSgpIGNvbnN0OwotICAgICAgICB2b2lkIHNldFNlY3VyZShib29sIHNlY3VyZSk7CisgICAg
Ym9vbCBzZWN1cmUoKSBjb25zdDsKKyAgICB2b2lkIHNldFNlY3VyZShib29sIHNlY3VyZSk7CiAK
LSAgICAgICAgU3RyaW5nIGNsaWVudE9yaWdpbigpIGNvbnN0OwotICAgICAgICBTdHJpbmcgY2xp
ZW50TG9jYXRpb24oKSBjb25zdDsKKyAgICBTdHJpbmcgY2xpZW50T3JpZ2luKCkgY29uc3Q7Cisg
ICAgU3RyaW5nIGNsaWVudExvY2F0aW9uKCkgY29uc3Q7CiAKLSAgICAgICAgQ1N0cmluZyBjbGll
bnRIYW5kc2hha2VNZXNzYWdlKCkgY29uc3Q7CisgICAgQ1N0cmluZyBjbGllbnRIYW5kc2hha2VN
ZXNzYWdlKCkgY29uc3Q7CiAKLSAgICAgICAgdm9pZCByZXNldCgpOworICAgIHZvaWQgcmVzZXQo
KTsKIAotICAgICAgICBpbnQgcmVhZFNlcnZlckhhbmRzaGFrZShjb25zdCBjaGFyKiBoZWFkZXIs
IHNpemVfdCBsZW4pOwotICAgICAgICBNb2RlIG1vZGUoKSBjb25zdDsKKyAgICBpbnQgcmVhZFNl
cnZlckhhbmRzaGFrZShjb25zdCBjaGFyKiBoZWFkZXIsIHNpemVfdCBsZW4pOworICAgIE1vZGUg
bW9kZSgpIGNvbnN0OwogCi0gICAgICAgIGNvbnN0IFN0cmluZyYgc2VydmVyV2ViU29ja2V0T3Jp
Z2luKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0U2VydmVyV2ViU29ja2V0T3JpZ2luKGNvbnN0
IFN0cmluZyYgd2ViU29ja2V0T3JpZ2luKTsKKyAgICBjb25zdCBTdHJpbmcmIHNlcnZlcldlYlNv
Y2tldE9yaWdpbigpIGNvbnN0OworICAgIHZvaWQgc2V0U2VydmVyV2ViU29ja2V0T3JpZ2luKGNv
bnN0IFN0cmluZyYgd2ViU29ja2V0T3JpZ2luKTsKIAotICAgICAgICBjb25zdCBTdHJpbmcmIHNl
cnZlcldlYlNvY2tldExvY2F0aW9uKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0U2VydmVyV2Vi
U29ja2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJiB3ZWJTb2NrZXRMb2NhdGlvbik7CisgICAgY29u
c3QgU3RyaW5nJiBzZXJ2ZXJXZWJTb2NrZXRMb2NhdGlvbigpIGNvbnN0OworICAgIHZvaWQgc2V0
U2VydmVyV2ViU29ja2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJiB3ZWJTb2NrZXRMb2NhdGlvbik7
CiAKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzZXJ2ZXJXZWJTb2NrZXRQcm90b2NvbCgpIGNvbnN0
OwotICAgICAgICB2b2lkIHNldFNlcnZlcldlYlNvY2tldFByb3RvY29sKGNvbnN0IFN0cmluZyYg
d2ViU29ja2V0UHJvdG9jb2wpOworICAgIGNvbnN0IFN0cmluZyYgc2VydmVyV2ViU29ja2V0UHJv
dG9jb2woKSBjb25zdDsKKyAgICB2b2lkIHNldFNlcnZlcldlYlNvY2tldFByb3RvY29sKGNvbnN0
IFN0cmluZyYgd2ViU29ja2V0UHJvdG9jb2wpOwogCi0gICAgICAgIGNvbnN0IFN0cmluZyYgc2Vy
dmVyU2V0Q29va2llKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0U2VydmVyU2V0Q29va2llKGNv
bnN0IFN0cmluZyYgc2V0Q29va2llKTsKLSAgICAgICAgY29uc3QgU3RyaW5nJiBzZXJ2ZXJTZXRD
b29raWUyKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0U2VydmVyU2V0Q29va2llMihjb25zdCBT
dHJpbmcmIHNldENvb2tpZTIpOworICAgIGNvbnN0IFN0cmluZyYgc2VydmVyU2V0Q29va2llKCkg
Y29uc3Q7CisgICAgdm9pZCBzZXRTZXJ2ZXJTZXRDb29raWUoY29uc3QgU3RyaW5nJiBzZXRDb29r
aWUpOworICAgIGNvbnN0IFN0cmluZyYgc2VydmVyU2V0Q29va2llMigpIGNvbnN0OworICAgIHZv
aWQgc2V0U2VydmVyU2V0Q29va2llMihjb25zdCBTdHJpbmcmIHNldENvb2tpZTIpOwogCi0gICAg
cHJpdmF0ZToKLSAgICAgICAgS1VSTCBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVz
KCkgY29uc3Q7Citwcml2YXRlOgorICAgIEtVUkwgaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5k
Q29va2llcygpIGNvbnN0OwogCi0gICAgICAgIC8vIFJlYWRzIGFsbCBoZWFkZXJzIGV4Y2VwdCBm
b3IgdGhlIHR3byBwcmVkZWZpbmVkIG9uZXMuCi0gICAgICAgIGNvbnN0IGNoYXIqIHJlYWRIVFRQ
SGVhZGVycyhjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZW5kLCBIVFRQSGVhZGVyTWFw
KiBoZWFkZXJzKTsKLSAgICAgICAgYm9vbCBwcm9jZXNzSGVhZGVycyhjb25zdCBIVFRQSGVhZGVy
TWFwJiBoZWFkZXJzKTsKLSAgICAgICAgdm9pZCBjaGVja1Jlc3BvbnNlSGVhZGVycygpOworICAg
IC8vIFJlYWRzIGFsbCBoZWFkZXJzIGV4Y2VwdCBmb3IgdGhlIHR3byBwcmVkZWZpbmVkIG9uZXMu
CisgICAgY29uc3QgY2hhciogcmVhZEhUVFBIZWFkZXJzKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25z
dCBjaGFyKiBlbmQsIEhUVFBIZWFkZXJNYXAqIGhlYWRlcnMpOworICAgIGJvb2wgcHJvY2Vzc0hl
YWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycyk7CisgICAgdm9pZCBjaGVja1Jlc3Bv
bnNlSGVhZGVycygpOwogCi0gICAgICAgIEtVUkwgbV91cmw7Ci0gICAgICAgIFN0cmluZyBtX2Ns
aWVudFByb3RvY29sOwotICAgICAgICBib29sIG1fc2VjdXJlOwotICAgICAgICBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CisgICAgS1VSTCBtX3VybDsKKyAgICBTdHJpbmcgbV9j
bGllbnRQcm90b2NvbDsKKyAgICBib29sIG1fc2VjdXJlOworICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIG1fY29udGV4dDsKIAotICAgICAgICBNb2RlIG1fbW9kZTsKKyAgICBNb2RlIG1fbW9k
ZTsKIAotICAgICAgICBTdHJpbmcgbV93c09yaWdpbjsKLSAgICAgICAgU3RyaW5nIG1fd3NMb2Nh
dGlvbjsKLSAgICAgICAgU3RyaW5nIG1fd3NQcm90b2NvbDsKLSAgICAgICAgU3RyaW5nIG1fc2V0
Q29va2llOwotICAgICAgICBTdHJpbmcgbV9zZXRDb29raWUyOwotICAgIH07CisgICAgU3RyaW5n
IG1fd3NPcmlnaW47CisgICAgU3RyaW5nIG1fd3NMb2NhdGlvbjsKKyAgICBTdHJpbmcgbV93c1By
b3RvY29sOworICAgIFN0cmluZyBtX3NldENvb2tpZTsKKyAgICBTdHJpbmcgbV9zZXRDb29raWUy
OworfTsKIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93
ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1dlYkNvcmUv
d2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiZjk0MgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YkNvcmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAg
LTAsMCArMSwyNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFs
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
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9TT0NL
RVRTKSAmJiBFTkFCTEUoV09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsLmgiCisKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgIlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oIgor
I2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVs
Q2xpZW50LmgiCisjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckxv
YWRlclByb3h5LmgiCisjaW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgorI2luY2x1ZGUgIldvcmtl
clRocmVhZC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6V29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwoV29ya2VyQ29udGV4dCogY29udGV4dCwgV2ViU29ja2V0Q2hh
bm5lbENsaWVudCogY2xpZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCisgICAgOiBtX3dvcmtlckNvbnRleHQoY29udGV4
dCkKKyAgICAsIG1fd29ya2VyQ2xpZW50V3JhcHBlcihUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI6OmNyZWF0ZShjbGllbnQpKQorICAgICwgbV9icmlkZ2UoKihuZXcgTWFp
blRocmVhZEJyaWRnZShtX3dvcmtlckNsaWVudFdyYXBwZXIsIG1fd29ya2VyQ29udGV4dCwgdGFz
a01vZGUsIHVybCwgcHJvdG9jb2wpKSkKK3sKK30KKworV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6On5Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCgpCit7CisgICAgbV9i
cmlkZ2UuZGlzY29ubmVjdCgpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpjb25uZWN0KCkKK3sKKyAgICBtX2JyaWRnZS5jb25uZWN0KCk7Cit9CisKK2Jvb2wg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgU3RyaW5nJiBtc2cp
Cit7CisgICAgcmV0dXJuIG1fYnJpZGdlLnNlbmQobXNnKTsKK30KKwordW5zaWduZWQgbG9uZyBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVyZWRBbW91bnQoKSBjb25zdAor
eworICAgIHJldHVybiBtX2JyaWRnZS5idWZmZXJlZEFtb3VudCgpOworfQorCit2b2lkIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjbG9zZSgpCit7CisgICAgbV9icmlkZ2UuY2xv
c2UoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29u
bmVjdCgpCit7CisgICAgbV9icmlkZ2UuZGlzY29ubmVjdCgpOworfQorCitXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6TWFpblRocmVhZEJyaWRnZShQ
YXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2Vy
Q2xpZW50V3JhcHBlciwgUGFzc1JlZlB0cjxXb3JrZXJDb250ZXh0PiB3b3JrZXJDb250ZXh0LCBj
b25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJv
dG9jb2wpCisgICAgOiBtX3dvcmtlckNsaWVudFdyYXBwZXIod29ya2VyQ2xpZW50V3JhcHBlcikK
KyAgICAsIG1fd29ya2VyQ29udGV4dCh3b3JrZXJDb250ZXh0KQorICAgICwgbV90YXNrTW9kZSh0
YXNrTW9kZS5jcm9zc1RocmVhZFN0cmluZygpKQoreworICAgIEFTU0VSVChtX3dvcmtlckNsaWVu
dFdyYXBwZXIuZ2V0KCkpOworICAgIG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxv
YWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJl
YWRCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVXZWJTb2NrZXRDaGFubmVsLCB0aGlzLCB1cmwsIHBy
b3RvY29sKSk7Cit9CisKK1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhy
ZWFkQnJpZGdlOjp+TWFpblRocmVhZEJyaWRnZSgpCit7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6Ok1haW5UaHJlYWRCcmlkZ2U6OmNvbm5lY3QoKQoreworICAg
IG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tU
b0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRD
b25uZWN0LCB0aGlzKSk7Cit9CisKK2Jvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6Ok1haW5UaHJlYWRCcmlkZ2U6OnNlbmQoY29uc3QgU3RyaW5nJiBtc2cpCit7CisgICAgaWYg
KCFtX3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYWxs
U3luY01ldGhvZCgpOworICAgIG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRl
clByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJk1haW5UaHJlYWRC
cmlkZ2U6Om1haW5UaHJlYWRTZW5kLCB0aGlzLCBtc2cpKTsKKyAgICB3YWl0U3luY01ldGhvZCgp
OworICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlciogY2xpZW50V3Jh
cHBlciA9IHN0YXRpY19jYXN0PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBl
cio+KG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7CisgICAgcmV0dXJuIGNsaWVudFdyYXBw
ZXIgJiYgY2xpZW50V3JhcHBlci0+c2VudCgpOworfQorCit1bnNpZ25lZCBsb25nIFdvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFkQnJpZGdlOjpidWZmZXJlZEFtb3Vu
dCgpCit7CisgICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgICAgIHJldHVybiAw
OworICAgIGNhbGxTeW5jTWV0aG9kKCk7CisgICAgbV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+
d29ya2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygm
TWFpblRocmVhZEJyaWRnZTo6bWFpblRocmVhZEJ1ZmZlcmVkQW1vdW50LCB0aGlzKSk7CisgICAg
d2FpdFN5bmNNZXRob2QoKTsKKyAgICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIqIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOworICAgIGlm
IChjbGllbnRXcmFwcGVyKQorICAgICAgICByZXR1cm4gY2xpZW50V3JhcHBlci0+YnVmZmVyZWRB
bW91bnQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6Y2xvc2UoKQoreworICAgIG1fd29ya2VyQ29u
dGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tUb0xvYWRlcihjcmVh
dGVDYWxsYmFja1Rhc2soJk1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRDbG9zZSwgdGhpcykp
OworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFk
QnJpZGdlOjpkaXNjb25uZWN0KCkKK3sKKyAgICBjbGVhckNsaWVudFdyYXBwZXIoKTsKKyAgICBt
X3dvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpLnBvc3RUYXNrVG9M
b2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkRGVz
dHJveSwgdGhpcykpOworfQorCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkQ29ubmVjdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyKQoreworICAgIEFTU0VS
VF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIHdvcmtl
ckNsaWVudFdyYXBwZXItPmRpZENvbm5lY3QoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6ZGlkQ29ubmVjdCgpCit7CisgICAg
bV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza0Zv
ck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlk
Q29ubmVjdCwgbV93b3JrZXJDbGllbnRXcmFwcGVyKSwgbV90YXNrTW9kZSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdvcmtlckNvbnRleHREaWRSZWNlaXZlTWVzc2FnZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBjb25zdCBTdHJpbmcmIG1zZykKK3sKKyAgICBBU1NF
UlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICB3b3Jr
ZXJDbGllbnRXcmFwcGVyLT5kaWRSZWNlaXZlTWVzc2FnZShtc2cuY3Jvc3NUaHJlYWRTdHJpbmco
KSk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Ok1haW5UaHJl
YWRCcmlkZ2U6OmRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbXNnKQoreworICAgIG1f
d29ya2VyQ29udGV4dC0+dGhyZWFkKCktPndvcmtlckxvYWRlclByb3h5KCkucG9zdFRhc2tGb3JN
b2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJl
Y2VpdmVNZXNzYWdlLCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIG1zZyksIG1fdGFza01vZGUpOwor
fQorCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkQ2xvc2UoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlcikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQs
IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICB3b3JrZXJDbGllbnRXcmFwcGVyLT5k
aWRDbG9zZSgpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpN
YWluVGhyZWFkQnJpZGdlOjpkaWRDbG9zZSgpCit7CisgICAgbV93b3JrZXJDb250ZXh0LT50aHJl
YWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkQ2xvc2UsIG1fd29ya2VyQ2xpZW50
V3JhcHBlciksIG1fdGFza01vZGUpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjpNYWluVGhyZWFkQnJpZGdlOjpjbGVhckNsaWVudFdyYXBwZXIoKQoreworICAg
IHN0YXRpY19jYXN0PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcio+KG1f
d29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSktPmNsZWFyQ2xpZW50KCk7Cit9CisKK3ZvaWQgV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJl
YWREZXN0cm95KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlk
Z2UqIHRoaXNQdHIpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlRf
VU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgZGVsZXRlIHRoaXNQ
dHI7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Ok1haW5UaHJl
YWRCcmlkZ2U6OmNhbGxTeW5jTWV0aG9kKCkKK3sKKyAgICBBU1NFUlQobV93b3JrZXJDbGllbnRX
cmFwcGVyLmdldCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpLT5jYWxsU3luY01l
dGhvZCgpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWlu
VGhyZWFkQnJpZGdlOjp3YWl0U3luY01ldGhvZCgpCit7CisgICAgV29ya2VyUnVuTG9vcCYgcnVu
TG9vcCA9IG1fd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKTsKKyAgICBNZXNzYWdl
UXVldWVXYWl0UmVzdWx0IHJlc3VsdCA9IE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDsKKyAg
ICBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIg
PSBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPiht
X3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOworICAgIHdoaWxlIChjbGllbnRXcmFwcGVyICYm
IGNsaWVudFdyYXBwZXItPnN5bmNNZXRob2REb25lKCkgJiYgcmVzdWx0ICE9IE1lc3NhZ2VRdWV1
ZVRlcm1pbmF0ZWQpIHsKKyAgICAgICAgcmVzdWx0ID0gcnVuTG9vcC5ydW5Jbk1vZGUobV93b3Jr
ZXJDb250ZXh0LmdldCgpLCBtX3Rhc2tNb2RlKTsKKyAgICAgICAgY2xpZW50V3JhcHBlciA9IHN0
YXRpY19jYXN0PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcio+KG1fd29y
a2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7CisgICAgfQorICAgIHJldHVybjsKK30KKwordm9pZCBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6TWFpblRocmVhZEJyaWRnZTo6bWFpblRo
cmVhZENyZWF0ZVdlYlNvY2tldENoYW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgTWFpblRocmVhZEJyaWRnZSogdGhpc1B0ciwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
KGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisKKyAgICB0aGlzUHRyLT5tX21haW5XZWJTb2NrZXRD
aGFubmVsID0gV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKGNvbnRleHQsIHRoaXNQdHIsIHVybCwg
cHJvdG9jb2wpOworICAgIEFTU0VSVCh0aGlzUHRyLT5tX21haW5XZWJTb2NrZXRDaGFubmVsKTsK
K30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6TWFpblRocmVhZEJy
aWRnZTo6bWFpblRocmVhZENvbm5lY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
TWFpblRocmVhZEJyaWRnZSogdGhpc1B0cikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKwor
ICAgIGlmICghdGhpc1B0ci0+bV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0dXJu
OworICAgIHRoaXNQdHItPm1fbWFpbldlYlNvY2tldENoYW5uZWwtPmNvbm5lY3QoKTsKK30KKwor
c3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZFNlbmQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4g
d29ya2VyQ2xpZW50V3JhcHBlciwgYm9vbCBzZW50KQoreworICAgIEFTU0VSVF9VTlVTRUQoY29u
dGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIHdvcmtlckNsaWVudFdyYXBw
ZXItPnNldFNlbnQoc2VudCk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6Ok1haW5UaHJlYWRCcmlkZ2U6Om1haW5UaHJlYWRTZW5kKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQdHIsIGNvbnN0IFN0cmluZyYg
bXNnKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChj
b250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworCisgICAgaWYgKCF0aGlzUHRyLT5tX21h
aW5XZWJTb2NrZXRDaGFubmVsKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF0aGlzUHRyLT5t
X3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoIXRoaXNQ
dHItPm1fd29ya2VyQ2xpZW50V3JhcHBlci0+c3luY01ldGhvZERvbmUoKSk7CisgICAgYm9vbCBz
ZW50ID0gdGhpc1B0ci0+bV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+c2VuZChtc2cuY3Jvc3NUaHJl
YWRTdHJpbmcoKSk7CisgICAgdGhpc1B0ci0+bV93b3JrZXJDb250ZXh0LT50aHJlYWQoKS0+d29y
a2VyTG9hZGVyUHJveHkoKS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkU2VuZCwgdGhpc1B0ci0+bV93b3JrZXJDbGllbnRX
cmFwcGVyLCBzZW50KSwgdGhpc1B0ci0+bV90YXNrTW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdv
cmtlckNvbnRleHREaWRHZXRCdWZmZXJlZEFtb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB3
b3JrZXJDbGllbnRXcmFwcGVyLCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KQoreworICAg
IEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAg
IHdvcmtlckNsaWVudFdyYXBwZXItPnNldEJ1ZmZlcmVkQW1vdW50KGJ1ZmZlcmVkQW1vdW50KTsK
K30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6TWFpblRocmVhZEJy
aWRnZTo6bWFpblRocmVhZEJ1ZmZlcmVkQW1vdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQsIE1haW5UaHJlYWRCcmlkZ2UqIHRoaXNQdHIpCit7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzRG9jdW1lbnQo
KSk7CisKKyAgICBpZiAoIXRoaXNQdHItPm1fbWFpbldlYlNvY2tldENoYW5uZWwpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXRoaXNQdHItPm1fd29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVCghdGhpc1B0ci0+bV93b3JrZXJDbGllbnRXcmFwcGVyLT5z
eW5jTWV0aG9kRG9uZSgpKTsKKyAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50ID0gdGhp
c1B0ci0+bV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+YnVmZmVyZWRBbW91bnQoKTsKKyAgICB0aGlz
UHRyLT5tX3dvcmtlckNvbnRleHQtPnRocmVhZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpLnBvc3RU
YXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRl
eHREaWRHZXRCdWZmZXJlZEFtb3VudCwgdGhpc1B0ci0+bV93b3JrZXJDbGllbnRXcmFwcGVyLCBi
dWZmZXJlZEFtb3VudCksIHRoaXNQdHItPm1fdGFza01vZGUpOworfQorCit2b2lkIFdvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFkQnJpZGdlOjptYWluVGhyZWFkQ2xv
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgTWFpblRocmVhZEJyaWRnZSogdGhp
c1B0cikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQo
Y29udGV4dCwgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKworICAgIGlmICghdGhpc1B0ci0+bV9t
YWluV2ViU29ja2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIHRoaXNQdHItPm1fbWFp
bldlYlNvY2tldENoYW5uZWwtPmNsb3NlKCk7CisgICAgdGhpc1B0ci0+bV9tYWluV2ViU29ja2V0
Q2hhbm5lbCA9IDA7Cit9CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAgLy8g
RU5BQkxFKFdFQl9TT0NLRVRTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44ZDZjZjE1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCisjZGVmaW5lIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsX2gKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykgJiYgRU5B
QkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbENs
aWVudC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1VSTDsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXI7CitjbGFzcyBXb3JrZXJDb250ZXh0OworY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7
CitjbGFzcyBXb3JrZXJSdW5Mb29wOworCitjbGFzcyBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsPiwgcHVibGljIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVudCwg
Y29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwod29ya2VyQ29udGV4dCwgY2xpZW50LCB0YXNrTW9kZSwgdXJsLCBwcm90b2NvbCkpOyB9
CisgICAgdmlydHVhbCB+V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBjb25uZWN0KCk7CisgICAgdmlydHVhbCBib29sIHNlbmQoY29uc3QgU3Ry
aW5nJiBtc2cpOworICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25u
ZWN0KCk7IC8vIFdpbGwgc3VwcHJlc3MgZGlkQ2xvc2UoKS4KKworICAgIHVzaW5nIFJlZkNvdW50
ZWQ8V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+OjpyZWY7CisgICAgdXNpbmcgUmVm
Q291bnRlZDxXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD46OmRlcmVmOworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHJlZlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKCkg
eyByZWYoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBkZXJlZlRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsKCkgeyBkZXJlZigpOyB9CisKK3ByaXZhdGU6CisgICAgLy8gQ3JlYXRlcyBhIHNvY2tldCBo
YW5kbGUgb24gdGhlIG1haW4gdGhyZWFkIGFuZCBicmlkZ2VzIGNvbW11bmljYXRpb24KKyAgICAv
LyBiZXR3ZWVuIHRoZSBtYWluIHRocmVhZCBhbmQgdGhlIHdvcmtlciBjb250ZXh0J3MgdGhyZWFk
IHdoZXJlCisgICAgLy8gV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwgcnVucy4KKyAg
ICBjbGFzcyBNYWluVGhyZWFkQnJpZGdlIDogcHVibGljIFdlYlNvY2tldENoYW5uZWxDbGllbnQg
eworICAgIHB1YmxpYzoKKyAgICAgICAgTWFpblRocmVhZEJyaWRnZShQYXNzUmVmUHRyPFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4sIFBhc3NSZWZQdHI8V29ya2VyQ29u
dGV4dD4sIGNvbnN0IFN0cmluZyYgLyogdGFza01vZGUgKi8sIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIC8qIHByb3RvY29sICovKTsKKyAgICAgICAgdm9pZCBjb25uZWN0KCk7CisgICAgICAg
IGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIC8qIG1zZyAqLyk7CisgICAgICAgIHVuc2lnbmVkIGxv
bmcgYnVmZmVyZWRBbW91bnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworICAgICAgICB2b2lk
IGRpc2Nvbm5lY3QoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29ubmVjdCgpOworICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiAvKiBtc2cg
Ki8pOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoKTsKKworICAgIHByaXZhdGU6Cisg
ICAgICAgIC8vIEV4ZWN1dGVkIG9uIHRoZSB3b3JrZXIgY29udGV4dCdzIHRocmVhZC4KKyAgICAg
ICAgdm9pZCBjbGVhckNsaWVudFdyYXBwZXIoKTsKKworICAgICAgICB2b2lkIGNhbGxTeW5jTWV0
aG9kKCk7CisgICAgICAgIHZvaWQgd2FpdFN5bmNNZXRob2QoKTsKKworICAgICAgICAvLyBBbGwg
ZXhlY3V0ZWQgb24gdGhlIG1haW4gdGhyZWFkLgorICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhy
ZWFkRGVzdHJveShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSopOwor
ICAgICAgICB+TWFpblRocmVhZEJyaWRnZSgpOworCisgICAgICAgIHN0YXRpYyB2b2lkIG1haW5U
aHJlYWRDcmVhdGVXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWlu
VGhyZWFkQnJpZGdlKiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgLyogcHJvdG9jb2wgKi8p
OworICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ29ubmVjdChTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSopOworICAgICAgICBzdGF0aWMgdm9pZCBtYWluVGhy
ZWFkU2VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgTWFpblRocmVhZEJyaWRnZSosIGNvbnN0
IFN0cmluZyYgLyogbXNnICovKTsKKyAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZEJ1ZmZl
cmVkQW1vdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBNYWluVGhyZWFkQnJpZGdlKik7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDbG9zZShTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgTWFpblRocmVhZEJyaWRnZSopOworICAgICAgICAvLyBPbmx5IHRvIGJlIHVzZWQgb24gdGhl
IG1haW4gdGhyZWFkLgorICAgICAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+
IG1fbWFpbldlYlNvY2tldENoYW5uZWw7CisKKyAgICAgICAgLy8gVGhyZWFkYWJsZVdlYlNvY2tl
dENsaWVudFdyYXBwZXIgaXMgdG8gYmUgdXNlZCBvbiB0aGUgd29ya2VyIGNvbnRleHQgdGhyZWFk
LgorICAgICAgICAvLyBUaGUgcmVmIGNvdW50aW5nIGlzIGRvbmUgb24gZWl0aGVyIHRocmVhZC4K
KyAgICAgICAgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWxDbGllbnRXcmFwcGVyPiA+IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKworICAgICAgICAvLyBX
b3JrZXJMb2FkZXJQcm94eSBpcyB0byBiZSB1c2VkIG9uIGVpdGhlciB0aHJlYWQuCisgICAgICAg
IC8vIFdvcmtlclJ1bkxvb3AgaXMgdG8gYmUgdXNlZCBvbiB0aGUgd29ya2VyIHRocmVhZC4KKyAg
ICAgICAgLy8gVGhlIHJlZiBjb3VudGluZyBpcyBkb25lIG9uIGVpdGhlciB0aHJlYWQuCisgICAg
ICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBtX3dvcmtlckNvbnRleHQ7CisKKyAgICAgICAgLy8g
Rm9yIHVzZSBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgICAgIFN0cmluZyBtX3Rhc2tNb2RlOwor
ICAgIH07CisKKyAgICBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbChXb3JrZXJDb250
ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCosIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNv
bnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKworICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBt
X3dvcmtlckNvbnRleHQ7CisgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50V3JhcHBlcj4gbV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgIE1haW5UaHJlYWRCcmlkZ2Um
IG1fYnJpZGdlOworfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmICAvLyBF
TkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAgLy8gV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRs
IGIvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCmluZGV4IDBhNTgxN2MuLjIzMDRi
MjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAorKysgYi9X
ZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKQEAgLTg2LDYgKzg2LDkgQEAgbW9kdWxl
IHRocmVhZHMgewogICAgICAgICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcl0gRXZlbnRTb3Vy
Y2VDb25zdHJ1Y3RvciBFdmVudFNvdXJjZTsKICNlbmRpZgogICAgICAgICBhdHRyaWJ1dGUgW0pT
Q0N1c3RvbUdldHRlcl0gWE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3RvciBYTUxIdHRwUmVxdWVzdDsK
KyNpZiBkZWZpbmVkKEVOQUJMRV9XRUJfU09DS0VUUykgJiYgRU5BQkxFX1dFQl9TT0NLRVRTCisg
ICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyLEVuYWJsZWRBdFJ1bnRpbWVdIFdlYlNv
Y2tldENvbnN0cnVjdG9yIFdlYlNvY2tldDsgIC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0
b3IKKyNlbmRpZgogICAgIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44936</attachid>
            <date>2009-12-15 19:17:18 -0800</date>
            <delta_ts>2009-12-20 02:21:00 -0800</delta_ts>
            <desc>Add WebSocket feature in Worker</desc>
            <filename>bug-32214-20091216121715.patch</filename>
            <type>text/plain</type>
            <size>63595</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBkYTgyMjU5Li4xMzMxNzEyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTIt
MTUgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYlNvY2tldCBmZWF0dXJlIGlu
IFdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIyMTQKKworICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9zaW1w
bGVfd3NoLnB5OiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2ltcGxl
X3dzaC5weS4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29y
a2VyLXNpbXBsZS5qczogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMv
d29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90
ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMTMgIFJv
bGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9zaW1wbGVfd3NoLnB5IGIvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZV93c2gucHkKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwMjcxYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9zaW1wbGVfd3NoLnB5CkBAIC0w
LDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMg
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBk
aXN0cmlidXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisj
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisj
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGlt
cG9ydCBtc2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVl
c3QpOgorICAgIHBhc3MgIyBBbHdheXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5z
ZmVyX2RhdGEocmVxdWVzdCk6CisgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ0hl
bGxvIGZyb20gU2ltcGxlIFdTSC4nKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1zaW1wbGUuanMgYi9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXNpbXBsZS5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODI1YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1zaW1w
bGUuanMKQEAgLTAsMCArMSwzNyBAQAoraWYgKHNlbGYucG9zdE1lc3NhZ2UpCisgICAgcnVuVGVz
dHMoKTsKK2Vsc2UKKyAgICBvbmNvbm5lY3QgPSBoYW5kbGVDb25uZWN0KCk7CisKK2Z1bmN0aW9u
IGhhbmRsZUNvbm5lY3QoZXZldm50KQoreworICAgIC8vIEZvciBzaGFyZWQgd29ya2VycywgY3Jl
YXRlIGEgZmF1eCBwb3N0TWVzc2FnZSgpIEFQSSB0byBzZW5kIG1lc3NhZ2UgYmFjayB0byB0aGUg
cGFyZW50IHBhZ2UuCisgICAgc2VsZi5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7
IGV2ZW50LnBvcnRzWzBdLnBvc3RNZXNzYWdlKG1lc3NhZ2UpOyB9OworICAgIHJ1blRlc3RzKCk7
Cit9OworCitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdHJ5IHsKKyAgICAgICAgcG9zdE1l
c3NhZ2UoIlBBU1M6IHdvcmtlcjogaW5pdCIpOworICAgICAgICBpZiAoJ1dlYlNvY2tldCcgaW4g
c2VsZikKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiB3b3JrZXI6IFdlYlNvY2tldCBl
eGlzdHMiKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdv
cmtlcjogbm8gV2ViU29ja2V0Iik7CisgICAgICAgIHdzID0gbmV3IFdlYlNvY2tldCgnd3M6Ly9s
b2NhbGhvc3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvc2ltcGxlJyk7
CisgICAgICAgIHdzLm9ub3BlbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcG9zdE1lc3Nh
Z2UoIlBBU1M6IHdvcmtlcjogQ29ubmVjdGVkLiIpOworICAgICAgICB9OworICAgICAgICB3cy5v
bm1lc3NhZ2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNT
OiB3b3JrZXI6IFJlY2VpdmVkOiAnIiArIGV2dC5kYXRhICsgIiciKTsKKyAgICAgICAgfTsKKyAg
ICAgICAgd3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6IHdvcmtlcjogQ2xvc2VkLiIpOworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkRPTkUi
KTsKKyAgICAgICAgfTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJG
QUlMOiB3b3JrZXI6IFVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgZSk7CisgICAgfSBmaW5hbGx5
IHsKKyAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjogc3VjY2Vzc2Z1bGx5UGFyc2Vk
OiIgKyB3cyk7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vi
c29ja2V0L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1YTg0MgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsMTMgQEAKK1Rlc3QgZm9yIFdlYiBTb2NrZXQgaW4gV29ya2VyLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1M6IHdvcmtlcjogaW5pdAorUEFTUzogd29y
a2VyOiBXZWJTb2NrZXQgZXhpc3RzCitQQVNTOiB3b3JrZXI6IHN1Y2Nlc3NmdWxseVBhcnNlZDpb
b2JqZWN0IFdlYlNvY2tldF0KK1BBU1M6IHdvcmtlcjogQ29ubmVjdGVkLgorUEFTUzogd29ya2Vy
OiBSZWNlaXZlZDogJ0hlbGxvIGZyb20gU2ltcGxlIFdTSC4nCitQQVNTOiB3b3JrZXI6IENsb3Nl
ZC4KK0RPTkUKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmJjMjRlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy93b3JrZXItc2ltcGxlLmh0bWwKQEAgLTAsMCArMSwzNSBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+
Cis8aGVhZD48L2hlYWQ+Cis8Ym9keT4KKzxwPlRlc3QgZm9yIFdlYiBTb2NrZXQgaW4gV29ya2Vy
LjwvcD4KKzxwPjwvcD4KKzxwPk9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi48L3A+Cis8cHJlIGlk
PWxvZz4KKzwvcHJlPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkK
K3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuaW5uZXJIVE1MICs9IG1lc3Nh
Z2UgKyAiXG4iOworfQorCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBsb2coIlRFU1QgQ09N
UExFVEUiKTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cit2YXIgd29ya2VyID0gbmV3IFdv
cmtlcigncmVzb3VyY2VzL3dvcmtlci1zaW1wbGUuanMnKTsKK3dvcmtlci5vbm1lc3NhZ2UgPSBm
dW5jdGlvbiAoZXZ0KSB7CisgICAgbG9nKGV2dC5kYXRhKTsKKyAgICBpZiAoZXZ0LmRhdGEgPT0g
IkRPTkUiKQorICAgICAgICBlbmRUZXN0KCk7Cit9OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGU2YTJhNGIuLjMxYmMwMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTQgQEAKKzIwMDktMTItMTUgIEZ1bWl0b3No
aSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYlNvY2tldCBmZWF0dXJlIGluIFdvcmtlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIyMTQKKworICAg
ICAgICBJbnRyb2R1Y2UgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwgYW5kIGFkZAorICAgICAg
ICBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCBmb3IgV29ya2VyLgorICAgICAgICBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCB1c2VzIFdlYlNvY2tldENoYW5uZWwgaW4g
dGhlIG1haW4KKyAgICAgICAgdGhyZWFkLCB3aGljaCBpcyBtYW5hZ2VkIGJ5IE1haW5UaHJlYWRD
bGllbnQuCisgICAgICAgIEl0IHVzZXMgV29ya2VyVGhyZWFkUHJveHkgYW5kIE1haW5UaHJlYWRD
bGllbnQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbgorICAgICAgICB0aGUgd29ya2VyIHRocmVhZCBh
bmQgdGhlIG1haW4gdGhyZWFkLgorCisgICAgICAgIFRlc3Q6IHdlYnNvY2tldC90ZXN0cy93b3Jr
ZXJzL3dvcmtlci1zaW1wbGUuaHRtbAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0
cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6d2ViU29ja2V0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRUYXJn
ZXRUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5k
aW5nLmg6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpBQ0NFU1NPUl9SVU5USU1FX0VOQUJMRVIpOgorICAgICAgICAqIHBsYXRmb3JtL0Nyb3Nz
VGhyZWFkQ29waWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ojo6Y29weSk6CisgICAgICAgICog
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAg
ICAgICogd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIHdlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDogQWRkZWQu
CisgICAgICAgICogd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIuaDogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldDo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29j
a2V0Lmg6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmg6CisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpyZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRDaGFubmVsOjpkZXJlZlRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxD
bGllbnQuaDoKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oOgorICAg
ICAgICAqIHdlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsLmg6IEFkZGVkLgorICAgICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6CisKIDIw
MDktMTItMTMgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDk3ZjM3MjEuLjAxMWEz
ZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtMzM5NSw2ICszMzk1LDE1IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgXAogCVdlYkNvcmUvd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaAogCitpZiBFTkFCTEVfV09SS0VSUword2ViY29y
ZV9zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwuY3BwIFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwuaCBcCisJV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50V3JhcHBlci5oIFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuY3BwIFwKKwlXZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWwuaAorZW5kaWYKKwogd2ViY29yZWd0a19zb3VyY2VzICs9IFwKIAlXZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1FcnJvci5oIFwKIAlXZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9Tb2NrZXRTdHJlYW1IYW5kbGUuaCBcCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDI5NWI0
ZmQuLjMyYjQyOTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNv
cmUvV2ViQ29yZS5neXBpCkBAIC0zNTUwLDYgKzM1NTAsOSBAQAogICAgICAgICAgICAgJ3N2Zy9T
eW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9T
eW5jaHJvbml6YWJsZVByb3BlcnR5Q29udHJvbGxlci5oJywKICAgICAgICAgICAgICdzdmcvU3lu
Y2hyb25pemFibGVUeXBlV3JhcHBlci5oJywKKyAgICAgICAgICAgICd3ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9UaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oJywKKyAgICAgICAgICAgICd3ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oJywKICAgICAgICAgICAgICd3ZWJz
b2NrZXRzL1dlYlNvY2tldC5jcHAnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0
LmgnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5jcHAnLApAQCAt
MzU1Nyw2ICszNTYwLDggQEAKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5u
ZWxDbGllbnQuaCcsCiAgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2Uu
Y3BwJywKICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oJywKKyAg
ICAgICAgICAgICd3ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNw
cCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbC5oJywKICAgICAgICAgICAgICd3b3JrZXJzL0Fic3RyYWN0V29ya2VyLmNwcCcsCiAgICAg
ICAgICAgICAnd29ya2Vycy9BYnN0cmFjdFdvcmtlci5oJywKICAgICAgICAgICAgICd3b3JrZXJz
L0RlZGljYXRlZFdvcmtlckNvbnRleHQuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDE3OThjODQuLjg1MzVhNjQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAt
MzE5MSw2ICszMTkxLDEyIEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQv
U29ja2V0U3RyZWFtSGFuZGxlU291cC5jcHAgXAogICAgIGJpbmRpbmdzL2pzL0pTV2ViU29ja2V0
Q3VzdG9tLmNwcCBcCiAgICAgYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5jcHAK
KworY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dPUktFUlM9MSkgeworU09VUkNFUyArPSBcCisg
ICAgd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgXAorICAgIHdlYnNv
Y2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCit9CiB9CiAKICMgR0VO
RVJBVE9SIDE6IElETCBjb21waWxlcgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggZjdhM2Q3ZC4uYWJiMTA0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC00MzA0NSw2ICs0MzA0NSwxOCBAQAogCQkJTmFtZT0id2Vic29ja2V0cyINCiAJCQk+
DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNcVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwu
aCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4u
XHdlYnNvY2tldHNcVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJz
b2NrZXRzXFdlYlNvY2tldC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtNDMwNzIsNiAr
NDMwODQsMTQgQEAKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNcV2ViU29ja2V0SGFu
ZHNoYWtlLmgiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQ
YXRoPSIuLlx3ZWJzb2NrZXRzXFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdl
YnNvY2tldHNcV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCINCisJCQkJPg0KKwkJ
CTwvRmlsZT4NCiAJCTwvRmlsdGVyPg0KIAkJPEZpbGUNCiAJCQlSZWxhdGl2ZVBhdGg9Ii4uXGNv
bmZpZy5oIg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
NWFhMTkwNS4uNDAzMDlhMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTk2Myw2ICs5NjMsMTEgQEAKIAkJNTEwRDRBNEUxMDMxNzdBMjAwNDlFQTU0IC8q
IFdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwRDRBNDcxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWwu
Y3BwICovOyB9OwogCQk1MTBENEE0RjEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5l
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTEwRDRB
NDgxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWwuaCAqLzsgfTsKIAkJNTEwRDRB
NTAxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWxDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTQ5MTAzMTc3QTIwMDQ5
RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsQ2xpZW50LmggKi87IH07CisJCTUxMTIyNDcyMTBDRkI4
QzYwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyMjQ3MTEwQ0ZCOEM2MDA4MDk5
RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovOyB9OworCQk1MTEyMjQ3NDEw
Q0ZCOEQ4MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMTIyNDczMTBDRkI4RDgwMDgw
OTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oICovOyB9OworCQk1MTEyMjQ3NjEw
Q0ZCOEU4MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTEyMjQ3
NTEwQ0ZCOEU4MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFw
cGVyLmggKi87IH07CisJCTUxMTIyNDc4MTBDRkI4RjQwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTEyMjQ3NzEwQ0ZCOEY0MDA4MDk5RDcgLyogV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuY3BwICovOyB9OworCQk1MTEyMjQ3QTEwQ0ZCOEZGMDA4MDk5RDcg
LyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMTIyNDc5MTBDRkI4RkYwMDgwOTlENyAvKiBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oICovOyB9OwogCQk1MTE2RDk3NzBDRjE3
N0JEMDBDMkI4NEQgLyogRGF0YWJhc2VEZXRhaWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTE2RDk3NTBDRjE3N0JEMDBDMkI4NEQgLyogRGF0YWJh
c2VEZXRhaWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNTExRjIzMTcwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTMwREMx
NjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suY3BwICovOyB9OwogCQk1MTFGMjMxODBE
QzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExRjIzMTQwREMxNjBEQTAwNEYwMDMyIC8qIExv
Y2FsU3RvcmFnZVRhc2suaCAqLzsgfTsKQEAgLTYyNzgsNiArNjI4MywxMSBAQAogCQk1MTBENEE0
NzEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJTb2NrZXRDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTEwRDRBNDgxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENo
YW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU29ja2V0Q2hhbm5l
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEE0OTEwMzE3N0EyMDA0OUVB
NTQgLyogV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxMTIyNDcxMTBDRkI4QzYwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxMTIy
NDczMTBDRkI4RDgwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyMjQ3NTEwQ0ZCOEU4MDA4MDk5RDcg
LyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyMjQ3NzEwQ0ZCOEY0MDA4
MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyMjQ3OTEwQ0ZCOEZGMDA4
MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExNkQ5NzUwQ0YxNzdCRDAwQzJCODREIC8q
IERhdGFiYXNlRGV0YWlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRh
YmFzZURldGFpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRjIzMTMwREMx
NjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTG9jYWxTdG9yYWdlVGFzay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTUxMUYyMzE0MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExvY2FsU3RvcmFnZVRhc2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEwOTgxLDYgKzEwOTkxLDExIEBACiAJCTUx
OEEzNEJEMTAyNkM4MzEwMDFCNjg5NiAvKiB3ZWJzb2NrZXRzICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk1MTEyMjQ3OTEwQ0ZCOEZGMDA4MDk5RDcgLyog
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCAqLywKKwkJCQk1MTEyMjQ3NzEwQ0ZC
OEY0MDA4MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovLAor
CQkJCTUxMTIyNDc1MTBDRkI4RTgwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXIuaCAqLywKKwkJCQk1MTEyMjQ3MzEwQ0ZCOEQ4MDA4MDk5RDcgLyogVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCAqLywKKwkJCQk1MTEyMjQ3MTEwQ0ZCOEM2MDA4MDk5
RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovLAogCQkJCTUxOEEzNEJFMTAy
NkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuY3BwICovLAogCQkJCTUxOEEzNEJGMTAyNkM4MzEw
MDFCNjg5NiAvKiBXZWJTb2NrZXQuaCAqLywKIAkJCQk1MThBMzRDMDEwMjZDODMxMDAxQjY4OTYg
LyogV2ViU29ja2V0LmlkbCAqLywKQEAgLTE4MjY1LDYgKzE4MjgwLDkgQEAKIAkJCQlCQzU2Q0Iy
MzEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyQ2xpZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzU2Q0IyNDEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25FcnJv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NkNCMjUxMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xv
Y2F0aW9uUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMTIyNDc0MTBDRkI4RDgwMDgw
OTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTExMjI0NzYxMENGQjhFODAwODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50V3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTExMjI0N0ExMENGQjhGRjAwODA5OUQ3
IC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggaW4gSGVhZGVycyAqLywKIAkJ
CSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAg
LTIwNDIzLDYgKzIwNDQxLDggQEAKIAkJCQkwQzNGMUY1QTEwQzg4NzEyMDBENzJDRTEgLyogV2Vi
R0xVbmlmb3JtTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEM0NTM0MjcxMENEQkJG
QTAwODY5MTU3IC8qIEpTV2ViR0xVbmlmb3JtTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQkM1NkNCMjExMEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uQ29udHJvbGxlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk1MTEyMjQ3MjEwQ0ZCOEM2MDA4MDk5RDcgLyogVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTExMjI0NzgxMENGQjhG
NDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0
cnVjdG9yLmggYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuaApp
bmRleCAwNjk2NDdhLi44YTY3ZTcwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViU29ja2V0Q29uc3RydWN0b3IuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViU29j
a2V0Q29uc3RydWN0b3IuaApAQCAtMzEsNiArMzEsOCBAQAogI2lmbmRlZiBKU1dlYlNvY2tldENv
bnN0cnVjdG9yX2gKICNkZWZpbmUgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcl9oCiAKKyNpZiBFTkFC
TEUoV0VCX1NPQ0tFVFMpCisKICNpbmNsdWRlICJKU0RPTUJpbmRpbmcuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDcsNCArNDksNiBAQCBjbGFzcyBKU1dlYlNvY2tldENvbnN0cnVjdG9y
IDogcHVibGljIERPTUNvbnN0cnVjdG9yT2JqZWN0IHsKIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAorI2VuZGlmICAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKICNlbmRpZiAgLy8gSlNXZWJT
b2NrZXRDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29y
a2VyQ29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4
dEN1c3RvbS5jcHAKaW5kZXggNDkwZDliMS4uYWIyODY3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtMzIsOCArMzIsMTAgQEAKICNpbmNs
dWRlICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2lu
Y2x1ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2VDb25zdHJ1
Y3Rvci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oIgogI2luY2x1
ZGUgIkpTTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJKU1dlYlNvY2tldENvbnN0cnVjdG9yLmgi
CiAjaW5jbHVkZSAiSlNXb3JrZXJMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkpTV29ya2VyTmF2aWdh
dG9yLmgiCiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmgiCkBAIC00Mywx
MCArNDUsNiBAQAogI2luY2x1ZGUgIldvcmtlck5hdmlnYXRvci5oIgogI2luY2x1ZGUgPGludGVy
cHJldGVyL0ludGVycHJldGVyLmg+CiAKLSNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCi0jaW5jbHVk
ZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNl
IEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTMsNiArOTEsMTMgQEAgSlNWYWx1ZSBK
U1dvcmtlckNvbnRleHQ6OnhtbEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAg
ICByZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yPihl
eGVjLCB0aGlzKTsKIH0KIAorI2lmIEVOQUJMRShXRUJfU09DS0VUUykKK0pTVmFsdWUgSlNXb3Jr
ZXJDb250ZXh0Ojp3ZWJTb2NrZXQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVy
biBnZXRET01Db25zdHJ1Y3RvcjxKU1dlYlNvY2tldENvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsK
K30KKyNlbmRpZgorCiBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyhFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCFhcmdzLnNpemUo
KSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcAppbmRleCA0MTJmZGUwLi43ZTNjNTQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC0zMTksNiArMzE5LDEy
IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNv
bnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoCiAgICAgaWYgKG1wKQogICAgICAgICByZXR1cm4g
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgbXApOwogCisjaWYg
RU5BQkxFKFdFQl9TT0NLRVRTKQorICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gdGFyZ2V0LT50
b1dlYlNvY2tldCgpOworICAgIGlmICh3ZWJTb2NrZXQpCisgICAgICAgIHJldHVybiBjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgd2ViU29ja2V0KTsKKyNlbmRpZgor
CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZh
bHVlPigpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0
b21CaW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcu
aAppbmRleCBlM2NkNjU3Li41YmY5NDljIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEN1c3RvbUJpbmRpbmcuaApAQCAtNjQ5LDYgKzY0OSw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICAgICAgREVDTEFSRV9BQ0NFU1NPUl9S
VU5USU1FX0VOQUJMRVIoV29ya2VyQ29udGV4dFdlYmtpdE5vdGlmaWNhdGlvbnMpOwogI2VuZGlm
CisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorICAgICAgICBERUNMQVJFX0FDQ0VTU09SX1JVTlRJ
TUVfRU5BQkxFUihXb3JrZXJDb250ZXh0V2ViU29ja2V0KTsKKyNlbmRpZgogI2VuZGlmIC8vIEVO
QUJMRShXT1JLRVJTKQogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKaW5kZXggYjIwNjM1Yi4u
MGFmMzg4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2Nr
ZXRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0
Q3VzdG9tLmNwcApAQCAtOTIsMTQgKzkyLDkgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYlNvY2tl
dENvbnN0cnVjdG9yKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRW1wdHkgVVJMIiwgVjhQ
cm94eTo6U3ludGF4RXJyb3IpOwogCiAgICAgLy8gR2V0IHRoZSBzY3JpcHQgZXhlY3V0aW9uIGNv
bnRleHQuCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IDA7Ci0gICAgLy8g
VE9ETzogV29ya2VycwotICAgIGlmICghY29udGV4dCkgewotICAgICAgICBGcmFtZSogZnJhbWUg
PSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKLSAgICAgICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJXZWJTb2NrZXQgY29uc3Ry
dWN0b3IncyBhc3NvY2lhdGVkIGZyYW1lIGlzIG5vdCBhdmFpbGFibGUiLCBWOFByb3h5OjpSZWZl
cmVuY2VFcnJvcik7Ci0gICAgICAgIGNvbnRleHQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICB9
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KCJXZWJTb2NrZXQgY29uc3RydWN0b3IncyBhc3NvY2lhdGVkIGZyYW1lIGlzIG5vdCBhdmFpbGFi
bGUiLCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CiAKICAgICBjb25zdCBLVVJMJiB1cmwgPSBj
b250ZXh0LT5jb21wbGV0ZVVSTCh0b1dlYkNvcmVTdHJpbmcodXJsc3RyaW5nKSk7CiAKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5j
cHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3Bw
CmluZGV4IDliNjhhYzAuLjBjNTA2ZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2lu
Y2x1ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlY4
V29ya2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKICNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlv
blByb3h5LmgiCiAKQEAgLTUzLDYgKzU0LDEzIEBAIEFDQ0VTU09SX1JVTlRJTUVfRU5BQkxFUihX
b3JrZXJDb250ZXh0V2Via2l0Tm90aWZpY2F0aW9ucykKIH0KICNlbmRpZgogCisjaWYgRU5BQkxF
KFdFQl9TT0NLRVRTKQorQUNDRVNTT1JfUlVOVElNRV9FTkFCTEVSKFdvcmtlckNvbnRleHRXZWJT
b2NrZXQpCit7CisgICAgcmV0dXJuIFdlYlNvY2tldDo6aXNBdmFpbGFibGUoKTsKK30KKyNlbmRp
ZgorCiBBQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29udGV4dFNlbGYpCiB7CiAgICAgSU5DX1NUQVRT
KEwiRE9NLldvcmtlckNvbnRleHQuc2VsZi5fZ2V0Iik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJl
YWRDb3BpZXIuY3BwCmluZGV4IGQwMmRhNmMuLmMxOTc5YzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDcm9zc1Ro
cmVhZENvcGllci5oIgogCisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVx
dWVzdC5oIgpAQCAtMzksNiArNDAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitDcm9z
c1RocmVhZENvcGllckJhc2U8ZmFsc2UsIEtVUkw+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFz
ZTxmYWxzZSwgS1VSTD46OmNvcHkoY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiB1cmwu
Y29weSgpOworfQorCiBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz46OlR5cGUg
Q3Jvc3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBTdHJpbmc+Ojpjb3B5KGNvbnN0IFN0cmluZyYg
c3RyKQogewogICAgIHJldHVybiBzdHIuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Q3Jvc3NUaHJlYWRDb3BpZXIuaAppbmRleCAyYmRmNTdkLi41OTFhNTQ1IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9Dcm9zc1RocmVhZENvcGllci5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKICAgICBj
bGFzcyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKQEAgLTk0
LDYgKzk1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAgIH07CiAKKyAg
ICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIEtVUkw+IHsK
KyAgICAgICAgdHlwZWRlZiBLVVJMIFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29u
c3QgS1VSTCYpOworICAgIH07CisKICAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENv
cGllckJhc2U8ZmFsc2UsIFN0cmluZz4gewogICAgICAgICB0eXBlZGVmIFN0cmluZyBUeXBlOwog
ICAgICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1dlYkNvcmUv
d2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNzk4ZDFlNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
d2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTAsMCArMSw3NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
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
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNs
dWRlICJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAi
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgiCisjaW5jbHVkZSAiV2Vi
U29ja2V0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWxDbGllbnQuaCIKKyNp
bmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgorI2lu
Y2x1ZGUgIldvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyIHdlYlNvY2tldENoYW5uZWxNb2RlW10gPSAi
d2ViU29ja2V0Q2hhbm5lbE1vZGUiOworCitQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQoreworICAgIEFTU0VSVChjb250ZXh0
KTsKKyAgICBBU1NFUlQoY2xpZW50KTsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIGlmIChj
b250ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkgeworICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3Jr
ZXJDb250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOworICAgICAg
ICBXb3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPnJ1bkxv
b3AoKTsKKyAgICAgICAgU3RyaW5nIG1vZGUgPSB3ZWJTb2NrZXRDaGFubmVsTW9kZTsKKyAgICAg
ICAgbW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7
CisgICAgICAgIHJldHVybiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRl
KHdvcmtlckNvbnRleHQsIGNsaWVudCwgbW9kZSwgdXJsLCBwcm90b2NvbCk7CisgICAgfQorI2Vu
ZGlmICAvLyBFTkFCTEUoV09SS0VSUykKKworICAgIEFTU0VSVChjb250ZXh0LT5pc0RvY3VtZW50
KCkpOworICAgIHJldHVybiBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoY29udGV4dCwgY2xpZW50
LCB1cmwsIHByb3RvY29sKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9TT0NLRVRTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1Ro
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggYi9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43
NGVhNGI0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsX2gKKyNkZWZpbmUgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaAorCisj
aWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBLVVJMOworY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKK2NsYXNzIFN0cmluZzsKK2Ns
YXNzIFdlYlNvY2tldENoYW5uZWxDbGllbnQ7CisKK2NsYXNzIFRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2wpOworCisgICAgdmlydHVhbCB2b2lkIGNvbm5lY3QoKSA9IDA7CisgICAgdmly
dHVhbCBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKSA9IDA7CisgICAgdmlydHVhbCB1
bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjbG9zZSgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzY29ubmVjdCgpID0gMDsgLy8gV2ls
bCBzdXBwcmVzcyBkaWRDbG9zZSgpLgorCisgICAgdm9pZCByZWYoKSB7IHJlZlRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKCk7IH0KKyAgICB2b2lkIGRlcmVmKCkgeyBkZXJlZlRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKCk7IH0KKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlZlRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZXJlZlRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKCkgPSAwOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjZW5kaWYgLy8gVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1RocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjU2YmEzYjgKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dlYnNv
Y2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgKQEAgLTAsMCAr
MSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdo
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
CisgKi8KKworI2lmbmRlZiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXJf
aAorI2RlZmluZSBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXJfaAorCisj
aWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbENsaWVu
dC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Zy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0cmluZzsKKworY2xhc3MgVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyIDogcHVibGljIFRocmVhZFNhZmVT
aGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiB7CitwdWJsaWM6
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyPiBjcmVhdGUoV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXIoY2xpZW50KSk7CisgICAgfQorCisgICAgdm9pZCBjYWxsU3luY01ldGhvZCgpCisg
ICAgeworICAgICAgICBtX3N5bmNNZXRob2REb25lID0gZmFsc2U7CisgICAgfQorICAgIHZvaWQg
c2V0U3luY01ldGhvZERvbmUoKQorICAgIHsKKyAgICAgICAgbV9zeW5jTWV0aG9kRG9uZSA9IHRy
dWU7CisgICAgfQorCisgICAgYm9vbCBzeW5jTWV0aG9kRG9uZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9zeW5jTWV0aG9kRG9uZTsKKyAgICB9CisKKyAgICBib29sIHNlbnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fc2VudDsKKyAgICB9CisgICAgdm9pZCBzZXRT
ZW50KGJvb2wgc2VudCkKKyAgICB7CisgICAgICAgIG1fc2VudCA9IHNlbnQ7CisgICAgICAgIG1f
c3luY01ldGhvZERvbmUgPSB0cnVlOworICAgIH0KKworICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVy
ZWRBbW91bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnVmZmVyZWRBbW91bnQ7
CisgICAgfQorICAgIHZvaWQgc2V0QnVmZmVyZWRBbW91bnQodW5zaWduZWQgbG9uZyBidWZmZXJl
ZEFtb3VudCkKKyAgICB7CisgICAgICAgIG1fYnVmZmVyZWRBbW91bnQgPSBidWZmZXJlZEFtb3Vu
dDsKKyAgICAgICAgbV9zeW5jTWV0aG9kRG9uZSA9IHRydWU7CisgICAgfQorCisgICAgdm9pZCBj
bGVhckNsaWVudCgpCisgICAgeworICAgICAgICBtX2NsaWVudCA9IDA7CisgICAgfQorCisgICAg
dm9pZCBkaWRDb25uZWN0KCkKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAg
ICAgIG1fY2xpZW50LT5kaWRDb25uZWN0KCk7CisgICAgfQorCisgICAgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZykKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVudCkK
KyAgICAgICAgICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlTWVzc2FnZShtc2cpOworICAgIH0KKwor
ICAgIHZvaWQgZGlkQ2xvc2UoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAg
ICAgICAgbV9jbGllbnQtPmRpZENsb3NlKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKFdlYlNvY2tldENoYW5uZWxDbGll
bnQqIGNsaWVudCkKKyAgICAgICAgOiBtX2NsaWVudChjbGllbnQpCisgICAgICAgICwgbV9zeW5j
TWV0aG9kRG9uZShmYWxzZSkKKyAgICAgICAgLCBtX3NlbnQoZmFsc2UpCisgICAgICAgICwgbV9i
dWZmZXJlZEFtb3VudCgwKQorICAgIHsKKyAgICB9CisKKyAgICBXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50KiBtX2NsaWVudDsKKyAgICBib29sIG1fc3luY01ldGhvZERvbmU7CisgICAgYm9vbCBtX3Nl
bnQ7CisgICAgdW5zaWduZWQgbG9uZyBtX2J1ZmZlcmVkQW1vdW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQorCisjZW5kaWYg
Ly8gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyX2gKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldC5jcHAKaW5kZXggZWU3ODE3NC4uMzljMTVhYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tl
dC5jcHAKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAi
TWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0
Q2hhbm5lbC5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtMTI2LDcgKzEy
Nyw3IEBAIHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3Ry
aW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIG1fY2hhbm5lbCA9IFdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCksIHRoaXMsIG1fdXJsLCBtX3Byb3RvY29sKTsKKyAgICBtX2NoYW5uZWwgPSBUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwg
dGhpcywgbV91cmwsIG1fcHJvdG9jb2wpOwogICAgIG1fY2hhbm5lbC0+Y29ubmVjdCgpOwogfQog
CkBAIC0xOTIsNyArMTkzLDYgQEAgdm9pZCBXZWJTb2NrZXQ6OmRpZFJlY2VpdmVNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbXNnKQogICAgIGlmIChtX3N0YXRlICE9IE9QRU4gfHwgIXNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIFJlZlB0cjxNZXNzYWdlRXZlbnQ+
IGV2dCA9IE1lc3NhZ2VFdmVudDo6Y3JlYXRlKCk7Ci0gICAgLy8gRklYTUU6IG9yaWdpbiwgbGFz
dEV2ZW50SWQsIHNvdXJjZSwgbWVzc2FnZVBvcnQuCiAgICAgZXZ0LT5pbml0TWVzc2FnZUV2ZW50
KGV2ZW50TmFtZXMoKS5tZXNzYWdlRXZlbnQsIGZhbHNlLCBmYWxzZSwgU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjpjcmVhdGUobXNnKSwgIiIsICIiLCAwLCAwKTsKICAgICBkaXNwYXRjaEV2ZW50KGV2
dCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmggYi9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKaW5kZXggOWVjYmVkNy4uMThlMmIyNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCisrKyBiL1dlYkNvcmUvd2Vic29j
a2V0cy9XZWJTb2NrZXQuaApAQCAtNDYsNyArNDYsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgU3RyaW5nOwotICAgIGNsYXNzIFdlYlNvY2tldENoYW5uZWw7CisgICAgY2xh
c3MgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw7CiAKICAgICBjbGFzcyBXZWJTb2NrZXQgOiBw
dWJsaWMgUmVmQ291bnRlZDxXZWJTb2NrZXQ+LCBwdWJsaWMgRXZlbnRUYXJnZXQsIHB1YmxpYyBB
Y3RpdmVET01PYmplY3QsIHB1YmxpYyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50IHsKICAgICBwdWJs
aWM6CkBAIC04MywyMCArODMsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZp
cnR1YWwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNv
bnN0OwogCi0gICAgICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgICAgICAvLyAgdmlydHVhbCBi
b29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0OwotICAgICAgICAvLyB2aXJ0dWFsIHZvaWQg
Y29udGV4dERlc3Ryb3llZCgpOwotICAgICAgICAvLyB2aXJ0dWFsIGJvb2wgY2FuU3VzcGVuZCgp
IGNvbnN0OwotICAgICAgICAvLyB2aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOwotICAgICAgICAvLyB2
aXJ0dWFsIHZvaWQgcmVzdW1lKCk7Ci0gICAgICAgIC8vIHZpcnR1YWwgdm9pZCBzdG9wKCk7Ci0K
ICAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXQ+OjpyZWY7CiAgICAgICAgIHVzaW5n
IFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6ZGVyZWY7CiAKICAgICAgICAgLy8gV2ViU29ja2V0Q2hh
bm5lbENsaWVudAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29ubmVjdCgpOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtc2cpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKCk7CiAKICAgICBwcml2YXRlOgpAQCAtMTEx
LDcgKzEwMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBkaXNwYXRjaE1l
c3NhZ2VFdmVudChFdmVudCopOwogICAgICAgICB2b2lkIGRpc3BhdGNoQ2xvc2VFdmVudChFdmVu
dCopOwogCi0gICAgICAgIFJlZlB0cjxXZWJTb2NrZXRDaGFubmVsPiBtX2NoYW5uZWw7CisgICAg
ICAgIFJlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gbV9jaGFubmVsOwogCiAgICAg
ICAgIFN0YXRlIG1fc3RhdGU7CiAgICAgICAgIEtVUkwgbV91cmw7CkBAIC0xMTksOCArMTExLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRh
cmdldERhdGE7CiAgICAgfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmICAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9TT0NLRVRTKQogCi0jZW5kaWYgIC8vIFdlYlNvY2tldF9oCisjZW5kaWYgLy8g
V2ViU29ja2V0X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFu
bmVsLmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCmluZGV4IDE0YjFl
OGMuLjdlYzgyNmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFu
bmVsLmgKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaApAQCAtMzQs
NiArMzQsNyBAQAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIAogI2luY2x1ZGUgIlNvY2tldFN0
cmVhbUhhbmRsZUNsaWVudC5oIgorI2luY2x1ZGUgIlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
LmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0SGFuZHNoYWtlLmgiCiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KIApAQCAtNDUsMTYgKzQ2LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBj
bGFzcyBTb2NrZXRTdHJlYW1FcnJvcjsKICAgICBjbGFzcyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50
OwogCi0gICAgY2xhc3MgV2ViU29ja2V0Q2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlNv
Y2tldENoYW5uZWw+LCBwdWJsaWMgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50IHsKKyAgICBjbGFz
cyBXZWJTb2NrZXRDaGFubmVsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD4s
IHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQsIHB1YmxpYyBUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbCB7CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJT
b2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV2Vi
U29ja2V0Q2hhbm5lbENsaWVudCogY2xpZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2wpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJTb2NrZXRDaGFubmVsKGNvbnRl
eHQsIGNsaWVudCwgdXJsLCBwcm90b2NvbCkpOyB9CiAgICAgICAgIHZpcnR1YWwgfldlYlNvY2tl
dENoYW5uZWwoKTsKIAotICAgICAgICB2b2lkIGNvbm5lY3QoKTsKLSAgICAgICAgYm9vbCBzZW5k
KGNvbnN0IFN0cmluZyYgbXNnKTsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3Vu
dCgpIGNvbnN0OwotICAgICAgICB2b2lkIGNsb3NlKCk7Ci0gICAgICAgIHZvaWQgZGlzY29ubmVj
dCgpOyAvLyBXaWxsIHN1cHByZXNzIGRpZENsb3NlKCkuCisgICAgICAgIHZpcnR1YWwgdm9pZCBj
b25uZWN0KCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSk7CisgICAgICAgIHZpcnR1YWwgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCgpIGNvbnN0
OworICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRp
c2Nvbm5lY3QoKTsgLy8gV2lsbCBzdXBwcmVzcyBkaWRDbG9zZSgpLgogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRPcGVuKFNvY2tldFN0cmVhbUhhbmRsZSopOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkQ2xvc2UoU29ja2V0U3RyZWFtSGFuZGxlKik7CkBAIC02Myw4ICs2NCwxNSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSZWNlaXZlQXV0aGVudGlj
YXRpb25DaGFsbGVuZ2UoU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25D
aGFsbGVuZ2UmKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENhbmNlbEF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJik7CiAKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXRDaGFubmVsPjo6cmVm
OworICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+OjpkZXJlZjsKKwor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZlRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsKCkgeyByZWYoKTsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbCgpIHsgZGVyZWYoKTsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgV2ViU29ja2V0Q2hhbm5lbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU29ja2V0Q2hh
bm5lbENsaWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgV2ViU29j
a2V0Q2hhbm5lbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKIAogICAgICAgICBib29s
IGFwcGVuZFRvQnVmZmVyKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pOwogICAgICAgICB2b2lk
IHNraXBCdWZmZXIoaW50IGxlbik7CkBAIC03OCw4ICs4Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdW5zaWduZWQgbG9uZyBtX3VuaGFuZGxlZEJ1ZmZlclNpemU7CiAgICAgfTsK
IAotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2Vu
ZGlmICAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9TT0NLRVRT
KQogCi0jZW5kaWYgIC8vIFdlYlNvY2tldENoYW5uZWxfaAorI2VuZGlmIC8vIFdlYlNvY2tldENo
YW5uZWxfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxD
bGllbnQuaCBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50LmgKaW5k
ZXggNDYzY2FkYS4uMTYzMDcwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldENoYW5uZWxDbGllbnQuaAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hh
bm5lbENsaWVudC5oCkBAIC00Niw4ICs0Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgV2ViU29ja2V0Q2hhbm5lbENsaWVudCgpIHsgfQogICAgIH07CiAKLX0gIC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAgLy8gRU5BQkxFKFdF
Ql9TT0NLRVRTKQorI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VUUykKIAotI2VuZGlmICAvLyBX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50X2gKKyNlbmRpZiAvLyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaCBi
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaAppbmRleCBkNWRiZTY4Li5i
ZGEzMjBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtl
LmgKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oCkBAIC0xMDYs
OCArMTA2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgbV9zZXRDb29r
aWUyOwogICAgIH07CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQorI2VuZGlmIC8vIEVOQUJM
RShXRUJfU09DS0VUUykKIAotI2VuZGlmICAvLyBXZWJTb2NrZXRIYW5kc2hha2VfaAorI2VuZGlm
IC8vIFdlYlNvY2tldEhhbmRzaGFrZV9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMv
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4yN2RiYzkwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJz
b2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcApAQCAtMCwwICsxLDM0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
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
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpICYmIEVO
QUJMRShXT1JLRVJTKQorCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwuaCIKKworI2luY2x1ZGUgIkdlbmVyaWNXb3JrZXJUYXNrLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSAiVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgiCisjaW5jbHVkZSAi
V2ViU29ja2V0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWxDbGllbnQuaCIK
KyNpbmNsdWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyTG9hZGVyUHJveHku
aCIKKyNpbmNsdWRlICJXb3JrZXJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV29ya2VyVGhyZWFkLmgi
CisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbChXb3JrZXJDb250ZXh0KiBjb250ZXh0LCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50
KiBjbGllbnQsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3Qg
U3RyaW5nJiBwcm90b2NvbCkKKyAgICA6IG1fd29ya2VyQ29udGV4dChjb250ZXh0KQorICAgICwg
bV93b3JrZXJDbGllbnRXcmFwcGVyKFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcjo6Y3JlYXRlKGNsaWVudCkpCisgICAgLCBtX3Byb3h5KCoobmV3IFdvcmtlclRocmVhZFBy
b3h5KG1fd29ya2VyQ2xpZW50V3JhcHBlciwgbV93b3JrZXJDb250ZXh0LCB0YXNrTW9kZSwgdXJs
LCBwcm90b2NvbCkpKQoreworfQorCitXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6
fldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKCkKK3sKKyAgICBtX3Byb3h5LmRpc2Nv
bm5lY3QoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y29u
bmVjdCgpCit7CisgICAgbV9wcm94eS5jb25uZWN0KCk7Cit9CisKK2Jvb2wgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAg
IHJldHVybiBtX3Byb3h5LnNlbmQobWVzc2FnZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OmJ1ZmZlcmVkQW1vdW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcm94eS5idWZmZXJlZEFtb3VudCgpOworfQorCit2b2lkIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpjbG9zZSgpCit7CisgICAgbV9wcm94eS5jbG9zZSgpOwor
fQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpkaXNjb25uZWN0KCkK
K3sKKyAgICBtX3Byb3h5LmRpc2Nvbm5lY3QoKTsKK30KKworV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6Ok1haW5UaHJlYWRDbGllbnQ6Ok1haW5UaHJlYWRDbGllbnQoUmVmUHRyPFRo
cmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+
IGNsaWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQcm94eSwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQorICAgIDogbV93b3JrZXJDbGllbnRXcmFw
cGVyKGNsaWVudFdyYXBwZXIpCisgICAgLCBtX2xvYWRlclByb3h5KGxvYWRlclByb3h5KQorICAg
ICwgbV9tYWluV2ViU29ja2V0Q2hhbm5lbChXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoY29udGV4
dCwgdGhpcywgdXJsLCBwcm90b2NvbCkpCisgICAgLCBtX3Rhc2tNb2RlKHRhc2tNb2RlKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKK1dvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjpNYWluVGhyZWFkQ2xpZW50Ojp+TWFpblRocmVhZENsaWVudCgpCit7CisgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9tYWluV2ViU29ja2V0Q2hhbm5lbCkK
KyAgICAgICAgbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+ZGlzY29ubmVjdCgpOworfQorCit2b2lk
IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFkQ2xpZW50Ojpjb25u
ZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9tYWluV2Vi
U29ja2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWFpbldlYlNvY2tldENoYW5u
ZWwtPmNvbm5lY3QoKTsKK30KKworc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZFNlbmQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IHdvcmtlckNsaWVudFdyYXBw
ZXIsIGJvb2wgc2VudCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlz
V29ya2VyQ29udGV4dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKS0+c2V0U2VudChz
ZW50KTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6TWFpblRo
cmVhZENsaWVudDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwgfHwgIW1fd29y
a2VyQ2xpZW50V3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgc2VudCA9IG1fbWFp
bldlYlNvY2tldENoYW5uZWwtPnNlbmQobWVzc2FnZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0
VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250
ZXh0RGlkU2VuZCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBzZW50KSwgbV90YXNrTW9kZSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRHZXRCdWZmZXJlZEFtb3VudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+ID4gd29ya2VyQ2xpZW50V3JhcHBlciwg
dW5zaWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRl
eHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdl
dCgpKS0+c2V0QnVmZmVyZWRBbW91bnQoYnVmZmVyZWRBbW91bnQpOworfQorCit2b2lkIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFkQ2xpZW50OjpidWZmZXJlZEFt
b3VudCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbWFpbldl
YlNvY2tldENoYW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICAgICAgcmV0dXJu
OworICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQgPSBtX21haW5XZWJTb2NrZXRDaGFu
bmVsLT5idWZmZXJlZEFtb3VudCgpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2Rl
VG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZEdldEJ1
ZmZlcmVkQW1vdW50LCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGJ1ZmZlcmVkQW1vdW50KSwgbV90
YXNrTW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Ok1h
aW5UaHJlYWRDbGllbnQ6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
bWFpbldlYlNvY2tldENoYW5uZWwtPmNsb3NlKCk7CisgICAgbV9tYWluV2ViU29ja2V0Q2hhbm5l
bCA9IDA7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Ok1haW5U
aHJlYWRDbGllbnQ6OmRpc2Nvbm5lY3QoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsKQorICAgICAgICByZXR1cm47CisgICAg
bV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+ZGlzY29ubmVjdCgpOworICAgIG1fbWFpbldlYlNvY2tl
dENoYW5uZWwgPSAwOworfQorCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkQ29ubmVjdChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+ID4gd29ya2VyQ2xpZW50V3Jh
cHBlcikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29u
dGV4dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKS0+ZGlkQ29ubmVjdCgpOworfQor
Cit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFkQ2xpZW50
OjpkaWRDb25uZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fbG9h
ZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFz
aygmd29ya2VyQ29udGV4dERpZENvbm5lY3QsIG1fd29ya2VyQ2xpZW50V3JhcHBlciksIG1fdGFz
a01vZGUpOworfQorCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZU1lc3NhZ2Uo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IHdvcmtlckNsaWVudFdy
YXBwZXIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRl
eHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdl
dCgpKS0+ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6Ok1haW5UaHJlYWRDbGllbnQ6OmRpZFJlY2VpdmVNZXNzYWdl
KGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwor
ICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNh
bGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVNZXNzYWdlLCBtX3dvcmtlckNsaWVu
dFdyYXBwZXIsIG1lc3NhZ2UpLCBtX3Rhc2tNb2RlKTsKK30KKworc3RhdGljIHZvaWQgd29ya2Vy
Q29udGV4dERpZENsb3NlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxU
aHJlYWRTYWZlU2hhcmVkPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4g
PiB3b3JrZXJDbGllbnRXcmFwcGVyKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29u
dGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIHN0YXRpY19jYXN0PFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcio+KHdvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpLT5k
aWRDbG9zZSgpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpN
YWluVGhyZWFkQ2xpZW50OjpkaWRDbG9zZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVh
dGVDYWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRDbG9zZSwgbV93b3JrZXJDbGllbnRXcmFw
cGVyKSwgbV90YXNrTW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OldvcmtlclRocmVhZFByb3h5OjpzZXRXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQqIGNvbnRleHQsIFdvcmtlclRocmVhZFByb3h5KiB0aGlzUHRyLCBSZWZQdHI8
VGhyZWFkU2FmZVNoYXJlZDxNYWluVGhyZWFkQ2xpZW50PiA+IG1haW5UaHJlYWRDbGllbnQsIFJl
ZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcj4gPiB3b3JrZXJDbGllbnRXcmFwcGVyKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4
dCwgY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIHRoaXNQdHItPm1fbWFpblRocmVh
ZENsaWVudCA9IG1haW5UaHJlYWRDbGllbnQ7CisgICAgc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKj4od29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSkt
PnNldFN5bmNNZXRob2REb25lKCk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5OjptYWluVGhyZWFkQ3JlYXRlV2ViU29ja2V0Q2hh
bm5lbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXb3JrZXJUaHJlYWRQcm94eSog
dGhpc1B0ciwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWxDbGllbnRXcmFwcGVyPiA+IGNsaWVudFdyYXBwZXIsIGNvbnN0IFN0cmluZyYgdGFza01vZGUs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNE
b2N1bWVudCgpKTsKKworICAgIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJlYWRDbGll
bnQ+ID4gbWFpblRocmVhZENsaWVudCA9IE1haW5UaHJlYWRDbGllbnQ6OmNyZWF0ZShjbGllbnRX
cmFwcGVyLCB0aGlzUHRyLT5tX2xvYWRlclByb3h5LCBjb250ZXh0LCB0YXNrTW9kZSwgdXJsLCBw
cm90b2NvbCk7CisgICAgdGhpc1B0ci0+bV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dv
cmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRQcm94eTo6c2V0V2Vi
U29ja2V0Q2hhbm5lbCwgdGhpc1B0ciwgbWFpblRocmVhZENsaWVudCwgY2xpZW50V3JhcHBlciks
IHRhc2tNb2RlKTsKK30KKworV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Oldvcmtl
clRocmVhZFByb3h5OjpXb3JrZXJUaHJlYWRQcm94eShQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgUGFzc1JlZlB0
cjxXb3JrZXJDb250ZXh0PiB3b3JrZXJDb250ZXh0LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCisgICAgOiBtX3dvcmtlckNs
aWVudFdyYXBwZXIod29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICAsIG1fd29ya2VyQ29udGV4dCh3
b3JrZXJDb250ZXh0KQorICAgICwgbV9sb2FkZXJQcm94eShtX3dvcmtlckNvbnRleHQtPnRocmVh
ZCgpLT53b3JrZXJMb2FkZXJQcm94eSgpKQorICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkKK3sK
KyAgICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIEFTU0VSVChtX3dv
cmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOworICAgIEFTU0VSVCghbV9tYWluVGhyZWFkQ2xpZW50
LmdldCgpKTsKKyAgICBjYWxsU3luY01ldGhvZCgpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRh
c2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZFByb3h5OjptYWluVGhy
ZWFkQ3JlYXRlV2ViU29ja2V0Q2hhbm5lbCwgdGhpcywgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBt
X3Rhc2tNb2RlLCB1cmwsIHByb3RvY29sKSk7CisgICAgd2FpdFN5bmNNZXRob2QoKTsKKyAgICBB
U1NFUlQobV9tYWluVGhyZWFkQ2xpZW50LmdldCgpKTsKK30KKworV29ya2VyVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5Ojp+V29ya2VyVGhyZWFkUHJveHkoKQor
eworICAgIGRpc2Nvbm5lY3QoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6bWFpblRocmVhZENvbm5lY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8TWFpblRocmVhZENsaWVudD4gPiBtYWluVGhyZWFk
Q2xpZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUX1VOVVNF
RChjb250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworCisgICAgc3RhdGljX2Nhc3Q8TWFp
blRocmVhZENsaWVudCo+KG1haW5UaHJlYWRDbGllbnQuZ2V0KCkpLT5jb25uZWN0KCk7Cit9CisK
K3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5
Ojpjb25uZWN0KCkKK3sKKyAgICBBU1NFUlQobV93b3JrZXJDbGllbnRXcmFwcGVyKTsKKyAgICBB
U1NFUlQobV9tYWluVGhyZWFkQ2xpZW50KTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9M
b2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bDo6bWFpblRocmVhZENvbm5lY3QsIG1fbWFpblRocmVhZENsaWVudCkpOworfQorCit2b2lkIFdv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkU2VuZChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxNYWluVGhyZWFk
Q2xpZW50PiA+IG1haW5UaHJlYWRDbGllbnQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29u
dGV4dC0+aXNEb2N1bWVudCgpKTsKKworICAgIHN0YXRpY19jYXN0PE1haW5UaHJlYWRDbGllbnQq
PihtYWluVGhyZWFkQ2xpZW50LmdldCgpKS0+c2VuZChtZXNzYWdlKTsKK30KKworYm9vbCBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6V29ya2VyVGhyZWFkUHJveHk6OnNlbmQoY29u
c3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKG1fbWFpblRocmVhZENsaWVudCk7Cisg
ICAgY2FsbFN5bmNNZXRob2QoKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIo
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFp
blRocmVhZFNlbmQsIG1fbWFpblRocmVhZENsaWVudCwgbWVzc2FnZSkpOworICAgIHdhaXRTeW5j
TWV0aG9kKCk7CisgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKiBj
bGllbnRXcmFwcGVyID0gc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGll
bnRXcmFwcGVyKj4obV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKTsKKyAgICByZXR1cm4gY2xp
ZW50V3JhcHBlciAmJiBjbGllbnRXcmFwcGVyLT5zZW50KCk7Cit9CisKK3ZvaWQgV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRCdWZmZXJlZEFtb3VudChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxNYWluVGhy
ZWFkQ2xpZW50PiA+IG1haW5UaHJlYWRDbGllbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7
CisKKyAgICBzdGF0aWNfY2FzdDxNYWluVGhyZWFkQ2xpZW50Kj4obWFpblRocmVhZENsaWVudC5n
ZXQoKSktPmJ1ZmZlcmVkQW1vdW50KCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5OjpidWZmZXJlZEFtb3VudCgp
Cit7CisgICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgICAgIHJldHVybiAwOwor
ICAgIEFTU0VSVChtX21haW5UaHJlYWRDbGllbnQpOworICAgIGNhbGxTeW5jTWV0aG9kKCk7Cisg
ICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRCdWZmZXJlZEFtb3VudCwg
bV9tYWluVGhyZWFkQ2xpZW50KSk7CisgICAgd2FpdFN5bmNNZXRob2QoKTsKKyAgICBUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNf
Y2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNs
aWVudFdyYXBwZXIuZ2V0KCkpOworICAgIGlmIChjbGllbnRXcmFwcGVyKQorICAgICAgICByZXR1
cm4gY2xpZW50V3JhcHBlci0+YnVmZmVyZWRBbW91bnQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
dm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZENsb3NlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1h
aW5UaHJlYWRDbGllbnQ+ID4gbWFpblRocmVhZENsaWVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1bWVu
dCgpKTsKKworICAgIHN0YXRpY19jYXN0PE1haW5UaHJlYWRDbGllbnQqPihtYWluVGhyZWFkQ2xp
ZW50LmdldCgpKS0+Y2xvc2UoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDo6V29ya2VyVGhyZWFkUHJveHk6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQobV9tYWlu
VGhyZWFkQ2xpZW50KTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRl
Q2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVh
ZENsb3NlLCBtX21haW5UaHJlYWRDbGllbnQpKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZERlc3Ryb3koU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8TWFpblRocmVhZENsaWVudD4gPiBt
YWluVGhyZWFkQ2xpZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNT
RVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworCisgICAgbWFpblRo
cmVhZENsaWVudC5jbGVhcigpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpXb3JrZXJUaHJlYWRQcm94eTo6ZGlzY29ubmVjdCgpCit7CisgICAgY2xlYXJDbGll
bnRXcmFwcGVyKCk7CisgICAgaWYgKG1fbWFpblRocmVhZENsaWVudCkgeworICAgICAgICBUaHJl
YWRTYWZlU2hhcmVkPE1haW5UaHJlYWRDbGllbnQ+KiBtYWluVGhyZWFkQ2xpZW50ID0gbV9tYWlu
VGhyZWFkQ2xpZW50LnJlbGVhc2UoKS5yZWxlYXNlUmVmKCk7CisgICAgICAgIG1fbG9hZGVyUHJv
eHkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJm1haW5UaHJlYWREZXN0cm95
LCBtYWluVGhyZWFkQ2xpZW50KSk7CisgICAgfQorfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRQcm94eTo6Y2xlYXJDbGllbnRXcmFwcGVyKCkK
K3sKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXIqPihtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpLT5jbGVhckNsaWVudCgpOworfQorCit2
b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRQcm94eTo6
Y2FsbFN5bmNNZXRob2QoKQoreworICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIpOwor
ICAgIHN0YXRpY19jYXN0PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcio+
KG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSktPmNhbGxTeW5jTWV0aG9kKCk7Cit9CisKK3Zv
aWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5Ojp3
YWl0U3luY01ldGhvZCgpCit7CisgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IG1fd29ya2Vy
Q29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKTsKKyAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0
IHJlc3VsdCA9IE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDsKKyAgICBUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdy
YXBwZXIuZ2V0KCkpOworICAgIHdoaWxlIChjbGllbnRXcmFwcGVyICYmICFjbGllbnRXcmFwcGVy
LT5zeW5jTWV0aG9kRG9uZSgpICYmIHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7
CisgICAgICAgIHJlc3VsdCA9IHJ1bkxvb3AucnVuSW5Nb2RlKG1fd29ya2VyQ29udGV4dC5nZXQo
KSwgbV90YXNrTW9kZSk7CisgICAgICAgIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdyYXBw
ZXIuZ2V0KCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9TT0NLRVRTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi40MmRmNjRlCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRz
L1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKQEAgLTAsMCArMSwxNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
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
bmRlZiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCisjZGVmaW5lIFdvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsX2gKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykgJiYg
RU5BQkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5l
bENsaWVudC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1VSTDsKK2NsYXNzIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXI7CitjbGFzcyBXb3JrZXJDb250ZXh0OworY2xhc3MgV29ya2VyTG9hZGVyUHJv
eHk7CitjbGFzcyBXb3JrZXJSdW5Mb29wOworCitjbGFzcyBXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsPiwgcHVibGljIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFdv
cmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVu
dCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbCh3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCB1
cmwsIHByb3RvY29sKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdCgpOworICAgIHZpcnR1
YWwgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCB1bnNpZ25l
ZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7
CisgICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3QoKTsgLy8gV2lsbCBzdXBwcmVzcyBkaWRDbG9z
ZSgpLgorCisgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbD46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsPjo6ZGVyZWY7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVmVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRl
cmVmVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoKSB7IGRlcmVmKCk7IH0KKworcHJpdmF0ZToK
KyAgICAvLyBNYW5hZ2VzIGEgc29ja2V0IGhhbmRsZSBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAg
Y2xhc3MgTWFpblRocmVhZENsaWVudCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJl
YWRDbGllbnQ+LCBwdWJsaWMgV2ViU29ja2V0Q2hhbm5lbENsaWVudCB7CisgICAgcHVibGljOgor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNYWluVGhyZWFkQ2xpZW50PiBjcmVhdGUoUmVmUHRy
PFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
PiA+IGNsaWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQcm94eSwgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IE1haW5UaHJlYWRDbGllbnQoY2xpZW50V3JhcHBlciwgbG9h
ZGVyUHJveHksIGNvbnRleHQsIHRhc2tNb2RlLCB1cmwsIHByb3RvY29sKSk7CisgICAgICAgIH0K
KyAgICAgICAgfk1haW5UaHJlYWRDbGllbnQoKTsKKworICAgICAgICB2b2lkIGNvbm5lY3QoKTsK
KyAgICAgICAgdm9pZCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZvaWQg
YnVmZmVyZWRBbW91bnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworICAgICAgICB2b2lkIGRp
c2Nvbm5lY3QoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29ubmVjdCgpOworICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBNYWluVGhyZWFkQ2xpZW50KFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiwgV29ya2VyTG9hZGVyUHJveHkmLCBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2wpOworCisgICAgICAgIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVk
PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiBtX3dvcmtlckNsaWVu
dFdyYXBwZXI7CisKKyAgICAgICAgV29ya2VyTG9hZGVyUHJveHkmIG1fbG9hZGVyUHJveHk7CisK
KyAgICAgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBtX21haW5XZWJTb2Nr
ZXRDaGFubmVsOworCisgICAgICAgIFN0cmluZyBtX3Rhc2tNb2RlOworICAgIH07CisKKyAgICAv
KiBQcm94eSBmb3IgTWFpblRocmVhZENsaWVudC4gIFJ1bm5pbmcgb24gdGhlIHdvcmtlciB0aHJl
YWQuICovCisgICAgY2xhc3MgV29ya2VyVGhyZWFkUHJveHkgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgV29ya2VyVGhyZWFkUHJveHkoUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI+LCBQYXNzUmVmUHRyPFdvcmtlckNvbnRleHQ+LCBjb25zdCBTdHJpbmcm
IHRhc2tNb2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CisgICAgICAg
IH5Xb3JrZXJUaHJlYWRQcm94eSgpOworICAgICAgICB2b2lkIGNvbm5lY3QoKTsKKyAgICAgICAg
Ym9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcg
YnVmZmVyZWRBbW91bnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworICAgICAgICB2b2lkIGRp
c2Nvbm5lY3QoKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFdlYlNv
Y2tldENoYW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV29ya2VyVGhyZWFk
UHJveHkqIHRoaXNQdHIsIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJlYWRDbGllbnQ+
ID4gbWFpblRocmVhZENsaWVudCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IHdvcmtlckNsaWVudFdyYXBwZXIpOworCisg
ICAgICAgIC8vIEV4ZWN1dGVkIG9uIHRoZSBtYWluIHRocmVhZCB0byBjcmVhdGUgTWFpblRocmVh
ZENsaWVudC4KKyAgICAgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZENyZWF0ZVdlYlNvY2tldENo
YW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgV29ya2VyVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5KiB0aGlzUHRyLCBSZWZQdHI8VGhyZWFk
U2FmZVNoYXJlZDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+ID4gY2xp
ZW50V3JhcHBlciwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sKTsKKworICAgICAgICAvLyBFeGVjdXRlZCBvbiB0aGUgd29ya2Vy
IGNvbnRleHQncyB0aHJlYWQuCisgICAgICAgIHZvaWQgY2xlYXJDbGllbnRXcmFwcGVyKCk7CisK
KyAgICAgICAgdm9pZCBjYWxsU3luY01ldGhvZCgpOworICAgICAgICB2b2lkIHdhaXRTeW5jTWV0
aG9kKCk7CisKKyAgICAgICAgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IG1fd29ya2VyQ2xpZW50V3JhcHBlcjsKKworICAg
ICAgICBSZWZQdHI8V29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0OworCisgICAgICAgIFdv
cmtlckxvYWRlclByb3h5JiBtX2xvYWRlclByb3h5OworCisgICAgICAgIFN0cmluZyBtX3Rhc2tN
b2RlOworCisgICAgICAgIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJlYWRDbGllbnQ+
ID4gbV9tYWluVGhyZWFkQ2xpZW50OworICAgIH07CisKKyAgICBXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbChXb3JrZXJDb250ZXh0KiwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCosIGNv
bnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29s
KTsKKworICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDb25uZWN0KFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxNYWluVGhyZWFkQ2xpZW50PiA+KTsKKyAg
ICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkU2VuZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUmVm
UHRyPFRocmVhZFNhZmVTaGFyZWQ8TWFpblRocmVhZENsaWVudD4gPiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQnVmZmVyZWRBbW91bnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJlYWRDbGll
bnQ+ID4pOworICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWRDbG9zZShTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8TWFpblRocmVhZENsaWVudD4gPik7Cisg
ICAgc3RhdGljIHZvaWQgbWFpblRocmVhZERlc3Ryb3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJlYWRDbGllbnQ+ID4pOworCisgICAgUmVm
UHRyPFdvcmtlckNvbnRleHQ+IG1fd29ya2VyQ29udGV4dDsKKyAgICBSZWZQdHI8VGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7Cisg
ICAgV29ya2VyVGhyZWFkUHJveHkmIG1fcHJveHk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAvLyBXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMv
V29ya2VyQ29udGV4dC5pZGwgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKaW5k
ZXggMGE1ODE3Yy4uNjE0ODA5MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNv
bnRleHQuaWRsCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbApAQCAtODYs
NiArODYsOSBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9t
R2V0dGVyXSBFdmVudFNvdXJjZUNvbnN0cnVjdG9yIEV2ZW50U291cmNlOwogI2VuZGlmCiAgICAg
ICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9y
IFhNTEh0dHBSZXF1ZXN0OworI2lmIGRlZmluZWQoRU5BQkxFX1dFQl9TT0NLRVRTKSAmJiBFTkFC
TEVfV0VCX1NPQ0tFVFMKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsRW5hYmxl
ZEF0UnVudGltZV0gV2ViU29ja2V0Q29uc3RydWN0b3IgV2ViU29ja2V0OyAvLyBVc2FibGUgd2l0
aCB0aGUgbmV3IG9wZXJhdG9yCisjZW5kaWYKICAgICB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45264</attachid>
            <date>2009-12-20 02:21:07 -0800</date>
            <delta_ts>2010-01-04 23:51:17 -0800</delta_ts>
            <desc>Add WebSocket feature in Worker</desc>
            <filename>bug-32214-20091220192104.patch</filename>
            <type>text/plain</type>
            <size>63972</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1YjNiZjRkLi4xZDRiODhhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTIt
MjAgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYlNvY2tldCBmZWF0dXJlIGlu
IFdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIyMTQKKworICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9zaW1w
bGVfd3NoLnB5OiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2ltcGxl
X3dzaC5weS4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29y
a2VyLXNpbXBsZS5qczogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMv
d29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90
ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUuaHRtbDogQWRkZWQuCisKIDIwMDktMTItMTkgIEFk
YW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBObyByZXZpZXcsIHJvbGxp
bmcgb3V0IHI1MjM5OS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93
b3JrZXJzL3Jlc291cmNlcy9zaW1wbGVfd3NoLnB5IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rl
c3RzL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZV93c2gucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uZmMwMjcxYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9zaW1wbGVfd3NoLnB5CkBAIC0wLDAgKzEs
MzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmli
dXRpb24uCisjICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworIyAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisjIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK2Zyb20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBt
c2d1dGlsCisKKworZGVmIHdlYl9zb2NrZXRfZG9fZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgor
ICAgIHBhc3MgIyBBbHdheXMgYWNjZXB0LgorCisKK2RlZiB3ZWJfc29ja2V0X3RyYW5zZmVyX2Rh
dGEocmVxdWVzdCk6CisgICAgbXNndXRpbC5zZW5kX21lc3NhZ2UocmVxdWVzdCwgJ0hlbGxvIGZy
b20gU2ltcGxlIFdTSC4nKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1zaW1wbGUuanMgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXNpbXBsZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODI1YjQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3dvcmtlci1zaW1wbGUuanMK
QEAgLTAsMCArMSwzNyBAQAoraWYgKHNlbGYucG9zdE1lc3NhZ2UpCisgICAgcnVuVGVzdHMoKTsK
K2Vsc2UKKyAgICBvbmNvbm5lY3QgPSBoYW5kbGVDb25uZWN0KCk7CisKK2Z1bmN0aW9uIGhhbmRs
ZUNvbm5lY3QoZXZldm50KQoreworICAgIC8vIEZvciBzaGFyZWQgd29ya2VycywgY3JlYXRlIGEg
ZmF1eCBwb3N0TWVzc2FnZSgpIEFQSSB0byBzZW5kIG1lc3NhZ2UgYmFjayB0byB0aGUgcGFyZW50
IHBhZ2UuCisgICAgc2VsZi5wb3N0TWVzc2FnZSA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7IGV2ZW50
LnBvcnRzWzBdLnBvc3RNZXNzYWdlKG1lc3NhZ2UpOyB9OworICAgIHJ1blRlc3RzKCk7Cit9Owor
CitmdW5jdGlvbiBydW5UZXN0cygpCit7CisgICAgdHJ5IHsKKyAgICAgICAgcG9zdE1lc3NhZ2Uo
IlBBU1M6IHdvcmtlcjogaW5pdCIpOworICAgICAgICBpZiAoJ1dlYlNvY2tldCcgaW4gc2VsZikK
KyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiB3b3JrZXI6IFdlYlNvY2tldCBleGlzdHMi
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjog
bm8gV2ViU29ja2V0Iik7CisgICAgICAgIHdzID0gbmV3IFdlYlNvY2tldCgnd3M6Ly9sb2NhbGhv
c3Q6ODg4MC93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvc2ltcGxlJyk7CisgICAg
ICAgIHdzLm9ub3BlbiA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBB
U1M6IHdvcmtlcjogQ29ubmVjdGVkLiIpOworICAgICAgICB9OworICAgICAgICB3cy5vbm1lc3Nh
Z2UgPSBmdW5jdGlvbihldnQpIHsKKyAgICAgICAgICAgIHBvc3RNZXNzYWdlKCJQQVNTOiB3b3Jr
ZXI6IFJlY2VpdmVkOiAnIiArIGV2dC5kYXRhICsgIiciKTsKKyAgICAgICAgfTsKKyAgICAgICAg
d3Mub25jbG9zZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6
IHdvcmtlcjogQ2xvc2VkLiIpOworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIkRPTkUiKTsKKyAg
ICAgICAgfTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHBvc3RNZXNzYWdlKCJGQUlMOiB3
b3JrZXI6IFVuZXhwZWN0ZWQgZXhjZXB0aW9uOiAiICsgZSk7CisgICAgfSBmaW5hbGx5IHsKKyAg
ICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjogc3VjY2Vzc2Z1bGx5UGFyc2VkOiIgKyB3
cyk7CisgICAgfQorfTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy93
b3JrZXJzL3dvcmtlci1zaW1wbGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1YTg0MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUtZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTMgQEAKK1Rlc3QgZm9yIFdlYiBTb2NrZXQgaW4gV29ya2VyLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKK1BBU1M6IHdvcmtlcjogaW5pdAorUEFTUzogd29ya2VyOiBX
ZWJTb2NrZXQgZXhpc3RzCitQQVNTOiB3b3JrZXI6IHN1Y2Nlc3NmdWxseVBhcnNlZDpbb2JqZWN0
IFdlYlNvY2tldF0KK1BBU1M6IHdvcmtlcjogQ29ubmVjdGVkLgorUEFTUzogd29ya2VyOiBSZWNl
aXZlZDogJ0hlbGxvIGZyb20gU2ltcGxlIFdTSC4nCitQQVNTOiB3b3JrZXI6IENsb3NlZC4KK0RP
TkUKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rl
c3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS5odG1sIGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rl
c3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmJjMjRlNzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvd29ya2Vycy93b3JrZXItc2ltcGxlLmh0bWwKQEAgLTAsMCArMSwzNSBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD48L2hlYWQ+Cis8Ym9keT4KKzxwPlRlc3QgZm9yIFdlYiBTb2NrZXQgaW4gV29ya2VyLjwvcD4K
KzxwPjwvcD4KKzxwPk9uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi48L3A+Cis8cHJlIGlkPWxvZz4K
KzwvcHJlPgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIikuaW5uZXJIVE1MICs9IG1lc3NhZ2UgKyAi
XG4iOworfQorCitmdW5jdGlvbiBlbmRUZXN0KCkKK3sKKyAgICBsb2coIlRFU1QgQ09NUExFVEUi
KTsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9Cit2YXIgd29ya2VyID0gbmV3IFdvcmtlcign
cmVzb3VyY2VzL3dvcmtlci1zaW1wbGUuanMnKTsKK3dvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlv
biAoZXZ0KSB7CisgICAgbG9nKGV2dC5kYXRhKTsKKyAgICBpZiAoZXZ0LmRhdGEgPT0gIkRPTkUi
KQorICAgICAgICBlbmRUZXN0KCk7Cit9OworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDk0
MGViM2UuLmRhNDAyYjggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMDktMTItMjAgIEZ1bWl0b3NoaSBVa2Fp
ICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIFdlYlNvY2tldCBmZWF0dXJlIGluIFdvcmtlcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzIyMTQKKworICAgICAgICBJ
bnRyb2R1Y2UgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwgaW50ZXJmYWNlIGFuZCBhZGQKKyAg
ICAgICAgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwgZm9yIFdvcmtlci4KKyAgICAg
ICAgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwgdXNlcyBXZWJTb2NrZXRDaGFubmVs
IGluIHRoZQorICAgICAgICBtYWluIHRocmVhZCwgd2hpY2ggaXMgbWFuYWdlZCBieSBNYWluVGhy
ZWFkQ2xpZW50IGFuZCBjb21tdW5pY2F0ZWQKKyAgICAgICAgdmlhIFdvcmtlclRocmVhZFByb3h5
LgorCisgICAgICAgIFRlc3Q6IHdlYnNvY2tldC90ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUu
aHRtbAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06CisgICAgICAgICogV2ViQ29yZS5neXBp
OgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNv
cmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmg6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkpTV29ya2VyQ29udGV4dDo6d2ViU29ja2V0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9X
b3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21CaW5kaW5nLmg6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
V29ya2VyQ29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9SVU5U
SU1FX0VOQUJMRVIpOgorICAgICAgICAqIHBsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ojo6Y29weSk6CisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJl
YWRDb3BpZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICogd2Vic29ja2V0cy9U
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tl
dHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDogQWRkZWQuCisgICAgICAgICogd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaDogQWRkZWQuCisg
ICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
U29ja2V0Ojpjb25uZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6ZGlkUmVjZWl2
ZU1lc3NhZ2UpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Lmg6CisgICAgICAgICog
d2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmg6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2Nr
ZXRDaGFubmVsOjpyZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCk6CisgICAgICAgIChXZWJD
b3JlOjpXZWJTb2NrZXRDaGFubmVsOjpkZXJlZlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKToK
KyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaDoKKyAgICAgICAg
KiB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oOgorICAgICAgICAqIHdlYnNvY2tldHMv
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmg6IEFkZGVkLgorICAg
ICAgICAqIHdvcmtlcnMvV29ya2VyQ29udGV4dC5pZGw6CisKIDIwMDktMTItMTkgIEVyaWMgU2Vp
ZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIE5vIHJldmlldywgcm9sbGluZyBvdXQg
cjUyMzk1LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KaW5kZXggMWEyNWZiMC4uOWJkZjkyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0zMzgzLDYgKzMz
ODMsMTUgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3dlYnNvY2tldHMvV2ViU29j
a2V0SGFuZHNoYWtlLmNwcCBcCiAJV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFr
ZS5oCiAKK2lmIEVOQUJMRV9XT1JLRVJTCit3ZWJjb3JlX3NvdXJjZXMgKz0gXAorCVdlYkNvcmUv
d2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgXAorCVdlYkNvcmUvd2Vi
c29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIFwKKwlXZWJDb3JlL3dlYnNvY2tl
dHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmggXAorCVdlYkNvcmUv
d2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgXAorCVdlYkNv
cmUvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oCitlbmRpZgor
CiB3ZWJjb3JlZ3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3Vw
L1NvY2tldFN0cmVhbUVycm9yLmggXAogCVdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Nv
Y2tldFN0cmVhbUhhbmRsZS5oIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjhlNjgyMy4uZWQ2MWIwOSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1NDcs
NiArMzU0Nyw5IEBACiAgICAgICAgICAgICAnc3ZnL1N5bmNocm9uaXphYmxlUHJvcGVydHlDb250
cm9sbGVyLmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1N5bmNocm9uaXphYmxlUHJvcGVydHlDb250
cm9sbGVyLmgnLAogICAgICAgICAgICAgJ3N2Zy9TeW5jaHJvbml6YWJsZVR5cGVXcmFwcGVyLmgn
LAorICAgICAgICAgICAgJ3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3Bw
JywKKyAgICAgICAgICAgICd3ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgn
LAorICAgICAgICAgICAgJ3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGll
bnRXcmFwcGVyLmgnLAogICAgICAgICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCcsCiAg
ICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXQuaCcsCiAgICAgICAgICAgICAnd2Vic29j
a2V0cy9XZWJTb2NrZXRDaGFubmVsLmNwcCcsCkBAIC0zNTU0LDYgKzM1NTcsOCBAQAogICAgICAg
ICAgICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oJywKICAgICAgICAgICAg
ICd3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAnLAogICAgICAgICAgICAgJ3dlYnNv
Y2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmgnLAorICAgICAgICAgICAgJ3dlYnNvY2tldHMvV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwJywKKyAgICAgICAgICAgICd3ZWJzb2Nr
ZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgnLAogICAgICAgICAgICAgJ3dv
cmtlcnMvQWJzdHJhY3RXb3JrZXIuY3BwJywKICAgICAgICAgICAgICd3b3JrZXJzL0Fic3RyYWN0
V29ya2VyLmgnLAogICAgICAgICAgICAgJ3dvcmtlcnMvRGVkaWNhdGVkV29ya2VyQ29udGV4dC5j
cHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5w
cm8KaW5kZXggNmQzZDVkZS4uMWZiZTNkZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBy
bworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0zMjIyLDYgKzMyMjIsMTIgQEAgU09VUkNF
UyArPSBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Tb2NrZXRTdHJlYW1IYW5kbGVTb3VwLmNw
cCBcCiAgICAgYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDdXN0b20uY3BwIFwKICAgICBiaW5kaW5n
cy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmNwcAorCitjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfV09SS0VSUz0xKSB7CitTT1VSQ0VTICs9IFwKKyAgICB3ZWJzb2NrZXRzL1RocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmNwcCBcCisgICAgd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbC5jcHAKK30KIH0KIAogIyBHRU5FUkFUT1IgMTogSURMIGNvbXBpbGVyCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBmN2EzZDdkLi5hYmIxMDRhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTQzMDQ1LDYgKzQzMDQ1LDE4
IEBACiAJCQlOYW1lPSJ3ZWJzb2NrZXRzIg0KIAkJCT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2
ZVBhdGg9Ii4uXHdlYnNvY2tldHNcVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIg0KKwkJ
CQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd2Vic29j
a2V0c1xUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0K
KwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd2Vic29ja2V0c1xUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8
RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNcV2ViU29ja2V0LmNwcCINCiAJ
CQkJPg0KIAkJCTwvRmlsZT4NCkBAIC00MzA3Miw2ICs0MzA4NCwxNCBAQAogCQkJCVJlbGF0aXZl
UGF0aD0iLi5cd2Vic29ja2V0c1xXZWJTb2NrZXRIYW5kc2hha2UuaCINCiAJCQkJPg0KIAkJCTwv
RmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHdlYnNvY2tldHNcV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd2Vic29ja2V0c1xXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KIAkJPC9GaWx0ZXI+DQog
CQk8RmlsZQ0KIAkJCVJlbGF0aXZlUGF0aD0iLi5cY29uZmlnLmgiDQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5Mjk3NWJiLi5jZDY5OTYwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTYzLDYgKzk2MywxMSBA
QAogCQk1MTBENEE0RTEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBENEE0NzEwMzE3
N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbC5jcHAgKi87IH07CiAJCTUxMEQ0QTRGMTAz
MTc3QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MTBENEE0ODEwMzE3N0EyMDA0OUVBNTQgLyogV2Vi
U29ja2V0Q2hhbm5lbC5oICovOyB9OwogCQk1MTBENEE1MDEwMzE3N0EyMDA0OUVBNTQgLyogV2Vi
U29ja2V0Q2hhbm5lbENsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTEwRDRBNDkxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWxD
bGllbnQuaCAqLzsgfTsKKwkJNTExMjI0NzIxMENGQjhDNjAwODA5OUQ3IC8qIFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUxMTIyNDcxMTBDRkI4QzYwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbC5jcHAgKi87IH07CisJCTUxMTIyNDc0MTBDRkI4RDgwMDgwOTlENyAvKiBUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTExMjI0NzMxMENGQjhEODAwODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmggKi87IH07CisJCTUxMTIyNDc2MTBDRkI4RTgwMDgwOTlENyAvKiBUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMTIyNDc1MTBDRkI4RTgwMDgwOTlENyAvKiBUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaCAqLzsgfTsKKwkJNTExMjI0Nzgx
MENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMTIyNDc3MTBD
RkI4RjQwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgKi87
IH07CisJCTUxMTIyNDdBMTBDRkI4RkYwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTExMjI0NzkxMENGQjhGRjAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsLmggKi87IH07CiAJCTUxMTZEOTc3MENGMTc3QkQwMEMyQjg0RCAvKiBEYXRhYmFzZURl
dGFpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUx
MTZEOTc1MENGMTc3QkQwMEMyQjg0RCAvKiBEYXRhYmFzZURldGFpbHMuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1MTFGMjMxNzBEQzE2MERBMDA0
RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1MTFGMjMxMzBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9y
YWdlVGFzay5jcHAgKi87IH07CiAJCTUxMUYyMzE4MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0
b3JhZ2VUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1MTFGMjMxNDBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5oICovOyB9OwpA
QCAtNjI3Nyw2ICs2MjgyLDExIEBACiAJCTUxMEQ0QTQ3MTAzMTc3QTIwMDQ5RUE1NCAvKiBXZWJT
b2NrZXRDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdl
YlNvY2tldENoYW5uZWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTBENEE0
ODEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXZWJTb2NrZXRDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTUxMEQ0QTQ5MTAzMTc3QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsQ2xp
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNvY2tldENoYW5uZWxD
bGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExMjI0NzExMENGQjhDNjAw
ODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTExMjI0NzMxMENGQjhEODAwODA5OUQ3IC8qIFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTUxMTIyNDc1MTBDRkI4RTgwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbENsaWVudFdyYXBwZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxMTIyNDc3MTBDRkI4RjQwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTUxMTIyNDc5MTBDRkI4RkYwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MTE2RDk3NTBDRjE3N0JEMDBDMkI4NEQgLyogRGF0YWJhc2VEZXRhaWxzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERhdGFiYXNlRGV0YWlscy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1MTFGMjMxMzBEQzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9y
YWdlVGFzay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NhbFN0
b3JhZ2VUYXNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTExRjIzMTQwREMx
NjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTG9jYWxTdG9yYWdlVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTA5ODIsNiArMTA5OTIsMTEgQEAKIAkJNTE4QTM0QkQxMDI2QzgzMTAwMUI2ODk2IC8q
IHdlYnNvY2tldHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAor
CQkJCTUxMTIyNDc5MTBDRkI4RkYwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbC5oICovLAorCQkJCTUxMTIyNDc3MTBDRkI4RjQwMDgwOTlENyAvKiBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgKi8sCisJCQkJNTExMjI0NzUxMENGQjhFODAwODA5
OUQ3IC8qIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oICovLAorCQkJ
CTUxMTIyNDczMTBDRkI4RDgwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5o
ICovLAorCQkJCTUxMTIyNDcxMTBDRkI4QzYwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbC5jcHAgKi8sCiAJCQkJNTE4QTM0QkUxMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tl
dC5jcHAgKi8sCiAJCQkJNTE4QTM0QkYxMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5oICov
LAogCQkJCTUxOEEzNEMwMTAyNkM4MzEwMDFCNjg5NiAvKiBXZWJTb2NrZXQuaWRsICovLApAQCAt
MTgyNjUsNiArMTgyODAsOSBAQAogCQkJCUJDNTZDQjIzMTBENUFDODAwMEE3N0M2NCAvKiBHZW9s
b2NhdGlvbkNvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTZDQjI0MTBE
NUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvbkVycm9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzU2Q0IyNTEwRDVBQzgwMDBBNzdDNjQgLyogR2VvbG9jYXRpb25Qb3NpdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTExMjI0NzQxMENGQjhEODAwODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MTEyMjQ3NjEwQ0ZCOEU4MDA4MDk5RDcg
LyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQk1MTEyMjQ3QTEwQ0ZCOEZGMDA4MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMjA0MjEsNiArMjA0MzksOCBAQAogCQkJ
CTBDM0YxRjVBMTBDODg3MTIwMEQ3MkNFMSAvKiBXZWJHTFVuaWZvcm1Mb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwQzQ1MzQyNzEwQ0RCQkZBMDA4NjkxNTcgLyogSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzU2Q0IyMTEwRDVBQzgwMDBBNzdD
NjQgLyogR2VvbG9jYXRpb25Db250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTUxMTIy
NDcyMTBDRkI4QzYwMDgwOTlENyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk1MTEyMjQ3ODEwQ0ZCOEY0MDA4MDk5RDcgLyogV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuaCBiL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCmluZGV4IDA2OTY0N2EuLjYzM2U2MTIgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oCkBAIC0zMSw2
ICszMSw4IEBACiAjaWZuZGVmIEpTV2ViU29ja2V0Q29uc3RydWN0b3JfaAogI2RlZmluZSBKU1dl
YlNvY2tldENvbnN0cnVjdG9yX2gKIAorI2lmIEVOQUJMRShXRUJfU09DS0VUUykKKwogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NSw2ICs0Nyw4
IEBAIGNsYXNzIEpTV2ViU29ja2V0Q29uc3RydWN0b3IgOiBwdWJsaWMgRE9NQ29uc3RydWN0b3JP
YmplY3QgewogICAgIHZpcnR1YWwgY29uc3QgSlNDOjpDbGFzc0luZm8qIGNsYXNzSW5mbygpIGNv
bnN0IHsgcmV0dXJuICZzX2luZm87IH0KIH07CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAK
LSNlbmRpZiAgLy8gSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcl9oCisjZW5kaWYgLy8gSlNXZWJTb2Nr
ZXRDb25zdHJ1Y3Rvcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2Vy
Q29udGV4dEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1
c3RvbS5jcHAKaW5kZXggNDkwZDliMS4uYWIyODY3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtMzIsOCArMzIsMTAgQEAKICNpbmNsdWRl
ICJKU0RPTUJpbmRpbmcuaCIKICNpbmNsdWRlICJKU0RPTUdsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIkpTRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkpTRXZlbnRTb3VyY2VDb25zdHJ1Y3Rv
ci5oIgogI2luY2x1ZGUgIkpTTWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IkpTTWVzc2FnZVBvcnQuaCIKKyNpbmNsdWRlICJKU1dlYlNvY2tldENvbnN0cnVjdG9yLmgiCiAj
aW5jbHVkZSAiSlNXb3JrZXJMb2NhdGlvbi5oIgogI2luY2x1ZGUgIkpTV29ya2VyTmF2aWdhdG9y
LmgiCiAjaW5jbHVkZSAiSlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmgiCkBAIC00MywxMCAr
NDUsNiBAQAogI2luY2x1ZGUgIldvcmtlck5hdmlnYXRvci5oIgogI2luY2x1ZGUgPGludGVycHJl
dGVyL0ludGVycHJldGVyLmg+CiAKLSNpZiBFTkFCTEUoRVZFTlRTT1VSQ0UpCi0jaW5jbHVkZSAi
SlNFdmVudFNvdXJjZUNvbnN0cnVjdG9yLmgiCi0jZW5kaWYKLQogdXNpbmcgbmFtZXNwYWNlIEpT
QzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTMsNiArOTEsMTMgQEAgSlNWYWx1ZSBKU1dv
cmtlckNvbnRleHQ6OnhtbEh0dHBSZXF1ZXN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICBy
ZXR1cm4gZ2V0RE9NQ29uc3RydWN0b3I8SlNYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yPihleGVj
LCB0aGlzKTsKIH0KIAorI2lmIEVOQUJMRShXRUJfU09DS0VUUykKK0pTVmFsdWUgSlNXb3JrZXJD
b250ZXh0Ojp3ZWJTb2NrZXQoRXhlY1N0YXRlKiBleGVjKSBjb25zdAoreworICAgIHJldHVybiBn
ZXRET01Db25zdHJ1Y3RvcjxKU1dlYlNvY2tldENvbnN0cnVjdG9yPihleGVjLCB0aGlzKTsKK30K
KyNlbmRpZgorCiBKU1ZhbHVlIEpTV29ya2VyQ29udGV4dDo6aW1wb3J0U2NyaXB0cyhFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgaWYgKCFhcmdzLnNpemUoKSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
LmNwcAppbmRleCA0MTJmZGUwLi43ZTNjNTQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC0zMTksNiArMzE5LDEyIEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmNvbnZl
cnRFdmVudFRhcmdldFRvVjhPYmplY3QoCiAgICAgaWYgKG1wKQogICAgICAgICByZXR1cm4gY29u
dmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgbXApOwogCisjaWYgRU5B
QkxFKFdFQl9TT0NLRVRTKQorICAgIFdlYlNvY2tldCogd2ViU29ja2V0ID0gdGFyZ2V0LT50b1dl
YlNvY2tldCgpOworICAgIGlmICh3ZWJTb2NrZXQpCisgICAgICAgIHJldHVybiBjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OldFQlNPQ0tFVCwgd2ViU29ja2V0KTsKKyNlbmRpZgorCiAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVl
PigpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21C
aW5kaW5nLmggYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuaApp
bmRleCBjYTA4ZjUwLi5hM2RmYzI0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEN1c3RvbUJpbmRpbmcuaAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbUJpbmRpbmcuaApAQCAtNjQ2LDYgKzY0Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykKICAgICAgICAgREVDTEFSRV9BQ0NFU1NPUl9SVU5U
SU1FX0VOQUJMRVIoV29ya2VyQ29udGV4dFdlYmtpdE5vdGlmaWNhdGlvbnMpOwogI2VuZGlmCisj
aWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorICAgICAgICBERUNMQVJFX0FDQ0VTU09SX1JVTlRJTUVf
RU5BQkxFUihXb3JrZXJDb250ZXh0V2ViU29ja2V0KTsKKyNlbmRpZgogI2VuZGlmIC8vIEVOQUJM
RShXT1JLRVJTKQogCiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1c3RvbS5jcHAKaW5kZXggYjIwNjM1Yi4uMGFm
Mzg4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRD
dXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3Vz
dG9tLmNwcApAQCAtOTIsMTQgKzkyLDkgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdlYlNvY2tldENv
bnN0cnVjdG9yKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiRW1wdHkgVVJMIiwgVjhQcm94
eTo6U3ludGF4RXJyb3IpOwogCiAgICAgLy8gR2V0IHRoZSBzY3JpcHQgZXhlY3V0aW9uIGNvbnRl
eHQuCi0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IDA7Ci0gICAgLy8gVE9E
TzogV29ya2VycwotICAgIGlmICghY29udGV4dCkgewotICAgICAgICBGcmFtZSogZnJhbWUgPSBW
OFByb3h5OjpyZXRyaWV2ZUZyYW1lRm9yQ3VycmVudENvbnRleHQoKTsKLSAgICAgICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJXZWJTb2NrZXQgY29uc3RydWN0
b3IncyBhc3NvY2lhdGVkIGZyYW1lIGlzIG5vdCBhdmFpbGFibGUiLCBWOFByb3h5OjpSZWZlcmVu
Y2VFcnJvcik7Ci0gICAgICAgIGNvbnRleHQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICB9Cisg
ICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCA9IGdldFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCJX
ZWJTb2NrZXQgY29uc3RydWN0b3IncyBhc3NvY2lhdGVkIGZyYW1lIGlzIG5vdCBhdmFpbGFibGUi
LCBWOFByb3h5OjpSZWZlcmVuY2VFcnJvcik7CiAKICAgICBjb25zdCBLVVJMJiB1cmwgPSBjb250
ZXh0LT5jb21wbGV0ZVVSTCh0b1dlYkNvcmVTdHJpbmcodXJsc3RyaW5nKSk7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCmlu
ZGV4IDliNjhhYzAuLjBjNTA2ZDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1
ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIlY4V29y
a2VyQ29udGV4dEV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXQuaCIKICNpbmNs
dWRlICJXb3JrZXJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dEV4ZWN1dGlvblBy
b3h5LmgiCiAKQEAgLTUzLDYgKzU0LDEzIEBAIEFDQ0VTU09SX1JVTlRJTUVfRU5BQkxFUihXb3Jr
ZXJDb250ZXh0V2Via2l0Tm90aWZpY2F0aW9ucykKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFdF
Ql9TT0NLRVRTKQorQUNDRVNTT1JfUlVOVElNRV9FTkFCTEVSKFdvcmtlckNvbnRleHRXZWJTb2Nr
ZXQpCit7CisgICAgcmV0dXJuIFdlYlNvY2tldDo6aXNBdmFpbGFibGUoKTsKK30KKyNlbmRpZgor
CiBBQ0NFU1NPUl9HRVRURVIoV29ya2VyQ29udGV4dFNlbGYpCiB7CiAgICAgSU5DX1NUQVRTKEwi
RE9NLldvcmtlckNvbnRleHQuc2VsZi5fZ2V0Iik7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL0Nyb3NzVGhyZWFkQ29waWVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRD
b3BpZXIuY3BwCmluZGV4IGQwMmRhNmMuLmMxOTc5YzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDcm9zc1RocmVh
ZENvcGllci5oIgogCisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgpAQCAtMzksNiArNDAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitDcm9zc1Ro
cmVhZENvcGllckJhc2U8ZmFsc2UsIEtVUkw+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxm
YWxzZSwgS1VSTD46OmNvcHkoY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiB1cmwuY29w
eSgpOworfQorCiBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz46OlR5cGUgQ3Jv
c3NUaHJlYWRDb3BpZXJCYXNlPGZhbHNlLCBTdHJpbmc+Ojpjb3B5KGNvbnN0IFN0cmluZyYgc3Ry
KQogewogICAgIHJldHVybiBzdHIuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuaAppbmRleCAyYmRmNTdkLi41OTFhNTQ1IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9D
cm9zc1RocmVhZENvcGllci5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKICAgICBjbGFz
cyBSZXNvdXJjZVJlcXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKQEAgLTk0LDYg
Kzk1LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAgIH07CiAKKyAgICB0
ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIEtVUkw+IHsKKyAg
ICAgICAgdHlwZWRlZiBLVVJMIFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3Qg
S1VSTCYpOworICAgIH07CisKICAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGll
ckJhc2U8ZmFsc2UsIFN0cmluZz4gewogICAgICAgICB0eXBlZGVmIFN0cmluZyBUeXBlOwogICAg
ICAgICBzdGF0aWMgVHlwZSBjb3B5KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1dlYkNvcmUvd2Vi
c29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjhiOTI2MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vi
c29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTAsMCArMSw3NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
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
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNsdWRl
ICJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgiCisjaW5jbHVkZSAiV2ViU29j
a2V0Q2hhbm5lbC5oIgorI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWxDbGllbnQuaCIKKyNpbmNs
dWRlICJXb3JrZXJDb250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgorI2luY2x1
ZGUgIldvcmtlclRocmVhZC5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsLmgiCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyIHdlYlNvY2tldENoYW5uZWxNb2RlW10gPSAid2Vi
U29ja2V0Q2hhbm5lbE1vZGUiOworCitQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsPiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVudCwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQoreworICAgIEFTU0VSVChjb250ZXh0KTsK
KyAgICBBU1NFUlQoY2xpZW50KTsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIGlmIChjb250
ZXh0LT5pc1dvcmtlckNvbnRleHQoKSkgeworICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJD
b250ZXh0ID0gc3RhdGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOworICAgICAgICBX
b3JrZXJSdW5Mb29wJiBydW5Mb29wID0gd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3Ao
KTsKKyAgICAgICAgU3RyaW5nIG1vZGUgPSB3ZWJTb2NrZXRDaGFubmVsTW9kZTsKKyAgICAgICAg
bW9kZS5hcHBlbmQoU3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7Cisg
ICAgICAgIHJldHVybiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKHdv
cmtlckNvbnRleHQsIGNsaWVudCwgbW9kZSwgdXJsLCBwcm90b2NvbCk7CisgICAgfQorI2VuZGlm
IC8vIEVOQUJMRShXT1JLRVJTKQorCisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7
CisgICAgcmV0dXJuIFdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShjb250ZXh0LCBjbGllbnQsIHVy
bCwgcHJvdG9jb2wpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1NPQ0tFVFMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwuaCBiL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZWE0
YjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
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
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxfaAorI2RlZmluZSBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCisKKyNpZiBF
TkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtV
Ukw7CitjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3RyaW5nOworY2xhc3Mg
V2ViU29ja2V0Q2hhbm5lbENsaWVudDsKKworY2xhc3MgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFdlYlNvY2tldENoYW5uZWxDbGllbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBw
cm90b2NvbCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdCgpID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2ln
bmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNs
b3NlKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCkgPSAwOyAvLyBXaWxsIHN1
cHByZXNzIGRpZENsb3NlKCkuCisKKyAgICB2b2lkIHJlZigpIHsgcmVmVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwoKTsgfQorICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwoKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+VGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWwoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVmVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwoKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwoKSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAvLyBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmggYi9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNTZiYTNiOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0
cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaApAQCAtMCwwICsxLDEy
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
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
LworCisjaWZuZGVmIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCisj
ZGVmaW5lIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCisKKyNpZiBF
TkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsQ2xpZW50Lmgi
CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitjbGFzcyBUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJl
ZDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBw
ZXI+IGNyZWF0ZShXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlcihjbGllbnQpKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGxTeW5jTWV0aG9kKCkKKyAgICB7
CisgICAgICAgIG1fc3luY01ldGhvZERvbmUgPSBmYWxzZTsKKyAgICB9CisgICAgdm9pZCBzZXRT
eW5jTWV0aG9kRG9uZSgpCisgICAgeworICAgICAgICBtX3N5bmNNZXRob2REb25lID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBib29sIHN5bmNNZXRob2REb25lKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3N5bmNNZXRob2REb25lOworICAgIH0KKworICAgIGJvb2wgc2VudCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9zZW50OworICAgIH0KKyAgICB2b2lkIHNldFNlbnQo
Ym9vbCBzZW50KQorICAgIHsKKyAgICAgICAgbV9zZW50ID0gc2VudDsKKyAgICAgICAgbV9zeW5j
TWV0aG9kRG9uZSA9IHRydWU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9uZyBidWZmZXJlZEFt
b3VudCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9idWZmZXJlZEFtb3VudDsKKyAg
ICB9CisgICAgdm9pZCBzZXRCdWZmZXJlZEFtb3VudCh1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1v
dW50KQorICAgIHsKKyAgICAgICAgbV9idWZmZXJlZEFtb3VudCA9IGJ1ZmZlcmVkQW1vdW50Owor
ICAgICAgICBtX3N5bmNNZXRob2REb25lID0gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFy
Q2xpZW50KCkKKyAgICB7CisgICAgICAgIG1fY2xpZW50ID0gMDsKKyAgICB9CisKKyAgICB2b2lk
IGRpZENvbm5lY3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAgICAgICAgICAg
bV9jbGllbnQtPmRpZENvbm5lY3QoKTsKKyAgICB9CisKKyAgICB2b2lkIGRpZFJlY2VpdmVNZXNz
YWdlKGNvbnN0IFN0cmluZyYgbXNnKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2xpZW50KQorICAg
ICAgICAgICAgbV9jbGllbnQtPmRpZFJlY2VpdmVNZXNzYWdlKG1zZyk7CisgICAgfQorCisgICAg
dm9pZCBkaWRDbG9zZSgpCisgICAgeworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkQ2xvc2UoKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIoV2ViU29ja2V0Q2hhbm5lbENsaWVudCog
Y2xpZW50KQorICAgICAgICA6IG1fY2xpZW50KGNsaWVudCkKKyAgICAgICAgLCBtX3N5bmNNZXRo
b2REb25lKGZhbHNlKQorICAgICAgICAsIG1fc2VudChmYWxzZSkKKyAgICAgICAgLCBtX2J1ZmZl
cmVkQW1vdW50KDApCisgICAgeworICAgIH0KKworICAgIFdlYlNvY2tldENoYW5uZWxDbGllbnQq
IG1fY2xpZW50OworICAgIGJvb2wgbV9zeW5jTWV0aG9kRG9uZTsKKyAgICBib29sIG1fc2VudDsK
KyAgICB1bnNpZ25lZCBsb25nIG1fYnVmZmVyZWRBbW91bnQ7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAvLyBU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXJfaApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29j
a2V0LmNwcAppbmRleCBlZTc4MTc0Li4zOWMxNWFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNv
Y2tldHMvV2ViU29ja2V0LmNwcAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmNw
cApAQCAtNDMsNiArNDMsNyBAQAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZXNz
YWdlRXZlbnQuaCIKICNpbmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSAiVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCIKICNpbmNsdWRlICJXZWJTb2NrZXRDaGFu
bmVsLmgiCiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogCkBAIC0xMjYsNyArMTI3LDcg
QEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sLCBFeGNlcHRpb25Db2RlJgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
bV9jaGFubmVsID0gV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKHNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQoKSwgdGhpcywgbV91cmwsIG1fcHJvdG9jb2wpOworICAgIG1fY2hhbm5lbCA9IFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCB0aGlz
LCBtX3VybCwgbV9wcm90b2NvbCk7CiAgICAgbV9jaGFubmVsLT5jb25uZWN0KCk7CiB9CiAKQEAg
LTE5Miw3ICsxOTMsNiBAQCB2b2lkIFdlYlNvY2tldDo6ZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3Qg
U3RyaW5nJiBtc2cpCiAgICAgaWYgKG1fc3RhdGUgIT0gT1BFTiB8fCAhc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKQogICAgICAgICByZXR1cm47CiAgICAgUmVmUHRyPE1lc3NhZ2VFdmVudD4gZXZ0
ID0gTWVzc2FnZUV2ZW50OjpjcmVhdGUoKTsKLSAgICAvLyBGSVhNRTogb3JpZ2luLCBsYXN0RXZl
bnRJZCwgc291cmNlLCBtZXNzYWdlUG9ydC4KICAgICBldnQtPmluaXRNZXNzYWdlRXZlbnQoZXZl
bnROYW1lcygpLm1lc3NhZ2VFdmVudCwgZmFsc2UsIGZhbHNlLCBTZXJpYWxpemVkU2NyaXB0VmFs
dWU6OmNyZWF0ZShtc2cpLCAiIiwgIiIsIDAsIDApOwogICAgIGRpc3BhdGNoRXZlbnQoZXZ0KTsK
IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaCBiL1dlYkNvcmUv
d2Vic29ja2V0cy9XZWJTb2NrZXQuaAppbmRleCA5ZWNiZWQ3Li4xOGUyYjI1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0LmgKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRz
L1dlYlNvY2tldC5oCkBAIC00Niw3ICs0Niw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBTdHJpbmc7Ci0gICAgY2xhc3MgV2ViU29ja2V0Q2hhbm5lbDsKKyAgICBjbGFzcyBU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDsKIAogICAgIGNsYXNzIFdlYlNvY2tldCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdlYlNvY2tldD4sIHB1YmxpYyBFdmVudFRhcmdldCwgcHVibGljIEFjdGl2
ZURPTU9iamVjdCwgcHVibGljIFdlYlNvY2tldENoYW5uZWxDbGllbnQgewogICAgIHB1YmxpYzoK
QEAgLTgzLDIwICs4MywxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdmlydHVh
bCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkgY29uc3Q7
CiAKLSAgICAgICAgLy8gQWN0aXZlRE9NT2JqZWN0Ci0gICAgICAgIC8vICB2aXJ0dWFsIGJvb2wg
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Q7Ci0gICAgICAgIC8vIHZpcnR1YWwgdm9pZCBjb250
ZXh0RGVzdHJveWVkKCk7Ci0gICAgICAgIC8vIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkgY29u
c3Q7Ci0gICAgICAgIC8vIHZpcnR1YWwgdm9pZCBzdXNwZW5kKCk7Ci0gICAgICAgIC8vIHZpcnR1
YWwgdm9pZCByZXN1bWUoKTsKLSAgICAgICAgLy8gdmlydHVhbCB2b2lkIHN0b3AoKTsKLQogICAg
ICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldD46OnJlZjsKICAgICAgICAgdXNpbmcgUmVm
Q291bnRlZDxXZWJTb2NrZXQ+OjpkZXJlZjsKIAogICAgICAgICAvLyBXZWJTb2NrZXRDaGFubmVs
Q2xpZW50CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDb25uZWN0KCk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1zZyk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2xvc2UoKTsKIAogICAgIHByaXZhdGU6CkBAIC0xMTEsNyAr
MTAzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRpc3BhdGNoTWVzc2Fn
ZUV2ZW50KEV2ZW50Kik7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hDbG9zZUV2ZW50KEV2ZW50Kik7
CiAKLSAgICAgICAgUmVmUHRyPFdlYlNvY2tldENoYW5uZWw+IG1fY2hhbm5lbDsKKyAgICAgICAg
UmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBtX2NoYW5uZWw7CiAKICAgICAgICAg
U3RhdGUgbV9zdGF0ZTsKICAgICAgICAgS1VSTCBtX3VybDsKQEAgLTExOSw4ICsxMTEsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0
RGF0YTsKICAgICB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCi0jZW5kaWYgIC8vIEVOQUJMRShXRUJfU09DS0VUUykKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX1NPQ0tFVFMpCiAKLSNlbmRpZiAgLy8gV2ViU29ja2V0X2gKKyNlbmRpZiAvLyBXZWJT
b2NrZXRfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwu
aCBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmgKaW5kZXggMTRiMWU4Yy4u
N2VjODI2YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwu
aAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5oCkBAIC0zNCw2ICsz
NCw3IEBACiAjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQogCiAjaW5jbHVkZSAiU29ja2V0U3RyZWFt
SGFuZGxlQ2xpZW50LmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCIK
ICNpbmNsdWRlICJXZWJTb2NrZXRIYW5kc2hha2UuaCIKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRl
ZC5oPgogCkBAIC00NSwxNiArNDYsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IFNvY2tldFN0cmVhbUVycm9yOwogICAgIGNsYXNzIFdlYlNvY2tldENoYW5uZWxDbGllbnQ7CiAK
LSAgICBjbGFzcyBXZWJTb2NrZXRDaGFubmVsIDogcHVibGljIFJlZkNvdW50ZWQ8V2ViU29ja2V0
Q2hhbm5lbD4sIHB1YmxpYyBTb2NrZXRTdHJlYW1IYW5kbGVDbGllbnQgeworICAgIGNsYXNzIFdl
YlNvY2tldENoYW5uZWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJTb2NrZXRDaGFubmVsPiwgcHVi
bGljIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCwgcHVibGljIFRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsIHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYlNvY2tl
dENoYW5uZWw+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50KiBjbGllbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBw
cm90b2NvbCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFdlYlNvY2tldENoYW5uZWwoY29udGV4dCwg
Y2xpZW50LCB1cmwsIHByb3RvY29sKSk7IH0KICAgICAgICAgdmlydHVhbCB+V2ViU29ja2V0Q2hh
bm5lbCgpOwogCi0gICAgICAgIHZvaWQgY29ubmVjdCgpOwotICAgICAgICBib29sIHNlbmQoY29u
c3QgU3RyaW5nJiBtc2cpOwotICAgICAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkg
Y29uc3Q7Ci0gICAgICAgIHZvaWQgY2xvc2UoKTsKLSAgICAgICAgdm9pZCBkaXNjb25uZWN0KCk7
IC8vIFdpbGwgc3VwcHJlc3MgZGlkQ2xvc2UoKS4KKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbm5l
Y3QoKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
KyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBjbG9zZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzY29u
bmVjdCgpOyAvLyBXaWxsIHN1cHByZXNzIGRpZENsb3NlKCkuCiAKICAgICAgICAgdmlydHVhbCB2
b2lkIGRpZE9wZW4oU29ja2V0U3RyZWFtSGFuZGxlKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aWRDbG9zZShTb2NrZXRTdHJlYW1IYW5kbGUqKTsKQEAgLTYzLDggKzY0LDE1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJlY2VpdmVBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShTb2NrZXRTdHJlYW1IYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZSYpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFs
bGVuZ2UoU29ja2V0U3RyZWFtSGFuZGxlKiwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
KTsKIAorICAgICAgICB1c2luZyBSZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+OjpyZWY7Cisg
ICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD46OmRlcmVmOworCisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIHZvaWQgcmVmVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwoKSB7IHJlZigpOyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBkZXJlZlRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKCkgeyBkZXJlZigpOyB9CisKICAgICBwcml2YXRlOgotICAgICAgICBX
ZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJTb2NrZXRDaGFubmVs
Q2xpZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgICAgICBXZWJTb2NrZXRD
aGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBXZWJTb2NrZXRDaGFubmVsQ2xpZW50Kiwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpOwogCiAgICAgICAgIGJvb2wgYXBw
ZW5kVG9CdWZmZXIoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbik7CiAgICAgICAgIHZvaWQgc2tp
cEJ1ZmZlcihpbnQgbGVuKTsKQEAgLTc4LDggKzg2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICB1bnNpZ25lZCBsb25nIG1fdW5oYW5kbGVkQnVmZmVyU2l6ZTsKICAgICB9OwogCi19
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYg
IC8vIEVOQUJMRShXRUJfU09DS0VUUykKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAK
LSNlbmRpZiAgLy8gV2ViU29ja2V0Q2hhbm5lbF9oCisjZW5kaWYgLy8gV2ViU29ja2V0Q2hhbm5l
bF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbENsaWVu
dC5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxDbGllbnQuaAppbmRleCA0
NjNjYWRhLi4xNjMwNzBmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVs
Q2xpZW50LmgKQEAgLTQ2LDggKzQ2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50KCkgeyB9CiAgICAgfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmICAvLyBFTkFCTEUoV0VCX1NP
Q0tFVFMpCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQogCi0jZW5kaWYgIC8vIFdlYlNv
Y2tldENoYW5uZWxDbGllbnRfaAorI2VuZGlmIC8vIFdlYlNvY2tldENoYW5uZWxDbGllbnRfaApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oIGIvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oCmluZGV4IGQ1ZGJlNjguLmJkYTMy
MGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaAor
KysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmgKQEAgLTEwNiw4ICsx
MDYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX3NldENvb2tpZTI7
CiAgICAgfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAotI2VuZGlmICAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9TT0NLRVRTKQogCi0jZW5kaWYgIC8vIFdlYlNvY2tldEhhbmRzaGFrZV9oCisjZW5kaWYgLy8g
V2ViU29ja2V0SGFuZHNoYWtlX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgYi9XZWJDb3JlL3dlYnNvY2tldHMvV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmI2MzI1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3dlYnNvY2tl
dHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCkBAIC0wLDAgKzEsMzUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
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
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykgJiYgRU5BQkxF
KFdPUktFUlMpCisKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5o
IgorCisjaW5jbHVkZSAiR2VuZXJpY1dvcmtlclRhc2suaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaCIKKyNpbmNsdWRlICJXZWJT
b2NrZXRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oIgorI2lu
Y2x1ZGUgIldvcmtlckNvbnRleHQuaCIKKyNpbmNsdWRlICJXb3JrZXJMb2FkZXJQcm94eS5oIgor
I2luY2x1ZGUgIldvcmtlclJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXb3JrZXJUaHJlYWQuaCIKKwor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV29y
a2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsKFdvcmtlckNvbnRleHQqIGNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNs
aWVudCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sKQorICAgIDogbV93b3JrZXJDb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3dv
cmtlckNsaWVudFdyYXBwZXIoVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVy
OjpjcmVhdGUoY2xpZW50KSkKKyAgICAsIG1fcHJveHkobmV3IFdvcmtlclRocmVhZFByb3h5KG1f
d29ya2VyQ2xpZW50V3JhcHBlciwgbV93b3JrZXJDb250ZXh0LCB0YXNrTW9kZSwgdXJsLCBwcm90
b2NvbCkpCit7Cit9CisKK1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjp+V29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoKQoreworICAgIGlmIChtX3Byb3h5KQorICAgICAg
ICBtX3Byb3h5LT5kaXNjb25uZWN0KCk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OmNvbm5lY3QoKQoreworICAgIGlmIChtX3Byb3h5KQorICAgICAgICBtX3By
b3h5LT5jb25uZWN0KCk7Cit9CisKK2Jvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OnNlbmQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghbV9wcm94eSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX3Byb3h5LT5zZW5kKG1lc3NhZ2UpOwor
fQorCit1bnNpZ25lZCBsb25nIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpidWZm
ZXJlZEFtb3VudCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Byb3h5KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gbV9wcm94eS0+YnVmZmVyZWRBbW91bnQoKTsKK30KKwordm9pZCBXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y2xvc2UoKQoreworICAgIGlmICghbV9wcm94
eSkKKyAgICAgICAgbV9wcm94eS0+Y2xvc2UoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbDo6ZGlzY29ubmVjdCgpCit7CisgICAgbV9wcm94eS0+ZGlzY29ubmVj
dCgpOworICAgIG1fcHJveHkuY2xlYXIoKTsKK30KKworV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWw6Ok1haW5UaHJlYWRDbGllbnQ6Ok1haW5UaHJlYWRDbGllbnQoUmVmUHRyPFRocmVh
ZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IGNs
aWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQcm94eSwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQorICAgIDogbV93b3JrZXJDbGllbnRXcmFwcGVy
KGNsaWVudFdyYXBwZXIpCisgICAgLCBtX2xvYWRlclByb3h5KGxvYWRlclByb3h5KQorICAgICwg
bV9tYWluV2ViU29ja2V0Q2hhbm5lbChXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoY29udGV4dCwg
dGhpcywgdXJsLCBwcm90b2NvbCkpCisgICAgLCBtX3Rhc2tNb2RlKHRhc2tNb2RlKQoreworICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKK1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpNYWluVGhyZWFkQ2xpZW50Ojp+TWFpblRocmVhZENsaWVudCgpCit7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAobV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKKyAg
ICAgICAgbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+ZGlzY29ubmVjdCgpOworfQorCit2b2lkIFdv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFkQ2xpZW50Ojpjb25uZWN0
KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIGlmICghbV9tYWluV2ViU29j
a2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWFpbldlYlNvY2tldENoYW5uZWwt
PmNvbm5lY3QoKTsKK30KKworc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZFNlbmQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IHdvcmtlckNsaWVudFdyYXBwZXIs
IGJvb2wgc2VudCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29y
a2VyQ29udGV4dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKS0+c2V0U2VudChzZW50
KTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6TWFpblRocmVh
ZENsaWVudDo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUKGlzTWFp
blRocmVhZCgpKTsKKyAgICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwgfHwgIW1fd29ya2Vy
Q2xpZW50V3JhcHBlcikKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgc2VudCA9IG1fbWFpbldl
YlNvY2tldENoYW5uZWwtPnNlbmQobWVzc2FnZSk7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFz
a0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0
RGlkU2VuZCwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBzZW50KSwgbV90YXNrTW9kZSk7Cit9CisK
K3N0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRHZXRCdWZmZXJlZEFtb3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+ID4gd29ya2VyQ2xpZW50V3JhcHBlciwgdW5z
aWduZWQgbG9uZyBidWZmZXJlZEFtb3VudCkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQs
IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdldCgp
KS0+c2V0QnVmZmVyZWRBbW91bnQoYnVmZmVyZWRBbW91bnQpOworfQorCit2b2lkIFdvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFkQ2xpZW50OjpidWZmZXJlZEFtb3Vu
dCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbWFpbldlYlNv
Y2tldENoYW5uZWwgfHwgIW1fd29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICAgICAgcmV0dXJuOwor
ICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQgPSBtX21haW5XZWJTb2NrZXRDaGFubmVs
LT5idWZmZXJlZEFtb3VudCgpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9X
b3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZEdldEJ1ZmZl
cmVkQW1vdW50LCBtX3dvcmtlckNsaWVudFdyYXBwZXIsIGJ1ZmZlcmVkQW1vdW50KSwgbV90YXNr
TW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Ok1haW5U
aHJlYWRDbGllbnQ6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fbWFp
bldlYlNvY2tldENoYW5uZWwtPmNsb3NlKCk7CisgICAgbV9tYWluV2ViU29ja2V0Q2hhbm5lbCA9
IDA7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Ok1haW5UaHJl
YWRDbGllbnQ6OmRpc2Nvbm5lY3QoKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsKQorICAgICAgICByZXR1cm47CisgICAgbV9t
YWluV2ViU29ja2V0Q2hhbm5lbC0+ZGlzY29ubmVjdCgpOworICAgIG1fbWFpbldlYlNvY2tldENo
YW5uZWwgPSAwOworfQorCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkQ29ubmVjdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+ID4gd29ya2VyQ2xpZW50V3JhcHBl
cikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKS0+ZGlkQ29ubmVjdCgpOworfQorCit2
b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWluVGhyZWFkQ2xpZW50Ojpk
aWRDb25uZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIG1fbG9hZGVy
UHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygm
d29ya2VyQ29udGV4dERpZENvbm5lY3QsIG1fd29ya2VyQ2xpZW50V3JhcHBlciksIG1fdGFza01v
ZGUpOworfQorCitzdGF0aWMgdm9pZCB3b3JrZXJDb250ZXh0RGlkUmVjZWl2ZU1lc3NhZ2UoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IHdvcmtlckNsaWVudFdyYXBw
ZXIsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQs
IGNvbnRleHQtPmlzV29ya2VyQ29udGV4dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdldCgp
KS0+ZGlkUmVjZWl2ZU1lc3NhZ2UobWVzc2FnZSk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6Ok1haW5UaHJlYWRDbGllbnQ6OmRpZFJlY2VpdmVNZXNzYWdlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAg
IG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250ZXh0KGNyZWF0ZUNhbGxi
YWNrVGFzaygmd29ya2VyQ29udGV4dERpZFJlY2VpdmVNZXNzYWdlLCBtX3dvcmtlckNsaWVudFdy
YXBwZXIsIG1lc3NhZ2UpLCBtX3Rhc2tNb2RlKTsKK30KKworc3RhdGljIHZvaWQgd29ya2VyQ29u
dGV4dERpZENsb3NlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJl
YWRTYWZlU2hhcmVkPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiB3
b3JrZXJDbGllbnRXcmFwcGVyKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4
dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIHN0YXRpY19jYXN0PFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcio+KHdvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpLT5kaWRD
bG9zZSgpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpNYWlu
VGhyZWFkQ2xpZW50OjpkaWRDbG9zZSgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
KyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVD
YWxsYmFja1Rhc2soJndvcmtlckNvbnRleHREaWRDbG9zZSwgbV93b3JrZXJDbGllbnRXcmFwcGVy
KSwgbV90YXNrTW9kZSk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OldvcmtlclRocmVhZFByb3h5OjpzZXRXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIFdvcmtlclRocmVhZFByb3h5KiB0aGlzUHRyLCBSZWZQdHI8VGhy
ZWFkU2FmZVNoYXJlZDxNYWluVGhyZWFkQ2xpZW50PiA+IG1haW5UaHJlYWRDbGllbnQsIFJlZlB0
cjxUaHJlYWRTYWZlU2hhcmVkPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBl
cj4gPiB3b3JrZXJDbGllbnRXcmFwcGVyKQoreworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwg
Y29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIHRoaXNQdHItPm1fbWFpblRocmVhZENs
aWVudCA9IG1haW5UaHJlYWRDbGllbnQ7CisgICAgc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyKj4od29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSktPnNl
dFN5bmNNZXRob2REb25lKCk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OldvcmtlclRocmVhZFByb3h5OjptYWluVGhyZWFkQ3JlYXRlV2ViU29ja2V0Q2hhbm5l
bChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBXb3JrZXJUaHJlYWRQcm94eSogdGhp
c1B0ciwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiA+IGNsaWVudFdyYXBwZXIsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1
bWVudCgpKTsKKworICAgIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJlYWRDbGllbnQ+
ID4gbWFpblRocmVhZENsaWVudCA9IE1haW5UaHJlYWRDbGllbnQ6OmNyZWF0ZShjbGllbnRXcmFw
cGVyLCB0aGlzUHRyLT5tX2xvYWRlclByb3h5LCBjb250ZXh0LCB0YXNrTW9kZSwgdXJsLCBwcm90
b2NvbCk7CisgICAgdGhpc1B0ci0+bV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtl
ckNvbnRleHQoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRQcm94eTo6c2V0V2ViU29j
a2V0Q2hhbm5lbCwgdGhpc1B0ciwgbWFpblRocmVhZENsaWVudCwgY2xpZW50V3JhcHBlciksIHRh
c2tNb2RlKTsKK30KKworV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRo
cmVhZFByb3h5OjpXb3JrZXJUaHJlYWRQcm94eShQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gd29ya2VyQ2xpZW50V3JhcHBlciwgUGFzc1JlZlB0cjxX
b3JrZXJDb250ZXh0PiB3b3JrZXJDb250ZXh0LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCisgICAgOiBtX3dvcmtlckNsaWVu
dFdyYXBwZXIod29ya2VyQ2xpZW50V3JhcHBlcikKKyAgICAsIG1fd29ya2VyQ29udGV4dCh3b3Jr
ZXJDb250ZXh0KQorICAgICwgbV9sb2FkZXJQcm94eShtX3dvcmtlckNvbnRleHQtPnRocmVhZCgp
LT53b3JrZXJMb2FkZXJQcm94eSgpKQorICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkKK3sKKyAg
ICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0KCkpOworICAgIEFTU0VSVChtX3dvcmtl
ckNsaWVudFdyYXBwZXIuZ2V0KCkpOworICAgIEFTU0VSVCghbV9tYWluVGhyZWFkQ2xpZW50Lmdl
dCgpKTsKKyAgICBjYWxsU3luY01ldGhvZCgpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tU
b0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJldvcmtlclRocmVhZFByb3h5OjptYWluVGhyZWFk
Q3JlYXRlV2ViU29ja2V0Q2hhbm5lbCwgdGhpcywgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBtX3Rh
c2tNb2RlLCB1cmwsIHByb3RvY29sKSk7CisgICAgd2FpdFN5bmNNZXRob2QoKTsKKyAgICBBU1NF
UlQobV9tYWluVGhyZWFkQ2xpZW50LmdldCgpKTsKK30KKworV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5Ojp+V29ya2VyVGhyZWFkUHJveHkoKQorewor
ICAgIGRpc2Nvbm5lY3QoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6bWFpblRocmVhZENvbm5lY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8TWFpblRocmVhZENsaWVudD4gPiBtYWluVGhyZWFkQ2xp
ZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChj
b250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworCisgICAgc3RhdGljX2Nhc3Q8TWFpblRo
cmVhZENsaWVudCo+KG1haW5UaHJlYWRDbGllbnQuZ2V0KCkpLT5jb25uZWN0KCk7Cit9CisKK3Zv
aWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5Ojpj
b25uZWN0KCkKK3sKKyAgICBBU1NFUlQobV93b3JrZXJDbGllbnRXcmFwcGVyKTsKKyAgICBBU1NF
UlQobV9tYWluVGhyZWFkQ2xpZW50KTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2Fk
ZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6
bWFpblRocmVhZENvbm5lY3QsIG1fbWFpblRocmVhZENsaWVudCkpOworfQorCit2b2lkIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjptYWluVGhyZWFkU2VuZChTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxNYWluVGhyZWFkQ2xp
ZW50PiA+IG1haW5UaHJlYWRDbGllbnQsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBB
U1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4
dC0+aXNEb2N1bWVudCgpKTsKKworICAgIHN0YXRpY19jYXN0PE1haW5UaHJlYWRDbGllbnQqPiht
YWluVGhyZWFkQ2xpZW50LmdldCgpKS0+c2VuZChtZXNzYWdlKTsKK30KKworYm9vbCBXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6V29ya2VyVGhyZWFkUHJveHk6OnNlbmQoY29uc3Qg
U3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghbV93b3JrZXJDbGllbnRXcmFwcGVyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgQVNTRVJUKG1fbWFpblRocmVhZENsaWVudCk7CisgICAg
Y2FsbFN5bmNNZXRob2QoKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRo
cmVhZFNlbmQsIG1fbWFpblRocmVhZENsaWVudCwgbWVzc2FnZSkpOworICAgIHdhaXRTeW5jTWV0
aG9kKCk7CisgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKiBjbGll
bnRXcmFwcGVyID0gc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRX
cmFwcGVyKj4obV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKTsKKyAgICByZXR1cm4gY2xpZW50
V3JhcHBlciAmJiBjbGllbnRXcmFwcGVyLT5zZW50KCk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRCdWZmZXJlZEFtb3VudChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxNYWluVGhyZWFk
Q2xpZW50PiA+IG1haW5UaHJlYWRDbGllbnQpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisK
KyAgICBzdGF0aWNfY2FzdDxNYWluVGhyZWFkQ2xpZW50Kj4obWFpblRocmVhZENsaWVudC5nZXQo
KSktPmJ1ZmZlcmVkQW1vdW50KCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5OjpidWZmZXJlZEFtb3VudCgpCit7
CisgICAgaWYgKCFtX3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgICAgIHJldHVybiAwOworICAg
IEFTU0VSVChtX21haW5UaHJlYWRDbGllbnQpOworICAgIGNhbGxTeW5jTWV0aG9kKCk7CisgICAg
bV9sb2FkZXJQcm94eS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRCdWZmZXJlZEFtb3VudCwgbV9t
YWluVGhyZWFkQ2xpZW50KSk7CisgICAgd2FpdFN5bmNNZXRob2QoKTsKKyAgICBUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2Fz
dDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVu
dFdyYXBwZXIuZ2V0KCkpOworICAgIGlmIChjbGllbnRXcmFwcGVyKQorICAgICAgICByZXR1cm4g
Y2xpZW50V3JhcHBlci0+YnVmZmVyZWRBbW91bnQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZENsb3NlKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1haW5U
aHJlYWRDbGllbnQ+ID4gbWFpblRocmVhZENsaWVudCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1bWVudCgp
KTsKKworICAgIHN0YXRpY19jYXN0PE1haW5UaHJlYWRDbGllbnQqPihtYWluVGhyZWFkQ2xpZW50
LmdldCgpKS0+Y2xvc2UoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6V29ya2VyVGhyZWFkUHJveHk6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQobV9tYWluVGhy
ZWFkQ2xpZW50KTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2Fs
bGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZENs
b3NlLCBtX21haW5UaHJlYWRDbGllbnQpKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZERlc3Ryb3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8TWFpblRocmVhZENsaWVudD4gPiBtYWlu
VGhyZWFkQ2xpZW50KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJU
X1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworCisgICAgbWFpblRocmVh
ZENsaWVudC5jbGVhcigpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsOjpXb3JrZXJUaHJlYWRQcm94eTo6ZGlzY29ubmVjdCgpCit7CisgICAgY2xlYXJDbGllbnRX
cmFwcGVyKCk7CisgICAgaWYgKG1fbWFpblRocmVhZENsaWVudCkgeworICAgICAgICBUaHJlYWRT
YWZlU2hhcmVkPE1haW5UaHJlYWRDbGllbnQ+KiBtYWluVGhyZWFkQ2xpZW50ID0gbV9tYWluVGhy
ZWFkQ2xpZW50LnJlbGVhc2UoKS5yZWxlYXNlUmVmKCk7CisgICAgICAgIG1fbG9hZGVyUHJveHku
cG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2soJm1haW5UaHJlYWREZXN0cm95LCBt
YWluVGhyZWFkQ2xpZW50KSk7CisgICAgfQorfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRQcm94eTo6Y2xlYXJDbGllbnRXcmFwcGVyKCkKK3sK
KyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIq
PihtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpLT5jbGVhckNsaWVudCgpOworfQorCit2b2lk
IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRQcm94eTo6Y2Fs
bFN5bmNNZXRob2QoKQoreworICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIpOworICAg
IHN0YXRpY19jYXN0PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcio+KG1f
d29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSktPmNhbGxTeW5jTWV0aG9kKCk7Cit9CisKK3ZvaWQg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OldvcmtlclRocmVhZFByb3h5Ojp3YWl0
U3luY01ldGhvZCgpCit7CisgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IG1fd29ya2VyQ29u
dGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKTsKKyAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJl
c3VsdCA9IE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDsKKyAgICBUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdyYXBw
ZXIuZ2V0KCkpOworICAgIHdoaWxlIChjbGllbnRXcmFwcGVyICYmICFjbGllbnRXcmFwcGVyLT5z
eW5jTWV0aG9kRG9uZSgpICYmIHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7Cisg
ICAgICAgIHJlc3VsdCA9IHJ1bkxvb3AucnVuSW5Nb2RlKG1fd29ya2VyQ29udGV4dC5nZXQoKSwg
bV90YXNrTW9kZSk7CisgICAgICAgIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdyYXBwZXIu
Z2V0KCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9TT0NLRVRTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2Vy
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mM2U2NWM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCisjZGVmaW5lIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsX2gKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykgJiYgRU5B
QkxFKFdPUktFUlMpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbENs
aWVudC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1VSTDsKK2NsYXNzIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVu
dFdyYXBwZXI7CitjbGFzcyBXb3JrZXJDb250ZXh0OworY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7
CitjbGFzcyBXb3JrZXJSdW5Mb29wOworCitjbGFzcyBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsPiwgcHVibGljIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFdvcmtl
ckNvbnRleHQqIHdvcmtlckNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVudCwg
Y29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbCh3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCB1cmws
IHByb3RvY29sKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdCgpOworICAgIHZpcnR1YWwg
Ym9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBs
b25nIGJ1ZmZlcmVkQW1vdW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc2Nvbm5lY3QoKTsgLy8gV2lsbCBzdXBwcmVzcyBkaWRDbG9zZSgp
LgorCisgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bD46OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsPjo6ZGVyZWY7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVmVGhyZWFk
YWJsZVdlYlNvY2tldENoYW5uZWwoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVm
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoKSB7IGRlcmVmKCk7IH0KKworcHJpdmF0ZToKKyAg
ICAvLyBNYW5hZ2VzIGEgc29ja2V0IGhhbmRsZSBvbiB0aGUgbWFpbiB0aHJlYWQuCisgICAgY2xh
c3MgTWFpblRocmVhZENsaWVudCA6IHB1YmxpYyBUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJlYWRD
bGllbnQ+LCBwdWJsaWMgV2ViU29ja2V0Q2hhbm5lbENsaWVudCB7CisgICAgcHVibGljOgorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNYWluVGhyZWFkQ2xpZW50PiBjcmVhdGUoUmVmUHRyPFRo
cmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+
IGNsaWVudFdyYXBwZXIsIFdvcmtlckxvYWRlclByb3h5JiBsb2FkZXJQcm94eSwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VS
TCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IE1haW5UaHJlYWRDbGllbnQoY2xpZW50V3JhcHBlciwgbG9hZGVy
UHJveHksIGNvbnRleHQsIHRhc2tNb2RlLCB1cmwsIHByb3RvY29sKSk7CisgICAgICAgIH0KKyAg
ICAgICAgfk1haW5UaHJlYWRDbGllbnQoKTsKKworICAgICAgICB2b2lkIGNvbm5lY3QoKTsKKyAg
ICAgICAgdm9pZCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgYnVm
ZmVyZWRBbW91bnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworICAgICAgICB2b2lkIGRpc2Nv
bm5lY3QoKTsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29ubmVjdCgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpZENsb3NlKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBN
YWluVGhyZWFkQ2xpZW50KFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiwgV29ya2VyTG9hZGVyUHJveHkmLCBTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgY29uc3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wpOworCisgICAgICAgIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiBtX3dvcmtlckNsaWVudFdy
YXBwZXI7CisKKyAgICAgICAgV29ya2VyTG9hZGVyUHJveHkmIG1fbG9hZGVyUHJveHk7CisKKyAg
ICAgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBtX21haW5XZWJTb2NrZXRD
aGFubmVsOworCisgICAgICAgIFN0cmluZyBtX3Rhc2tNb2RlOworICAgIH07CisKKyAgICAvKiBQ
cm94eSBmb3IgTWFpblRocmVhZENsaWVudC4gIFJ1bm5pbmcgb24gdGhlIHdvcmtlciB0aHJlYWQu
ICovCisgICAgY2xhc3MgV29ya2VyVGhyZWFkUHJveHkgOiBwdWJsaWMgUmVmQ291bnRlZDxXb3Jr
ZXJUaHJlYWRQcm94eT4geworICAgIHB1YmxpYzoKKyAgICAgICAgV29ya2VyVGhyZWFkUHJveHko
UGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+LCBQYXNz
UmVmUHRyPFdvcmtlckNvbnRleHQ+LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBLVVJM
JiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CisgICAgICAgIH5Xb3JrZXJUaHJlYWRQcm94eSgp
OworICAgICAgICB2b2lkIGNvbm5lY3QoKTsKKyAgICAgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKTsKKyAg
ICAgICAgdm9pZCBjbG9zZSgpOworICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKworICAgICAg
ICB1c2luZyBSZWZDb3VudGVkPFdvcmtlclRocmVhZFByb3h5Pjo6cmVmOworICAgICAgICB1c2lu
ZyBSZWZDb3VudGVkPFdvcmtlclRocmVhZFByb3h5Pjo6ZGVyZWY7CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBzdGF0aWMgdm9pZCBzZXRXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIGNvbnRleHQsIFdvcmtlclRocmVhZFByb3h5KiB0aGlzUHRyLCBSZWZQdHI8VGhyZWFk
U2FmZVNoYXJlZDxNYWluVGhyZWFkQ2xpZW50PiA+IG1haW5UaHJlYWRDbGllbnQsIFJlZlB0cjxU
aHJlYWRTYWZlU2hhcmVkPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4g
PiB3b3JrZXJDbGllbnRXcmFwcGVyKTsKKworICAgICAgICAvLyBFeGVjdXRlZCBvbiB0aGUgbWFp
biB0aHJlYWQgdG8gY3JlYXRlIE1haW5UaHJlYWRDbGllbnQuCisgICAgICAgIHN0YXRpYyB2b2lk
IG1haW5UaHJlYWRDcmVhdGVXZWJTb2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpXb3JrZXJUaHJlYWRQ
cm94eSogdGhpc1B0ciwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IGNsaWVudFdyYXBwZXIsIGNvbnN0IFN0cmluZyYgdGFz
a01vZGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CisKKyAgICAg
ICAgLy8gRXhlY3V0ZWQgb24gdGhlIHdvcmtlciBjb250ZXh0J3MgdGhyZWFkLgorICAgICAgICB2
b2lkIGNsZWFyQ2xpZW50V3JhcHBlcigpOworCisgICAgICAgIHZvaWQgY2FsbFN5bmNNZXRob2Qo
KTsKKyAgICAgICAgdm9pZCB3YWl0U3luY01ldGhvZCgpOworCisgICAgICAgIFJlZlB0cjxUaHJl
YWRTYWZlU2hhcmVkPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiBt
X3dvcmtlckNsaWVudFdyYXBwZXI7CisKKyAgICAgICAgUmVmUHRyPFdvcmtlckNvbnRleHQ+IG1f
d29ya2VyQ29udGV4dDsKKworICAgICAgICBXb3JrZXJMb2FkZXJQcm94eSYgbV9sb2FkZXJQcm94
eTsKKworICAgICAgICBTdHJpbmcgbV90YXNrTW9kZTsKKworICAgICAgICBSZWZQdHI8VGhyZWFk
U2FmZVNoYXJlZDxNYWluVGhyZWFkQ2xpZW50PiA+IG1fbWFpblRocmVhZENsaWVudDsKKyAgICB9
OworCisgICAgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoV29ya2VyQ29udGV4dCos
IFdlYlNvY2tldENoYW5uZWxDbGllbnQqLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CisKKyAgICBzdGF0aWMgdm9pZCBtYWluVGhy
ZWFkQ29ubmVjdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUmVmUHRyPFRocmVhZFNhZmVTaGFy
ZWQ8TWFpblRocmVhZENsaWVudD4gPik7CisgICAgc3RhdGljIHZvaWQgbWFpblRocmVhZFNlbmQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPE1haW5UaHJl
YWRDbGllbnQ+ID4sIGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgc3RhdGljIHZvaWQgbWFp
blRocmVhZEJ1ZmZlcmVkQW1vdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBSZWZQdHI8VGhy
ZWFkU2FmZVNoYXJlZDxNYWluVGhyZWFkQ2xpZW50PiA+KTsKKyAgICBzdGF0aWMgdm9pZCBtYWlu
VGhyZWFkQ2xvc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFJlZlB0cjxUaHJlYWRTYWZlU2hh
cmVkPE1haW5UaHJlYWRDbGllbnQ+ID4pOworICAgIHN0YXRpYyB2b2lkIG1haW5UaHJlYWREZXN0
cm95KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxNYWlu
VGhyZWFkQ2xpZW50PiA+KTsKKworICAgIFJlZlB0cjxXb3JrZXJDb250ZXh0PiBtX3dvcmtlckNv
bnRleHQ7CisgICAgUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBl
cj4gbV93b3JrZXJDbGllbnRXcmFwcGVyOworICAgIFJlZlB0cjxXb3JrZXJUaHJlYWRQcm94eT4g
bV9wcm94eTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJfU09DS0VUUykKKworI2VuZGlmIC8vIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbCBiL1dl
YkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbAppbmRleCAwYTU4MTdjLi42MTQ4MDkyIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKKysrIGIvV2ViQ29y
ZS93b3JrZXJzL1dvcmtlckNvbnRleHQuaWRsCkBAIC04Niw2ICs4Niw5IEBAIG1vZHVsZSB0aHJl
YWRzIHsKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXJdIEV2ZW50U291cmNlQ29u
c3RydWN0b3IgRXZlbnRTb3VyY2U7CiAjZW5kaWYKICAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0
b21HZXR0ZXJdIFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IgWE1MSHR0cFJlcXVlc3Q7CisjaWYg
ZGVmaW5lZChFTkFCTEVfV0VCX1NPQ0tFVFMpICYmIEVOQUJMRV9XRUJfU09DS0VUUworICAgICAg
ICBhdHRyaWJ1dGUgW0pTQ0N1c3RvbUdldHRlcixFbmFibGVkQXRSdW50aW1lXSBXZWJTb2NrZXRD
b25zdHJ1Y3RvciBXZWJTb2NrZXQ7IC8vIFVzYWJsZSB3aXRoIHRoZSBuZXcgb3BlcmF0b3IKKyNl
bmRpZgogICAgIH07CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45866</attachid>
            <date>2010-01-04 23:51:25 -0800</date>
            <delta_ts>2010-01-06 14:13:01 -0800</delta_ts>
            <desc>Add WebSocket feature in Worker</desc>
            <filename>bug-32214-20100105165123.patch</filename>
            <type>text/plain</type>
            <size>61597</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlN2Y1NDRmLi5lMDUyYjcwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEt
MDQgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIFdlYlNvY2tldCBmZWF0dXJlIGlu
IFdvcmtlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzIyMTQKKworICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9zaW1w
bGVfd3NoLnB5OiBDb3BpZWQgZnJvbSBMYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvc2ltcGxl
X3dzaC5weS4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29y
a2VyLXNpbXBsZS5qczogQWRkZWQuCisgICAgICAgICogd2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMv
d29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYnNvY2tldC90
ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUuaHRtbDogQWRkZWQuCisKIDIwMTAtMDEtMDQgIENo
cmlzIEV2YW5zICA8Y2V2YW5zQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBB
ZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dvcmtl
cnMvcmVzb3VyY2VzL3NpbXBsZV93c2gucHkgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
d29ya2Vycy9yZXNvdXJjZXMvc2ltcGxlX3dzaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5mYzAyNzFjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2Vic29j
a2V0L3Rlc3RzL3dvcmtlcnMvcmVzb3VyY2VzL3NpbXBsZV93c2gucHkKQEAgLTAsMCArMSwzOCBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlv
bi4KKyMgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKworZnJvbSBtb2RfcHl3ZWJzb2NrZXQgaW1wb3J0IG1zZ3V0
aWwKKworCitkZWYgd2ViX3NvY2tldF9kb19leHRyYV9oYW5kc2hha2UocmVxdWVzdCk6CisgICAg
cGFzcyAjIEFsd2F5cyBhY2NlcHQuCisKKworZGVmIHdlYl9zb2NrZXRfdHJhbnNmZXJfZGF0YShy
ZXF1ZXN0KToKKyAgICBtc2d1dGlsLnNlbmRfbWVzc2FnZShyZXF1ZXN0LCAnSGVsbG8gZnJvbSBT
aW1wbGUgV1NILicpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvd29y
a2Vycy9yZXNvdXJjZXMvd29ya2VyLXNpbXBsZS5qcyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy93b3JrZXJzL3Jlc291cmNlcy93b3JrZXItc2ltcGxlLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjk4MjViNDgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJzb2NrZXQvdGVzdHMvd29ya2Vycy9yZXNvdXJjZXMvd29ya2VyLXNpbXBsZS5qcwpAQCAt
MCwwICsxLDM3IEBACitpZiAoc2VsZi5wb3N0TWVzc2FnZSkKKyAgICBydW5UZXN0cygpOworZWxz
ZQorICAgIG9uY29ubmVjdCA9IGhhbmRsZUNvbm5lY3QoKTsKKworZnVuY3Rpb24gaGFuZGxlQ29u
bmVjdChldmV2bnQpCit7CisgICAgLy8gRm9yIHNoYXJlZCB3b3JrZXJzLCBjcmVhdGUgYSBmYXV4
IHBvc3RNZXNzYWdlKCkgQVBJIHRvIHNlbmQgbWVzc2FnZSBiYWNrIHRvIHRoZSBwYXJlbnQgcGFn
ZS4KKyAgICBzZWxmLnBvc3RNZXNzYWdlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHsgZXZlbnQucG9y
dHNbMF0ucG9zdE1lc3NhZ2UobWVzc2FnZSk7IH07CisgICAgcnVuVGVzdHMoKTsKK307CisKK2Z1
bmN0aW9uIHJ1blRlc3RzKCkKK3sKKyAgICB0cnkgeworICAgICAgICBwb3N0TWVzc2FnZSgiUEFT
Uzogd29ya2VyOiBpbml0Iik7CisgICAgICAgIGlmICgnV2ViU29ja2V0JyBpbiBzZWxmKQorICAg
ICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjogV2ViU29ja2V0IGV4aXN0cyIpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogd29ya2VyOiBubyBX
ZWJTb2NrZXQiKTsKKyAgICAgICAgd3MgPSBuZXcgV2ViU29ja2V0KCd3czovL2xvY2FsaG9zdDo4
ODgwL3dlYnNvY2tldC90ZXN0cy93b3JrZXJzL3Jlc291cmNlcy9zaW1wbGUnKTsKKyAgICAgICAg
d3Mub25vcGVuID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzog
d29ya2VyOiBDb25uZWN0ZWQuIik7CisgICAgICAgIH07CisgICAgICAgIHdzLm9ubWVzc2FnZSA9
IGZ1bmN0aW9uKGV2dCkgeworICAgICAgICAgICAgcG9zdE1lc3NhZ2UoIlBBU1M6IHdvcmtlcjog
UmVjZWl2ZWQ6ICciICsgZXZ0LmRhdGEgKyAiJyIpOworICAgICAgICB9OworICAgICAgICB3cy5v
bmNsb3NlID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiUEFTUzogd29y
a2VyOiBDbG9zZWQuIik7CisgICAgICAgICAgICBwb3N0TWVzc2FnZSgiRE9ORSIpOworICAgICAg
ICB9OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgcG9zdE1lc3NhZ2UoIkZBSUw6IHdvcmtl
cjogVW5leHBlY3RlZCBleGNlcHRpb246ICIgKyBlKTsKKyAgICB9IGZpbmFsbHkgeworICAgICAg
ICBwb3N0TWVzc2FnZSgiUEFTUzogd29ya2VyOiBzdWNjZXNzZnVsbHlQYXJzZWQ6IiArIHdzKTsK
KyAgICB9Cit9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL3dvcmtl
cnMvd29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVz
dHMvd29ya2Vycy93b3JrZXItc2ltcGxlLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4xNjVhODQyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2Vic29ja2V0L3Rlc3RzL3dvcmtlcnMvd29ya2VyLXNpbXBsZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwxMyBAQAorVGVzdCBmb3IgV2ViIFNvY2tldCBpbiBXb3JrZXIuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworUEFTUzogd29ya2VyOiBpbml0CitQQVNTOiB3b3JrZXI6IFdlYlNv
Y2tldCBleGlzdHMKK1BBU1M6IHdvcmtlcjogc3VjY2Vzc2Z1bGx5UGFyc2VkOltvYmplY3QgV2Vi
U29ja2V0XQorUEFTUzogd29ya2VyOiBDb25uZWN0ZWQuCitQQVNTOiB3b3JrZXI6IFJlY2VpdmVk
OiAnSGVsbG8gZnJvbSBTaW1wbGUgV1NILicKK1BBU1M6IHdvcmtlcjogQ2xvc2VkLgorRE9ORQor
VEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
d29ya2Vycy93b3JrZXItc2ltcGxlLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
d29ya2Vycy93b3JrZXItc2ltcGxlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYmMyNGU3MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90
ZXN0cy93b3JrZXJzL3dvcmtlci1zaW1wbGUuaHRtbApAQCAtMCwwICsxLDM1IEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPjwv
aGVhZD4KKzxib2R5PgorPHA+VGVzdCBmb3IgV2ViIFNvY2tldCBpbiBXb3JrZXIuPC9wPgorPHA+
PC9wPgorPHA+T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLjwvcD4KKzxwcmUgaWQ9bG9nPgorPC9w
cmU+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lckhUTUwgKz0gbWVzc2FnZSArICJcbiI7
Cit9CisKK2Z1bmN0aW9uIGVuZFRlc3QoKQoreworICAgIGxvZygiVEVTVCBDT01QTEVURSIpOwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KK3ZhciB3b3JrZXIgPSBuZXcgV29ya2VyKCdyZXNv
dXJjZXMvd29ya2VyLXNpbXBsZS5qcycpOword29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChl
dnQpIHsKKyAgICBsb2coZXZ0LmRhdGEpOworICAgIGlmIChldnQuZGF0YSA9PSAiRE9ORSIpCisg
ICAgICAgIGVuZFRlc3QoKTsKK307Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk3MjI2
ZS4uMGJhYTQ2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw1MCBAQAorMjAxMC0wMS0wNCAgRnVtaXRvc2hpIFVrYWkgIDx1
a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgV2ViU29ja2V0IGZlYXR1cmUgaW4gV29ya2VyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMjIxNAorCisgICAgICAgIEludHJv
ZHVjZSBUaHJlYWRhYmxlV2ViU09ja2V0Q2hhbm5lbCBpbnRlcmZhY2UgYW5kIGFkZAorICAgICAg
ICBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCBmb3IgV29ya2VyLgorICAgICAgICBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbCB1c2VzIFdlYlNvY2tldENoYW5uZWwgaW4g
dGhlCisgICAgICAgIG1haW4gdGhyZWFkLCB3aGljaCBpcyBtYW5hZ2VkIGJ5IFBlZXIgYW5kIGNv
bW11bmljYXRlZCB2aWEgQnJpZGdlLgorCisgICAgICAgIFRlc3Q6IHdlYnNvY2tldC90ZXN0cy93
b3JrZXJzL3dvcmtlci1zaW1wbGUuaHRtbAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06Cisg
ICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUucHJvOgorICAgICAgICAq
IFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldENv
bnN0cnVjdG9yLmg6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0Q3VzdG9t
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTV29ya2VyQ29udGV4dDo6d2ViU29ja2V0KToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojpjb252ZXJ0RXZlbnRU
YXJnZXRUb1Y4T2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJTb2Nr
ZXRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b206OnY4V2ViU29ja2V0Q29u
c3RydWN0b3JDYWxsYmFjayk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2Vy
Q29udGV4dEN1c3RvbS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Ojpjb3B5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9Dcm9z
c1RocmVhZENvcGllci5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiB3ZWJzb2Nr
ZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDogQWRkZWQuCisgICAgICAgICogd2Vi
c29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oOiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oOiBBZGRl
ZC4KKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJTb2NrZXQ6OmNvbm5lY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0OjpkaWRS
ZWNlaXZlTWVzc2FnZSk6CisgICAgICAgICogd2Vic29ja2V0cy9XZWJTb2NrZXQuaDoKKyAgICAg
ICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldENoYW5uZWw6OnJlZlRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldENoYW5uZWw6OmRlcmVmVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oOgorICAg
ICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmg6CisgICAgICAgICogd2Vic29j
a2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHA6IEFkZGVkLgorICAgICAg
ICAqIHdlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDogQWRkZWQu
CisgICAgICAgICogd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbDoKKwogMjAxMC0wMS0wNCAgQ2hy
aXMgRXZhbnMgIDxjZXZhbnNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFk
YW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbQppbmRleCBjNmM5N2I3Li4yMTNkZmRiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTMzODMsNiAr
MzM4MywxNSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvd2Vic29ja2V0cy9XZWJT
b2NrZXRIYW5kc2hha2UuY3BwIFwKIAlXZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNo
YWtlLmgKIAoraWYgRU5BQkxFX1dPUktFUlMKK3dlYmNvcmVfc291cmNlcyArPSBcCisJV2ViQ29y
ZS93ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBcCisJV2ViQ29yZS93
ZWJzb2NrZXRzL1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggXAorCVdlYkNvcmUvd2Vic29j
a2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaCBcCisJV2ViQ29y
ZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBcCisJV2Vi
Q29yZS93ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKK2VuZGlm
CisKIHdlYmNvcmVndGtfc291cmNlcyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3Nv
dXAvU29ja2V0U3RyZWFtRXJyb3IuaCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAv
U29ja2V0U3RyZWFtSGFuZGxlLmggXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkg
Yi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhMzM2NjkzLi41YWM0OTE4IDEwMDY0NAotLS0g
YS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpAQCAtMzU0
OCw2ICszNTQ4LDkgQEAKICAgICAgICAgICAgICdzdmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNv
bnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdzdmcvU3luY2hyb25pemFibGVQcm9wZXJ0eUNv
bnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnc3ZnL1N5bmNocm9uaXphYmxlVHlwZVdyYXBwZXIu
aCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5j
cHAnLAorICAgICAgICAgICAgJ3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwu
aCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENs
aWVudFdyYXBwZXIuaCcsCiAgICAgICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwJywK
ICAgICAgICAgICAgICd3ZWJzb2NrZXRzL1dlYlNvY2tldC5oJywKICAgICAgICAgICAgICd3ZWJz
b2NrZXRzL1dlYlNvY2tldENoYW5uZWwuY3BwJywKQEAgLTM1NTUsNiArMzU1OCw4IEBACiAgICAg
ICAgICAgICAnd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50LmgnLAogICAgICAgICAg
ICAgJ3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcCcsCiAgICAgICAgICAgICAnd2Vi
c29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaCcsCisgICAgICAgICAgICAnd2Vic29ja2V0cy9X
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAnLAorICAgICAgICAgICAgJ3dlYnNv
Y2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCcsCiAgICAgICAgICAgICAn
d29ya2Vycy9BYnN0cmFjdFdvcmtlci5jcHAnLAogICAgICAgICAgICAgJ3dvcmtlcnMvQWJzdHJh
Y3RXb3JrZXIuaCcsCiAgICAgICAgICAgICAnd29ya2Vycy9EZWRpY2F0ZWRXb3JrZXJDb250ZXh0
LmNwcCcsCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3Jl
LnBybwppbmRleCBiZTdhNTc2Li5lMGFkYzkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUu
cHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTMyMTcsNiArMzIxNywxMiBAQCBTT1VS
Q0VTICs9IFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0L1NvY2tldFN0cmVhbUhhbmRsZVNvdXAu
Y3BwIFwKICAgICBiaW5kaW5ncy9qcy9KU1dlYlNvY2tldEN1c3RvbS5jcHAgXAogICAgIGJpbmRp
bmdzL2pzL0pTV2ViU29ja2V0Q29uc3RydWN0b3IuY3BwCisKK2NvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9XT1JLRVJTPTEpIHsKK1NPVVJDRVMgKz0gXAorICAgIHdlYnNvY2tldHMvVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuY3BwIFwKKyAgICB3ZWJzb2NrZXRzL1dvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsLmNwcAorfQogfQogCiAjIEdFTkVSQVRPUiAxOiBJREwgY29tcGlsZXIK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IDYxNGFiOTAuLjBjMGYyMWIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtNDMzNjUsNiArNDMzNjUs
MTggQEAKIAkJCU5hbWU9IndlYnNvY2tldHMiDQogCQkJPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cd2Vic29ja2V0c1xUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAiDQor
CQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJz
b2NrZXRzXFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+
DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJ
CTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cd2Vic29ja2V0c1xXZWJTb2NrZXQuY3BwIg0K
IAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTQzMzkyLDYgKzQzNDA0LDE0IEBACiAJCQkJUmVsYXRp
dmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFdlYlNvY2tldEhhbmRzaGFrZS5oIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cd2Vic29ja2V0c1xXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx3ZWJzb2NrZXRzXFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4N
CiAJCTxGaWxlDQogCQkJUmVsYXRpdmVQYXRoPSIuLlxjb25maWcuaCINCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkyOTc1YmIuLmNkNjk5NjAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NjMsNiArOTYzLDEx
IEBACiAJCTUxMEQ0QTRFMTAzMTc3QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTQ3MTAz
MTc3QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsLmNwcCAqLzsgfTsKIAkJNTEwRDRBNEYx
MDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMEQ0QTQ4MTAzMTc3QTIwMDQ5RUE1NCAvKiBX
ZWJTb2NrZXRDaGFubmVsLmggKi87IH07CiAJCTUxMEQ0QTUwMTAzMTc3QTIwMDQ5RUE1NCAvKiBX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTBENEE0OTEwMzE3N0EyMDA0OUVBNTQgLyogV2ViU29ja2V0Q2hhbm5l
bENsaWVudC5oICovOyB9OworCQk1MTEyMjQ3MjEwQ0ZCOEM2MDA4MDk5RDcgLyogVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTExMjI0NzExMENGQjhDNjAwODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmNwcCAqLzsgfTsKKwkJNTExMjI0NzQxMENGQjhEODAwODA5OUQ3IC8qIFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MTEyMjQ3MzEwQ0ZCOEQ4MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaCAqLzsgfTsKKwkJNTExMjI0NzYxMENGQjhFODAwODA5OUQ3IC8qIFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExMjI0NzUxMENGQjhFODAwODA5OUQ3IC8qIFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oICovOyB9OworCQk1MTEyMjQ3
ODEwQ0ZCOEY0MDA4MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTExMjI0Nzcx
MENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCAq
LzsgfTsKKwkJNTExMjI0N0ExMENGQjhGRjAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MTEyMjQ3OTEwQ0ZCOEZGMDA4MDk5RDcgLyogV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWwuaCAqLzsgfTsKIAkJNTExNkQ5NzcwQ0YxNzdCRDAwQzJCODREIC8qIERhdGFiYXNl
RGV0YWlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTExNkQ5NzUwQ0YxNzdCRDAwQzJCODREIC8qIERhdGFiYXNlRGV0YWlscy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTUxMUYyMzE3MERDMTYwREEw
MDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxMUYyMzEzMERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0
b3JhZ2VUYXNrLmNwcCAqLzsgfTsKIAkJNTExRjIzMTgwREMxNjBEQTAwNEYwMDMyIC8qIExvY2Fs
U3RvcmFnZVRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUxMUYyMzE0MERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUYXNrLmggKi87IH07
CkBAIC02Mjc3LDYgKzYyODIsMTEgQEAKIAkJNTEwRDRBNDcxMDMxNzdBMjAwNDlFQTU0IC8qIFdl
YlNvY2tldENoYW5uZWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
V2ViU29ja2V0Q2hhbm5lbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMEQ0
QTQ4MTAzMTc3QTIwMDQ5RUE1NCAvKiBXZWJTb2NrZXRDaGFubmVsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYlNvY2tldENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNTEwRDRBNDkxMDMxNzdBMjAwNDlFQTU0IC8qIFdlYlNvY2tldENoYW5uZWxD
bGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViU29ja2V0Q2hhbm5l
bENsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyMjQ3MTEwQ0ZCOEM2
MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MTEyMjQ3MzEwQ0ZCOEQ4MDA4MDk5RDcgLyog
VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNTExMjI0NzUxMENGQjhFODAwODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsQ2xpZW50V3JhcHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTExMjI0NzcxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNTExMjI0NzkxMENGQjhGRjAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdv
cmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxMTZEOTc1MENGMTc3QkQwMEMyQjg0RCAvKiBEYXRhYmFzZURldGFpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0YWJhc2VEZXRhaWxzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxMUYyMzEzMERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0
b3JhZ2VUYXNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2Fs
U3RvcmFnZVRhc2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MTFGMjMxNDBE
QzE2MERBMDA0RjAwMzIgLyogTG9jYWxTdG9yYWdlVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBMb2NhbFN0b3JhZ2VUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMDk4Miw2ICsxMDk5MiwxMSBAQAogCQk1MThBMzRCRDEwMjZDODMxMDAxQjY4OTYg
Lyogd2Vic29ja2V0cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJNTExMjI0NzkxMENGQjhGRjAwODA5OUQ3IC8qIFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmggKi8sCisJCQkJNTExMjI0NzcxMENGQjhGNDAwODA5OUQ3IC8qIFdvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCAqLywKKwkJCQk1MTEyMjQ3NTEwQ0ZCOEU4MDA4
MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmggKi8sCisJ
CQkJNTExMjI0NzMxMENGQjhEODAwODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
LmggKi8sCisJCQkJNTExMjI0NzExMENGQjhDNjAwODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsLmNwcCAqLywKIAkJCQk1MThBMzRCRTEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29j
a2V0LmNwcCAqLywKIAkJCQk1MThBMzRCRjEwMjZDODMxMDAxQjY4OTYgLyogV2ViU29ja2V0Lmgg
Ki8sCiAJCQkJNTE4QTM0QzAxMDI2QzgzMTAwMUI2ODk2IC8qIFdlYlNvY2tldC5pZGwgKi8sCkBA
IC0xODI2NSw2ICsxODI4MCw5IEBACiAJCQkJQkM1NkNCMjMxMEQ1QUM4MDAwQTc3QzY0IC8qIEdl
b2xvY2F0aW9uQ29udHJvbGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1NkNCMjQx
MEQ1QUM4MDAwQTc3QzY0IC8qIEdlb2xvY2F0aW9uRXJyb3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDNTZDQjI1MTBENUFDODAwMEE3N0M2NCAvKiBHZW9sb2NhdGlvblBvc2l0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1MTEyMjQ3NDEwQ0ZCOEQ4MDA4MDk5RDcgLyogVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTUxMTIyNDc2MTBDRkI4RTgwMDgwOTlE
NyAvKiBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTUxMTIyNDdBMTBDRkI4RkYwMDgwOTlENyAvKiBXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0yMDQyMSw2ICsyMDQzOSw4IEBACiAJ
CQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdMVW5pZm9ybUxvY2F0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBDNDUzNDI3MTBDREJCRkEwMDg2OTE1NyAvKiBKU1dlYkdMVW5p
Zm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDNTZDQjIxMTBENUFDODAwMEE3
N0M2NCAvKiBHZW9sb2NhdGlvbkNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTEx
MjI0NzIxMENGQjhDNjAwODA5OUQ3IC8qIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTUxMTIyNDc4MTBDRkI4RjQwMDgwOTlENyAvKiBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvci5oIGIvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmgKaW5kZXggMDY5NjQ3YS4uNjMzZTYxMiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmgK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYlNvY2tldENvbnN0cnVjdG9yLmgKQEAgLTMx
LDYgKzMxLDggQEAKICNpZm5kZWYgSlNXZWJTb2NrZXRDb25zdHJ1Y3Rvcl9oCiAjZGVmaW5lIEpT
V2ViU29ja2V0Q29uc3RydWN0b3JfaAogCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorCiAjaW5j
bHVkZSAiSlNET01CaW5kaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ1LDYgKzQ3
LDggQEAgY2xhc3MgSlNXZWJTb2NrZXRDb25zdHJ1Y3RvciA6IHB1YmxpYyBET01Db25zdHJ1Y3Rv
ck9iamVjdCB7CiAgICAgdmlydHVhbCBjb25zdCBKU0M6OkNsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQogfTsKIAotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VUUykK
IAotI2VuZGlmICAvLyBKU1dlYlNvY2tldENvbnN0cnVjdG9yX2gKKyNlbmRpZiAvLyBKU1dlYlNv
Y2tldENvbnN0cnVjdG9yX2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3Jr
ZXJDb250ZXh0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXb3JrZXJDb250ZXh0
Q3VzdG9tLmNwcAppbmRleCA0OTBkOWIxLi5hYjI4Njc0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU1dvcmtlckNvbnRleHRDdXN0b20uY3BwCkBAIC0zMiw4ICszMiwxMCBAQAogI2luY2x1
ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIkpTRE9NR2xvYmFsT2JqZWN0LmgiCiAjaW5j
bHVkZSAiSlNFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiSlNFdmVudFNvdXJjZUNvbnN0cnVj
dG9yLmgiCiAjaW5jbHVkZSAiSlNNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiSlNNZXNzYWdlUG9ydC5oIgorI2luY2x1ZGUgIkpTV2ViU29ja2V0Q29uc3RydWN0b3IuaCIK
ICNpbmNsdWRlICJKU1dvcmtlckxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiSlNXb3JrZXJOYXZpZ2F0
b3IuaCIKICNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuaCIKQEAgLTQzLDEw
ICs0NSw2IEBACiAjaW5jbHVkZSAiV29ya2VyTmF2aWdhdG9yLmgiCiAjaW5jbHVkZSA8aW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuaD4KIAotI2lmIEVOQUJMRShFVkVOVFNPVVJDRSkKLSNpbmNsdWRl
ICJKU0V2ZW50U291cmNlQ29uc3RydWN0b3IuaCIKLSNlbmRpZgotCiB1c2luZyBuYW1lc3BhY2Ug
SlNDOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05Myw2ICs5MSwxMyBAQCBKU1ZhbHVlIEpT
V29ya2VyQ29udGV4dDo6eG1sSHR0cFJlcXVlc3QoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAg
IHJldHVybiBnZXRET01Db25zdHJ1Y3RvcjxKU1hNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3I+KGV4
ZWMsIHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKQorSlNWYWx1ZSBKU1dvcmtl
ckNvbnRleHQ6OndlYlNvY2tldChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGdldERPTUNvbnN0cnVjdG9yPEpTV2ViU29ja2V0Q29uc3RydWN0b3I+KGV4ZWMsIHRoaXMpOwor
fQorI2VuZGlmCisKIEpTVmFsdWUgSlNXb3JrZXJDb250ZXh0OjppbXBvcnRTY3JpcHRzKEV4ZWNT
dGF0ZSogZXhlYywgY29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICBpZiAoIWFyZ3Muc2l6ZSgp
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9u
UHJveHkuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJv
eHkuY3BwCmluZGV4IDQxMmZkZTAuLjdlM2M1NDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKQEAgLTMxOSw2ICszMTksMTIg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6Y29u
dmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdCgKICAgICBpZiAobXApCiAgICAgICAgIHJldHVybiBj
b252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBtcCk7CiAKKyNpZiBF
TkFCTEUoV0VCX1NPQ0tFVFMpCisgICAgV2ViU29ja2V0KiB3ZWJTb2NrZXQgPSB0YXJnZXQtPnRv
V2ViU29ja2V0KCk7CisgICAgaWYgKHdlYlNvY2tldCkKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6V0VCU09DS0VULCB3ZWJTb2NrZXQpOworI2VuZGlmCisK
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFs
dWU+KCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNv
Y2tldEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYlNvY2tldEN1
c3RvbS5jcHAKaW5kZXggYzliNDEzNi4uODU1YWI3ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhXZWJTb2NrZXRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViU29ja2V0Q3VzdG9tLmNwcApAQCAtOTMsMTQgKzkzLDkgQEAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4Q3VzdG9tOjp2OFdlYlNvY2tldENvbnN0cnVjdG9yQ2FsbGJh
Y2soY29uc3Qgdjg6OkFyZ3VtZW4KICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkVtcHR5IFVS
TCIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKIAogICAgIC8vIEdldCB0aGUgc2NyaXB0IGV4ZWN1
dGlvbiBjb250ZXh0LgotICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSAwOwot
ICAgIC8vIFRPRE86IFdvcmtlcnMKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgRnJhbWUq
IGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckN1cnJlbnRDb250ZXh0KCk7Ci0gICAg
ICAgIGlmICghZnJhbWUpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiV2ViU29ja2V0
IGNvbnN0cnVjdG9yJ3MgYXNzb2NpYXRlZCBmcmFtZSBpcyBub3QgYXZhaWxhYmxlIiwgVjhQcm94
eTo6UmVmZXJlbmNlRXJyb3IpOwotICAgICAgICBjb250ZXh0ID0gZnJhbWUtPmRvY3VtZW50KCk7
Ci0gICAgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBnZXRTY3JpcHRF
eGVjdXRpb25Db250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigiV2ViU29ja2V0IGNvbnN0cnVjdG9yJ3MgYXNzb2NpYXRlZCBmcmFtZSBpcyBub3Qg
YXZhaWxhYmxlIiwgVjhQcm94eTo6UmVmZXJlbmNlRXJyb3IpOwogCiAgICAgY29uc3QgS1VSTCYg
dXJsID0gY29udGV4dC0+Y29tcGxldGVVUkwodG9XZWJDb3JlU3RyaW5nKHVybHN0cmluZykpOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRD
dXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDb250ZXh0Q3Vz
dG9tLmNwcAppbmRleCBiNGE2MzgxLi5kMjU3ZmU0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKQEAgLTQyLDYgKzQyLDcg
QEAKICNpbmNsdWRlICJWOFByb3h5LmgiCiAjaW5jbHVkZSAiVjhVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0
LmgiCiAjaW5jbHVkZSAiV29ya2VyQ29udGV4dC5oIgogI2luY2x1ZGUgIldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eS5oIgogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhy
ZWFkQ29waWVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuY3BwCmlu
ZGV4IGQwMmRhNmMuLmMxOTc5YzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NU
aHJlYWRDb3BpZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIu
Y3BwCkBAIC0zMiw2ICszMiw3IEBACiAKICNpbmNsdWRlICJDcm9zc1RocmVhZENvcGllci5oIgog
CisjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgpAQCAtMzks
NiArNDAsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitDcm9zc1RocmVhZENvcGllckJh
c2U8ZmFsc2UsIEtVUkw+OjpUeXBlIENyb3NzVGhyZWFkQ29waWVyQmFzZTxmYWxzZSwgS1VSTD46
OmNvcHkoY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiB1cmwuY29weSgpOworfQorCiBD
cm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIFN0cmluZz46OlR5cGUgQ3Jvc3NUaHJlYWRDb3Bp
ZXJCYXNlPGZhbHNlLCBTdHJpbmc+Ojpjb3B5KGNvbnN0IFN0cmluZyYgc3RyKQogewogICAgIHJl
dHVybiBzdHIuY3Jvc3NUaHJlYWRTdHJpbmcoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3Bp
ZXIuaAppbmRleCAyYmRmNTdkLi41OTFhNTQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVhZENv
cGllci5oCkBAIC00MCw2ICs0MCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorICAgIGNs
YXNzIEtVUkw7CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvcjsKICAgICBjbGFzcyBSZXNvdXJjZVJl
cXVlc3Q7CiAgICAgY2xhc3MgUmVzb3VyY2VSZXNwb25zZTsKQEAgLTk0LDYgKzk1LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgfQogICAgIH07CiAKKyAgICB0ZW1wbGF0ZTw+IHN0
cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIEtVUkw+IHsKKyAgICAgICAgdHlwZWRl
ZiBLVVJMIFR5cGU7CisgICAgICAgIHN0YXRpYyBUeXBlIGNvcHkoY29uc3QgS1VSTCYpOworICAg
IH07CisKICAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2Us
IFN0cmluZz4gewogICAgICAgICB0eXBlZGVmIFN0cmluZyBUeXBlOwogICAgICAgICBzdGF0aWMg
VHlwZSBjb3B5KGNvbnN0IFN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRz
L1RocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uMjhiOTI2MwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
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
ZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNpbmNsdWRlICJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbC5oIgorCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbC5o
IgorI2luY2x1ZGUgIldlYlNvY2tldENoYW5uZWxDbGllbnQuaCIKKyNpbmNsdWRlICJXb3JrZXJD
b250ZXh0LmgiCisjaW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgorI2luY2x1ZGUgIldvcmtlclRo
cmVhZC5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiCisK
KyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBjaGFyIHdlYlNvY2tldENoYW5uZWxNb2RlW10gPSAid2ViU29ja2V0Q2hhbm5l
bE1vZGUiOworCitQYXNzUmVmUHRyPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsPiBUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIHByb3RvY29sKQoreworICAgIEFTU0VSVChjb250ZXh0KTsKKyAgICBBU1NFUlQo
Y2xpZW50KTsKKworI2lmIEVOQUJMRShXT1JLRVJTKQorICAgIGlmIChjb250ZXh0LT5pc1dvcmtl
ckNvbnRleHQoKSkgeworICAgICAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gc3Rh
dGljX2Nhc3Q8V29ya2VyQ29udGV4dCo+KGNvbnRleHQpOworICAgICAgICBXb3JrZXJSdW5Mb29w
JiBydW5Mb29wID0gd29ya2VyQ29udGV4dC0+dGhyZWFkKCktPnJ1bkxvb3AoKTsKKyAgICAgICAg
U3RyaW5nIG1vZGUgPSB3ZWJTb2NrZXRDaGFubmVsTW9kZTsKKyAgICAgICAgbW9kZS5hcHBlbmQo
U3RyaW5nOjpudW1iZXIocnVuTG9vcC5jcmVhdGVVbmlxdWVJZCgpKSk7CisgICAgICAgIHJldHVy
biBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKHdvcmtlckNvbnRleHQs
IGNsaWVudCwgbW9kZSwgdXJsLCBwcm90b2NvbCk7CisgICAgfQorI2VuZGlmIC8vIEVOQUJMRShX
T1JLRVJTKQorCisgICAgQVNTRVJUKGNvbnRleHQtPmlzRG9jdW1lbnQoKSk7CisgICAgcmV0dXJu
IFdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShjb250ZXh0LCBjbGllbnQsIHVybCwgcHJvdG9jb2wp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NP
Q0tFVFMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tl
dENoYW5uZWwuaCBiL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZWE0YjQKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwu
aApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
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
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxfaAor
I2RlZmluZSBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCisKKyNpZiBFTkFCTEUoV0VCX1NP
Q0tFVFMpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEtVUkw7CitjbGFzcyBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OworY2xhc3MgU3RyaW5nOworY2xhc3MgV2ViU29ja2V0Q2hh
bm5lbENsaWVudDsKKworY2xhc3MgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwgOiBwdWJsaWMg
Tm9uY29weWFibGUgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNvY2tl
dENoYW5uZWxDbGllbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdCgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgc2VuZChj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpID0gMDsKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgYnVm
ZmVyZWRBbW91bnQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCkgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNjb25uZWN0KCkgPSAwOyAvLyBXaWxsIHN1cHByZXNzIGRpZENs
b3NlKCkuCisKKyAgICB2b2lkIHJlZigpIHsgcmVmVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwo
KTsgfQorICAgIHZvaWQgZGVyZWYoKSB7IGRlcmVmVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwo
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB+VGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWwoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcmVmVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwo
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwo
KSA9IDA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAvLyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyLmggYi9XZWJDb3JlL3dlYnNvY2tldHMvVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWxDbGllbnRXcmFwcGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
OGJmNTFmYQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9UaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
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
IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCisjZGVmaW5lIFRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCisKKyNpZiBFTkFCTEUoV0VCX1NP
Q0tFVFMpCisKKyNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsQ2xpZW50LmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgU3RyaW5nOworCitjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IGNyZWF0ZShX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBjbGllbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcihjbGllbnQp
KTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyU3luY01ldGhvZERvbmUoKQorICAgIHsKKyAgICAg
ICAgbV9zeW5jTWV0aG9kRG9uZSA9IGZhbHNlOworICAgIH0KKyAgICB2b2lkIHNldFN5bmNNZXRo
b2REb25lKCkKKyAgICB7CisgICAgICAgIG1fc3luY01ldGhvZERvbmUgPSB0cnVlOworICAgIH0K
KworICAgIGJvb2wgc3luY01ldGhvZERvbmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fc3luY01ldGhvZERvbmU7CisgICAgfQorCisgICAgYm9vbCBzZW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3NlbnQ7CisgICAgfQorICAgIHZvaWQgc2V0U2VudChib29sIHNl
bnQpCisgICAgeworICAgICAgICBtX3NlbnQgPSBzZW50OworICAgICAgICBtX3N5bmNNZXRob2RE
b25lID0gdHJ1ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVkQW1vdW50KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J1ZmZlcmVkQW1vdW50OworICAgIH0KKyAg
ICB2b2lkIHNldEJ1ZmZlcmVkQW1vdW50KHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQpCisg
ICAgeworICAgICAgICBtX2J1ZmZlcmVkQW1vdW50ID0gYnVmZmVyZWRBbW91bnQ7CisgICAgICAg
IG1fc3luY01ldGhvZERvbmUgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgY2xlYXJDbGllbnQo
KQorICAgIHsKKyAgICAgICAgbV9jbGllbnQgPSAwOworICAgIH0KKworICAgIHZvaWQgZGlkQ29u
bmVjdCgpCisgICAgeworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAgICBtX2NsaWVu
dC0+ZGlkQ29ubmVjdCgpOworICAgIH0KKworICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoY29u
c3QgU3RyaW5nJiBtc2cpCisgICAgeworICAgICAgICBpZiAobV9jbGllbnQpCisgICAgICAgICAg
ICBtX2NsaWVudC0+ZGlkUmVjZWl2ZU1lc3NhZ2UobXNnKTsKKyAgICB9CisKKyAgICB2b2lkIGRp
ZENsb3NlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2NsaWVudCkKKyAgICAgICAgICAgIG1fY2xp
ZW50LT5kaWRDbG9zZSgpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIFRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcihXZWJTb2NrZXRDaGFubmVsQ2xpZW50KiBjbGllbnQp
CisgICAgICAgIDogbV9jbGllbnQoY2xpZW50KQorICAgICAgICAsIG1fc3luY01ldGhvZERvbmUo
ZmFsc2UpCisgICAgICAgICwgbV9zZW50KGZhbHNlKQorICAgICAgICAsIG1fYnVmZmVyZWRBbW91
bnQoMCkKKyAgICB7CisgICAgfQorCisgICAgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogbV9jbGll
bnQ7CisgICAgYm9vbCBtX3N5bmNNZXRob2REb25lOworICAgIGJvb2wgbV9zZW50OworICAgIHVu
c2lnbmVkIGxvbmcgbV9idWZmZXJlZEFtb3VudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VUUykKKworI2VuZGlmIC8vIFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dl
YnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3Bw
CmluZGV4IGJkNjJjZmEuLjA0MzU0OTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXQuY3BwCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCkBAIC00
NCw2ICs0NCw3IEBACiAjaW5jbHVkZSAiTWVzc2FnZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2NyaXB0
RXhlY3V0aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKKyNpbmNsdWRl
ICJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgogI2luY2x1ZGUgIldlYlNvY2tldENoYW5u
ZWwuaCIKICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTE0OCw3ICsxNDksNyBA
QCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
cHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBt
X2NoYW5uZWwgPSBXZWJTb2NrZXRDaGFubmVsOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpLCB0aGlzLCBtX3VybCwgbV9wcm90b2NvbCk7CisgICAgbV9jaGFubmVsID0gVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHRoaXMs
IG1fdXJsLCBtX3Byb3RvY29sKTsKICAgICBtX2NoYW5uZWwtPmNvbm5lY3QoKTsKIH0KIApAQCAt
MjE0LDcgKzIxNSw2IEBAIHZvaWQgV2ViU29ja2V0OjpkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBT
dHJpbmcmIG1zZykKICAgICBpZiAobV9zdGF0ZSAhPSBPUEVOIHx8ICFzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCiAgICAgICAgIHJldHVybjsKICAgICBSZWZQdHI8TWVzc2FnZUV2ZW50PiBldnQg
PSBNZXNzYWdlRXZlbnQ6OmNyZWF0ZSgpOwotICAgIC8vIEZJWE1FOiBvcmlnaW4sIGxhc3RFdmVu
dElkLCBzb3VyY2UsIG1lc3NhZ2VQb3J0LgogICAgIGV2dC0+aW5pdE1lc3NhZ2VFdmVudChldmVu
dE5hbWVzKCkubWVzc2FnZUV2ZW50LCBmYWxzZSwgZmFsc2UsIFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZTo6Y3JlYXRlKG1zZyksICIiLCAiIiwgMCwgMCk7CiAgICAgZGlzcGF0Y2hFdmVudChldnQpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5oIGIvV2ViQ29yZS93
ZWJzb2NrZXRzL1dlYlNvY2tldC5oCmluZGV4IDllY2JlZDcuLjE4ZTJiMjUgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuaAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0LmgKQEAgLTQ2LDcgKzQ2LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
IGNsYXNzIFN0cmluZzsKLSAgICBjbGFzcyBXZWJTb2NrZXRDaGFubmVsOworICAgIGNsYXNzIFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOwogCiAgICAgY2xhc3MgV2ViU29ja2V0IDogcHVibGlj
IFJlZkNvdW50ZWQ8V2ViU29ja2V0PiwgcHVibGljIEV2ZW50VGFyZ2V0LCBwdWJsaWMgQWN0aXZl
RE9NT2JqZWN0LCBwdWJsaWMgV2ViU29ja2V0Q2hhbm5lbENsaWVudCB7CiAgICAgcHVibGljOgpA
QCAtODMsMjAgKzgzLDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2aXJ0dWFs
IFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSBjb25zdDsK
IAotICAgICAgICAvLyBBY3RpdmVET01PYmplY3QKLSAgICAgICAgLy8gIHZpcnR1YWwgYm9vbCBo
YXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdDsKLSAgICAgICAgLy8gdmlydHVhbCB2b2lkIGNvbnRl
eHREZXN0cm95ZWQoKTsKLSAgICAgICAgLy8gdmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25z
dDsKLSAgICAgICAgLy8gdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKLSAgICAgICAgLy8gdmlydHVh
bCB2b2lkIHJlc3VtZSgpOwotICAgICAgICAvLyB2aXJ0dWFsIHZvaWQgc3RvcCgpOwotCiAgICAg
ICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Pjo6cmVmOwogICAgICAgICB1c2luZyBSZWZD
b3VudGVkPFdlYlNvY2tldD46OmRlcmVmOwogCiAgICAgICAgIC8vIFdlYlNvY2tldENoYW5uZWxD
bGllbnQKICAgICAgICAgdmlydHVhbCB2b2lkIGRpZENvbm5lY3QoKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbXNnKTsKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaWRDbG9zZSgpOwogCiAgICAgcHJpdmF0ZToKQEAgLTExMSw3ICsx
MDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgZGlzcGF0Y2hNZXNzYWdl
RXZlbnQoRXZlbnQqKTsKICAgICAgICAgdm9pZCBkaXNwYXRjaENsb3NlRXZlbnQoRXZlbnQqKTsK
IAotICAgICAgICBSZWZQdHI8V2ViU29ja2V0Q2hhbm5lbD4gbV9jaGFubmVsOworICAgICAgICBS
ZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+IG1fY2hhbm5lbDsKIAogICAgICAgICBT
dGF0ZSBtX3N0YXRlOwogICAgICAgICBLVVJMIG1fdXJsOwpAQCAtMTE5LDggKzExMSw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXRE
YXRhOwogICAgIH07CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKLSNlbmRpZiAgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQorI2VuZGlmIC8vIEVOQUJM
RShXRUJfU09DS0VUUykKIAotI2VuZGlmICAvLyBXZWJTb2NrZXRfaAorI2VuZGlmIC8vIFdlYlNv
Y2tldF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5o
IGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWwuaAppbmRleCAxNGIxZThjLi43
ZWM4MjZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbC5o
CisrKyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsLmgKQEAgLTM0LDYgKzM0
LDcgQEAKICNpZiBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAKICNpbmNsdWRlICJTb2NrZXRTdHJlYW1I
YW5kbGVDbGllbnQuaCIKKyNpbmNsdWRlICJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5oIgog
I2luY2x1ZGUgIldlYlNvY2tldEhhbmRzaGFrZS5oIgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CiAKQEAgLTQ1LDE2ICs0NiwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
U29ja2V0U3RyZWFtRXJyb3I7CiAgICAgY2xhc3MgV2ViU29ja2V0Q2hhbm5lbENsaWVudDsKIAot
ICAgIGNsYXNzIFdlYlNvY2tldENoYW5uZWwgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJTb2NrZXRD
aGFubmVsPiwgcHVibGljIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudCB7CisgICAgY2xhc3MgV2Vi
U29ja2V0Q2hhbm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlNvY2tldENoYW5uZWw+LCBwdWJs
aWMgU29ja2V0U3RyZWFtSGFuZGxlQ2xpZW50LCBwdWJsaWMgVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwgewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViU29ja2V0
Q2hhbm5lbD4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFdlYlNvY2tl
dENoYW5uZWxDbGllbnQqIGNsaWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHBy
b3RvY29sKSB7IHJldHVybiBhZG9wdFJlZihuZXcgV2ViU29ja2V0Q2hhbm5lbChjb250ZXh0LCBj
bGllbnQsIHVybCwgcHJvdG9jb2wpKTsgfQogICAgICAgICB2aXJ0dWFsIH5XZWJTb2NrZXRDaGFu
bmVsKCk7CiAKLSAgICAgICAgdm9pZCBjb25uZWN0KCk7Ci0gICAgICAgIGJvb2wgc2VuZChjb25z
dCBTdHJpbmcmIG1zZyk7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBj
b25zdDsKLSAgICAgICAgdm9pZCBjbG9zZSgpOwotICAgICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsg
Ly8gV2lsbCBzdXBwcmVzcyBkaWRDbG9zZSgpLgorICAgICAgICB2aXJ0dWFsIHZvaWQgY29ubmVj
dCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwor
ICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNjb25u
ZWN0KCk7IC8vIFdpbGwgc3VwcHJlc3MgZGlkQ2xvc2UoKS4KIAogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkT3BlbihTb2NrZXRTdHJlYW1IYW5kbGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRp
ZENsb3NlKFNvY2tldFN0cmVhbUhhbmRsZSopOwpAQCAtNjMsOCArNjQsMTUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9u
Q2hhbGxlbmdlKFNvY2tldFN0cmVhbUhhbmRsZSosIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxl
bmdlJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxs
ZW5nZShTb2NrZXRTdHJlYW1IYW5kbGUqLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYp
OwogCisgICAgICAgIHVzaW5nIFJlZkNvdW50ZWQ8V2ViU29ja2V0Q2hhbm5lbD46OnJlZjsKKyAg
ICAgICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXRDaGFubmVsPjo6ZGVyZWY7CisKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgdm9pZCByZWZUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbCgpIHsgcmVmKCk7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWwoKSB7IGRlcmVmKCk7IH0KKwogICAgIHByaXZhdGU6Ci0gICAgICAgIFdl
YlNvY2tldENoYW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNvY2tldENoYW5uZWxD
bGllbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7CisgICAgICAgIFdlYlNvY2tldENo
YW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFdlYlNvY2tldENoYW5uZWxDbGllbnQqLCBj
b25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCk7CiAKICAgICAgICAgYm9vbCBhcHBl
bmRUb0J1ZmZlcihjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKTsKICAgICAgICAgdm9pZCBza2lw
QnVmZmVyKGludCBsZW4pOwpAQCAtNzgsOCArODYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgbV91bmhhbmRsZWRCdWZmZXJTaXplOwogICAgIH07CiAKLX0g
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLSNlbmRpZiAg
Ly8gRU5BQkxFKFdFQl9TT0NLRVRTKQorI2VuZGlmIC8vIEVOQUJMRShXRUJfU09DS0VUUykKIAot
I2VuZGlmICAvLyBXZWJTb2NrZXRDaGFubmVsX2gKKyNlbmRpZiAvLyBXZWJTb2NrZXRDaGFubmVs
X2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRDaGFubmVsQ2xpZW50
LmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0Q2hhbm5lbENsaWVudC5oCmluZGV4IDQ2
M2NhZGEuLjE2MzA3MGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRD
aGFubmVsQ2xpZW50LmgKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldENoYW5uZWxD
bGllbnQuaApAQCAtNDYsOCArNDYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFdl
YlNvY2tldENoYW5uZWxDbGllbnQoKSB7IH0KICAgICB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYgIC8vIEVOQUJMRShXRUJfU09D
S0VUUykKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCiAKLSNlbmRpZiAgLy8gV2ViU29j
a2V0Q2hhbm5lbENsaWVudF9oCisjZW5kaWYgLy8gV2ViU29ja2V0Q2hhbm5lbENsaWVudF9oCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmggYi9XZWJD
b3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmgKaW5kZXggZDVkYmU2OC4uYmRhMzIw
YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oCisr
KyBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaApAQCAtMTA2LDggKzEw
Niw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1fc2V0Q29va2llMjsK
ICAgICB9OwogCi19ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQorfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCi0jZW5kaWYgIC8vIEVOQUJMRShXRUJfU09DS0VUUykKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X1NPQ0tFVFMpCiAKLSNlbmRpZiAgLy8gV2ViU29ja2V0SGFuZHNoYWtlX2gKKyNlbmRpZiAvLyBX
ZWJTb2NrZXRIYW5kc2hha2VfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmNwcCBiL1dlYkNvcmUvd2Vic29ja2V0cy9Xb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjE1YzE1MQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvd2Vic29ja2V0
cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5jcHAKQEAgLTAsMCArMSwzNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9TT0NLRVRTKSAmJiBFTkFCTEUo
V09SS0VSUykKKworI2luY2x1ZGUgIldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgi
CisKKyNpbmNsdWRlICJHZW5lcmljV29ya2VyVGFzay5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIlRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlci5oIgorI2luY2x1ZGUgIldlYlNv
Y2tldENoYW5uZWwuaCIKKyNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsQ2xpZW50LmgiCisjaW5j
bHVkZSAiV29ya2VyQ29udGV4dC5oIgorI2luY2x1ZGUgIldvcmtlckxvYWRlclByb3h5LmgiCisj
aW5jbHVkZSAiV29ya2VyUnVuTG9vcC5oIgorI2luY2x1ZGUgIldvcmtlclRocmVhZC5oIgorCisj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWwoV29ya2VyQ29udGV4dCogY29udGV4dCwgV2ViU29ja2V0Q2hhbm5lbENsaWVudCogY2xp
ZW50LCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2wpCisgICAgOiBtX3dvcmtlckNvbnRleHQoY29udGV4dCkKKyAgICAsIG1fd29y
a2VyQ2xpZW50V3JhcHBlcihUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI6
OmNyZWF0ZShjbGllbnQpKQorICAgICwgbV9icmlkZ2UobmV3IEJyaWRnZShtX3dvcmtlckNsaWVu
dFdyYXBwZXIsIG1fd29ya2VyQ29udGV4dCwgdGFza01vZGUsIHVybCwgcHJvdG9jb2wpKQorewor
fQorCitXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6fldvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsKCkKK3sKKyAgICBpZiAobV9icmlkZ2UpCisgICAgICAgIG1fYnJpZGdl
LT5kaXNjb25uZWN0KCk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWw6OmNvbm5lY3QoKQoreworICAgIGlmIChtX2JyaWRnZSkKKyAgICAgICAgbV9icmlkZ2UtPmNv
bm5lY3QoKTsKK30KKworYm9vbCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6c2Vu
ZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX2JyaWRnZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiBtX2JyaWRnZS0+c2VuZChtZXNzYWdlKTsKK30KKwor
dW5zaWduZWQgbG9uZyBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6YnVmZmVyZWRB
bW91bnQoKSBjb25zdAoreworICAgIGlmICghbV9icmlkZ2UpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBtX2JyaWRnZS0+YnVmZmVyZWRBbW91bnQoKTsKK30KKwordm9pZCBXb3JrZXJU
aHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6Y2xvc2UoKQoreworICAgIGlmICghbV9icmlkZ2Up
CisgICAgICAgIG1fYnJpZGdlLT5jbG9zZSgpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsOjpkaXNjb25uZWN0KCkKK3sKKyAgICBtX2JyaWRnZS0+ZGlzY29ubmVj
dCgpOworICAgIG1fYnJpZGdlLmNsZWFyKCk7Cit9CisKK1dvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjpQZWVyOjpQZWVyKFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFRocmVhZGFibGVX
ZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiBjbGllbnRXcmFwcGVyLCBXb3JrZXJMb2Fk
ZXJQcm94eSYgbG9hZGVyUHJveHksIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90
b2NvbCkKKyAgICA6IG1fd29ya2VyQ2xpZW50V3JhcHBlcihjbGllbnRXcmFwcGVyKQorICAgICwg
bV9sb2FkZXJQcm94eShsb2FkZXJQcm94eSkKKyAgICAsIG1fbWFpbldlYlNvY2tldENoYW5uZWwo
V2ViU29ja2V0Q2hhbm5lbDo6Y3JlYXRlKGNvbnRleHQsIHRoaXMsIHVybCwgcHJvdG9jb2wpKQor
ICAgICwgbV90YXNrTW9kZSh0YXNrTW9kZSkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworfQorCitXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6flBlZXIoKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgaWYgKG1fbWFpbldlYlNvY2tldENo
YW5uZWwpCisgICAgICAgIG1fbWFpbldlYlNvY2tldENoYW5uZWwtPmRpc2Nvbm5lY3QoKTsKK30K
Kwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6Y29ubmVjdCgp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbWFpbldlYlNvY2tl
dENoYW5uZWwpCisgICAgICAgIHJldHVybjsKKyAgICBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5j
b25uZWN0KCk7Cit9CisKK3N0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRTZW5kKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBi
b29sIHNlbnQpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtl
ckNvbnRleHQoKSk7CisgICAgc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyKj4od29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSktPnNldFNlbnQoc2VudCk7
Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6OlBlZXI6OnNlbmQo
Y29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cisg
ICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsIHx8ICFtX3dvcmtlckNsaWVudFdyYXBwZXIp
CisgICAgICAgIHJldHVybjsKKyAgICBib29sIHNlbnQgPSBtX21haW5XZWJTb2NrZXRDaGFubmVs
LT5zZW5kKG1lc3NhZ2UpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3Jr
ZXJDb250ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmd29ya2VyQ29udGV4dERpZFNlbmQsIG1fd29y
a2VyQ2xpZW50V3JhcHBlciwgc2VudCksIG1fdGFza01vZGUpOworfQorCitzdGF0aWMgdm9pZCB3
b3JrZXJDb250ZXh0RGlkR2V0QnVmZmVyZWRBbW91bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWxDbGllbnRXcmFwcGVyPiA+IHdvcmtlckNsaWVudFdyYXBwZXIsIHVuc2lnbmVkIGxvbmcgYnVm
ZmVyZWRBbW91bnQpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dv
cmtlckNvbnRleHQoKSk7CisgICAgc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5u
ZWxDbGllbnRXcmFwcGVyKj4od29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSktPnNldEJ1ZmZlcmVk
QW1vdW50KGJ1ZmZlcmVkQW1vdW50KTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6UGVlcjo6YnVmZmVyZWRBbW91bnQoKQoreworICAgIEFTU0VSVChpc01haW5U
aHJlYWQoKSk7CisgICAgaWYgKCFtX21haW5XZWJTb2NrZXRDaGFubmVsIHx8ICFtX3dvcmtlckNs
aWVudFdyYXBwZXIpCisgICAgICAgIHJldHVybjsKKyAgICB1bnNpZ25lZCBsb25nIGJ1ZmZlcmVk
QW1vdW50ID0gbV9tYWluV2ViU29ja2V0Q2hhbm5lbC0+YnVmZmVyZWRBbW91bnQoKTsKKyAgICBt
X2xvYWRlclByb3h5LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFj
a1Rhc2soJndvcmtlckNvbnRleHREaWRHZXRCdWZmZXJlZEFtb3VudCwgbV93b3JrZXJDbGllbnRX
cmFwcGVyLCBidWZmZXJlZEFtb3VudCksIG1fdGFza01vZGUpOworfQorCit2b2lkIFdvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpQZWVyOjpjbG9zZSgpCit7CisgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKKyAgICBpZiAoIW1fbWFpbldlYlNvY2tldENoYW5uZWwpCisgICAgICAg
IHJldHVybjsKKyAgICBtX21haW5XZWJTb2NrZXRDaGFubmVsLT5jbG9zZSgpOworICAgIG1fbWFp
bldlYlNvY2tldENoYW5uZWwgPSAwOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjpQZWVyOjpkaXNjb25uZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOworICAgIGlmICghbV9tYWluV2ViU29ja2V0Q2hhbm5lbCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fbWFpbldlYlNvY2tldENoYW5uZWwtPmRpc2Nvbm5lY3QoKTsKKyAgICBtX21haW5XZWJT
b2NrZXRDaGFubmVsID0gMDsKK30KKworc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZENvbm5l
Y3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUmVmUHRyPFRocmVhZFNhZmVTaGFy
ZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IHdvcmtlckNsaWVu
dFdyYXBwZXIpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250ZXh0LT5pc1dvcmtl
ckNvbnRleHQoKSk7CisgICAgc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyKj4od29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSktPmRpZENvbm5lY3QoKTsK
K30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6ZGlkQ29u
bmVjdCgpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2xvYWRlclByb3h5
LnBvc3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtl
ckNvbnRleHREaWRDb25uZWN0LCBtX3dvcmtlckNsaWVudFdyYXBwZXIpLCBtX3Rhc2tNb2RlKTsK
K30KKworc3RhdGljIHZvaWQgd29ya2VyQ29udGV4dERpZFJlY2VpdmVNZXNzYWdlKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFJlZlB0cjxUaHJlYWRTYWZlU2hhcmVkPFRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiB3b3JrZXJDbGllbnRXcmFwcGVyLCBj
b25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBjb250
ZXh0LT5pc1dvcmtlckNvbnRleHQoKSk7CisgICAgc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyKj4od29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSktPmRp
ZFJlY2VpdmVNZXNzYWdlKG1lc3NhZ2UpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpQZWVyOjpkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBtX2xvYWRlclByb3h5LnBv
c3RUYXNrRm9yTW9kZVRvV29ya2VyQ29udGV4dChjcmVhdGVDYWxsYmFja1Rhc2soJndvcmtlckNv
bnRleHREaWRSZWNlaXZlTWVzc2FnZSwgbV93b3JrZXJDbGllbnRXcmFwcGVyLCBtZXNzYWdlKSwg
bV90YXNrTW9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdvcmtlckNvbnRleHREaWRDbG9zZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+ID4gd29ya2VyQ2xpZW50V3JhcHBl
cikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlzV29ya2VyQ29udGV4
dCgpKTsKKyAgICBzdGF0aWNfY2FzdDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXIqPih3b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKS0+ZGlkQ2xvc2UoKTsKK30KKwordm9p
ZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6UGVlcjo6ZGlkQ2xvc2UoKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgbV9tYWluV2ViU29ja2V0Q2hhbm5lbCA9
IDA7CisgICAgbV9sb2FkZXJQcm94eS5wb3N0VGFza0Zvck1vZGVUb1dvcmtlckNvbnRleHQoY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZ3b3JrZXJDb250ZXh0RGlkQ2xvc2UsIG1fd29ya2VyQ2xpZW50V3Jh
cHBlciksIG1fdGFza01vZGUpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsOjpCcmlkZ2U6OnNldFdlYlNvY2tldENoYW5uZWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgQnJpZGdlKiB0aGlzUHRyLCBQZWVyKiBwZWVyLCBSZWZQdHI8VGhyZWFkU2Fm
ZVNoYXJlZDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+ID4gd29ya2Vy
Q2xpZW50V3JhcHBlcikKK3sKKyAgICBBU1NFUlRfVU5VU0VEKGNvbnRleHQsIGNvbnRleHQtPmlz
V29ya2VyQ29udGV4dCgpKTsKKyAgICB0aGlzUHRyLT5tX3BlZXIgPSBwZWVyOworICAgIHN0YXRp
Y19jYXN0PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcio+KHdvcmtlckNs
aWVudFdyYXBwZXIuZ2V0KCkpLT5zZXRTeW5jTWV0aG9kRG9uZSgpOworfQorCit2b2lkIFdvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6Om1haW5UaHJlYWRDcmVhdGVXZWJT
b2NrZXRDaGFubmVsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEJyaWRnZSogdGhp
c1B0ciwgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyPiA+IGNsaWVudFdyYXBwZXIsIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1
bWVudCgpKTsKKworICAgIFBlZXIqIHBlZXIgPSBQZWVyOjpjcmVhdGUoY2xpZW50V3JhcHBlciwg
dGhpc1B0ci0+bV9sb2FkZXJQcm94eSwgY29udGV4dCwgdGFza01vZGUsIHVybCwgcHJvdG9jb2wp
OworICAgIHRoaXNQdHItPm1fbG9hZGVyUHJveHkucG9zdFRhc2tGb3JNb2RlVG9Xb3JrZXJDb250
ZXh0KGNyZWF0ZUNhbGxiYWNrVGFzaygmQnJpZGdlOjpzZXRXZWJTb2NrZXRDaGFubmVsLCB0aGlz
UHRyLCBwZWVyLCBjbGllbnRXcmFwcGVyKSwgdGFza01vZGUpOworfQorCitXb3JrZXJUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpCcmlkZ2UoUGFzc1JlZlB0cjxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+IHdvcmtlckNsaWVudFdyYXBwZXIsIFBhc3NS
ZWZQdHI8V29ya2VyQ29udGV4dD4gd29ya2VyQ29udGV4dCwgY29uc3QgU3RyaW5nJiB0YXNrTW9k
ZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQorICAgIDogbV93b3Jr
ZXJDbGllbnRXcmFwcGVyKHdvcmtlckNsaWVudFdyYXBwZXIpCisgICAgLCBtX3dvcmtlckNvbnRl
eHQod29ya2VyQ29udGV4dCkKKyAgICAsIG1fbG9hZGVyUHJveHkobV93b3JrZXJDb250ZXh0LT50
aHJlYWQoKS0+d29ya2VyTG9hZGVyUHJveHkoKSkKKyAgICAsIG1fdGFza01vZGUodGFza01vZGUp
CisgICAgLCBtX3BlZXIoMCkKK3sKKyAgICBBU1NFUlQoY29udGV4dC0+aXNXb3JrZXJDb250ZXh0
KCkpOworICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0KCkpOworICAgIHNldE1l
dGhvZE5vdENvbXBsZXRlZCgpOworICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihj
cmVhdGVDYWxsYmFja1Rhc2soJkJyaWRnZTo6bWFpblRocmVhZENyZWF0ZVdlYlNvY2tldENoYW5u
ZWwsIHRoaXMsIG1fd29ya2VyQ2xpZW50V3JhcHBlciwgbV90YXNrTW9kZSwgdXJsLCBwcm90b2Nv
bCkpOworICAgIHdhaXRGb3JNZXRob2RDb21wbGV0aW9uKCk7CisgICAgQVNTRVJUKG1fcGVlcik7
Cit9CisKK1dvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6On5CcmlkZ2Uo
KQoreworICAgIGRpc2Nvbm5lY3QoKTsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29j
a2V0Q2hhbm5lbDo6bWFpblRocmVhZENvbm5lY3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGVlciogcGVlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFT
U0VSVF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQo
cGVlcik7CisKKyAgICBwZWVyLT5jb25uZWN0KCk7Cit9CisKK3ZvaWQgV29ya2VyVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWw6OkJyaWRnZTo6Y29ubmVjdCgpCit7CisgICAgQVNTRVJUKG1fd29y
a2VyQ2xpZW50V3JhcHBlcik7CisgICAgQVNTRVJUKG1fcGVlcik7CisgICAgbV9sb2FkZXJQcm94
eS5wb3N0VGFza1RvTG9hZGVyKGNyZWF0ZUNhbGxiYWNrVGFzaygmV29ya2VyVGhyZWFkYWJsZVdl
YlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRDb25uZWN0LCBtX3BlZXIpKTsKK30KKwordm9pZCBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmQoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGVlciogcGVlciwgY29uc3QgU3RyaW5nJiBtZXNzYWdl
KQoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb250
ZXh0LCBjb250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIEFTU0VSVChwZWVyKTsKKworICAgIHBl
ZXItPnNlbmQobWVzc2FnZSk7Cit9CisKK2Jvb2wgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENo
YW5uZWw6OkJyaWRnZTo6c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFt
X3dvcmtlckNsaWVudFdyYXBwZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBBU1NFUlQo
bV9wZWVyKTsKKyAgICBzZXRNZXRob2ROb3RDb21wbGV0ZWQoKTsKKyAgICBtX2xvYWRlclByb3h5
LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2Vi
U29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZFNlbmQsIG1fcGVlciwgbWVzc2FnZSkpOworICAgIHdh
aXRGb3JNZXRob2RDb21wbGV0aW9uKCk7CisgICAgVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxD
bGllbnRXcmFwcGVyKiBjbGllbnRXcmFwcGVyID0gc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWxDbGllbnRXcmFwcGVyKj4obV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKTsK
KyAgICByZXR1cm4gY2xpZW50V3JhcHBlciAmJiBjbGllbnRXcmFwcGVyLT5zZW50KCk7Cit9CisK
K3ZvaWQgV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw6Om1haW5UaHJlYWRCdWZmZXJl
ZEFtb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQZWVyKiBwZWVyKQorewor
ICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgQVNTRVJUX1VOVVNFRChjb250ZXh0LCBj
b250ZXh0LT5pc0RvY3VtZW50KCkpOworICAgIEFTU0VSVChwZWVyKTsKKworICAgIHBlZXItPmJ1
ZmZlcmVkQW1vdW50KCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgV29ya2VyVGhyZWFkYWJsZVdlYlNv
Y2tldENoYW5uZWw6OkJyaWRnZTo6YnVmZmVyZWRBbW91bnQoKQoreworICAgIGlmICghbV93b3Jr
ZXJDbGllbnRXcmFwcGVyKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBU1NFUlQobV9wZWVyKTsK
KyAgICBzZXRNZXRob2ROb3RDb21wbGV0ZWQoKTsKKyAgICBtX2xvYWRlclByb3h5LnBvc3RUYXNr
VG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbDo6bWFpblRocmVhZEJ1ZmZlcmVkQW1vdW50LCBtX3BlZXIpKTsKKyAgICB3YWl0Rm9yTWV0
aG9kQ29tcGxldGlvbigpOworICAgIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3Jh
cHBlciogY2xpZW50V3JhcHBlciA9IHN0YXRpY19jYXN0PFRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsQ2xpZW50V3JhcHBlcio+KG1fd29ya2VyQ2xpZW50V3JhcHBlci5nZXQoKSk7CisgICAgaWYg
KGNsaWVudFdyYXBwZXIpCisgICAgICAgIHJldHVybiBjbGllbnRXcmFwcGVyLT5idWZmZXJlZEFt
b3VudCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJTb2Nr
ZXRDaGFubmVsOjptYWluVGhyZWFkQ2xvc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCwgUGVlciogcGVlcikKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VS
VF9VTlVTRUQoY29udGV4dCwgY29udGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQocGVl
cik7CisKKyAgICBwZWVyLT5jbG9zZSgpOworfQorCit2b2lkIFdvcmtlclRocmVhZGFibGVXZWJT
b2NrZXRDaGFubmVsOjpCcmlkZ2U6OmNsb3NlKCkKK3sKKyAgICBBU1NFUlQobV9wZWVyKTsKKyAg
ICBtX2xvYWRlclByb3h5LnBvc3RUYXNrVG9Mb2FkZXIoY3JlYXRlQ2FsbGJhY2tUYXNrKCZXb3Jr
ZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZENsb3NlLCBtX3BlZXIpKTsK
K30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6bWFpblRocmVhZERl
c3Ryb3koU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGVlciogcGVlcikKK3sKKyAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVF9VTlVTRUQoY29udGV4dCwgY29u
dGV4dC0+aXNEb2N1bWVudCgpKTsKKyAgICBBU1NFUlQocGVlcik7CisKKyAgICBkZWxldGUgcGVl
cjsKK30KKwordm9pZCBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpk
aXNjb25uZWN0KCkKK3sKKyAgICBjbGVhckNsaWVudFdyYXBwZXIoKTsKKyAgICBpZiAobV9wZWVy
KSB7CisgICAgICAgIFBlZXIqIHBlZXIgPSBtX3BlZXI7CisgICAgICAgIG1fcGVlciA9IDA7Cisg
ICAgICAgIG1fbG9hZGVyUHJveHkucG9zdFRhc2tUb0xvYWRlcihjcmVhdGVDYWxsYmFja1Rhc2so
Jm1haW5UaHJlYWREZXN0cm95LCBwZWVyKSk7CisgICAgfQorfQorCit2b2lkIFdvcmtlclRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsOjpCcmlkZ2U6OmNsZWFyQ2xpZW50V3JhcHBlcigpCit7Cisg
ICAgc3RhdGljX2Nhc3Q8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyKj4o
bV93b3JrZXJDbGllbnRXcmFwcGVyLmdldCgpKS0+Y2xlYXJDbGllbnQoKTsKK30KKwordm9pZCBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjpzZXRNZXRob2ROb3RDb21w
bGV0ZWQoKQoreworICAgIEFTU0VSVChtX3dvcmtlckNsaWVudFdyYXBwZXIpOworICAgIHN0YXRp
Y19jYXN0PFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcio+KG1fd29ya2Vy
Q2xpZW50V3JhcHBlci5nZXQoKSktPmNsZWFyU3luY01ldGhvZERvbmUoKTsKK30KKwordm9pZCBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbDo6QnJpZGdlOjp3YWl0Rm9yTWV0aG9kQ29t
cGxldGlvbigpCit7CisgICAgV29ya2VyUnVuTG9vcCYgcnVuTG9vcCA9IG1fd29ya2VyQ29udGV4
dC0+dGhyZWFkKCktPnJ1bkxvb3AoKTsKKyAgICBNZXNzYWdlUXVldWVXYWl0UmVzdWx0IHJlc3Vs
dCA9IE1lc3NhZ2VRdWV1ZU1lc3NhZ2VSZWNlaXZlZDsKKyAgICBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXIqIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRh
YmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdyYXBwZXIu
Z2V0KCkpOworICAgIHdoaWxlIChjbGllbnRXcmFwcGVyICYmICFjbGllbnRXcmFwcGVyLT5zeW5j
TWV0aG9kRG9uZSgpICYmIHJlc3VsdCAhPSBNZXNzYWdlUXVldWVUZXJtaW5hdGVkKSB7CisgICAg
ICAgIHJlc3VsdCA9IHJ1bkxvb3AucnVuSW5Nb2RlKG1fd29ya2VyQ29udGV4dC5nZXQoKSwgbV90
YXNrTW9kZSk7CisgICAgICAgIGNsaWVudFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXIqPihtX3dvcmtlckNsaWVudFdyYXBwZXIuZ2V0
KCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9TT0NLRVRTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtlclRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmggYi9XZWJDb3JlL3dlYnNvY2tldHMvV29ya2VyVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi40NTk0NWE2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dvcmtl
clRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsLmgKQEAgLTAsMCArMSwxNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBX
b3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCisjZGVmaW5lIFdvcmtlclRocmVhZGFi
bGVXZWJTb2NrZXRDaGFubmVsX2gKKworI2lmIEVOQUJMRShXRUJfU09DS0VUUykgJiYgRU5BQkxF
KFdPUktFUlMpCisKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlRocmVh
ZGFibGVXZWJTb2NrZXRDaGFubmVsLmgiCisjaW5jbHVkZSAiV2ViU29ja2V0Q2hhbm5lbENsaWVu
dC5oIgorCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgS1VSTDsKK2NsYXNzIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ7CitjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXI7CitjbGFzcyBXb3JrZXJDb250ZXh0OworY2xhc3MgV29ya2VyTG9hZGVyUHJveHk7Citj
bGFzcyBXb3JrZXJSdW5Mb29wOworCitjbGFzcyBXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hh
bm5lbCA6IHB1YmxpYyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVs
PiwgcHVibGljIFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUGFzc1JlZlB0cjxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD4gY3JlYXRlKFdvcmtlckNv
bnRleHQqIHdvcmtlckNvbnRleHQsIFdlYlNvY2tldENoYW5uZWxDbGllbnQqIGNsaWVudCwgY29u
c3QgU3RyaW5nJiB0YXNrTW9kZSwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3Rv
Y29sKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXb3JrZXJUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbCh3b3JrZXJDb250ZXh0LCBjbGllbnQsIHRhc2tNb2RlLCB1cmwsIHBy
b3RvY29sKSk7CisgICAgfQorICAgIHZpcnR1YWwgfldvcmtlclRocmVhZGFibGVXZWJTb2NrZXRD
aGFubmVsKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29ubmVjdCgpOworICAgIHZpcnR1YWwgYm9v
bCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgdmlydHVhbCB1bnNpZ25lZCBsb25n
IGJ1ZmZlcmVkQW1vdW50KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CisgICAg
dmlydHVhbCB2b2lkIGRpc2Nvbm5lY3QoKTsgLy8gV2lsbCBzdXBwcmVzcyBkaWRDbG9zZSgpLgor
CisgICAgdXNpbmcgUmVmQ291bnRlZDxXb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbD46
OnJlZjsKKyAgICB1c2luZyBSZWZDb3VudGVkPFdvcmtlclRocmVhZGFibGVXZWJTb2NrZXRDaGFu
bmVsPjo6ZGVyZWY7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgcmVmVGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWwoKSB7IHJlZigpOyB9CisgICAgdmlydHVhbCB2b2lkIGRlcmVmVGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoKSB7IGRlcmVmKCk7IH0KKworcHJpdmF0ZToKKyAgICAv
LyBHZW5lcmF0ZWQgYnkgdGhlIGJyaWRnZS4gIFRoZSBQZWVyIGFuZCBpdCdzIGJyaWRnZSBzaG91
bGQgaGF2ZSBpZGVudGlhbAorICAgIC8vIGxpZmV0aW1lcy4KKyAgICBjbGFzcyBQZWVyIDogcHVi
bGljIFdlYlNvY2tldENoYW5uZWxDbGllbnQgeworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBlZXIqIGNyZWF0ZShSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbENsaWVudFdyYXBwZXI+ID4gY2xpZW50V3JhcHBlciwgV29ya2VyTG9hZGVyUHJveHkm
IGxvYWRlclByb3h5LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBjb25zdCBTdHJp
bmcmIHRhc2tNb2RlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgUGVlcihjbGllbnRXcmFwcGVyLCBsb2Fk
ZXJQcm94eSwgY29udGV4dCwgdGFza01vZGUsIHVybCwgcHJvdG9jb2wpOworICAgICAgICB9Cisg
ICAgICAgIH5QZWVyKCk7CisKKyAgICAgICAgdm9pZCBjb25uZWN0KCk7CisgICAgICAgIHZvaWQg
c2VuZChjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2b2lkIGJ1ZmZlcmVkQW1vdW50
KCk7CisgICAgICAgIHZvaWQgY2xvc2UoKTsKKyAgICAgICAgdm9pZCBkaXNjb25uZWN0KCk7CisK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRpZENvbm5lY3QoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGRpZFJlY2VpdmVNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaWRDbG9zZSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGVlcihSZWZQdHI8
VGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdyYXBwZXI+
ID4sIFdvcmtlckxvYWRlclByb3h5JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIGNvbnN0IFN0
cmluZyYgdGFza01vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKTsKKwor
ICAgICAgICBSZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5l
bENsaWVudFdyYXBwZXI+ID4gbV93b3JrZXJDbGllbnRXcmFwcGVyOworCisgICAgICAgIFdvcmtl
ckxvYWRlclByb3h5JiBtX2xvYWRlclByb3h5OworCisgICAgICAgIFJlZlB0cjxUaHJlYWRhYmxl
V2ViU29ja2V0Q2hhbm5lbD4gbV9tYWluV2ViU29ja2V0Q2hhbm5lbDsKKworICAgICAgICBTdHJp
bmcgbV90YXNrTW9kZTsKKyAgICB9OworCisgICAgLy8gQnJpZGdlIGZvciBQZWVyLiAgUnVubmlu
ZyBvbiB0aGUgd29ya2VyIHRocmVhZC4KKyAgICBjbGFzcyBCcmlkZ2UgOiBwdWJsaWMgUmVmQ291
bnRlZDxCcmlkZ2U+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEJyaWRnZShQYXNzUmVmUHRyPFRo
cmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4sIFBhc3NSZWZQdHI8V29ya2Vy
Q29udGV4dD4sIGNvbnN0IFN0cmluZyYgdGFza01vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJp
bmcmIHByb3RvY29sKTsKKyAgICAgICAgfkJyaWRnZSgpOworICAgICAgICB2b2lkIGNvbm5lY3Qo
KTsKKyAgICAgICAgYm9vbCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgYnVmZmVyZWRBbW91bnQoKTsKKyAgICAgICAgdm9pZCBjbG9zZSgpOworICAg
ICAgICB2b2lkIGRpc2Nvbm5lY3QoKTsKKworICAgICAgICB1c2luZyBSZWZDb3VudGVkPEJyaWRn
ZT46OnJlZjsKKyAgICAgICAgdXNpbmcgUmVmQ291bnRlZDxCcmlkZ2U+OjpkZXJlZjsKKworICAg
IHByaXZhdGU6CisgICAgICAgIHN0YXRpYyB2b2lkIHNldFdlYlNvY2tldENoYW5uZWwoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgQnJpZGdlKiB0aGlzUHRyLCBQZWVyKiBwZWVyLCBS
ZWZQdHI8VGhyZWFkU2FmZVNoYXJlZDxUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbENsaWVudFdy
YXBwZXI+ID4gd29ya2VyQ2xpZW50V3JhcHBlcik7CisKKyAgICAgICAgLy8gRXhlY3V0ZWQgb24g
dGhlIG1haW4gdGhyZWFkIHRvIGNyZWF0ZSBhIFBlZXIgZm9yIHRoaXMgYnJpZGdlLgorICAgICAg
ICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ3JlYXRlV2ViU29ja2V0Q2hhbm5lbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBCcmlkZ2UqIHRoaXNQdHIsIFJlZlB0cjxUaHJlYWRTYWZl
U2hhcmVkPFRocmVhZGFibGVXZWJTb2NrZXRDaGFubmVsQ2xpZW50V3JhcHBlcj4gPiBjbGllbnRX
cmFwcGVyLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2wpOworCisgICAgICAgIC8vIEV4ZWN1dGVkIG9uIHRoZSB3b3JrZXIgY29u
dGV4dCdzIHRocmVhZC4KKyAgICAgICAgdm9pZCBjbGVhckNsaWVudFdyYXBwZXIoKTsKKworICAg
ICAgICB2b2lkIHNldE1ldGhvZE5vdENvbXBsZXRlZCgpOworICAgICAgICB2b2lkIHdhaXRGb3JN
ZXRob2RDb21wbGV0aW9uKCk7CisKKyAgICAgICAgUmVmUHRyPFRocmVhZFNhZmVTaGFyZWQ8VGhy
ZWFkYWJsZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiA+IG1fd29ya2VyQ2xpZW50V3Jh
cHBlcjsKKworICAgICAgICBSZWZQdHI8V29ya2VyQ29udGV4dD4gbV93b3JrZXJDb250ZXh0Owor
CisgICAgICAgIFdvcmtlckxvYWRlclByb3h5JiBtX2xvYWRlclByb3h5OworCisgICAgICAgIFN0
cmluZyBtX3Rhc2tNb2RlOworCisgICAgICAgIFBlZXIqIG1fcGVlcjsKKyAgICB9OworCisgICAg
V29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwoV29ya2VyQ29udGV4dCosIFdlYlNvY2tl
dENoYW5uZWxDbGllbnQqLCBjb25zdCBTdHJpbmcmIHRhc2tNb2RlLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbCk7CisKKyAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ29ubmVj
dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGVlciopOworICAgIHN0YXRpYyB2b2lkIG1haW5U
aHJlYWRTZW5kKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQZWVyKiwgY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKTsKKyAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQnVmZmVyZWRBbW91bnQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBtYWluVGhyZWFkQ2xv
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBlZXIqKTsKKyAgICBzdGF0aWMgdm9pZCBtYWlu
VGhyZWFkRGVzdHJveShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGVlciopOworCisgICAgUmVm
UHRyPFdvcmtlckNvbnRleHQ+IG1fd29ya2VyQ29udGV4dDsKKyAgICBSZWZQdHI8VGhyZWFkYWJs
ZVdlYlNvY2tldENoYW5uZWxDbGllbnRXcmFwcGVyPiBtX3dvcmtlckNsaWVudFdyYXBwZXI7Cisg
ICAgUmVmUHRyPEJyaWRnZT4gbV9icmlkZ2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisKKyNlbmRpZiAvLyBXb3JrZXJUaHJl
YWRhYmxlV2ViU29ja2V0Q2hhbm5lbF9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3dvcmtlcnMvV29y
a2VyQ29udGV4dC5pZGwgYi9XZWJDb3JlL3dvcmtlcnMvV29ya2VyQ29udGV4dC5pZGwKaW5kZXgg
ZmZiZjljYy4uYmNlNGY1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93b3JrZXJzL1dvcmtlckNvbnRl
eHQuaWRsCisrKyBiL1dlYkNvcmUvd29ya2Vycy9Xb3JrZXJDb250ZXh0LmlkbApAQCAtODcsNiAr
ODcsOSBAQCBtb2R1bGUgdGhyZWFkcyB7CiAgICAgICAgIGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0
dGVyXSBFdmVudFNvdXJjZUNvbnN0cnVjdG9yIEV2ZW50U291cmNlOwogI2VuZGlmCiAgICAgICAg
IGF0dHJpYnV0ZSBbSlNDQ3VzdG9tR2V0dGVyXSBYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yIFhN
TEh0dHBSZXF1ZXN0OworI2lmIGRlZmluZWQoRU5BQkxFX1dFQl9TT0NLRVRTKSAmJiBFTkFCTEVf
V0VCX1NPQ0tFVFMKKyAgICAgICAgYXR0cmlidXRlIFtKU0NDdXN0b21HZXR0ZXIsRW5hYmxlZEF0
UnVudGltZV0gV2ViU29ja2V0Q29uc3RydWN0b3IgV2ViU29ja2V0OyAvLyBVc2FibGUgd2l0aCB0
aGUgbmV3IG9wZXJhdG9yCisjZW5kaWYKICAgICB9OwogCiB9Cg==
</data>
<flag name="review"
          id="28014"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="28181"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>