<?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>55877</bug_id>
          
          <creation_ts>2011-03-07 06:35:00 -0800</creation_ts>
          <short_desc>[Qt][WK2][Symbian] CoreIPC implementation for Symbian OS</short_desc>
          <delta_ts>2011-05-26 07:25:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>S60 Hardware</rep_platform>
          <op_sys>S60 3rd edition</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>55875</dependson>
          <blocked>50251</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Siddharth Mathur">s.mathur</reporter>
          <assigned_to name="Siddharth Mathur">s.mathur</assigned_to>
          <cc>cshu</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>maheshk</cc>
    
    <cc>nancy.piedra</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>363329</commentid>
    <comment_count>0</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-03-07 06:35:00 -0800</bug_when>
    <thetext>Implement reliable and performant IPC mechanisms with Symbian OS APIs similar to what ConnectionQt.cpp and friends do for Linux.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384275</commentid>
    <comment_count>1</comment_count>
      <attachid>89252</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-12 12:55:29 -0700</bug_when>
    <thetext>Created attachment 89252
Initial patches for native Symbian IPC and shared memory

Informal review and comments welcome</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384307</commentid>
    <comment_count>2</comment_count>
      <attachid>89260</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-12 13:31:46 -0700</bug_when>
    <thetext>Created attachment 89260
more complete patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384353</commentid>
    <comment_count>3</comment_count>
      <attachid>89260</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-04-12 14:03:46 -0700</bug_when>
    <thetext>Comment on attachment 89260
more complete patch

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

I dont really know symbian so mostly some minor comments incl. coding style issues - a kind of first round :-)

&gt; Source/WebKit2/Platform/CoreIPC/Connection.h:330
&gt; +        uint32_t messageID;        

why spaces before ; ?

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:17
&gt; +{
&gt; +   
&gt; +    if (m_isServer) {

useless newline

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:35
&gt; +    m_isConnected = true; 
&gt; +        
&gt; +}

here as well

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:41
&gt; +    delete m_pipeReadNotifier;

Can this somehow be an OwnPtr?

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:64
&gt; +    // Read all the bytes we can. Note that multiple messages can be read in one read operation due to the stream-oriented channel

WE normally end comments with punctuation mark

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:69
&gt; +    if (bytesRead &gt; 0) {
&gt; +                
&gt; +        __ASSERT_ALWAYS(bytesRead == readPtr.Size(), User::Invariant());

Please avoid these newlines

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:79
&gt; +        while (true) {
&gt; +            
&gt; +            messageStart -= sizeof(uint32_t); // move back pointer to read trailer             

Again

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:113
&gt; +    m_pipeReadNotifier-&gt;setEnabled(true);
&gt; +    
&gt; +}

Again :-)

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:118
&gt; +    // platformInitialize() should have taken care of the connection by now

Maybe add an assert then

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:145
&gt; +    // a trailer marker (magic number) which makes it easier to spot mesage boundary at the receiver

message*

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:152
&gt; +    return (bytesWritten ==  writeBuffer.Size());

double space before writeBuffer

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:17
&gt; +    :m_pipe(pipe), m_type(type), m_bytes(bytes), QObject(parent)

space after: and please use newlines for these

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:32
&gt; +        QEvent *postThreadChangeEvent = new QEvent(PostThreadChangeEventType);

* placement

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:34
&gt; +        return; 

shouldnt it be set enabled here? you dont want to ignore the argument do you? then add a comment

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:47
&gt; +    if (ev-&gt;type() == QEvent::ThreadChange) { // pre-migration event
&gt; +
&gt; +        if (d_ptr) { 

weird newline again

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:49
&gt; +                bool oldState = d_ptr-&gt;IsActive();

where are you using this?

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:57
&gt; +        QEvent *postThreadChangeEvent = new QEvent(PostThreadChangeEventType);

* placement. Who frees this?

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:64
&gt; +    if (ev-&gt;type() == PostThreadChangeEventType) { // custom, post-migration event
&gt; +        
&gt; +        if (!d_ptr) { 

strange newline

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:76
&gt; +
&gt; +    return false; 
&gt; +    
&gt; +}

newline issue agian

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.h:22
&gt; +        // data can be read
&gt; +        PipeReadDataAvailable,
&gt; +        // write pipe can take more data
&gt; +        PipeWriteSpaceAvailable

Better add these commetns behind

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.h:24
&gt; +    QSymbianPipeNotifier(RPipe&amp;, EventType, int, QObject *parent = 0);

* placement error

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.h:25
&gt; +    virtual ~QSymbianPipeNotifier();

As this class doesnt act as a base class (you are not defining any other method here virtual) then you do not need the destructor to be declared virtual.

&gt; Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.h:50
&gt; +    static const QEvent::Type PostThreadChangeEventType = (QEvent::Type)(QEvent::User + 100);

why not typedef?

&gt; Source/WebKit2/Platform/CoreIPC/qt/SymbianPipeActiveObject.cpp:13
&gt; +    : CActive(CActive::EPriorityStandard), m_pipe(pipe), m_type(type), m_bytes(spaceInBytes), q_ptr(qq) 

wrong coding style

&gt; Source/WebKit2/Platform/CoreIPC/qt/SymbianPipeActiveObject.cpp:88
&gt; +    }
&gt; +    
&gt; +}

weird newline

&gt; Source/WebKit2/Platform/CoreIPC/qt/SymbianPipeActiveObject.h:12
&gt; +    SymbianPipeActiveObject(RPipe, QSymbianPipeNotifier::EventType, int, QSymbianPipeNotifier *);

* placement

&gt; Source/WebKit2/Platform/qt/SharedMemorySymbian.cpp:14
&gt; +    : m_name(0) , m_size(0)

style

&gt; Source/WebKit2/Platform/qt/SharedMemorySymbian.cpp:54
&gt; +{
&gt; +    
&gt; +    // On Symbian, global chunks (shared memory segments) have system-unique names, so we pick a random 

newline

&gt; Source/WebKit2/Platform/qt/SharedMemorySymbian.cpp:117
&gt; +{
&gt; +     
&gt; +    ASSERT_ARG(handle, handle.isNull());

newline

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherSymbian.cpp:21
&gt; +    RPipe* localPipes = new RPipe[2]; 
&gt; +    RPipe* remotePipes = new RPipe[2]; 

Can&apos;t we OwnPtr these? Or make a mini wrapper class that also makes sure to close() then when they go out of scope?

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherSymbian.cpp:26
&gt; +    error = RPipe::Create(CoreIPC::Connection::MaxPipeCapacity, remotePipes[0], localPipes[1] );

weird space before )

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherSymbian.cpp:27
&gt; +    error = RPipe::Create(CoreIPC::Connection::MaxPipeCapacity, remotePipes[0], localPipes[1] );
&gt; +    error = RPipe::Create(CoreIPC::Connection::MaxPipeCapacity, localPipes[0], remotePipes[1]);

why overriding error?

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherSymbian.cpp:30
&gt; +    RProcess* workerProcess = new RProcess() ;

weird space before ;

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherSymbian.cpp:35
&gt; +    error = workerProcess-&gt;SetParameter(3, remotePipes[0]); // reader
&gt; +    error = workerProcess-&gt;SetParameter(4, remotePipes[1]); // writer

what about using an enum for these 3 and 4?

&gt; Source/WebKit2/UIProcess/Launcher/qt/ProcessLauncherSymbian.cpp:70
&gt; +	    m_processIdentifier-&gt;Terminate(KErrNone);
&gt; +	
&gt; +}

remove useless newline

&gt; Source/WebKit2/UIProcess/Launcher/qt/ThreadLauncherQt.cpp:54
&gt; +    identifier = 0; // NULL pointer

I dont get the comment... Isn&apos;t it an identifier not a pointer... what is it used for? Maybe you can explain it better like // Identifier is a pointer type on Symbian or 0 pointer is symbolizes invalid socket descriptor - or whatever :)

&gt; Source/WebKit2/WebProcess.pro:47
&gt; +    TARGET.CAPABILITY *= Location         # geolocation

well, geolocation support is on UI side due to sandboxing... the process does not need this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384356</commentid>
    <comment_count>4</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-12 14:07:09 -0700</bug_when>
    <thetext>Thanks Kenneth for the patient look through. :)
I will run the style-checker and fix all your points in the next iteration.
I think I have (over)commented the Symbian-specific code, so I hope you will be able to make sense of it even without much direct experience with the OS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387523</commentid>
    <comment_count>5</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-17 21:29:25 -0700</bug_when>
    <thetext>To simplify the review and integration complexity, I carved out the relatively simple Shared memory implementation in Bug 55875. Kenneth&apos;s comments related to SharedMemorySymbian.cpp have been addressed there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390425</commentid>
    <comment_count>6</comment_count>
      <attachid>90623</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-21 16:07:54 -0700</bug_when>
    <thetext>Created attachment 90623
Core IPC, process launching and shared memory for Symbian OS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390429</commentid>
    <comment_count>7</comment_count>
      <attachid>90623</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-21 16:13:48 -0700</bug_when>
    <thetext>Comment on attachment 90623
Core IPC, process launching and shared memory for Symbian OS

Ready for review. Apologies in advance for the large size. All the major components, IPC, process launching, and shared memory are required together for the Qt MiniBrowser to launch and render anything on an N8 device.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390431</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-21 16:16:26 -0700</bug_when>
    <thetext>Attachment 90623 did not pass style-queue:

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

Source/WebKit2/Platform/WorkQueue.h:91:  The parameter name &quot;pipe&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/Platform/WorkQueue.h:91:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/Platform/WorkQueue.h:91:  The parameter name &quot;workItem&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebKit2/Platform/qt/SharedMemorySymbian.cpp:34:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:163:  Use 0 or null instead of NULL (even in *comments*).  [readability/null] [4]
Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:35:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:36:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:37:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.cpp:38:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/Platform/CoreIPC/qt/SymbianPipeActiveObject.cpp:33:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/Platform/CoreIPC/qt/SymbianPipeActiveObject.cpp:34:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/Platform/CoreIPC/qt/SymbianPipeActiveObject.cpp:35:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/Platform/CoreIPC/qt/SymbianPipeActiveObject.cpp:36:  Missing space after ,  [whitespace/comma] [3]
Source/WebKit2/Platform/CoreIPC/unix/ConnectionUnix.cpp:30:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Total errors found: 14 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390435</commentid>
    <comment_count>9</comment_count>
      <attachid>90627</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-21 16:20:00 -0700</bug_when>
    <thetext>Created attachment 90627
Style fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390459</commentid>
    <comment_count>10</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-21 16:50:00 -0700</bug_when>
    <thetext>Attachment 90627 did not build on qt:
Build output: http://queues.webkit.org/results/8493289</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390546</commentid>
    <comment_count>11</comment_count>
      <attachid>90654</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-21 19:16:47 -0700</bug_when>
    <thetext>Created attachment 90654
fix Qt build on Linux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390548</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-21 19:21:24 -0700</bug_when>
    <thetext>Attachment 90654 did not pass style-queue:

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

Source/WebKit2/Platform/CoreIPC/qt/QSymbianPipeNotifier.h:23:  Header file should not contain WebCore config.h. Should be: alphabetically sorted.  [build/include_order] [4]
Total errors found: 1 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390555</commentid>
    <comment_count>13</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-04-21 19:46:43 -0700</bug_when>
    <thetext>Attachment 90654 did not build on qt:
Build output: http://queues.webkit.org/results/8487562</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>390857</commentid>
    <comment_count>14</comment_count>
      <attachid>90717</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-22 10:16:04 -0700</bug_when>
    <thetext>Created attachment 90717
Qt-Linux should build correctly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392370</commentid>
    <comment_count>15</comment_count>
      <attachid>90717</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-04-26 03:04:00 -0700</bug_when>
    <thetext>Comment on attachment 90717
Qt-Linux should build correctly

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

Informal review.

The most important issue I see is the need of going through both the Active Object machinery and Qt event loop with the pipe events. I recommend to avoid this if it is possible.

&gt; Source/WebKit2/Platform/SharedMemory.h:76
&gt; +#elif OS(SYMBIAN)
&gt; +        mutable uint32_t m_chunkName;

Not a good name for an integer. m_chunkID?

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:80
&gt; +// Check if the data matches the trailer pattern
&gt; +static inline bool isMessageTrailer(uint8_t *data) 
&gt; +{  
&gt; +    return ( trailer == *(reinterpret_cast&lt;uint32_t*&gt;(data)) );  
&gt; +}

No need for the comment. trailer is not a good name for a constant like this, it should be smg like trailerPattern or kTrailerPattern.

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:97
&gt; +        // Temporary place to keep track of parsed messages.
&gt; +        QVector&lt;ParsedMessage&gt; messsagePointers;

I would use WTF::Vector with an inlineCapacity that is enough for the common cases (I guess it is between 1 and 4 inclusively).

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:122
&gt; +        } // while loop

No need for this comment.

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:130
&gt; +        messsagePointers.clear();

No need for this.

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:133
&gt; +    m_pipeReadNotifier-&gt;setEnabled(true);

Maybe it would be clearer with a guard style class that handles this, like SocketNotifierResourceGuard in ConnectionUnix.cpp.

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:144
&gt; +    // Start listening for read 
&gt; +    m_pipeReadNotifier = m_connectionQueue.registerPipeEventHandler(m_readPipe, QSymbianPipeNotifier::PipeReadDataAvailable, WorkItem::create(this, &amp;Connection::readyReadHandler));
&gt; +        

Do we really need to go through AO -&gt; Qt event loop -&gt; WK2 work queue abstraction? Why not we call the callback (readyReadHandler in this case) from the Active Object directly? I guess going through the Qt event loop could hurt responsiveness.

&gt; Source/WebKit2/Platform/CoreIPC/qt/SymbianPipeActiveObject.cpp:30
&gt; +// The Symbian Active Object that registers notification requests with the kernel, similar to POSIX&apos;s select() system call
&gt; +// Note that unlike anything on Unix, Symbian Active Objects are schedulable objects that are bound to the current thread&apos;s Active Scheduler. 
&gt; +// Therefore they are a lightweight version of threads from a resource utilization POV. 

I don&apos;t find this comment and the others in this file very useful. The code is pretty straightforward with basic knowledge about Active Objects.

&gt; Source/WebKit2/Platform/qt/WorkQueueQt.cpp:145
&gt; +    // FIXME: Need to implement a process watcher using Symbian RProcess
&gt; +#if !OS(SYMBIAN)
&gt;      WorkQueue::WorkItemQt* itemQt = new WorkQueue::WorkItemQt(this, process, SIGNAL(finished(int, QProcess::ExitStatus)), workItem.leakPtr());
&gt;      itemQt-&gt;moveToThread(m_workThread);
&gt; +#endif

I would add an notImplemented() to the symbian branch, i.e
#if OS(SYMBIAN)
notImplemented();
#else
...

&gt; Source/WebKit2/Platform/unix/SharedMemoryUnix.cpp:29
&gt; +#if HAVE(MMAP)

This should rather be &quot;#if USE(UNIX_DOMAIN_SOCKETS)&quot;.

&gt; Tools/ChangeLog:11
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [Qt][WK2][Symbian] Corrections to default window mode on Symbian devices
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=55877
&gt; +
&gt; +        * MiniBrowser/qt/BrowserWindow.cpp:
&gt; +        (BrowserWindow::BrowserWindow):
&gt; +        * MiniBrowser/qt/MiniBrowser.pro:
&gt; +

These changes really don&apos;t belong here. Please separate them to another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>392504</commentid>
    <comment_count>16</comment_count>
      <attachid>90717</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-04-26 09:21:07 -0700</bug_when>
    <thetext>Comment on attachment 90717
Qt-Linux should build correctly

Clear review flag until I fix some of the issues mentioned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405270</commentid>
    <comment_count>17</comment_count>
      <attachid>93812</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-05-17 13:48:30 -0700</bug_when>
    <thetext>Created attachment 93812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405279</commentid>
    <comment_count>18</comment_count>
      <attachid>93812</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-05-17 14:00:17 -0700</bug_when>
    <thetext>Comment on attachment 93812
Patch

Updated patch ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406431</commentid>
    <comment_count>19</comment_count>
      <attachid>93812</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2011-05-19 09:02:33 -0700</bug_when>
    <thetext>Comment on attachment 93812
Patch

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

Informal review v2.
Looks pretty good to me in overall. I did not review the implementation in details but if it seems to be OK through testing I think it can go. However there is a few issue I see.

&gt; Source/WebKit2/Platform/CoreIPC/Connection.h:162
&gt; +#if OS(SYMBIAN)
&gt; +    static const int MaxPipeCapacity = 4096; 
&gt; +#endif

Move it to the cpp please.

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:39
&gt; +        uint8_t* start; // base address of message
&gt; +        uint32_t size; // size in bytes
&gt; +        uint32_t messageID;
&gt; +};

style: double indentation

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:50
&gt; +        m_readPipe = static_cast&lt;RPipe*&gt;(identifier)[0];
&gt; +        m_writePipe = static_cast&lt;RPipe*&gt;(identifier)[1];

Could be Identifier typedefed as RPipe[2]? Would be better.

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:103
&gt; +        // Temporary place to keep track of parsed messages.
&gt; +        Vector&lt;ParsedMessage, 10 * sizeof(ParsedMessage)&gt; messsagePointers;

The inline capacity (second template arg) means number of elements and not size in bytes, should be simply 10.

&gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:109
&gt; +            if (!isMessageTrailer(messageStart))
&gt; +                break; 

This means a connection error, isn&apos;t it? In this case the system should be notified about that via connectionDidClose.
Actually, I checked the Unix version and it also missing that but the Windows implementation has this at a few places:
if (error == ERROR_BROKEN_PIPE) {
    connectionDidClose();
    return;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407221</commentid>
    <comment_count>20</comment_count>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-05-20 11:24:57 -0700</bug_when>
    <thetext> 
&gt; &gt; Source/WebKit2/Platform/CoreIPC/Connection.h:162
&gt; &gt; +#if OS(SYMBIAN)
&gt; &gt; +    static const int MaxPipeCapacity = 4096; 
&gt; &gt; +#endif
&gt; 
&gt; Move it to the cpp please.

I need it in ProcessLauncherSymbian.cpp while initializing the pipe, hence the use of a header file. 

&gt; &gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:39
&gt; &gt; +        uint8_t* start; // base address of message
&gt; &gt; +        uint32_t size; // size in bytes
&gt; &gt; +        uint32_t messageID;
&gt; &gt; +};
&gt; 
&gt; style: double indentation

Fixed in upcoming patch. 

&gt; 
&gt; &gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:50
&gt; &gt; +        m_readPipe = static_cast&lt;RPipe*&gt;(identifier)[0];
&gt; &gt; +        m_writePipe = static_cast&lt;RPipe*&gt;(identifier)[1];
&gt; 
&gt; Could be Identifier typedefed as RPipe[2]? Would be better.

That was my first preference too, but Identifier is used as a return value in a complete of methods, hence I punted on changing it in common code. 
 
&gt; &gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:103
&gt; &gt; +        // Temporary place to keep track of parsed messages.
&gt; &gt; +        Vector&lt;ParsedMessage, 10 * sizeof(ParsedMessage)&gt; messsagePointers;
&gt; 
&gt; The inline capacity (second template arg) means number of elements and not size in bytes, should be simply 10.

Fixed in upcoming patch. 

&gt; 
&gt; &gt; Source/WebKit2/Platform/CoreIPC/qt/ConnectionSymbian.cpp:109
&gt; &gt; +            if (!isMessageTrailer(messageStart))
&gt; &gt; +                break; 
&gt; 
&gt; This means a connection error, isn&apos;t it? In this case the system should be notified about that via connectionDidClose.
&gt; Actually, I checked the Unix version and it also missing that but the Windows implementation has this at a few places:
&gt; if (error == ERROR_BROKEN_PIPE) {
&gt;     connectionDidClose();
&gt;     return;
&gt; }

Fixed in upcoming patch. Thanks :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407253</commentid>
    <comment_count>21</comment_count>
      <attachid>94254</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-05-20 11:57:02 -0700</bug_when>
    <thetext>Created attachment 94254
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408417</commentid>
    <comment_count>22</comment_count>
      <attachid>94254</attachid>
    <who name="Alexis Menard (darktears)">menard</who>
    <bug_when>2011-05-23 15:54:04 -0700</bug_when>
    <thetext>Comment on attachment 94254
Patch

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

&gt; Source/WebKit2/WebProcess/qt/WebProcessMainQt.cpp:135
&gt; +#if defined(Q_OS_SYMBIAN)

Why defined(Q_OS_SYMBIAN) and below in the same file you use #if OS(SYMBIAN)?

&gt; Tools/Makefile:-1
&gt; -MODULES = DumpRenderTree WebKitTestRunner MiniBrowser ../Source/ThirdParty/gtest/xcode TestWebKitAPI

What is that file?

&gt; Tools/Makefile:22
&gt; +INCPATH	 =  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/include/QtCore&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/include/QtGui&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/include&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/include/QtSensors&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/mkspecs/common/symbian&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/stdapis&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/stdapis/sys&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/mw&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/platform/mw&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/platform&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/platform/loc&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/platform/mw/loc&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/platform/loc/sc&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/platform/mw/loc/sc&quot;  -I&quot;/QtMobility&quot;  -I&quot;/QtSensors&quot;  -I&quot;/home/simathur/testQtSDK/Symbian/SDKs/Symbian3Qt472/epoc32/include/stdapis/stlportv5&quot;  -I&quot;/home/simathur/WebKit/Tools&quot; 

Seems totally wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408865</commentid>
    <comment_count>23</comment_count>
      <attachid>94613</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-05-24 08:15:31 -0700</bug_when>
    <thetext>Created attachment 94613
Correctly generated patch 

Alexis: The Q_OS_SYMBIAN is for moc to process the QObjects only for Symbian targets. Moc doesn&apos;t understand WebKit style USE() and HAVE() macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410065</commentid>
    <comment_count>24</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2011-05-25 17:42:27 -0700</bug_when>
    <thetext>Hmm, do we still want to run and maintain WebKit2 on Symbian?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>410416</commentid>
    <comment_count>25</comment_count>
      <attachid>94613</attachid>
    <who name="Siddharth Mathur">s.mathur</who>
    <bug_when>2011-05-26 07:25:03 -0700</bug_when>
    <thetext>Comment on attachment 94613
Correctly generated patch 

Burying this work for good.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89252</attachid>
            <date>2011-04-12 12:55:29 -0700</date>
            <delta_ts>2011-04-12 13:31:46 -0700</delta_ts>
            <desc>Initial patches for native Symbian IPC and shared memory</desc>
            <filename>0001-Initial-WK2-IPC-and-Shmem-patches.patch</filename>
            <type>text/plain</type>
            <size>24255</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">RnJvbSAyY2Q3MmQyN2QzODhiNDkzOTZlMGRlOGIwM2I4ZWU2OTA4YTBlMWI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBTaWRkaGFydGggTWF0aHVyIDxzaWRkaGFydGgubWF0aHVyQG5v
a2lhLmNvbT4KRGF0ZTogVHVlLCAxMiBBcHIgMjAxMSAxNTo1MTo1OSAtMDQwMApTdWJqZWN0OiBb
UEFUQ0hdIEluaXRpYWwgV0syIElQQyBhbmQgU2htZW0gcGF0Y2hlcwoKLS0tCiAuLi4vUGxhdGZv
cm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAgICAgICB8ICAxNTYgKysrKysrKysr
KysrKysrKysrKysKIC4uLi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVy
LmNwcCAgIHwgICA4OCArKysrKysrKysrKwogLi4uL1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJp
YW5QaXBlTm90aWZpZXIuaCAgICAgfCAgIDU3ICsrKysrKysKIC4uLi9Db3JlSVBDL3F0L1N5bWJp
YW5QaXBlQWN0aXZlT2JqZWN0LmNwcCAgICAgICAgIHwgICA5MCArKysrKysrKysrKwogLi4uL1Bs
YXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaCAgfCAgIDMwICsrKysK
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwIHwgIDE0
NyArKysrKysrKysrKysrKysrKysKIC4uLi9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJTeW1i
aWFuLmNwcCAgICAgICAgIHwgICA4NSArKysrKysrKysrKwogNyBmaWxlcyBjaGFuZ2VkLCA2NTMg
aW5zZXJ0aW9ucygrKSwgMCBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcAogY3JlYXRl
IG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5Q
aXBlTm90aWZpZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVj
dC5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcAogY3JlYXRlIG1vZGUg
MTAwNjQ0IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNo
ZXJTeW1iaWFuLmNwcAoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNmI2MjhkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3BwCkBAIC0wLDAgKzEsMTU2IEBACisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5j
bHVkZSAiV29ya0l0ZW0uaCIKKyNpbmNsdWRlIDxRVmVjdG9yPgorI2luY2x1ZGUgPHF0L1FTeW1i
aWFuUGlwZU5vdGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KK25hbWVzcGFj
ZSBDb3JlSVBDIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHRyYWlsZXIgPSAweERFQURDQUZF
OworCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50
aWZpZXIpCit7CisgICAKKyAgICBpZiAobV9pc1NlcnZlcikgeworICAgICAgICBtX3JlYWRQaXBl
ID0gc3RhdGljX2Nhc3Q8UlBpcGUqPihpZGVudGlmaWVyKVswXTsKKyAgICAgICAgbV93cml0ZVBp
cGUgPSBzdGF0aWNfY2FzdDxSUGlwZSo+KGlkZW50aWZpZXIpWzFdOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIFRJbnQgZXJyb3I7CisgICAgICAgIC8vIE9wZW4gcGlwZXMgdmlhIFJQcm9jZXNzJyAi
ZW52aXJvbm1lbnQgZGF0YSBzbG90cyIgbnVtYmVyIDMgJiA0CisgICAgICAgIC8vIFRoaXMgaXMg
dGhlIFN5bWJpYW4gT1Mgd2F5IG9mIHBhc3NpbmcgaGFuZGxlcyBmcm9tIHBhcmVudCB0byBjaGls
ZAorICAgICAgICBlcnJvciA9IG1fcmVhZFBpcGUuT3BlbigzKTsgCisgICAgICAgIGVycm9yfD0g
bV93cml0ZVBpcGUuT3Blbig0KTsKKyAgICAgICAgaWYgKGVycm9yKSB7IAorICAgICAgICAgICAg
bV9pc0Nvbm5lY3RlZCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorCisgICAgbV9yZWFkQnVmZmVyLnJlc2l6ZShDb3JlSVBDOjpDb25uZWN0aW9uOjpNYXhQ
aXBlQ2FwYWNpdHkpOworICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOyAKKyAgICAgICAgCit9CisK
K3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX3JlYWRCdWZm
ZXIuc2hyaW5rKDApOworICAgIAorICAgIGRlbGV0ZSBtX3BpcGVSZWFkTm90aWZpZXI7CisgICAg
bV9yZWFkUGlwZS5DbG9zZSgpOworICAgIG1fd3JpdGVQaXBlLkNsb3NlKCk7CisgICAgLy8gVE9E
TzogZGVsZXRlIHRoZSBtZW1vcnkgZm9yIHRoZSBSUGlwZVsyXSBhcnJheQorICAgIG1faXNDb25u
ZWN0ZWQgPSBmYWxzZTsKK30KKworLy8gQ2hlY2sgaWYgdGhlIGRhdGEgbWF0Y2hlcyB0aGUgdHJh
aWxlciBwYXR0ZXJuCitzdGF0aWMgaW5saW5lIGJvb2wgaXNNZXNzYWdlVHJhaWxlcih1aW50OF90
ICpkYXRhKSAKK3sgIAorICAgIHJldHVybiAoIHRyYWlsZXIgPT0gKihyZWludGVycHJldF9jYXN0
PHVpbnQzMl90Kj4oZGF0YSkpICk7ICAKK30KKworLy8gSGFuZGxlciBmb3IgImJ5dGVzIGF2YWls
YWJsZSB0byByZWFkIiBldmVudCBvbiBwaXBlCit2b2lkIENvbm5lY3Rpb246OnJlYWR5UmVhZEhh
bmRsZXIoKQoreworICAgIFJQcm9jZXNzIHByb2M7CisgICAgCisgICAgbV9waXBlUmVhZE5vdGlm
aWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICAgICAgCisgICAgLy8gTWFrZSBhIHRlbXBvcmFy
eSBTeW1iaWFuIGRlc2NyaXB0b3IgdG8gcG9pbnQgdG8gZXhpc3RpbmcgYnVmZmVyLCB3aXRoIDAg
Y3VycmVudCBzaXplLCBhbmQgYSBtYXggc2l6ZQorICAgIFRQdHI4IHJlYWRQdHIobV9yZWFkQnVm
ZmVyLmRhdGEoKSwgMCwgbV9yZWFkQnVmZmVyLnNpemUoKSk7CisgICAgCisgICAgLy8gUmVhZCBh
bGwgdGhlIGJ5dGVzIHdlIGNhbi4gTm90ZSB0aGF0IG11bHRpcGxlIG1lc3NhZ2VzIGNhbiBiZSBy
ZWFkIGluIG9uZSByZWFkIG9wZXJhdGlvbiBkdWUgdG8gdGhlIHN0cmVhbS1vcmllbnRlZCBjaGFu
bmVsCisgICAgVEludCBieXRlc1JlYWQgPSBtX3JlYWRQaXBlLlJlYWQocmVhZFB0ciwgcmVhZFB0
ci5NYXhTaXplKCkpOworICAgIAorICAgIGlmIChieXRlc1JlYWQgPiAwKSB7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgIF9fQVNTRVJUX0FMV0FZUyhieXRlc1JlYWQgPT0gcmVhZFB0ci5TaXpl
KCksIFVzZXI6OkludmFyaWFudCgpKTsKKyAgICAgICAgCisgICAgICAgIC8vIFN0YXJ0IHBhcnNp
bmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHdoZXJlIHdlIGV4cGVjdCB0byBzZWUgYSB0
cmFpbGVyIGFuZCB0aGUgc2l6ZSBvZiB0aGlzIG1lc3NhZ2UKKyAgICAgICAgdWludDhfdCogbWVz
c2FnZVN0YXJ0ID0gbV9yZWFkQnVmZmVyLmRhdGEoKSArIGJ5dGVzUmVhZDsKKyAgICAgICAgCisg
ICAgICAgIC8vIFBsYWNlIHRvIGtlZXAgdHJhY2sgb2YgcGFyc2VkIG1lc3NhZ2VzCisgICAgICAg
IFFWZWN0b3I8UGFyc2VkTWVzc2FnZT4gbWVzc3NhZ2VQb2ludGVyczsKKyAgICAgICAgCisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1lc3NhZ2VTdGFy
dCAtPSBzaXplb2YodWludDMyX3QpOyAvLyBtb3ZlIGJhY2sgcG9pbnRlciB0byByZWFkIHRyYWls
ZXIgICAgICAgICAgICAgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghaXNNZXNzYWdl
VHJhaWxlcihtZXNzYWdlU3RhcnQpKSAvLyBiYWlsIGlmIG5vIHRyYWlsZXIgCisgICAgICAgICAg
ICAgICAgYnJlYWs7IAorICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIG1lc3NhZ2VTdGFy
dCAtPSBzaXplb2YodWludDMyX3QpOyAvLyBtb3ZlIGJhY2sgcG9pbnRlciB0byByZWFkIG1lc3Nh
Z2VTaXplCisgICAgICAgICAgICB1aW50MzJfdCBtZXNzYWdlU2l6ZSA9ICpyZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4obWVzc2FnZVN0YXJ0KTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1lc3NhZ2VTdGFydCAtPSBzaXplb2YodWludDMyX3QpOyAvLyBtb3ZlIGJhY2sgdG8gcmVhZCBt
ZXNzYWdlSUQKKyAgICAgICAgICAgIHVpbnQzMl90IG1lc3NhZ2VJRCA9ICpyZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4obWVzc2FnZVN0YXJ0KTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1lc3NhZ2VTdGFydCAtPSAobWVzc2FnZVNpemUgLSBzaXplb2YodWludDMyX3QpKTsgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBL
ZWVwIGEgbm90ZSBvZiBtZXNzYWdlIGJvdW5kYXJ5CisgICAgICAgICAgICBjb25zdCBQYXJzZWRN
ZXNzYWdlIGFNZXNzYWdlID0ge21lc3NhZ2VTdGFydCwgbWVzc2FnZVNpemUgLSBzaXplb2YodWlu
dDMyX3QpLCBtZXNzYWdlSUR9OworICAgICAgICAgICAgbWVzc3NhZ2VQb2ludGVycy5hcHBlbmQo
YU1lc3NhZ2UpOyAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgX19BU1NFUlRfQUxXQVlTKG1l
c3NhZ2VTdGFydCA+PSAgbV9yZWFkQnVmZmVyLmRhdGEoKSwgVXNlcjo6SW52YXJpYW50KCkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobWVzc2FnZVN0YXJ0ID09IG1fcmVhZEJ1ZmZl
ci5kYXRhKCkpIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICB9IC8vIHdoaWxlIGxvb3AKKyAgICAgIAorICAgICAgICAvLyBOb3cgZGlzcGF0Y2ggcGFy
c2VkIG1lc3NhZ2VzIGluIHRoZSBvcmRlciB0aGV5IHdlcmUgd3JpdHRlbiBieSB0aGUgc2VuZGVy
CisgICAgICAgIGZvciAoaW50IGkgPSBtZXNzc2FnZVBvaW50ZXJzLnNpemUoKS0xOyBpID49MCA7
IGktLSkgeyAKKyAgICAgICAgICAgIGNvbnN0IFBhcnNlZE1lc3NhZ2UgYU1lc3NhZ2UgPSBtZXNz
c2FnZVBvaW50ZXJzLmF0KGkpOworICAgICAgICAgICAgcHJvY2Vzc0luY29taW5nTWVzc2FnZShN
ZXNzYWdlSUQ6OmZyb21JbnQoYU1lc3NhZ2UubWVzc2FnZUlEKSwgYWRvcHRQdHIobmV3IEFyZ3Vt
ZW50RGVjb2RlcihhTWVzc2FnZS5zdGFydCwgYU1lc3NhZ2Uuc2l6ZSkpKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICB9IAorICAgIAorICAgIG1fcGlwZVJlYWROb3RpZmllci0+c2V0RW5hYmxl
ZCh0cnVlKTsKKyAgICAKK30KKworCitib29sIENvbm5lY3Rpb246Om9wZW4oKQoreworICAgIC8v
IHBsYXRmb3JtSW5pdGlhbGl6ZSgpIHNob3VsZCBoYXZlIHRha2VuIGNhcmUgb2YgdGhlIGNvbm5l
Y3Rpb24gYnkgbm93CisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKSAKKyAgICAgICAgcmV0dXJuIGZh
bHNlOyAKKyAgICAKKyAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIHJlYWQgCisgICAgbV9waXBl
UmVhZE5vdGlmaWVyID0gbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVy
KG1fcmVhZFBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUs
IFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsK
KyAgICAgICAgCisgICAgLy8gU2NoZWR1bGUgYSByZWFkLgorICAgIG1fY29ubmVjdGlvblF1ZXVl
LnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJl
YWRIYW5kbGVyKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29ubmVjdGlv
bjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNvbnN0Cit7CisgICAgLy8gU2Vl
bXMgYWRlcXVhdGUgZm9yIG5vdyAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29ubmVj
dGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRy
PEFyZ3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQoreyAgICAKKyAgICAvLyBFbmNvZGUgbWVzc2Fn
ZUlELiAKKyAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMihtZXNzYWdlSUQudG9JbnQoKSk7Cisg
ICAgCisgICAgLy8gRW5jb2RlIHNpemUgb2YgbWVzc2FnZSBleGNsdWRpbmcgdGhpcyA0LWJ5dGUg
ZmllbGQgYW5kIHRoZSA0LWJ5dGUgdHJhaWxlciB3aGljaCBmb2xsb3dzLgorICAgIGFyZ3VtZW50
cy0+ZW5jb2RlVUludDMyKGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKTsKKyAgICAKKyAgICAvLyBh
IHRyYWlsZXIgbWFya2VyIChtYWdpYyBudW1iZXIpIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBz
cG90IG1lc2FnZSBib3VuZGFyeSBhdCB0aGUgcmVjZWl2ZXIKKyAgICBhcmd1bWVudHMtPmVuY29k
ZVVJbnQzMih0cmFpbGVyKTsKKyAgICAKKyAgICAvLyBXcml0ZSB0byBwaXBlIHVzaW5nIGEgdGVt
cG9yYXJ5IFN5bWJpYW4gZGVzY3JpcHRvcgorICAgIFRQdHI4IHdyaXRlQnVmZmVyKGFyZ3VtZW50
cy0+YnVmZmVyKCksIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpLCBhcmd1bWVudHMtPmJ1ZmZlclNp
emUoKSApOworICAgIFRJbnQgYnl0ZXNXcml0dGVuID0gbV93cml0ZVBpcGUuV3JpdGUod3JpdGVC
dWZmZXIsIHdyaXRlQnVmZmVyLlNpemUoKSApOyAgICAgCisgICAgCisgICAgcmV0dXJuIChieXRl
c1dyaXR0ZW4gPT0gIHdyaXRlQnVmZmVyLlNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIENv
cmVJUEMKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4xZWEwYjNmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHAKQEAgLTAsMCArMSw4
OCBAQAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0gKFFUKSAmJiBPUyhTWU1C
SUFOKQorCisjaW5jbHVkZSAiUU9iamVjdCIKKyNpbmNsdWRlICJRRGVidWciCisjaW5jbHVkZSAi
UUNvcmVBcHBsaWNhdGlvbiIKKyNpbmNsdWRlICJRRXZlbnQiCisjaW5jbHVkZSAiUVN5bWJpYW5Q
aXBlTm90aWZpZXIuaCIKKyNpbmNsdWRlICJTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5oIgorI2lu
Y2x1ZGUgPHBsYXRmb3JtL3JwaXBlLmg+CisKK2NsYXNzIEN1c3RvbUV2ZW50OnB1YmxpYyBRRXZl
bnQgeworICAgIEN1c3RvbUV2ZW50KCkge307CisgICAgdmlydHVhbCB+Q3VzdG9tRXZlbnQoKSB7
fTsKK3B1YmxpYzogCisgICAgYm9vbCBlbmFibGVJbW1lZGlhdGVseTsKK30KKy8vIFdyYXBwZXIg
UU9iamVjdCBhcm91bmQgYSBTeW1iaWFuIEFjdGl2ZSBPYmplY3QgKEFPKS4gV2UgbXVzdCB1c2Ug
dXNlIGFuIGFjdGl2ZSBvYmplY3QKKy8vIHdoaWxlIHJlZ2lzdGVyaW5nIGFzeW5jaHJvbm91cyBu
b3RpZmljYXRpb24gcmVxdWVzdHMgKGUuZyBkYXRhIGF2YWlsYWJsZSB0byByZWFkL3NwYWNlIGF2
YWlsYWJsZSB0byB3cml0ZSkgCisvLyBvbiBuYXRpdmUgU3ltYmlhbiBJUEMgQVBJcyBzdWNoIGFz
IFJQaXBlCitRU3ltYmlhblBpcGVOb3RpZmllcjo6UVN5bWJpYW5QaXBlTm90aWZpZXIoUlBpcGUm
IHBpcGUsIEV2ZW50VHlwZSB0eXBlLCBpbnQgYnl0ZXMsIFFPYmplY3QgKnBhcmVudCkgCisgICAg
Om1fcGlwZShwaXBlKSwgbV90eXBlKHR5cGUpLCBtX2J5dGVzKGJ5dGVzKSwgUU9iamVjdChwYXJl
bnQpCit7CisgICAgZF9wdHIgPSBuZXcgU3ltYmlhblBpcGVBY3RpdmVPYmplY3QocGlwZSwgdHlw
ZSwgYnl0ZXMsIHRoaXMpOworfQorCitRU3ltYmlhblBpcGVOb3RpZmllcjo6flFTeW1iaWFuUGlw
ZU5vdGlmaWVyKCkgCit7CisgICAgZGVsZXRlIGRfcHRyOworfQorCit2b2lkIFFTeW1iaWFuUGlw
ZU5vdGlmaWVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgCit7IAorCisgICAgaWYgKCFkX3B0
cikgeyAKKyAgICAgICAgLy8gTGF6eSBpbml0aWFsaXphdGlvbi4gVXNlZnVsIHdoZW4gYSBtb3Zl
VG9UaHJlYWQoKSByZXF1aXJlcyB0aGUgQWN0aXZlIE9iamVjdCB0byAKKyAgICAgICAgLy8gYmUg
ZGVsZXRlZCBhbmQgcmUtY3JlYXRlZCBvbiB0aGUgbmV3IHRocmVhZC4gCisgICAgICAgIEN1c3Rv
bUV2ZW50ICpwb3N0VGhyZWFkQ2hhbmdlRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoUG9zdFRocmVh
ZENoYW5nZUV2ZW50VHlwZSk7CisgICAgICAgIHBvc3RUaHJlYWRDaGFuZ2VFdmVudC0+ZW5hYmxl
SW1tZWRpYXRlbHkgPSBlbmFibGVkOworICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjpwb3N0RXZl
bnQodGhpcywgcG9zdFRocmVhZENoYW5nZUV2ZW50KTsKKyAgICAgICAgcmV0dXJuOyAKKyAgICB9
CisgICAgCisgICAKKyAgICBkX3B0ci0+c2V0RW5hYmxlZChlbmFibGVkKTsKKyAgICAgICAgCit9
CisKKy8vIFN5bWJpYW4gYWN0aXZlIG9iamVjdHMgKEFPcykgYXJlIGJvdW5kIHRvIGFuICJhY3Rp
dmUgc2NoZWR1bGVyIiB3aGljaCBpcyB0aHJlYWQtbG9jYWwuCisvLyBUaGVyZWZvcmUsIHRvIGFs
bG93IG1vdmVUb1RocmVhZCgpIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggdGhlIHBhcmVudCBRT2Jq
ZWN0IHdlIG5lZWQgdG8gCisvLyBkZWxldGUgdGhlIEFPIGFuZCByZS1jcmVhdGUgaXQgb25jZSB0
aGUgZXhlY3V0aW9uIG1vdmVzIHRvIHRoZSBuZXcgdGhyZWFkCitib29sIFFTeW1iaWFuUGlwZU5v
dGlmaWVyOjpldmVudChRRXZlbnQqIGV2KQoreyAgICAgICAgCisgICAgaWYgKGV2LT50eXBlKCkg
PT0gUUV2ZW50OjpUaHJlYWRDaGFuZ2UpIHsgLy8gcHJlLW1pZ3JhdGlvbiBldmVudAorICAgICAg
ICAKKyAgICAgICAgaWYgKGRfcHRyKSB7IAorICAgICAgICAgICAgaWYgKGRfcHRyLT5Jc0FkZGVk
KCkpIHsKKyAgICAgICAgICAgICAgICBib29sIG9sZFN0YXRlID0gZF9wdHItPklzQWN0aXZlKCk7
CisgICAgICAgICAgICAgICAgZF9wdHItPkRlcXVlKCk7IC8vIGNhbmNlbCBvdXRzdGFuZGluZyBy
ZXF1ZXN0ICsgcmVtb3ZlIGZyb20gYWN0aXZlIHNjaGVkdWxlcgorICAgICAgICAgICAgfSAgICAg
CisgICAgICAgICAgICBkZWxldGUgZF9wdHI7IAorICAgICAgICAgICAgZF9wdHIgPSAwOyAKKyAg
ICAgICAgfQorCisgICAgICAgIC8vIEZpcmUgYSByZXF1ZXN0IHRvIGRvIHRoZSBwb3N0LW1pZ3Jh
dGlvbiB0YXNrcworICAgICAgICBDdXN0b21FdmVudCAqcG9zdFRocmVhZENoYW5nZUV2ZW50ID0g
bmV3IEN1c3RvbUV2ZW50KFBvc3RUaHJlYWRDaGFuZ2VFdmVudFR5cGUpOworICAgICAgICBwb3N0
VGhyZWFkQ2hhbmdlRXZlbnQtPmVuYWJsZUltbWVkaWF0ZWx5ID0gb2xkU3RhdGU7CisgICAgICAg
IFFDb3JlQXBwbGljYXRpb246OnBvc3RFdmVudCh0aGlzLCBwb3N0VGhyZWFkQ2hhbmdlRXZlbnQp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIAorICAgIGlmIChldi0+dHlwZSgp
ID09IFBvc3RUaHJlYWRDaGFuZ2VFdmVudFR5cGUpIHsgLy8gY3VzdG9tLCBwb3N0LW1pZ3JhdGlv
biBldmVudAorICAgICAgICAKKyAgICAgICAgaWYgKCFkX3B0cikgeyAKKyAgICAgICAgICAgIGRf
cHRyID0gbmV3IFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KG1fcGlwZSwgbV90eXBlLCBtX2J5dGVz
LCB0aGlzKTsKKyAgICAgICAgICAgIGJvb2wgdGFyZ2V0U3RhdGUgPSByZWludGVycHJldF9jYXN0
PEN1c3RvbUV2ZW50Kj4oZXYpLT5lbmFibGVJbW1lZGlhdGVseTsKKyAgICAgICAgICAgIGRfcHRy
LT5zZXRFbmFibGVkKHRhcmdldFN0YXRlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
cmV0dXJuIHRydWU7IAorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsgCisgICAgCit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3lt
YmlhblBpcGVOb3RpZmllci5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9R
U3ltYmlhblBpcGVOb3RpZmllci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmY1MzQzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgKQEAgLTAsMCArMSw1NyBAQAorCisjaWZuZGVm
IFFTWU1CSUFOUElQRU5PVElGSUVSX0hfCisjZGVmaW5lIFFTWU1CSUFOUElQRU5PVElGSUVSX0hf
CisKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPFFFdmVudD4KKyNpbmNsdWRlIDxwbGF0
Zm9ybS9ycGlwZS5oPgorCitjbGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDsKKworLy8gVGhp
cyBjbGFzcyB3cmFwcyBhIGZyaWVuZGx5IFFPYmplY3QgaW50ZXJmYWNlIGFyb3VuZCBhIFN5bWJp
YW4KKy8vIGFjdGl2ZSBvYmplY3QgKEFPKS4gVGhlIEFPIGhlbHBzIHVzIHdhdGNoIGZvciBkYXRh
IGF2YWlsYWJsZSAoZm9yIHJlYWQpIAorLy8gb3Igd3JpdGUgc3BhY2UgYXZhaWxhYmxlIGV2ZW50
cyBvbiBTeW1iaWFuIFJQaXBlIG9iamVjdHMuICAKK2NsYXNzIFFTeW1iaWFuUGlwZU5vdGlmaWVy
IDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVDVAorcHVibGljOiAKKyAgICBlbnVtIEV2
ZW50VHlwZSB7CisgICAgICAgIC8vIGRhdGEgY2FuIGJlIHJlYWQKKyAgICAgICAgUGlwZVJlYWRE
YXRhQXZhaWxhYmxlLAorICAgICAgICAvLyB3cml0ZSBwaXBlIGNhbiB0YWtlIG1vcmUgZGF0YQor
ICAgICAgICBQaXBlV3JpdGVTcGFjZUF2YWlsYWJsZQorICAgIH07CisgICAgUVN5bWJpYW5QaXBl
Tm90aWZpZXIoUlBpcGUmLCBFdmVudFR5cGUsIGludCwgUU9iamVjdCAqcGFyZW50ID0gMCk7Cisg
ICAgdmlydHVhbCB+UVN5bWJpYW5QaXBlTm90aWZpZXIoKTsKKyAgICBib29sIGV2ZW50KFFFdmVu
dCopOworICAgIAorcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKwor
c2lnbmFsczoKKyAgICAvLyBlbWl0dGVkIHdoZW4gUGlwZVJlYWREYXRhQXZhaWxhYmxlIG9jY3Vy
cworICAgIHZvaWQgcmVhZHlUb1JlYWQoaW50KTsKKyAgICAvLyBlbWl0dGVkIHdoZW4gUGlwZVdy
aXRlU3BhY2VBdmFpbGFibGUgb2NjdXJzCisgICAgdm9pZCByZWFkeVRvV3JpdGUoaW50KTsKKyAg
ICB2b2lkIGVycm9yT2NjdXJlZChpbnQpOworICAgIAorcHJvdGVjdGVkOgorICAgIFN5bWJpYW5Q
aXBlQWN0aXZlT2JqZWN0KiBkX3B0cjsKKworcHJpdmF0ZTogCisgICAgLy8gV2UgbmVlZCB0byBk
ZWxldGUgYW5kIHJlLWNyZWF0ZSBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCB0byAKKyAgICAvLyBl
bmFibGUgUU9iamVjdC0+bW92ZVRvVGhyZWFkKCkgb24gdGhpcyBvYmplY3QsIHNvIGJyZWFrIFBJ
TVBMCisgICAgLy8gcnVsZXMsIGFuZCBrZWVwIHNvbWUgYyd0b3IgYXJncyBhcm91bmQgCisgICAg
UlBpcGUgbV9waXBlOyAKKyAgICBFdmVudFR5cGUgbV90eXBlOworICAgIGludCBtX2J5dGVzOyAg
IAorICAgIAorICAgIC8vIEN1c3RvbSBldmVudCB0byBoZWxwIHdpdGggUU9iamVjdC0+bW92ZVRv
VGhyZWFkKCkgCisgICAgc3RhdGljIGNvbnN0IFFFdmVudDo6VHlwZSBQb3N0VGhyZWFkQ2hhbmdl
RXZlbnRUeXBlID0gKFFFdmVudDo6VHlwZSkoUUV2ZW50OjpVc2VyICsgMTAwKTsKKyAgICAgICAg
CisgICAgZnJpZW5kIGNsYXNzIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0OworICAgIFFfRElTQUJM
RV9DT1BZKFFTeW1iaWFuUGlwZU5vdGlmaWVyKQorfTsKKworI2VuZGlmIC8vIFFTWU1CSUFOUElQ
RU5PVElGSUVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0NTI2YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3BwCkBA
IC0wLDAgKzEsOTAgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYg
T1MoU1lNQklBTikKKyNpbmNsdWRlICJTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5oIgorCisjaW5j
bHVkZSAiUVN5bWJpYW5QaXBlTm90aWZpZXIuaCIKKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5o
PgorCisKKy8vIFRoZSBTeW1iaWFuIEFjdGl2ZSBPYmplY3QgdGhhdCByZWdpc3RlcnMgbm90aWZp
Y2F0aW9uIHJlcXVlc3RzIHdpdGggdGhlIGtlcm5lbCwgc2ltaWxhciB0byBQT1NJWCdzIHNlbGVj
dCgpIHN5c3RlbSBjYWxsCisvLyBOb3RlIHRoYXQgdW5saWtlIGFueXRoaW5nIG9uIFVuaXgsIFN5
bWJpYW4gQWN0aXZlIE9iamVjdHMgYXJlIHNjaGVkdWxhYmxlIG9iamVjdHMgdGhhdCBhcmUgYm91
bmQgdG8gdGhlIGN1cnJlbnQgdGhyZWFkJ3MgQWN0aXZlIFNjaGVkdWxlci4gCisvLyBUaGVyZWZv
cmUgdGhleSBhcmUgYSBsaWdodHdlaWdodCB2ZXJzaW9uIG9mIHRocmVhZHMgZnJvbSBhIHJlc291
cmNlIHV0aWxpemF0aW9uIFBPVi4gCitTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6U3ltYmlhblBp
cGVBY3RpdmVPYmplY3QoUlBpcGUgcGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlw
ZSB0eXBlLCBpbnQgc3BhY2VJbkJ5dGVzLCBRU3ltYmlhblBpcGVOb3RpZmllciAqcXEpCisgICAg
OiBDQWN0aXZlKENBY3RpdmU6OkVQcmlvcml0eVN0YW5kYXJkKSwgbV9waXBlKHBpcGUpLCBtX3R5
cGUodHlwZSksIG1fYnl0ZXMoc3BhY2VJbkJ5dGVzKSwgcV9wdHIocXEpIAoreyAKKyAgICBDQWN0
aXZlU2NoZWR1bGVyOjpBZGQodGhpcyk7Cit9CisgICAgCitTeW1iaWFuUGlwZUFjdGl2ZU9iamVj
dDo6flN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KCkgCit7IAorICAgIENhbmNlbCgpOworfQorCit2
b2lkIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0OjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgCit7
CisgICAgLy8gc3RhcnQgbGlzdGVuaW5nCisgICAgaWYgKGVuYWJsZWQgJiYgIUlzQWN0aXZlKCkp
IHsgIAorICAgICAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVh
ZERhdGFBdmFpbGFibGUpIHsgCisgICAgICAgICAgICBtX3BpcGUuTm90aWZ5RGF0YUF2YWlsYWJs
ZShpU3RhdHVzKTsKKyAgICAgICAgICAgIFNldEFjdGl2ZSgpOyAvLyBiYXNlIGNsYXNzIG1ldGhv
ZCB0byBkZWNsYXJlIHRoZSBhYm92ZSByZXF1ZXN0IGFzICJwZW5kaW5nIiBjb21wbGV0aW9uCisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90
aWZpZXI6OlBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlKSB7CisgICAgICAgICAgICBpbnQgZnJlZVNw
YWNlTmVlZGVkID0gbV9ieXRlcyA8IDAgPyAxIDogbV9ieXRlczsgCisgICAgICAgICAgICBtX3Bp
cGUuTm90aWZ5U3BhY2VBdmFpbGFibGUoZnJlZVNwYWNlTmVlZGVkLCBpU3RhdHVzKTsKKyAgICAg
ICAgICAgIFNldEFjdGl2ZSgpOyAvLyBiYXNlIGNsYXNzIG1ldGhvZCB0byBkZWNsYXJlIHRoZSBh
Ym92ZSByZXF1ZXN0IGFzICJwZW5kaW5nIiBjb21wbGV0aW9uCisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gc3RvcCBsaXN0ZW5pbmcKKyAg
ICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgQ2FuY2VsKCk7IC8vIEF1dG9tYXRpY2FsbHkgbGVh
ZHMgdG8gYSBEb0NhbmNlbCgpIAorICAgICAgICByZXR1cm47CisgICAgfQorfQorCisvLyBUaGlz
IG1ldGhvZCBnZXRzIHJ1biBieSB0aGUgU3ltYmlhbiBPUyBBY3RpdmUgU2NoZWR1bGVyIHdoZW4g
dGhlCisvLyByZXF1ZXN0IGluaXRpYXRlZCBieSBOb3RpZnlEYXRhQXZhaWxhYmxlIGFib3ZlIGlz
IG1hcmtlZCBhcyBjb21wbGV0ZWQKKy8vIFdlIHNlbmQgYSBRdCBzaWduYWwgdmlhIG91ciBwYXJl
bnQgUU9iamVjdCwgYW5kIHRoZW4gaW1wbGljaXRseSBnbworLy8gaW50byBhIGRpc2FibGVkIHN0
YXRlLCBpLmUgbm90aWZpY2F0aW9ucyBhcmUgb2ZmICAKK3ZvaWQgU3ltYmlhblBpcGVBY3RpdmVP
YmplY3Q6OlJ1bkwoKSAKK3sKKyAgICBRX1EoUVN5bWJpYW5QaXBlTm90aWZpZXIpOworICAgIAor
ICAgIGlmIChpU3RhdHVzICE9IEtFcnJOb25lKSB7CisgICAgICAgIGVtaXQgcS0+ZXJyb3JPY2N1
cmVkKGlTdGF0dXMuSW50KCkpOworICAgICAgICByZXR1cm47IAorICAgIH0KKyAgICAKKyAgICBp
ZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUp
IHsKKyAgICAgICAgY29uc3QgaW50IGJ5dGVzQXZhaWxhYmxlID0gIG1fcGlwZS5TaXplKCk7IC8v
IHBlZWsgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQKKyAgICAgICAgaWYgKGJ5dGVzQXZhaWxhYmxl
ID4gMCkgeyAgCisgICAgICAgICAgICBlbWl0IHEtPnJlYWR5VG9SZWFkKGJ5dGVzQXZhaWxhYmxl
KTsKKyAgICAgICAgICAgIHJldHVybjsgCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYg
KG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVdyaXRlU3BhY2VBdmFpbGFibGUp
IHsgCisgICAgICAgIGVtaXQgcS0+cmVhZHlUb1dyaXRlKDApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCit9CisgIAordm9pZCBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6RG9DYW5jZWwoKSAK
K3sgCisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVJlYWREYXRh
QXZhaWxhYmxlKSB7IAorICAgICAgICBtX3BpcGUuQ2FuY2VsRGF0YUF2YWlsYWJsZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgICAgICAgICAgICAgCisgICAgaWYgKG1fdHlwZSA9PSBR
U3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVdyaXRlU3BhY2VBdmFpbGFibGUpIHsgCisgICAgICAg
IG1fcGlwZS5DYW5jZWxTcGFjZUF2YWlsYWJsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4zNTcwMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5oCkBAIC0w
LDAgKzEsMzAgQEAKKworI2lmbmRlZiBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdF9oCisjZGVmaW5l
IFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKworI2luY2x1ZGUgPGUzMmJhc2UuaD4KKyNpbmNs
dWRlICJRU3ltYmlhblBpcGVOb3RpZmllci5oIgorI2luY2x1ZGUgInFnbG9iYWwuaCIKKyNpbmNs
dWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCitjbGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCA6
IHB1YmxpYyBDQWN0aXZlIHsKK3B1YmxpYzoKKyAgICBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChS
UGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSwgaW50LCBRU3ltYmlhblBpcGVO
b3RpZmllciAqKTsKKyAgICB+U3ltYmlhblBpcGVBY3RpdmVPYmplY3QoKTsKKyAgICAKK3ByaXZh
dGU6CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIAorICAgIHZvaWQgUnVuTCgpOwor
ICAgIHZvaWQgRG9DYW5jZWwoKTsgCisKKyAgICBSUGlwZSBtX3BpcGU7CisgICAgUVN5bWJpYW5Q
aXBlTm90aWZpZXI6OkV2ZW50VHlwZSBtX3R5cGU7CisgICAgaW50IG1fYnl0ZXM7IC8vIG9ubHkg
dXNlZCBmb3Igd3JpdGUgcGlwZTsgLTEgbWVhbnMgdW51c2VkCisgICAgCisgICAgUVN5bWJpYW5Q
aXBlTm90aWZpZXIgKiBxX3B0cjsKKyAgICBRX0RFQ0xBUkVfUFVCTElDKFFTeW1iaWFuUGlwZU5v
dGlmaWVyKQorfTsKKworI2VuZGlmIC8vIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5U3ltYmlhbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWIxNWNjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5U3ltYmlhbi5jcHAK
QEAgLTAsMCArMSwxNDcgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STShRVCkg
JiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNpbmNsdWRlICJBcmd1
bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlIDxz
eXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxlMzJtYXRoLmg+CisjaW5jbHVkZSA8UURlYnVnPgorCitz
dGF0aWMgUlByb2Nlc3MgcHJvYzsgCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitfTElUKEtGb3Jt
YXRUb1N0cmluZywiJWQiKTsKKworU2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRsZSgpCisgICAg
OiBtX25hbWUoMCkgLCBtX3NpemUoMCkKK3sKK30KKworU2hhcmVkTWVtb3J5OjpIYW5kbGU6On5I
YW5kbGUoKQoreyAgIAorfQorCitib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjppc051bGwoKSBj
b25zdAoreworICAgIHJldHVybiBtX25hbWUgPT0gMDsKK30KKwordm9pZCBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QK
K3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsgICAgCisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMy
KG1fc2l6ZSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKG1fbmFtZSk7IC8vIG5hbWUgb2Yg
Z2xvYmFsIGNodW5rIChmb3JtYXR0ZWQgYXMgaW50KSAKK30KKworYm9vbCBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6ZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgSGFuZGxl
JiBoYW5kbGUpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVV
SW50MzIoc2l6ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsgCisgICAgCisgICAgdWludDMyX3Qg
bmFtZTsKKyAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50MzIobmFtZSkpCisgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgCisgICAgIGhhbmRsZS5tX3NpemUgPSBzaXplOworICAgICBo
YW5kbGUubV9uYW1lID0gbmFtZTsgCisgICAgIHJldHVybiB0cnVlOworfQorCisvLyBDcmVhdGUg
YSBuZXcgc2hhcmVkIG1lbW9yeSBzZWdtZW50CitQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hh
cmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCit7CisgICAgCisgICAgLy8gRmlyc3QsIHdl
IHBpY2sgYSByYW5kb20gbmFtZSBmb3IgYSBnbG9iYWwgY2h1bmsgKHNoYXJlZCBtZW1vcnkgc2Vn
bWVudCkuCisgICAgLy8gR2xvYmFsIGNodW5rcyBhcmUgdmlzaWJsZSB0byBhbnkgcHJvY2VzcyB3
aGljaCBrbm93cyB0aGUgbmFtZSBvZiB0aGUgY2h1bmsuCisgICAgLy8gVG8gc2ltcGxpZnkgc2Vy
aWFsaXphdGlvbiBvZiB0aGUgbmFtZSBpbiBIYW5kbGU6OmVuY29kZSgpLCB3ZSBzaW1wbHkgcGlj
ayBhIDMyLWJpdCB1bnNpZ25lZCBpbnQgZnJvbSB0aGUga2VybmVsJ3MgcmFuZG9tIHBvb2wuCisg
ICAgdWludDMyX3QgcmFuZG9tID0gTWF0aDo6UmFuZG9tKCk7IAorICAgIFRCdWY8S01heEtlcm5l
bE5hbWU+IGdsb2JhbENodW5rTmFtZTsKKyAgICBnbG9iYWxDaHVua05hbWUuRm9ybWF0KEtGb3Jt
YXRUb1N0cmluZywgcmFuZG9tKTsKKyAgICAKKyAgICBSQ2h1bmsgY2h1bms7IAorICAgIFRJbnQg
ZXJyb3I7IAorICAgIGlmICggKGVycm9yID0gY2h1bmsuQ3JlYXRlR2xvYmFsKGdsb2JhbENodW5r
TmFtZSwgc2l6ZSwgc2l6ZSkpICE9IEtFcnJOb25lICkgeworICAgICAgICBxQ3JpdGljYWwoKSA8
PCAiIEZhaWxlZCB0byBjcmVhdGUgU3ltYmlhbiBzaGFyZWQgbWVtb3J5ICIgPDwgZXJyb3I7IAor
ICAgICAgICByZXR1cm4gMDsgCisgICAgfQorICAgICAgICAKKyAgICBSZWZQdHI8U2hhcmVkTWVt
b3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNoYXJlZE1lbW9yeSkpOworICAgIHNoYXJl
ZE1lbW9yeS0+bV9oYW5kbGUgPSBjaHVuay5IYW5kbGUoKTsKKyAgICBzaGFyZWRNZW1vcnktPm1f
c2l6ZSA9IGNodW5rLlNpemUoKTsKKyAgICBzaGFyZWRNZW1vcnktPm1fZGF0YSA9IHN0YXRpY19j
YXN0PHZvaWQqPihjaHVuay5CYXNlKCkpOworICAgICAgICAKKyAgICByZXR1cm4gc2hhcmVkTWVt
b3J5LnJlbGVhc2UoKTsKK30KKworCisvLyBUYWtlIGEgc2hhcmVkIG1lbW9yeSBoYW5kbGUgZ2l2
ZW4gdXN1YWxseSBieSBhbm90aGVyIHByb2Nlc3MsIGFuZCBvcGVuIGl0IGxvY2FsbHkgZm9yIHJl
YWQgb3Igd3JpdGUKK1Bhc3NSZWZQdHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0
ZShjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIGlm
IChoYW5kbGUuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiAwOworICAgICAKKyAgICAvLyBDb252
ZXJ0IG51bWJlciB0byBzdHJpbmcsIGFuZCBvcGVuIHRoZSBnbG9iYWwgY2h1bmsKKyAgICBUQnVm
PEtNYXhLZXJuZWxOYW1lPiBnbG9iYWxDaHVua05hbWU7CisgICAgZ2xvYmFsQ2h1bmtOYW1lLkZv
cm1hdChLRm9ybWF0VG9TdHJpbmcsIGhhbmRsZS5tX25hbWUpOworICAgIFJDaHVuayBjaHVuazsK
KyAgICBUSW50IGVycm9yID0gY2h1bmsuT3Blbkdsb2JhbChnbG9iYWxDaHVua05hbWUsIGZhbHNl
KTsgLy8gTk9URTogU3ltYmlhbiBPUyBkb2Vzbid0IHN1cHBvcnQgcmVhZC1vbmx5IGdsb2JhbCBj
aHVua3MKKyAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAg
ICAKKyAgICBSZWZQdHI8U2hhcmVkTWVtb3J5PiBzaGFyZWRNZW1vcnkoYWRvcHRSZWYobmV3IFNo
YXJlZE1lbW9yeSkpOworICAgIHNoYXJlZE1lbW9yeS0+bV9oYW5kbGUgPSBjaHVuay5IYW5kbGUo
KTsKKyAgICBzaGFyZWRNZW1vcnktPm1fc2l6ZSA9IGNodW5rLlNpemUoKTsKKyAgICBzaGFyZWRN
ZW1vcnktPm1fZGF0YSA9IHN0YXRpY19jYXN0PHZvaWQqPihjaHVuay5CYXNlKCkpOworICAgICAg
CisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7Cit9CisKK1NoYXJlZE1lbW9yeTo6
flNoYXJlZE1lbW9yeSgpCit7CisgICAgUkNodW5rIGNodW5rOworICAgIGlmICghY2h1bmsuU2V0
UmV0dXJuZWRIYW5kbGUobV9oYW5kbGUpKSB7CisgICAgICAgIFRIYW5kbGVJbmZvIGluZm87Cisg
ICAgICAgIGNodW5rLkhhbmRsZUluZm8oJmluZm8pOworICAgICAgICAvLyBGSVhNRTogV2UgbmVl
ZCB0byBmaWd1cmUgb3V0IHdoZW4gdG8gRGVjb21taXQoKSBtZW1vcnkgZnJvbSB0aGUgY2h1bmsK
KyAgICAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gYWxzbyB1bmRlcnN0YW5kIGhvdyBDbG9zZSgp
IGRlY3JlbWVudHMgdGhlIGtlcm5lbC1zaWRlIHJlZiBjb3VudCBvZiB0aGUgCisgICAgICAgIC8v
IHNoYXJlZCBtZW1vcnkgc2VnbWVudCBhbmQgbGVhZHMgdG8gcHJlbWF0dXJlIGRlY29tbWl0cygp
IG9mIHRoZSBzaGFyZWQgbWVtb3J5IGFyZWEKKyAgICAgICAgUlByb2Nlc3MgcHJvYzsKKyAgICAg
ICAgcURlYnVnKCkgPDwgIltQSUQ6IiA8PCAocXVpbnQ2NClwcm9jLklkKCkuSWQoKSA8PCAiXSIg
PDwgUV9GVU5DX0lORk8gPDwgIlNoYXJlZE1lbW9yeSBkJ3RvcjogcHJvcGVydGllcyBpTnVtT3Bl
bkluUHJvY2VzcyA9ICIgPDwgaW5mby5pTnVtT3BlbkluUHJvY2VzcyA8PCAiLCBpTnVtUHJvY2Vz
c2VzID0gIiA8PCBpbmZvLmlOdW1Qcm9jZXNzZXM7CisgICAgfQorfQorCisKKy8vIEluaXRpYWxp
emVkIHRoZSBwYXNzZWQgSGFuZGxlIAorYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShI
YW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgICAKKyAgICBBU1NF
UlRfQVJHKGhhbmRsZSwgaGFuZGxlLmlzTnVsbCgpKTsKKyAgICAgICAgCisgICAgUkNodW5rIGNo
dW5rOyAKKyAgICBpZiAoY2h1bmsuU2V0UmV0dXJuZWRIYW5kbGUobV9oYW5kbGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgLy8gY29udmVydCB0aGUgbmFtZSAoc3RyaW5nIGZv
cm0pIHRvIHVpbnQzMl90CisgICAgVE5hbWUgZ2xvYmFsQ2h1bmtOYW1lID0gY2h1bmsuTmFtZSgp
OworICAgIFRMZXggbGV4ZXIoZ2xvYmFsQ2h1bmtOYW1lKTsKKyAgICBUVWludDMyIG5hbWVBc0lu
dCA9IDA7IAorICAgIGlmIChsZXhlci5WYWwobmFtZUFzSW50LCBFRGVjaW1hbCkpIAorICAgICAg
ICByZXR1cm4gZmFsc2U7IAorICAgICAgICAgCisgICAgaGFuZGxlLm1fbmFtZSA9IG5hbWVBc0lu
dDsgCisgICAgaGFuZGxlLm1fc2l6ZSA9IG1fc2l6ZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordW5zaWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCit7CisgICAgcmV0
dXJuIFBBR0VfU0laRTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVu
Y2hlclN5bWJpYW4uY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1By
b2Nlc3NMYXVuY2hlclN5bWJpYW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmNiNDgwNmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAKQEAgLTAsMCArMSw4NSBAQAor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRGT1JNKFFUKSAmJiBPUyhTWU1CSUFOKQorI2lu
Y2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgorCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlJ1bkxvb3AuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vcnBpcGUuaCIKKyNpbmNsdWRlIDxRRGVidWc+CisjaW5jbHVkZSA8cWdsb2JhbC5oPgor
CitfTElUKEtXb3JrZXJQcm9jZXNzTmFtZSwiUXRXZWJQcm9jZXNzLmV4ZSIpOworCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFByb2Nlc3NMYXVu
Y2hlcjo6bGF1bmNoUHJvY2VzcygpCit7CisgICAgLy8gTWFrZSBhIHBhaXIgb2YgaGFsZi1kdXBs
ZXggcGlwZXMKKyAgICBSUGlwZSogbG9jYWxQaXBlcyA9IG5ldyBSUGlwZVsyXTsgCisgICAgUlBp
cGUqIHJlbW90ZVBpcGVzID0gbmV3IFJQaXBlWzJdOyAKKyAgICAgCisgICAgUlBpcGU6OkluaXQo
KTsKKyAgICBUSW50IGVycm9yOworICAgIC8vIENyZWF0ZSBhIHBpcGUuIEZpcnN0IGFyZyBpcyB0
aGUgcmVhZC1lbmQgUlBpcGUgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIHdyaXRlLWVuZC4gCisgICAg
ZXJyb3IgPSBSUGlwZTo6Q3JlYXRlKENvcmVJUEM6OkNvbm5lY3Rpb246Ok1heFBpcGVDYXBhY2l0
eSwgcmVtb3RlUGlwZXNbMF0sIGxvY2FsUGlwZXNbMV0gKTsKKyAgICBlcnJvciA9IFJQaXBlOjpD
cmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6TWF4UGlwZUNhcGFjaXR5LCBsb2NhbFBpcGVzWzBd
LCByZW1vdGVQaXBlc1sxXSk7CisgICAgCisgICAgLy8gUHJlcGFyZSB0byBsYXVuY2ggd29ya2Vy
IHByb2Nlc3MKKyAgICBSUHJvY2Vzcyogd29ya2VyUHJvY2VzcyA9IG5ldyBSUHJvY2VzcygpIDsK
KyAgICBlcnJvciA9IHdvcmtlclByb2Nlc3MtPkNyZWF0ZShLV29ya2VyUHJvY2Vzc05hbWUoKSwg
S051bGxEZXNDKTsKKyAgICAvLyBQYXNzIG93bmVyc2hpcCBvZiBwaXBlcyB2aWEgUlByb2Nlc3Mn
ICJlbnZpcm9ubWVudCBkYXRhIHNsb3RzIi4gCisgICAgLy8gVGhpcyBpcyB0aGUgU3ltYmlhbiB3
YXkgb2YgcGFzc2luZyBvd25lcnNoaXAgb2YgaGFuZGxlcyBmcm9tIHBhcmVudCB0byBjaGlsZAor
ICAgIGVycm9yID0gd29ya2VyUHJvY2Vzcy0+U2V0UGFyYW1ldGVyKDMsIHJlbW90ZVBpcGVzWzBd
KTsgLy8gcmVhZGVyCisgICAgZXJyb3IgPSB3b3JrZXJQcm9jZXNzLT5TZXRQYXJhbWV0ZXIoNCwg
cmVtb3RlUGlwZXNbMV0pOyAvLyB3cml0ZXIKKyAgICAgICAgICAgICAgICAKKyAgICAvLyBCbG9j
ayB1bnRpbCB0aGUgcmVtb3RlIHByb2Nlc3MgaXMgdXAKKyAgICB3b3JrZXJQcm9jZXNzLT5SZXN1
bWUoKTsKKyAgICBUUmVxdWVzdFN0YXR1cyBsYXVuY2hTdGF0dXM7IAorICAgIHdvcmtlclByb2Nl
c3MtPlJlbmRlenZvdXMobGF1bmNoU3RhdHVzKTsgCisgICAgVXNlcjo6V2FpdEZvclJlcXVlc3Qo
bGF1bmNoU3RhdHVzKTsKKyAgICAKKyAgICBpZiAobGF1bmNoU3RhdHVzLkludCgpICE9IEtFcnJO
b25lKSAKKyAgICAgICAgcUNyaXRpY2FsKCkgPDwgIiBXb3JrZXIgcHJvY2VzcyBmYWlsZWQgdG8g
bGF1bmNoICIgPDwgbGF1bmNoU3RhdHVzLkludCgpOworICAgIAorICAgIC8vIENsb3NlIHRoZSBw
aXBlIGVuZHMgd2UganVzdCBwYXNzZWQgdG8gdGhlIHJlbW90ZQorICAgIHJlbW90ZVBpcGVzWzBd
LkNsb3NlKCk7IAorICAgIHJlbW90ZVBpcGVzWzFdLkNsb3NlKCk7CisgICAgZGVsZXRlIHJlbW90
ZVBpcGVzOworICAgIAorICAgIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaWRlbnRp
ZmllciA9IGxvY2FsUGlwZXM7ICAKKyAgICAKKyAgICAvLyBEZWNsYXJlIGxhdW5jaCBwcm9jZXNz
IGFzIGRvbmUuIE5vdGUgdGhhdCB0aGlzIGNsYXNzIG93bnMgJ3dvcmtlclByb2Nlc3MnLCBidXQg
Q29ubmVjdGlvbiBvd25zICdpZGVudGlmaWVyJyAKKyAgICBSdW5Mb29wOjptYWluKCktPnNjaGVk
dWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6
ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2Vzcywgd29ya2VyUHJvY2VzcywgaWRlbnRpZmllcikpOwor
fQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCit7CisJaWYgKCFt
X3Byb2Nlc3NJZGVudGlmaWVyKQorCSAgICByZXR1cm47CisJCisgICAgLy8gSW1wb3J0YW50OiBL
aWxsaW5nIGFub3RoZXIgcHJvY2VzcyAoZXZlbiBpZiB3ZSBzcGF3bmVkIGl0KSByZXF1aXJlcyBQ
b3dlck1hbmFnZW1lbnQgY2FwYWJpbGl0eSwKKyAgICAvLyB3aGljaCBpcyBhIGhpZ2ggYmFyIHRv
IGp1bXAgb3ZlciBmb3IgYW55IHVzZXIgYXBwbGljYXRpb24uIEl0J3MgYWxzbyBkYW5nZXJvdXMu
ICAKKyAgICAvLyBUT0RPOiBDaGVjayBpZiB3ZSBzaG91bGQgc2lnbmFsIHRoZSB3ZWIgcHJvY2Vz
cyB0aHJvdWdoIHRoZSBwaXBlIHRvIHRlcm1pbmF0ZSBpdHNlbGY/CisgICAgLy8gLi5hbHRob3Vn
aCB0aGF0IHdvbid0IHdvcmsgaWYgdGhlIHByb2Nlc3MgaXMgdW5yZXNwb25zaXZlIQorCVJQcm9j
ZXNzIG1lOworCWlmIChtZS5IYXNDYXBhYmlsaXR5KEVDYXBhYmlsaXR5UG93ZXJNZ210KSkgCisJ
ICAgIG1fcHJvY2Vzc0lkZW50aWZpZXItPlRlcm1pbmF0ZShLRXJyTm9uZSk7CisJCit9CisKK3Zv
aWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIGlmICghbV9w
cm9jZXNzSWRlbnRpZmllcikKKyAgICAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9jZXNzSWRl
bnRpZmllci0+Q2xvc2UoKTsKKyAgICBkZWxldGUgbV9wcm9jZXNzSWRlbnRpZmllcjsKKyAgICBt
X3Byb2Nlc3NJZGVudGlmaWVyID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKwor
I2VuZGlmCi0tIAoxLjcuMy4xLm1zeXNnaXQuMAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89260</attachid>
            <date>2011-04-12 13:31:46 -0700</date>
            <delta_ts>2011-04-21 16:07:54 -0700</delta_ts>
            <desc>more complete patch</desc>
            <filename>ipc_v2.patch</filename>
            <type>text/plain</type>
            <size>39518</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5o
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKaW5kZXggYjZh
MjQxNS4uODQ0NDc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9Db25uZWN0aW9uLmgKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25u
ZWN0aW9uLmgKQEAgLTQ0LDYgKzQ0LDkgQEAKICNpbmNsdWRlIDxzdHJpbmc+CiAjZWxpZiBQTEFU
Rk9STShRVCkKIGNsYXNzIFFTb2NrZXROb3RpZmllcjsKKyNpZiBPUyhTWU1CSUFOKQorI2luY2x1
ZGUgPHBsYXRmb3JtL3JwaXBlLmg+CisjZW5kaWYKICNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmgiCiAjZW5kaWYKIApAQCAtOTksNyArMTAyLDExIEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIEhBTkRMRSBJZGVudGlmaWVyOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZVNlcnZlckFu
ZENsaWVudElkZW50aWZpZXJzKElkZW50aWZpZXImIHNlcnZlcklkZW50aWZpZXIsIElkZW50aWZp
ZXImIGNsaWVudElkZW50aWZpZXIpOwogI2VsaWYgUExBVEZPUk0oUVQpCisjaWYgT1MoU1lNQklB
TikKKyAgICB0eXBlZGVmIFJQaXBlKiBJZGVudGlmaWVyOworI2Vsc2UKICAgICB0eXBlZGVmIGlu
dCBJZGVudGlmaWVyOworI2VuZGlmCiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdHlwZWRlZiBp
bnQgSWRlbnRpZmllcjsKICNlbmRpZgpAQCAtMTI5LDcgKzEzNiwxMCBAQCBwdWJsaWM6CiAgICAg
dm9pZCBtYXJrQ3VycmVudGx5RGlzcGF0Y2hlZE1lc3NhZ2VBc0ludmFsaWQoKTsKIAogICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgTm9UaW1lb3V0ID0gMTAwMDAwMDAwMDBVTEw7
Ci0KKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyAgICBzdGF0aWMgY29uc3QgaW50
IE1heFBpcGVDYXBhY2l0eSA9IDQwOTY7IAorI2VuZGlmCisgICAgCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gYm9vbCBzZW5kKGNvbnN0IFQmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0aW9u
SUQsIHVuc2lnbmVkIG1lc3NhZ2VTZW5kRmxhZ3MgPSAwKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBib29sIHNlbmRTeW5jKGNvbnN0IFQmIG1lc3NhZ2UsIGNvbnN0IHR5cGVuYW1lIFQ6OlJl
cGx5JiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgZG91YmxlIHRpbWVvdXQgPSBOb1Rp
bWVvdXQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgd2FpdEZvckFuZERpc3BhdGNo
SW1tZWRpYXRlbHkodWludDY0X3QgZGVzdGluYXRpb25JRCwgZG91YmxlIHRpbWVvdXQpOwpAQCAt
MzEwLDkgKzMyMCwyMCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVhZHlSZWFkSGFuZGxlcigpOwog
CiAgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVhZEJ1ZmZlcjsKKyNpZiBPUyhTWU1CSUFOKQorCVJQ
aXBlIG1fcmVhZFBpcGU7CisgICAgUlBpcGUgbV93cml0ZVBpcGU7CisgICAgUVN5bWJpYW5QaXBl
Tm90aWZpZXIqIG1fcGlwZVJlYWROb3RpZmllcjsgCisgICAgc3RydWN0IFBhcnNlZE1lc3NhZ2Ug
eyAKKyAgICAgICAgdWludDhfdCogc3RhcnQgOyAvLyBiYXNlIGFkZHJlc3Mgb2YgbWVzc2FnZQor
ICAgICAgICB1aW50MzJfdCBzaXplIDsgIC8vIHNpemUgaW4gYnl0ZXMKKyAgICAgICAgdWludDMy
X3QgbWVzc2FnZUlEOyAgICAgICAgCisgICAgfTsKKyNlbHNlCiAgICAgc2l6ZV90IG1fY3VycmVu
dE1lc3NhZ2VTaXplOwogICAgIFFTb2NrZXROb3RpZmllciogbV9zb2NrZXROb3RpZmllcjsKICAg
ICBpbnQgbV9zb2NrZXREZXNjcmlwdG9yOworI2VuZGlmCiAjZWxpZiBQTEFURk9STShHVEspCiAg
ICAgdm9pZCByZWFkRXZlbnRIYW5kbGVyKCk7CiAgICAgdm9pZCBwcm9jZXNzQ29tcGxldGVkTWVz
c2FnZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9D
b25uZWN0aW9uUXQuY3BwIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25u
ZWN0aW9uUXQuY3BwCmluZGV4IDIyNWQ3ZGMuLmM2NmNiZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25RdC5jcHAKQEAgLTQ0LDYgKzQ0
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIENvcmVJUEMgewogCisjaWYg
UExBVEZPUk0oUVQpICYmICFPUyhTWU1CSUFOKQogc3RhdGljIGNvbnN0IHNpemVfdCBtZXNzYWdl
TWF4U2l6ZSA9IDQwOTY7CiBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0dGFjaG1lbnRNYXhBbW91bnQg
PSAyNTU7CiAKQEAgLTM2MSw2ICszNjIsOCBAQCBib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2lu
Z01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuYwogICAg
IHJldHVybiB0cnVlOwogfQogCisjZW5kaWYKKwogdm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRD
bG9zZUNvbm5lY3Rpb25PblByb2Nlc3NUZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXIgcHJvY2VzcykKIHsKICAgICBtX2Nvbm5lY3Rpb25RdWV1ZS5zY2hlZHVsZVdv
cmtPblRlcm1pbmF0aW9uKHByb2Nlc3MsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rp
b246OmNvbm5lY3Rpb25EaWRDbG9zZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi42YjYyOGQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAKQEAgLTAsMCAr
MSwxNTYgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lN
QklBTikKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudEVuY29k
ZXIuaCIKKyNpbmNsdWRlICJXb3JrSXRlbS5oIgorI2luY2x1ZGUgPFFWZWN0b3I+CisjaW5jbHVk
ZSA8cXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorbmFtZXNwYWNlIENvcmVJUEMgeworCitzdGF0aWMgY29uc3QgdWludDMyX3QgdHJhaWxlciA9
IDB4REVBRENBRkU7CisKK3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50
aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgIAorICAgIGlmIChtX2lzU2VydmVyKSB7CisgICAgICAg
IG1fcmVhZFBpcGUgPSBzdGF0aWNfY2FzdDxSUGlwZSo+KGlkZW50aWZpZXIpWzBdOworICAgICAg
ICBtX3dyaXRlUGlwZSA9IHN0YXRpY19jYXN0PFJQaXBlKj4oaWRlbnRpZmllcilbMV07CisgICAg
fSBlbHNlIHsKKyAgICAgICAgVEludCBlcnJvcjsKKyAgICAgICAgLy8gT3BlbiBwaXBlcyB2aWEg
UlByb2Nlc3MnICJlbnZpcm9ubWVudCBkYXRhIHNsb3RzIiBudW1iZXIgMyAmIDQKKyAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgU3ltYmlhbiBPUyB3YXkgb2YgcGFzc2luZyBoYW5kbGVzIGZyb20gcGFy
ZW50IHRvIGNoaWxkCisgICAgICAgIGVycm9yID0gbV9yZWFkUGlwZS5PcGVuKDMpOyAKKyAgICAg
ICAgZXJyb3J8PSBtX3dyaXRlUGlwZS5PcGVuKDQpOworICAgICAgICBpZiAoZXJyb3IpIHsgCisg
ICAgICAgICAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBtX3JlYWRCdWZmZXIucmVzaXplKENvcmVJUEM6OkNvbm5l
Y3Rpb246Ok1heFBpcGVDYXBhY2l0eSk7CisgICAgbV9pc0Nvbm5lY3RlZCA9IHRydWU7IAorICAg
ICAgICAKK30KKwordm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAg
IG1fcmVhZEJ1ZmZlci5zaHJpbmsoMCk7CisgICAgCisgICAgZGVsZXRlIG1fcGlwZVJlYWROb3Rp
ZmllcjsKKyAgICBtX3JlYWRQaXBlLkNsb3NlKCk7CisgICAgbV93cml0ZVBpcGUuQ2xvc2UoKTsK
KyAgICAvLyBUT0RPOiBkZWxldGUgdGhlIG1lbW9yeSBmb3IgdGhlIFJQaXBlWzJdIGFycmF5Cisg
ICAgbV9pc0Nvbm5lY3RlZCA9IGZhbHNlOworfQorCisvLyBDaGVjayBpZiB0aGUgZGF0YSBtYXRj
aGVzIHRoZSB0cmFpbGVyIHBhdHRlcm4KK3N0YXRpYyBpbmxpbmUgYm9vbCBpc01lc3NhZ2VUcmFp
bGVyKHVpbnQ4X3QgKmRhdGEpIAoreyAgCisgICAgcmV0dXJuICggdHJhaWxlciA9PSAqKHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkYXRhKSkgKTsgIAorfQorCisvLyBIYW5kbGVyIGZvciAi
Ynl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQiIGV2ZW50IG9uIHBpcGUKK3ZvaWQgQ29ubmVjdGlvbjo6
cmVhZHlSZWFkSGFuZGxlcigpCit7CisgICAgUlByb2Nlc3MgcHJvYzsKKyAgICAKKyAgICBtX3Bp
cGVSZWFkTm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOworICAgICAgICAKKyAgICAvLyBNYWtl
IGEgdGVtcG9yYXJ5IFN5bWJpYW4gZGVzY3JpcHRvciB0byBwb2ludCB0byBleGlzdGluZyBidWZm
ZXIsIHdpdGggMCBjdXJyZW50IHNpemUsIGFuZCBhIG1heCBzaXplCisgICAgVFB0cjggcmVhZFB0
cihtX3JlYWRCdWZmZXIuZGF0YSgpLCAwLCBtX3JlYWRCdWZmZXIuc2l6ZSgpKTsKKyAgICAKKyAg
ICAvLyBSZWFkIGFsbCB0aGUgYnl0ZXMgd2UgY2FuLiBOb3RlIHRoYXQgbXVsdGlwbGUgbWVzc2Fn
ZXMgY2FuIGJlIHJlYWQgaW4gb25lIHJlYWQgb3BlcmF0aW9uIGR1ZSB0byB0aGUgc3RyZWFtLW9y
aWVudGVkIGNoYW5uZWwKKyAgICBUSW50IGJ5dGVzUmVhZCA9IG1fcmVhZFBpcGUuUmVhZChyZWFk
UHRyLCByZWFkUHRyLk1heFNpemUoKSk7CisgICAgCisgICAgaWYgKGJ5dGVzUmVhZCA+IDApIHsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgX19BU1NFUlRfQUxXQVlTKGJ5dGVzUmVhZCA9PSBy
ZWFkUHRyLlNpemUoKSwgVXNlcjo6SW52YXJpYW50KCkpOworICAgICAgICAKKyAgICAgICAgLy8g
U3RhcnQgcGFyc2luZyBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgd2hlcmUgd2UgZXhwZWN0
IHRvIHNlZSBhIHRyYWlsZXIgYW5kIHRoZSBzaXplIG9mIHRoaXMgbWVzc2FnZQorICAgICAgICB1
aW50OF90KiBtZXNzYWdlU3RhcnQgPSBtX3JlYWRCdWZmZXIuZGF0YSgpICsgYnl0ZXNSZWFkOwor
ICAgICAgICAKKyAgICAgICAgLy8gUGxhY2UgdG8ga2VlcCB0cmFjayBvZiBwYXJzZWQgbWVzc2Fn
ZXMKKyAgICAgICAgUVZlY3RvcjxQYXJzZWRNZXNzYWdlPiBtZXNzc2FnZVBvaW50ZXJzOworICAg
ICAgICAKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
bWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7IC8vIG1vdmUgYmFjayBwb2ludGVyIHRv
IHJlYWQgdHJhaWxlciAgICAgICAgICAgICAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFpc01lc3NhZ2VUcmFpbGVyKG1lc3NhZ2VTdGFydCkpIC8vIGJhaWwgaWYgbm8gdHJhaWxlciAK
KyAgICAgICAgICAgICAgICBicmVhazsgCisgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
bWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7IC8vIG1vdmUgYmFjayBwb2ludGVyIHRv
IHJlYWQgbWVzc2FnZVNpemUKKyAgICAgICAgICAgIHVpbnQzMl90IG1lc3NhZ2VTaXplID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtZXNzYWdlU3RhcnQpOyAKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7IC8vIG1vdmUgYmFj
ayB0byByZWFkIG1lc3NhZ2VJRAorICAgICAgICAgICAgdWludDMyX3QgbWVzc2FnZUlEID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtZXNzYWdlU3RhcnQpOyAKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbWVzc2FnZVN0YXJ0IC09IChtZXNzYWdlU2l6ZSAtIHNpemVvZih1aW50MzJf
dCkpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEtlZXAgYSBub3RlIG9mIG1lc3NhZ2UgYm91bmRhcnkKKyAgICAgICAgICAgIGNv
bnN0IFBhcnNlZE1lc3NhZ2UgYU1lc3NhZ2UgPSB7bWVzc2FnZVN0YXJ0LCBtZXNzYWdlU2l6ZSAt
IHNpemVvZih1aW50MzJfdCksIG1lc3NhZ2VJRH07CisgICAgICAgICAgICBtZXNzc2FnZVBvaW50
ZXJzLmFwcGVuZChhTWVzc2FnZSk7IAorICAgICAgICAgICAgCisgICAgICAgICAgICBfX0FTU0VS
VF9BTFdBWVMobWVzc2FnZVN0YXJ0ID49ICBtX3JlYWRCdWZmZXIuZGF0YSgpLCBVc2VyOjpJbnZh
cmlhbnQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtZXNzYWdlU3RhcnQgPT0g
bV9yZWFkQnVmZmVyLmRhdGEoKSkgCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgIH0gLy8gd2hpbGUgbG9vcAorICAgICAgCisgICAgICAgIC8vIE5vdyBk
aXNwYXRjaCBwYXJzZWQgbWVzc2FnZXMgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuIGJ5
IHRoZSBzZW5kZXIKKyAgICAgICAgZm9yIChpbnQgaSA9IG1lc3NzYWdlUG9pbnRlcnMuc2l6ZSgp
LTE7IGkgPj0wIDsgaS0tKSB7IAorICAgICAgICAgICAgY29uc3QgUGFyc2VkTWVzc2FnZSBhTWVz
c2FnZSA9IG1lc3NzYWdlUG9pbnRlcnMuYXQoaSk7CisgICAgICAgICAgICBwcm9jZXNzSW5jb21p
bmdNZXNzYWdlKE1lc3NhZ2VJRDo6ZnJvbUludChhTWVzc2FnZS5tZXNzYWdlSUQpLCBhZG9wdFB0
cihuZXcgQXJndW1lbnREZWNvZGVyKGFNZXNzYWdlLnN0YXJ0LCBhTWVzc2FnZS5zaXplKSkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgIH0gCisgICAgCisgICAgbV9waXBlUmVhZE5vdGlmaWVy
LT5zZXRFbmFibGVkKHRydWUpOworICAgIAorfQorCisKK2Jvb2wgQ29ubmVjdGlvbjo6b3Blbigp
Cit7CisgICAgLy8gcGxhdGZvcm1Jbml0aWFsaXplKCkgc2hvdWxkIGhhdmUgdGFrZW4gY2FyZSBv
ZiB0aGUgY29ubmVjdGlvbiBieSBub3cKKyAgICBpZiAoIW1faXNDb25uZWN0ZWQpIAorICAgICAg
ICByZXR1cm4gZmFsc2U7IAorICAgIAorICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBmb3IgcmVhZCAK
KyAgICBtX3BpcGVSZWFkTm90aWZpZXIgPSBtX2Nvbm5lY3Rpb25RdWV1ZS5yZWdpc3RlclBpcGVF
dmVudEhhbmRsZXIobV9yZWFkUGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVSZWFkRGF0
YUF2YWlsYWJsZSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZHlSZWFk
SGFuZGxlcikpOworICAgICAgICAKKyAgICAvLyBTY2hlZHVsZSBhIHJlYWQuCisgICAgbV9jb25u
ZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rp
b246OnJlYWR5UmVhZEhhbmRsZXIpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkgY29uc3QKK3sK
KyAgICAvLyBTZWVtcyBhZGVxdWF0ZSBmb3Igbm93ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDb25uZWN0aW9uOjpzZW5kT3V0Z29pbmdNZXNzYWdlKE1lc3NhZ2VJRCBtZXNzYWdlSUQs
IFBhc3NPd25QdHI8QXJndW1lbnRFbmNvZGVyPiBhcmd1bWVudHMpCit7ICAgIAorICAgIC8vIEVu
Y29kZSBtZXNzYWdlSUQuIAorICAgIGFyZ3VtZW50cy0+ZW5jb2RlVUludDMyKG1lc3NhZ2VJRC50
b0ludCgpKTsKKyAgICAKKyAgICAvLyBFbmNvZGUgc2l6ZSBvZiBtZXNzYWdlIGV4Y2x1ZGluZyB0
aGlzIDQtYnl0ZSBmaWVsZCBhbmQgdGhlIDQtYnl0ZSB0cmFpbGVyIHdoaWNoIGZvbGxvd3MuCisg
ICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIoYXJndW1lbnRzLT5idWZmZXJTaXplKCkpOworICAg
IAorICAgIC8vIGEgdHJhaWxlciBtYXJrZXIgKG1hZ2ljIG51bWJlcikgd2hpY2ggbWFrZXMgaXQg
ZWFzaWVyIHRvIHNwb3QgbWVzYWdlIGJvdW5kYXJ5IGF0IHRoZSByZWNlaXZlcgorICAgIGFyZ3Vt
ZW50cy0+ZW5jb2RlVUludDMyKHRyYWlsZXIpOworICAgIAorICAgIC8vIFdyaXRlIHRvIHBpcGUg
dXNpbmcgYSB0ZW1wb3JhcnkgU3ltYmlhbiBkZXNjcmlwdG9yCisgICAgVFB0cjggd3JpdGVCdWZm
ZXIoYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCksIGFyZ3VtZW50
cy0+YnVmZmVyU2l6ZSgpICk7CisgICAgVEludCBieXRlc1dyaXR0ZW4gPSBtX3dyaXRlUGlwZS5X
cml0ZSh3cml0ZUJ1ZmZlciwgd3JpdGVCdWZmZXIuU2l6ZSgpICk7ICAgICAKKyAgICAKKyAgICBy
ZXR1cm4gKGJ5dGVzV3JpdHRlbiA9PSAgd3JpdGVCdWZmZXIuU2l6ZSgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgQ29yZUlQQworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MGE1NjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcApA
QCAtMCwwICsxLDc4IEBACisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STSAoUVQp
ICYmIE9TKFNZTUJJQU4pCisKKyNpbmNsdWRlICJRT2JqZWN0IgorI2luY2x1ZGUgIlFEZWJ1ZyIK
KyNpbmNsdWRlICJRQ29yZUFwcGxpY2F0aW9uIgorI2luY2x1ZGUgIlFFdmVudCIKKyNpbmNsdWRl
ICJRU3ltYmlhblBpcGVOb3RpZmllci5oIgorI2luY2x1ZGUgIlN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0LmgiCisjaW5jbHVkZSA8cGxhdGZvcm0vcnBpcGUuaD4KKworLy8gV3JhcHBlciBRT2JqZWN0
IGFyb3VuZCBhIFN5bWJpYW4gQWN0aXZlIE9iamVjdCAoQU8pLiBXZSBtdXN0IHVzZSB1c2UgYW4g
YWN0aXZlIG9iamVjdAorLy8gd2hpbGUgcmVnaXN0ZXJpbmcgYXN5bmNocm9ub3VzIG5vdGlmaWNh
dGlvbiByZXF1ZXN0cyAoZS5nIGRhdGEgYXZhaWxhYmxlIHRvIHJlYWQvc3BhY2UgYXZhaWxhYmxl
IHRvIHdyaXRlKSAKKy8vIG9uIG5hdGl2ZSBTeW1iaWFuIElQQyBBUElzIHN1Y2ggYXMgUlBpcGUK
K1FTeW1iaWFuUGlwZU5vdGlmaWVyOjpRU3ltYmlhblBpcGVOb3RpZmllcihSUGlwZSYgcGlwZSwg
RXZlbnRUeXBlIHR5cGUsIGludCBieXRlcywgUU9iamVjdCAqcGFyZW50KSAKKyAgICA6bV9waXBl
KHBpcGUpLCBtX3R5cGUodHlwZSksIG1fYnl0ZXMoYnl0ZXMpLCBRT2JqZWN0KHBhcmVudCkKK3sK
KyAgICBkX3B0ciA9IG5ldyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChwaXBlLCB0eXBlLCBieXRl
cywgdGhpcyk7Cit9CisKK1FTeW1iaWFuUGlwZU5vdGlmaWVyOjp+UVN5bWJpYW5QaXBlTm90aWZp
ZXIoKSAKK3sKKyAgICBkZWxldGUgZF9wdHI7Cit9CisKK3ZvaWQgUVN5bWJpYW5QaXBlTm90aWZp
ZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSAKK3sgCisgICAgaWYgKCFkX3B0cikgeyAKKyAg
ICAgICAgLy8gZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24gdmlhIHBvc3RFdmVudCgpLiBVc2VmdWwg
d2hlbiBhIG1vdmVUb1RocmVhZCgpIHJlcXVpcmVzIHRoZSBBY3RpdmUgT2JqZWN0IHRvIAorICAg
ICAgICAvLyBiZSBkZWxldGVkIGFuZCByZS1jcmVhdGVkIG9uIHRoZSBuZXcgdGhyZWFkLiAKKyAg
ICAgICAgUUV2ZW50ICpwb3N0VGhyZWFkQ2hhbmdlRXZlbnQgPSBuZXcgUUV2ZW50KFBvc3RUaHJl
YWRDaGFuZ2VFdmVudFR5cGUpOworICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjpwb3N0RXZlbnQo
dGhpcywgcG9zdFRocmVhZENoYW5nZUV2ZW50KTsKKyAgICAgICAgcmV0dXJuOyAKKyAgICB9Cisg
ICAKKyAgICBkX3B0ci0+c2V0RW5hYmxlZChlbmFibGVkKTsgICAgICAgCit9CisKKy8vIFN5bWJp
YW4gYWN0aXZlIG9iamVjdHMgKEFPcykgYXJlIGJvdW5kIHRvIGFuICJhY3RpdmUgc2NoZWR1bGVy
IiB3aGljaCBpcyB0aHJlYWQtbG9jYWwuCisvLyBUaGVyZWZvcmUsIHRvIGFsbG93IG1vdmVUb1Ro
cmVhZCgpIHRvIHdvcmsgY29ycmVjdGx5IHdpdGggdGhlIHBhcmVudCBRT2JqZWN0IHdlIG5lZWQg
dG8gCisvLyBkZWxldGUgdGhlIEFPIGFuZCByZS1jcmVhdGUgaXQgb25jZSB0aGUgZXhlY3V0aW9u
IG1vdmVzIHRvIHRoZSBuZXcgdGhyZWFkCitib29sIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpldmVu
dChRRXZlbnQqIGV2KQoreyAgICAgICAgCisgICAgaWYgKGV2LT50eXBlKCkgPT0gUUV2ZW50OjpU
aHJlYWRDaGFuZ2UpIHsgLy8gcHJlLW1pZ3JhdGlvbiBldmVudAorCisgICAgICAgIGlmIChkX3B0
cikgeyAKKyAgICAgICAgICAgIGlmIChkX3B0ci0+SXNBZGRlZCgpKSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBvbGRTdGF0ZSA9IGRfcHRyLT5Jc0FjdGl2ZSgpOworICAgICAgICAgICAgICAgIGRf
cHRyLT5EZXF1ZSgpOyAvLyBjYW5jZWwgb3V0c3RhbmRpbmcgcmVxdWVzdCArIHJlbW92ZSBmcm9t
IGFjdGl2ZSBzY2hlZHVsZXIKKyAgICAgICAgICAgIH0gICAgIAorICAgICAgICAgICAgZGVsZXRl
IGRfcHRyOyAKKyAgICAgICAgICAgIGRfcHRyID0gMDsgCisgICAgICAgIH0KKworICAgICAgICAv
LyBGaXJlIGEgZGVmZXJyZWQgcmUtaW5pdGlhbGl6YXRpb24gcmVxdWVzdAorICAgICAgICBRRXZl
bnQgKnBvc3RUaHJlYWRDaGFuZ2VFdmVudCA9IG5ldyBRRXZlbnQoUG9zdFRocmVhZENoYW5nZUV2
ZW50VHlwZSk7CisgICAgICAgIFFDb3JlQXBwbGljYXRpb246OnBvc3RFdmVudCh0aGlzLCBwb3N0
VGhyZWFkQ2hhbmdlRXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIAor
ICAgIGlmIChldi0+dHlwZSgpID09IFBvc3RUaHJlYWRDaGFuZ2VFdmVudFR5cGUpIHsgLy8gY3Vz
dG9tLCBwb3N0LW1pZ3JhdGlvbiBldmVudAorICAgICAgICAKKyAgICAgICAgaWYgKCFkX3B0cikg
eyAKKyAgICAgICAgICAgIGRfcHRyID0gbmV3IFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KG1fcGlw
ZSwgbV90eXBlLCBtX2J5dGVzLCB0aGlzKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBXZSBwcmVz
dW1wdGl2ZWx5IGVuYWJsZSB3YXRjaCwgZXZlbiB0aG91Z2ggY2xpZW50IG1heSBoYXZlIGNhbGxl
ZAorICAgICAgICAgICAgLy8gc2V0RW5hYmxlZChmYWxzZSkgYmVmb3JlIHRoZSBjYWxsIHRvIG1v
dmVUb1RocmVhZCgpCisgICAgICAgICAgICBkX3B0ci0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7IAorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsgCisgICAgCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MzQzZWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgKQEAg
LTAsMCArMSw1NyBAQAorCisjaWZuZGVmIFFTWU1CSUFOUElQRU5PVElGSUVSX0hfCisjZGVmaW5l
IFFTWU1CSUFOUElQRU5PVElGSUVSX0hfCisKKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUg
PFFFdmVudD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCitjbGFzcyBTeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdDsKKworLy8gVGhpcyBjbGFzcyB3cmFwcyBhIGZyaWVuZGx5IFFPYmplY3Qg
aW50ZXJmYWNlIGFyb3VuZCBhIFN5bWJpYW4KKy8vIGFjdGl2ZSBvYmplY3QgKEFPKS4gVGhlIEFP
IGhlbHBzIHVzIHdhdGNoIGZvciBkYXRhIGF2YWlsYWJsZSAoZm9yIHJlYWQpIAorLy8gb3Igd3Jp
dGUgc3BhY2UgYXZhaWxhYmxlIGV2ZW50cyBvbiBTeW1iaWFuIFJQaXBlIG9iamVjdHMuICAKK2Ns
YXNzIFFTeW1iaWFuUGlwZU5vdGlmaWVyIDogcHVibGljIFFPYmplY3QKK3sKKyAgICBRX09CSkVD
VAorcHVibGljOiAKKyAgICBlbnVtIEV2ZW50VHlwZSB7CisgICAgICAgIC8vIGRhdGEgY2FuIGJl
IHJlYWQKKyAgICAgICAgUGlwZVJlYWREYXRhQXZhaWxhYmxlLAorICAgICAgICAvLyB3cml0ZSBw
aXBlIGNhbiB0YWtlIG1vcmUgZGF0YQorICAgICAgICBQaXBlV3JpdGVTcGFjZUF2YWlsYWJsZQor
ICAgIH07CisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXIoUlBpcGUmLCBFdmVudFR5cGUsIGludCwg
UU9iamVjdCAqcGFyZW50ID0gMCk7CisgICAgdmlydHVhbCB+UVN5bWJpYW5QaXBlTm90aWZpZXIo
KTsKKyAgICBib29sIGV2ZW50KFFFdmVudCopOworICAgIAorcHVibGljIHNsb3RzOgorICAgIHZv
aWQgc2V0RW5hYmxlZChib29sKTsKKworc2lnbmFsczoKKyAgICAvLyBlbWl0dGVkIHdoZW4gUGlw
ZVJlYWREYXRhQXZhaWxhYmxlIG9jY3VycworICAgIHZvaWQgcmVhZHlUb1JlYWQoaW50KTsKKyAg
ICAvLyBlbWl0dGVkIHdoZW4gUGlwZVdyaXRlU3BhY2VBdmFpbGFibGUgb2NjdXJzCisgICAgdm9p
ZCByZWFkeVRvV3JpdGUoaW50KTsKKyAgICB2b2lkIGVycm9yT2NjdXJlZChpbnQpOworICAgIAor
cHJvdGVjdGVkOgorICAgIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KiBkX3B0cjsKKworcHJpdmF0
ZTogCisgICAgLy8gV2UgbmVlZCB0byBkZWxldGUgYW5kIHJlLWNyZWF0ZSBTeW1iaWFuUGlwZUFj
dGl2ZU9iamVjdCB0byAKKyAgICAvLyBlbmFibGUgUU9iamVjdC0+bW92ZVRvVGhyZWFkKCkgb24g
dGhpcyBvYmplY3QsIHNvIGJyZWFrIFBJTVBMCisgICAgLy8gcnVsZXMsIGFuZCBrZWVwIHNvbWUg
Yyd0b3IgYXJncyBhcm91bmQgCisgICAgUlBpcGUgbV9waXBlOyAKKyAgICBFdmVudFR5cGUgbV90
eXBlOworICAgIGludCBtX2J5dGVzOyAgIAorICAgIAorICAgIC8vIEN1c3RvbSBldmVudCB0byBo
ZWxwIHdpdGggUU9iamVjdC0+bW92ZVRvVGhyZWFkKCkgCisgICAgc3RhdGljIGNvbnN0IFFFdmVu
dDo6VHlwZSBQb3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlID0gKFFFdmVudDo6VHlwZSkoUUV2ZW50
OjpVc2VyICsgMTAwKTsKKyAgICAgICAgCisgICAgZnJpZW5kIGNsYXNzIFN5bWJpYW5QaXBlQWN0
aXZlT2JqZWN0OworICAgIFFfRElTQUJMRV9DT1BZKFFTeW1iaWFuUGlwZU5vdGlmaWVyKQorfTsK
KworI2VuZGlmIC8vIFFTWU1CSUFOUElQRU5PVElGSUVSX0hfCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3Bw
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9i
amVjdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY0NTI2YwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlh
blBpcGVBY3RpdmVPYmplY3QuY3BwCkBAIC0wLDAgKzEsOTAgQEAKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJTeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdC5oIgorCisjaW5jbHVkZSAiUVN5bWJpYW5QaXBlTm90aWZpZXIuaCIKKyNp
bmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCisKKy8vIFRoZSBTeW1iaWFuIEFjdGl2ZSBPYmpl
Y3QgdGhhdCByZWdpc3RlcnMgbm90aWZpY2F0aW9uIHJlcXVlc3RzIHdpdGggdGhlIGtlcm5lbCwg
c2ltaWxhciB0byBQT1NJWCdzIHNlbGVjdCgpIHN5c3RlbSBjYWxsCisvLyBOb3RlIHRoYXQgdW5s
aWtlIGFueXRoaW5nIG9uIFVuaXgsIFN5bWJpYW4gQWN0aXZlIE9iamVjdHMgYXJlIHNjaGVkdWxh
YmxlIG9iamVjdHMgdGhhdCBhcmUgYm91bmQgdG8gdGhlIGN1cnJlbnQgdGhyZWFkJ3MgQWN0aXZl
IFNjaGVkdWxlci4gCisvLyBUaGVyZWZvcmUgdGhleSBhcmUgYSBsaWdodHdlaWdodCB2ZXJzaW9u
IG9mIHRocmVhZHMgZnJvbSBhIHJlc291cmNlIHV0aWxpemF0aW9uIFBPVi4gCitTeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdDo6U3ltYmlhblBpcGVBY3RpdmVPYmplY3QoUlBpcGUgcGlwZSwgUVN5bWJp
YW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSB0eXBlLCBpbnQgc3BhY2VJbkJ5dGVzLCBRU3ltYmlh
blBpcGVOb3RpZmllciAqcXEpCisgICAgOiBDQWN0aXZlKENBY3RpdmU6OkVQcmlvcml0eVN0YW5k
YXJkKSwgbV9waXBlKHBpcGUpLCBtX3R5cGUodHlwZSksIG1fYnl0ZXMoc3BhY2VJbkJ5dGVzKSwg
cV9wdHIocXEpIAoreyAKKyAgICBDQWN0aXZlU2NoZWR1bGVyOjpBZGQodGhpcyk7Cit9CisgICAg
CitTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6flN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KCkgCit7
IAorICAgIENhbmNlbCgpOworfQorCit2b2lkIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0OjpzZXRF
bmFibGVkKGJvb2wgZW5hYmxlZCkgCit7CisgICAgLy8gc3RhcnQgbGlzdGVuaW5nCisgICAgaWYg
KGVuYWJsZWQgJiYgIUlzQWN0aXZlKCkpIHsgIAorICAgICAgICBpZiAobV90eXBlID09IFFTeW1i
aWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsgCisgICAgICAgICAgICBt
X3BpcGUuTm90aWZ5RGF0YUF2YWlsYWJsZShpU3RhdHVzKTsKKyAgICAgICAgICAgIFNldEFjdGl2
ZSgpOyAvLyBiYXNlIGNsYXNzIG1ldGhvZCB0byBkZWNsYXJlIHRoZSBhYm92ZSByZXF1ZXN0IGFz
ICJwZW5kaW5nIiBjb21wbGV0aW9uCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICht
X3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlKSB7
CisgICAgICAgICAgICBpbnQgZnJlZVNwYWNlTmVlZGVkID0gbV9ieXRlcyA8IDAgPyAxIDogbV9i
eXRlczsgCisgICAgICAgICAgICBtX3BpcGUuTm90aWZ5U3BhY2VBdmFpbGFibGUoZnJlZVNwYWNl
TmVlZGVkLCBpU3RhdHVzKTsKKyAgICAgICAgICAgIFNldEFjdGl2ZSgpOyAvLyBiYXNlIGNsYXNz
IG1ldGhvZCB0byBkZWNsYXJlIHRoZSBhYm92ZSByZXF1ZXN0IGFzICJwZW5kaW5nIiBjb21wbGV0
aW9uCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gc3RvcCBsaXN0ZW5pbmcKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgQ2FuY2Vs
KCk7IC8vIEF1dG9tYXRpY2FsbHkgbGVhZHMgdG8gYSBEb0NhbmNlbCgpIAorICAgICAgICByZXR1
cm47CisgICAgfQorfQorCisvLyBUaGlzIG1ldGhvZCBnZXRzIHJ1biBieSB0aGUgU3ltYmlhbiBP
UyBBY3RpdmUgU2NoZWR1bGVyIHdoZW4gdGhlCisvLyByZXF1ZXN0IGluaXRpYXRlZCBieSBOb3Rp
ZnlEYXRhQXZhaWxhYmxlIGFib3ZlIGlzIG1hcmtlZCBhcyBjb21wbGV0ZWQKKy8vIFdlIHNlbmQg
YSBRdCBzaWduYWwgdmlhIG91ciBwYXJlbnQgUU9iamVjdCwgYW5kIHRoZW4gaW1wbGljaXRseSBn
bworLy8gaW50byBhIGRpc2FibGVkIHN0YXRlLCBpLmUgbm90aWZpY2F0aW9ucyBhcmUgb2ZmICAK
K3ZvaWQgU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlJ1bkwoKSAKK3sKKyAgICBRX1EoUVN5bWJp
YW5QaXBlTm90aWZpZXIpOworICAgIAorICAgIGlmIChpU3RhdHVzICE9IEtFcnJOb25lKSB7Cisg
ICAgICAgIGVtaXQgcS0+ZXJyb3JPY2N1cmVkKGlTdGF0dXMuSW50KCkpOworICAgICAgICByZXR1
cm47IAorICAgIH0KKyAgICAKKyAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVy
OjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsKKyAgICAgICAgY29uc3QgaW50IGJ5dGVzQXZhaWxh
YmxlID0gIG1fcGlwZS5TaXplKCk7IC8vIHBlZWsgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQKKyAg
ICAgICAgaWYgKGJ5dGVzQXZhaWxhYmxlID4gMCkgeyAgCisgICAgICAgICAgICBlbWl0IHEtPnJl
YWR5VG9SZWFkKGJ5dGVzQXZhaWxhYmxlKTsKKyAgICAgICAgICAgIHJldHVybjsgCisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6
UGlwZVdyaXRlU3BhY2VBdmFpbGFibGUpIHsgCisgICAgICAgIGVtaXQgcS0+cmVhZHlUb1dyaXRl
KDApOworICAgICAgICByZXR1cm47CisgICAgfQorCit9CisgIAordm9pZCBTeW1iaWFuUGlwZUFj
dGl2ZU9iamVjdDo6RG9DYW5jZWwoKSAKK3sgCisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBp
cGVOb3RpZmllcjo6UGlwZVJlYWREYXRhQXZhaWxhYmxlKSB7IAorICAgICAgICBtX3BpcGUuQ2Fu
Y2VsRGF0YUF2YWlsYWJsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAgICAg
ICAgCisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVdyaXRlU3Bh
Y2VBdmFpbGFibGUpIHsgCisgICAgICAgIG1fcGlwZS5DYW5jZWxTcGFjZUF2YWlsYWJsZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3Qu
aCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVP
YmplY3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTcwMzE2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFu
UGlwZUFjdGl2ZU9iamVjdC5oCkBAIC0wLDAgKzEsMzAgQEAKKworI2lmbmRlZiBTeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdF9oCisjZGVmaW5lIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKworI2lu
Y2x1ZGUgPGUzMmJhc2UuaD4KKyNpbmNsdWRlICJRU3ltYmlhblBpcGVOb3RpZmllci5oIgorI2lu
Y2x1ZGUgInFnbG9iYWwuaCIKKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCitjbGFzcyBT
eW1iaWFuUGlwZUFjdGl2ZU9iamVjdCA6IHB1YmxpYyBDQWN0aXZlIHsKK3B1YmxpYzoKKyAgICBT
eW1iaWFuUGlwZUFjdGl2ZU9iamVjdChSUGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50
VHlwZSwgaW50LCBRU3ltYmlhblBpcGVOb3RpZmllciAqKTsKKyAgICB+U3ltYmlhblBpcGVBY3Rp
dmVPYmplY3QoKTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwor
ICAgIAorICAgIHZvaWQgUnVuTCgpOworICAgIHZvaWQgRG9DYW5jZWwoKTsgCisKKyAgICBSUGlw
ZSBtX3BpcGU7CisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSBtX3R5cGU7Cisg
ICAgaW50IG1fYnl0ZXM7IC8vIG9ubHkgdXNlZCBmb3Igd3JpdGUgcGlwZTsgLTEgbWVhbnMgdW51
c2VkCisgICAgCisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXIgKiBxX3B0cjsKKyAgICBRX0RFQ0xB
UkVfUFVCTElDKFFTeW1iaWFuUGlwZU5vdGlmaWVyKQorfTsKKworI2VuZGlmIC8vIFN5bWJpYW5Q
aXBlQWN0aXZlT2JqZWN0X2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCmluZGV4IDAzNjM2OTIuLmEzMDRhMDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgK
QEAgLTM4LDcgKzM4LDExIEBAIHR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
cjsKICNlbGlmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgSEFORExFIFBsYXRmb3JtUHJvY2Vzc0lk
ZW50aWZpZXI7CiAjZWxpZiBQTEFURk9STShRVCkKKyNpZiBPUyhTWU1CSUFOKQordHlwZWRlZiBS
UHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbHNlCiB0eXBlZGVmIFFQcm9j
ZXNzKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VuZGlmCiAjZWxpZiBQTEFURk9STShH
VEspCiB0eXBlZGVmIHBpZF90IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oIGIvU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKaW5kZXggYTRiOTViZi4uYWQ4ZjY1YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKKysrIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKQEAgLTYwLDcgKzYwLDcgQEAg
cHVibGljOgogICAgICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29kZXIqKSBj
b25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50RGVjb2Rl
ciosIEhhbmRsZSYpOwogCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQpICYmICFP
UyhTWU1CSUFOKQogICAgICAgICBDb3JlSVBDOjpBdHRhY2htZW50IHJlbGVhc2VUb0F0dGFjaG1l
bnQoKSBjb25zdDsKICAgICAgICAgdm9pZCBhZG9wdEZyb21BdHRhY2htZW50KGludCBmaWxlRGVz
Y3JpcHRvciwgc2l6ZV90KTsKICNlbmRpZgpAQCAtNzEsOCArNzEsMTIgQEAgcHVibGljOgogI2Vs
aWYgUExBVEZPUk0oV0lOKQogICAgICAgICBtdXRhYmxlIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlm
IFBMQVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCisgICAgICAgIG11dGFibGUgdWludDMyX3Qg
bV9uYW1lOworI2Vsc2UKICAgICAgICAgbXV0YWJsZSBpbnQgbV9maWxlRGVzY3JpcHRvcjsKICNl
bmRpZgorI2VuZGlmCiAgICAgICAgIHNpemVfdCBtX3NpemU7CiAgICAgfTsKICAgICAKQEAgLTEw
MCw4ICsxMDQsMTIgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRGT1JNKFdJTikKICAgICBIQU5ETEUg
bV9oYW5kbGU7CiAjZWxpZiBQTEFURk9STShRVCkKKyNpZiBPUyhTWU1CSUFOKQorICAgIGludCBt
X2hhbmRsZTsKKyNlbHNlCiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3I7CiAjZW5kaWYKKyNlbmRp
ZgogfTsKIAogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dvcmtRdWV1
ZS5oIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKaW5kZXggOTlmNzdhZS4u
ZWEzMGZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgK
KysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKQEAgLTQ1LDYgKzQ1LDkg
QEAKICNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCiBjbGFzcyBRT2JqZWN0
OwogY2xhc3MgUVRocmVhZDsKKyNpZiBPUyhTWU1CSUFOKQorI2luY2x1ZGUgInF0L1FTeW1iaWFu
UGlwZU5vdGlmaWVyLmgiCisjZW5kaWYKICNlbGlmIFBMQVRGT1JNKEdUSykKIHR5cGVkZWYgc3Ry
dWN0IF9HTWFpbkNvbnRleHQgR01haW5Db250ZXh0OwogdHlwZWRlZiBzdHJ1Y3QgX0dNYWluTG9v
cCBHTWFpbkxvb3A7CkBAIC04Miw3ICs4NSwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3Rl
ckhhbmRsZShIQU5ETEUsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKICAgICB2b2lkIHVucmVnaXN0
ZXJBbmRDbG9zZUhhbmRsZShIQU5ETEUpOwogI2VsaWYgUExBVEZPUk0oUVQpCisjaWYgT1MoU1lN
QklBTikKKyAgICBRU3ltYmlhblBpcGVOb3RpZmllciogcmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVy
KFJQaXBlIHBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpFdmVudFR5cGUgdHlwZSwgUGFzc093
blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0pOworI2Vsc2UKICAgICBRU29ja2V0Tm90aWZpZXIqIHJl
Z2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5vdGlmaWVyOjpUeXBlLCBQYXNz
T3duUHRyPFdvcmtJdGVtPik7CisjZW5kaWYKICAgICB2b2lkIHNjaGVkdWxlV29ya09uVGVybWlu
YXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBQYXNzT3duUHRyPFdvcmtJ
dGVtPik7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCByZWdpc3RlckV2ZW50U291cmNl
SGFuZGxlcihpbnQsIGludCwgUGFzc093blB0cjxXb3JrSXRlbT4pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwIGIvU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwCmluZGV4IDhkNWQ3MGYuLjY0MDVhODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlRdC5jcHAKQEAg
LTI2LDYgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0o
UVQpICYmICFPUyhTWU1CSUFOKQogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgogCiAjaW5jbHVk
ZSAiQXJndW1lbnREZWNvZGVyLmgiCkBAIC0yMjYsMyArMjI3LDYgQEAgdW5zaWduZWQgU2hhcmVk
TWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAorCisj
ZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVt
b3J5U3ltYmlhbi5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlT
eW1iaWFuLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmQxY2U1Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5
U3ltYmlhbi5jcHAKQEAgLTAsMCArMSwxNDMgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQ
TEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKKyNp
bmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIK
KyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxlMzJtYXRoLmg+CisKK25hbWVzcGFj
ZSBXZWJLaXQgeworCitfTElUKEtGb3JtYXRUb1N0cmluZywiJWQiKTsKKworU2hhcmVkTWVtb3J5
OjpIYW5kbGU6OkhhbmRsZSgpCisgICAgOiBtX25hbWUoMCkgLCBtX3NpemUoMCkKK3sKK30KKwor
U2hhcmVkTWVtb3J5OjpIYW5kbGU6On5IYW5kbGUoKQoreyAgIAorfQorCitib29sIFNoYXJlZE1l
bW9yeTo6SGFuZGxlOjppc051bGwoKSBjb25zdAoreworICAgIHJldHVybiBtX25hbWUgPT0gMDsK
K30KKwordm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50
RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgpKTsgICAgCisg
ICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKG1fc2l6ZSk7CisgICAgLy8gbmFtZSBvZiB0aGUgZ2xv
YmFsIGNodW5rIChtYXNxdWFyYWRpbmcgYXMgaW50MzJfdCBmb3IgZWFzZSBvZiBzZXJpYWxpemF0
aW9uKSAKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIobV9uYW1lKTsgCit9CisKK2Jvb2wgU2hh
cmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIEhhbmRsZSYgaGFuZGxlKQoreworICAgIHNpemVfdCBzaXplOworICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlVUludDMyKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgIAorICAg
IHVpbnQzMl90IG5hbWU7CisgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlVUludDMyKG5hbWUpKQor
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgIAorICAgICBoYW5kbGUubV9zaXplID0gc2l6
ZTsKKyAgICAgaGFuZGxlLm1fbmFtZSA9IG5hbWU7IAorICAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ly8gQ3JlYXRlIGEgbmV3IHNoYXJlZCBtZW1vcnkgc2VnbWVudAorUGFzc1JlZlB0cjxTaGFyZWRN
ZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQoreworICAgIAorICAgIC8v
IE9uIFN5bWJpYW4sIGdsb2JhbCBjaHVua3MgKHNoYXJlZCBtZW1vcnkgc2VnbWVudHMpIGhhdmUg
c3lzdGVtLXVuaXF1ZSBuYW1lcywgc28gd2UgcGljayBhIHJhbmRvbSAKKyAgICAvLyBudW1iZXIg
ZnJvbSB0aGUga2VybmVsJ3MgcmFuZG9tIHBvb2wgYW5kIHVzZSBpdCBhcyBhIHN0cmluZy4gIAor
ICAgIC8vIFVzaW5nIGFuIGludGVnZXIgc2ltcGxpZmllcyBzZXJpYWxpemF0aW9uIG9mIHRoZSBu
YW1lIGluIEhhbmRsZTo6ZW5jb2RlKCkKKyAgICB1aW50MzJfdCByYW5kb20gPSBNYXRoOjpSYW5k
b20oKTsgCisgICAgVEJ1ZjxLTWF4S2VybmVsTmFtZT4gZ2xvYmFsQ2h1bmtOYW1lOworICAgIGds
b2JhbENodW5rTmFtZS5Gb3JtYXQoS0Zvcm1hdFRvU3RyaW5nLCByYW5kb20pOworICAgIAorICAg
IFJDaHVuayBjaHVuazsgCisgICAgVEludCBlcnJvcjsgCisgICAgaWYgKCAoZXJyb3IgPSBjaHVu
ay5DcmVhdGVHbG9iYWwoZ2xvYmFsQ2h1bmtOYW1lLCBzaXplLCBzaXplKSkgIT0gS0Vyck5vbmUg
KSB7CisgICAgICAgIHFDcml0aWNhbCgpIDw8ICIgRmFpbGVkIHRvIGNyZWF0ZSBTeW1iaWFuIHNo
YXJlZCBtZW1vcnkgIiA8PCBlcnJvcjsgCisgICAgICAgIHJldHVybiAwOyAKKyAgICB9CisgICAg
ICAgIAorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcg
U2hhcmVkTWVtb3J5KSk7CisgICAgc2hhcmVkTWVtb3J5LT5tX2hhbmRsZSA9IGNodW5rLkhhbmRs
ZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gY2h1bmsuU2l6ZSgpOworICAgIHNoYXJl
ZE1lbW9yeS0+bV9kYXRhID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGNodW5rLkJhc2UoKSk7CisgICAg
ICAgIAorICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQorCisKKy8vIFRha2Ug
YSBzaGFyZWQgbWVtb3J5IGhhbmRsZSBnaXZlbiB1c3VhbGx5IGJ5IGFub3RoZXIgcHJvY2Vzcywg
YW5kIG9wZW4gaXQgbG9jYWxseSBmb3IgcmVhZCBvciB3cml0ZQorUGFzc1JlZlB0cjxTaGFyZWRN
ZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKGNvbnN0IEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0
aW9uIHByb3RlY3Rpb24pCit7CisgICAgaWYgKGhhbmRsZS5pc051bGwoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgIAorICAgIC8vIENvbnZlcnQgbnVtYmVyIHRvIHN0cmluZywgYW5kIG9wZW4g
dGhlIGdsb2JhbCBjaHVuaworICAgIFRCdWY8S01heEtlcm5lbE5hbWU+IGdsb2JhbENodW5rTmFt
ZTsKKyAgICBnbG9iYWxDaHVua05hbWUuRm9ybWF0KEtGb3JtYXRUb1N0cmluZywgaGFuZGxlLm1f
bmFtZSk7CisKKyAgICBSQ2h1bmsgY2h1bms7CisgICAgVEludCBlcnJvciA9IGNodW5rLk9wZW5H
bG9iYWwoZ2xvYmFsQ2h1bmtOYW1lLCBmYWxzZSk7IC8vIE5PVEU6IFN5bWJpYW4gT1MgZG9lc24n
dCBzdXBwb3J0IHJlYWQtb25seSBnbG9iYWwgY2h1bmtzCisgICAgaWYgKGVycm9yKSAKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1l
bW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hhcmVkTWVtb3J5LT5tX2hh
bmRsZSA9IGNodW5rLkhhbmRsZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gY2h1bmsu
U2l6ZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGNo
dW5rLkJhc2UoKSk7CisgICAgICAKKyAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsK
K30KKworU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKK3sKKyAgICBSQ2h1bmsgY2h1bms7
CisgICAgaWYgKCFjaHVuay5TZXRSZXR1cm5lZEhhbmRsZShtX2hhbmRsZSkpIHsKKyAgICAgICAg
VEhhbmRsZUluZm8gaW5mbzsKKyAgICAgICAgY2h1bmsuSGFuZGxlSW5mbygmaW5mbyk7CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiB0byBEZWNvbW1pdCgpIG1l
bW9yeSBmcm9tIHRoZSBjaHVuaworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBhbHNvIHVu
ZGVyc3RhbmQgaG93IENsb3NlKCkgZGVjcmVtZW50cyB0aGUga2VybmVsLXNpZGUgcmVmIGNvdW50
IG9mIHRoZSAKKyAgICAgICAgLy8gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGFuZCBsZWFkcyB0byBw
cmVtYXR1cmUgZGVjb21taXRzKCkgb2YgdGhlIHNoYXJlZCBtZW1vcnkgYXJlYQorICAgIH0KK30K
KworCisvLyBJbml0aWFsaXplZCB0aGUgcGFzc2VkIEhhbmRsZSAKK2Jvb2wgU2hhcmVkTWVtb3J5
OjpjcmVhdGVIYW5kbGUoSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3sK
KyAgICAgCisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5pc051bGwoKSk7CisgICAgICAg
IAorICAgIFJDaHVuayBjaHVuazsgCisgICAgaWYgKGNodW5rLlNldFJldHVybmVkSGFuZGxlKG1f
aGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIGNvbnZlcnQgdGhl
IG5hbWUgKHN0cmluZyBmb3JtKSB0byB1aW50MzJfdAorICAgIFROYW1lIGdsb2JhbENodW5rTmFt
ZSA9IGNodW5rLk5hbWUoKTsKKyAgICBUTGV4IGxleGVyKGdsb2JhbENodW5rTmFtZSk7CisgICAg
VFVpbnQzMiBuYW1lQXNJbnQgPSAwOyAKKyAgICBpZiAobGV4ZXIuVmFsKG5hbWVBc0ludCwgRURl
Y2ltYWwpKSAKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAgICAgIAorICAgIGhhbmRsZS5t
X25hbWUgPSBuYW1lQXNJbnQ7IAorICAgIGhhbmRsZS5tX3NpemUgPSBtX3NpemU7CisgICAgCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3Vuc2lnbmVkIFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNp
emUoKQoreworICAgIHJldHVybiBQQUdFX1NJWkU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtR
dWV1ZVF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcApp
bmRleCA3YTZlYzVlLi5jNWQ0ZjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9xdC9Xb3JrUXVldWVRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29y
a1F1ZXVlUXQuY3BwCkBAIC03Nyw2ICs3NywyMyBAQCBwdWJsaWM6CiAgICAgV29ya0l0ZW0qIG1f
d29ya0l0ZW07CiB9OwogCisjaWYgT1MoU1lNQklBTikKK1FTeW1iaWFuUGlwZU5vdGlmaWVyKiBX
b3JrUXVldWU6OnJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxlcihSUGlwZSBwaXBlLCBRU3ltYmlhblBp
cGVOb3RpZmllcjo6RXZlbnRUeXBlIHR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJdGVt
KSAKK3sKKyAgICBRU3ltYmlhblBpcGVOb3RpZmllciogbm90aWZpZXIgPSBuZXcgUVN5bWJpYW5Q
aXBlTm90aWZpZXIocGlwZSwgdHlwZSwgLTEpOworICAgICAKKyAgICBub3RpZmllci0+c2V0RW5h
YmxlZChmYWxzZSk7CisgICAgbm90aWZpZXItPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOwor
ICAgIAorICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6
V29ya0l0ZW1RdCh0aGlzLCBub3RpZmllciwgU0lHTkFMKHJlYWR5VG9SZWFkKGludCkpLCB3b3Jr
SXRlbS5sZWFrUHRyKCkpOworICAgIAorICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1Ro
cmVhZCk7ICAgIAorICAgIAorICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOworICAgIAor
ICAgIHJldHVybiBub3RpZmllcjsKK30KKyNlbHNlCiBRU29ja2V0Tm90aWZpZXIqIFdvcmtRdWV1
ZTo6cmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50IHNvY2tldERlc2NyaXB0b3IsIFFTb2Nr
ZXROb3RpZmllcjo6VHlwZSB0eXBlLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSkKIHsK
ICAgICBBU1NFUlQobV93b3JrVGhyZWFkKTsKQEAgLTg5LDYgKzEwNiw3IEBAIFFTb2NrZXROb3Rp
ZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29ja2V0RGVz
Y3JpcHRvciwgUVNvCiAgICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgcmV0dXJu
IG5vdGlmaWVyOwogfQorI2VuZGlmCiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxp
emUoY29uc3QgY2hhciopCiB7CkBAIC0xMjAsOCArMTM4LDExIEBAIHZvaWQgV29ya1F1ZXVlOjpz
Y2hlZHVsZVdvcmtBZnRlckRlbGF5KFBhc3NPd25QdHI8V29ya0l0ZW0+IGl0ZW0sIGRvdWJsZSBk
ZWxheUluCiAKIHZvaWQgV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmtPblRlcm1pbmF0aW9uKFdlYktp
dDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBQYXNzT3duUHRyPFdvcmtJdGVt
PiB3b3JrSXRlbSkKIHsKKyAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgYSBwcm9jZXNz
IHdhdGNoZXIgdXNpbmcgU3ltYmlhbiBSUHJvY2VzcworI2lmICFPUyhTWU1CSUFOKQogICAgIFdv
cmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0
aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNoZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykp
LCB3b3JrSXRlbS5sZWFrUHRyKCkpOwogICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1Ro
cmVhZCk7CisjZW5kaWYKIH0KIAogI2luY2x1ZGUgIldvcmtRdWV1ZVF0Lm1vYyIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJR
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5j
aGVyUXQuY3BwCmluZGV4IGNhZTViZGYuLjEwNjVmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcApA
QCAtMjUsNiArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9S
TShRVCkgJiYgIU9TKFNZTUJJQU4pCiAjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCiAKICNp
bmNsdWRlICJDb25uZWN0aW9uLmgiCkBAIC0xNTQsMyArMTU1LDUgQEAgdm9pZCBQcm9jZXNzTGF1
bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2lu
Y2x1ZGUgIlByb2Nlc3NMYXVuY2hlclF0Lm1vYyIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5j
cHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
U3ltYmlhbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0ODA2Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Q
cm9jZXNzTGF1bmNoZXJTeW1iaWFuLmNwcApAQCAtMCwwICsxLDg1IEBACisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiUHJvY2Vz
c0xhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUnVuTG9v
cC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9ycGlwZS5o
IgorI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisKK19MSVQoS1dvcmtl
clByb2Nlc3NOYW1lLCJRdFdlYlByb2Nlc3MuZXhlIik7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQ
cm9jZXNzKCkKK3sKKyAgICAvLyBNYWtlIGEgcGFpciBvZiBoYWxmLWR1cGxleCBwaXBlcworICAg
IFJQaXBlKiBsb2NhbFBpcGVzID0gbmV3IFJQaXBlWzJdOyAKKyAgICBSUGlwZSogcmVtb3RlUGlw
ZXMgPSBuZXcgUlBpcGVbMl07IAorICAgICAKKyAgICBSUGlwZTo6SW5pdCgpOworICAgIFRJbnQg
ZXJyb3I7CisgICAgLy8gQ3JlYXRlIGEgcGlwZS4gRmlyc3QgYXJnIGlzIHRoZSByZWFkLWVuZCBS
UGlwZSBhbmQgdGhlIHNlY29uZCBpcyB0aGUgd3JpdGUtZW5kLiAKKyAgICBlcnJvciA9IFJQaXBl
OjpDcmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6TWF4UGlwZUNhcGFjaXR5LCByZW1vdGVQaXBl
c1swXSwgbG9jYWxQaXBlc1sxXSApOworICAgIGVycm9yID0gUlBpcGU6OkNyZWF0ZShDb3JlSVBD
OjpDb25uZWN0aW9uOjpNYXhQaXBlQ2FwYWNpdHksIGxvY2FsUGlwZXNbMF0sIHJlbW90ZVBpcGVz
WzFdKTsKKyAgICAKKyAgICAvLyBQcmVwYXJlIHRvIGxhdW5jaCB3b3JrZXIgcHJvY2VzcworICAg
IFJQcm9jZXNzKiB3b3JrZXJQcm9jZXNzID0gbmV3IFJQcm9jZXNzKCkgOworICAgIGVycm9yID0g
d29ya2VyUHJvY2Vzcy0+Q3JlYXRlKEtXb3JrZXJQcm9jZXNzTmFtZSgpLCBLTnVsbERlc0MpOwor
ICAgIC8vIFBhc3Mgb3duZXJzaGlwIG9mIHBpcGVzIHZpYSBSUHJvY2VzcycgImVudmlyb25tZW50
IGRhdGEgc2xvdHMiLiAKKyAgICAvLyBUaGlzIGlzIHRoZSBTeW1iaWFuIHdheSBvZiBwYXNzaW5n
IG93bmVyc2hpcCBvZiBoYW5kbGVzIGZyb20gcGFyZW50IHRvIGNoaWxkCisgICAgZXJyb3IgPSB3
b3JrZXJQcm9jZXNzLT5TZXRQYXJhbWV0ZXIoMywgcmVtb3RlUGlwZXNbMF0pOyAvLyByZWFkZXIK
KyAgICBlcnJvciA9IHdvcmtlclByb2Nlc3MtPlNldFBhcmFtZXRlcig0LCByZW1vdGVQaXBlc1sx
XSk7IC8vIHdyaXRlcgorICAgICAgICAgICAgICAgIAorICAgIC8vIEJsb2NrIHVudGlsIHRoZSBy
ZW1vdGUgcHJvY2VzcyBpcyB1cAorICAgIHdvcmtlclByb2Nlc3MtPlJlc3VtZSgpOworICAgIFRS
ZXF1ZXN0U3RhdHVzIGxhdW5jaFN0YXR1czsgCisgICAgd29ya2VyUHJvY2Vzcy0+UmVuZGV6dm91
cyhsYXVuY2hTdGF0dXMpOyAKKyAgICBVc2VyOjpXYWl0Rm9yUmVxdWVzdChsYXVuY2hTdGF0dXMp
OworICAgIAorICAgIGlmIChsYXVuY2hTdGF0dXMuSW50KCkgIT0gS0Vyck5vbmUpIAorICAgICAg
ICBxQ3JpdGljYWwoKSA8PCAiIFdvcmtlciBwcm9jZXNzIGZhaWxlZCB0byBsYXVuY2ggIiA8PCBs
YXVuY2hTdGF0dXMuSW50KCk7CisgICAgCisgICAgLy8gQ2xvc2UgdGhlIHBpcGUgZW5kcyB3ZSBq
dXN0IHBhc3NlZCB0byB0aGUgcmVtb3RlCisgICAgcmVtb3RlUGlwZXNbMF0uQ2xvc2UoKTsgCisg
ICAgcmVtb3RlUGlwZXNbMV0uQ2xvc2UoKTsKKyAgICBkZWxldGUgcmVtb3RlUGlwZXM7CisgICAg
CisgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyID0gbG9jYWxQ
aXBlczsgIAorICAgIAorICAgIC8vIERlY2xhcmUgbGF1bmNoIHByb2Nlc3MgYXMgZG9uZS4gTm90
ZSB0aGF0IHRoaXMgY2xhc3Mgb3ducyAnd29ya2VyUHJvY2VzcycsIGJ1dCBDb25uZWN0aW9uIG93
bnMgJ2lkZW50aWZpZXInIAorICAgIFJ1bkxvb3A6Om1haW4oKS0+c2NoZWR1bGVXb3JrKFdvcmtJ
dGVtOjpjcmVhdGUodGhpcywgJldlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVu
Y2hpbmdQcm9jZXNzLCB3b3JrZXJQcm9jZXNzLCBpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgUHJv
Y2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKK3sKKwlpZiAoIW1fcHJvY2Vzc0lkZW50
aWZpZXIpCisJICAgIHJldHVybjsKKwkKKyAgICAvLyBJbXBvcnRhbnQ6IEtpbGxpbmcgYW5vdGhl
ciBwcm9jZXNzIChldmVuIGlmIHdlIHNwYXduZWQgaXQpIHJlcXVpcmVzIFBvd2VyTWFuYWdlbWVu
dCBjYXBhYmlsaXR5LAorICAgIC8vIHdoaWNoIGlzIGEgaGlnaCBiYXIgdG8ganVtcCBvdmVyIGZv
ciBhbnkgdXNlciBhcHBsaWNhdGlvbi4gSXQncyBhbHNvIGRhbmdlcm91cy4gIAorICAgIC8vIFRP
RE86IENoZWNrIGlmIHdlIHNob3VsZCBzaWduYWwgdGhlIHdlYiBwcm9jZXNzIHRocm91Z2ggdGhl
IHBpcGUgdG8gdGVybWluYXRlIGl0c2VsZj8KKyAgICAvLyAuLmFsdGhvdWdoIHRoYXQgd29uJ3Qg
d29yayBpZiB0aGUgcHJvY2VzcyBpcyB1bnJlc3BvbnNpdmUhCisJUlByb2Nlc3MgbWU7CisJaWYg
KG1lLkhhc0NhcGFiaWxpdHkoRUNhcGFiaWxpdHlQb3dlck1nbXQpKSAKKwkgICAgbV9wcm9jZXNz
SWRlbnRpZmllci0+VGVybWluYXRlKEtFcnJOb25lKTsKKwkKK30KKwordm9pZCBQcm9jZXNzTGF1
bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFtX3Byb2Nlc3NJZGVudGlm
aWVyKQorICAgICAgICAgICByZXR1cm47CisKKyAgICBtX3Byb2Nlc3NJZGVudGlmaWVyLT5DbG9z
ZSgpOworICAgIGRlbGV0ZSBtX3Byb2Nlc3NJZGVudGlmaWVyOworICAgIG1fcHJvY2Vzc0lkZW50
aWZpZXIgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hl
clF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVu
Y2hlclF0LmNwcAppbmRleCAzMTMwOTFlLi44YTJmZTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCkBA
IC00NywxNSArNDcsMjYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCitzdGF0aWMgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBpbnZhbGlk
Q29ubmVjdGlvbklkZW50aWZpZXIoKQoreyAKKyAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVu
dGlmaWVyIGlkZW50aWZpZXI7IAorI2lmIE9TKFNZTUJJQU4pCisgICAgaWRlbnRpZmllciA9IDA7
IC8vIE5VTEwgcG9pbnRlcgorI2Vsc2UKKyAgICBpZGVudGlmaWVyID0gLTE7IC8vIGludmFsaWQg
c29ja2V0IGRlc2NyaXB0b3IKKyNlbmRpZgorICAgIHJldHVybiBpZGVudGlmaWVyOworfQorCiBz
dGF0aWMgdm9pZCogd2ViVGhyZWFkQm9keSh2b2lkKiAvKiBjb250ZXh0ICovKQogewogICAgIC8v
IEluaXRpYWxpemF0aW9uCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RG
Ojppbml0aWFsaXplTWFpblRocmVhZCgpOwogCi0gICAgLy8gRklYTUU6IFdlIGRvIG5vdCBzdXBw
b3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KKyAgICAvLyBGSVhNRTogVGhlIFF0IHBvcnQgZG9l
cyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cuCiAKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5pbml0aWFsaXplKC0xLCBSdW5Mb29wOjpjdXJyZW50KCkpOworICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVyKCksIFJ1
bkxvb3A6OmN1cnJlbnQoKSk7CiAgICAgUnVuTG9vcDo6cnVuKCk7CiAKICAgICByZXR1cm4gMDsK
QEAgLTYzLDE1ICs3NCwxNSBAQCBzdGF0aWMgdm9pZCogd2ViVGhyZWFkQm9keSh2b2lkKiAvKiBj
b250ZXh0ICovKQogCiBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFRocmVhZExhdW5j
aGVyOjpjcmVhdGVXZWJUaHJlYWQoKQogewotICAgIHNyYW5kb20odGltZSgwKSk7Ci0gICAgaW50
IGNvbm5lY3Rpb25JZGVudGlmaWVyID0gcmFuZG9tKCk7Ci0KLSAgICBpZiAoIWNyZWF0ZVRocmVh
ZCh3ZWJUaHJlYWRCb2R5LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb25uZWN0aW9uSWRlbnRp
ZmllciksICJXZWJLaXQyOiBXZWJUaHJlYWQiKSkgeworICAgIAorICAgIC8vIEZJWE1FOiBUaGUg
UXQgcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KKyAgICAKKyAg
ICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCAwLCAiV2ViS2l0MjogV2ViVGhyZWFk
IikpIHsKICAgICAgICAgcVdhcm5pbmcoKSA8PCAiZmFpbGVkIHN0YXJ0aW5nIHRocmVhZCI7Ci0g
ICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gaW52YWxpZENvbm5lY3Rpb25JZGVudGlm
aWVyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbm5lY3Rpb25JZGVudGlmaWVyOworICAgIHJl
dHVybiBpbnZhbGlkQ29ubmVjdGlvbklkZW50aWZpZXIoKTsKIH0KIAotfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaSBiL1NvdXJjZS9XZWJLaXQy
L1dlYktpdDIucHJpCmluZGV4IGM2YWU3OTIuLjU0NWU1ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQyL1dlYktpdDIucHJpCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCkBAIC03
MCw2ICs3MCw4IEBAIHN5bWJpYW4gewogICAgIElOQ0xVREVQQVRIID0gJCRXRUJLSVQyX0lOQ0xV
REVQQVRIICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIgJCRJTkNMVURFUEFUSAogfQog
CitzeW1iaWFuOiBMSUJTICs9IC1scnBpcGUKKwogZGVmaW5lVGVzdChwcmVwZW5kV2ViS2l0Mkxp
YikgewogICAgIHBhdGhUb1dlYktpdDJPdXRwdXQgPSAkJEFSR1MvJCRXRUJLSVQyX0RFU1RESVIK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJLaXQyLnBybwppbmRleCAxZTBkM2RjLi41NTM3NDkwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnBybworKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwpAQCAt
MTAwLDYgKzEwMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvSGFuZGxl
TWVzc2FnZS5oIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIFwKICAgICBQbGF0
Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCisgICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9R
U3ltYmlhblBpcGVOb3RpZmllci5oIFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmggXAogICAgIFBs
YXRmb3JtL01vZHVsZS5oIFwKICAgICBQbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LmggXApAQCAtMzAwLDYgKzMwMSw5IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJ
UEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQXR0YWNobWVu
dFF0LmNwcCBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uUXQuY3BwIFwKKyAg
ICBQbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcCBcCisgICAgUGxhdGZv
cm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHAgXAorICAgIFBsYXRmb3JtL0Nv
cmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3BwIFwKICAgICBQbGF0Zm9ybS9Mb2dn
aW5nLmNwcCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcCBcCiAgICAgUGxhdGZvcm0vUnVuTG9v
cC5jcHAgXApAQCAtMzA3LDYgKzMxMSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL3F0
L01vZHVsZVF0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcCBcCiAgICAgUGxh
dGZvcm0vcXQvU2hhcmVkTWVtb3J5UXQuY3BwIFwKKyAgICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1v
cnlTeW1iaWFuLmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwIFwKICAgICBT
aGFyZWQvUGx1Z2lucy9OZXRzY2FwZS9OZXRzY2FwZVBsdWdpbk1vZHVsZS5jcHAgXAogICAgIFNo
YXJlZC9QbHVnaW5zL05ldHNjYXBlL3gxMS9OZXRzY2FwZVBsdWdpbk1vZHVsZVgxMS5jcHAgXApA
QCAtMzcyLDYgKzM3Nyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Q
cm9jZXNzTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNo
ZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3Bw
IFwKKyAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAg
XAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcCBcCiAgICAg
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL1Bs
dWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzLnBybyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvCmluZGV4IDA4
NTIxZGUuLmI5N2Q1YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJv
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MucHJvCkBAIC0zNSw3ICszNSwyMiBAQCBs
aW51eC0qIHsKIAogc3ltYmlhbiB7CiAgICAgVEFSR0VULlVJRDMgPSAweEEwMDBFNTQ0Ci0gICAg
VEFSR0VULkNBUEFCSUxJVFkgPSBSZWFkVXNlckRhdGEgV3JpdGVVc2VyRGF0YSBOZXR3b3JrU2Vy
dmljZXMKKyAgICBNTVBfUlVMRVMgKz0gcGFnZWRkYXRhCisgICAgUlNTX1JVTEVTICs9ICJoaWRk
ZW4gPSBLQXBwSXNIaWRkZW47IiAjIE5vIGFwcCBpY29uIGluIGdyaWQgb3IgaW4gdGFzayBzd2l0
Y2hlcgorICAgIAorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9IFJlYWRVc2VyRGF0YSAKKyAgICBU
QVJHRVQuQ0FQQUJJTElUWSAqPSBXcml0ZVVzZXJEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkg
Kj0gTmV0d29ya1NlcnZpY2VzICAjIFF0TmV0d29yayBhbmQgQmVhcmVyCisgICAgCisgICAgIyBT
ZWUgUXRNb2JpbGl0eSBkb2NzIG9uIFN5bWJpYW4gY2FwYWJpbGl0aWVzOiAKKyAgICAjIGh0dHA6
Ly9kb2MucXQubm9raWEuY29tL3F0bW9iaWxpdHkvcXVpY2tzdGFydC5odG1sCisgICAgVEFSR0VU
LkNBUEFCSUxJVFkgKj0gTG9jYXRpb24gICAgICAgICAjIGdlb2xvY2F0aW9uCisgICAgVEFSR0VU
LkNBUEFCSUxJVFkgKj0gUmVhZERldmljZURhdGEgICAjIGdlb2xvY2F0aW9uLCBzZW5zb3JzCisg
ICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gV3JpdGVEZXZpY2VEYXRhICAjIGdlb2xvY2F0aW9uCisg
ICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTG9jYWxTZXJ2aWNlcyAgICAjIGdlb2xvY2F0aW9uLCBz
eXNpbmZvCisgICAgCisgICAgIyBXZSBtYXkgbGF0ZXIgbmVlZCBVc2VyRW52aXJvbm1lbnQgZm9y
IG1pYy9jYW1lcmEgaW5wdXQKKyAgICAKIH0KIAogY29udGFpbnMoUVRfQ09ORklHLCBvcGVuZ2wp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01h
aW5RdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQu
Y3BwCmluZGV4IDZmZjEwYmEuLmEzZGExMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcApAQCAtMTMyLDYgKzEzMiwxMSBAQCBzdGF0
aWMgdm9pZCBpbml0aWFsaXplUHJveHkoKQogCiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNz
TWFpblF0KGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKKyNpZiBkZWZpbmVkKFFfT1NfU1lNQklB
TikKKyAgICBSUHJvY2VzcyBwcm9jZXNzOyAKKyAgICBwcm9jZXNzLlNldFByaW9yaXR5KEVQcmlv
cml0eUJhY2tncm91bmQpOworI2VuZGlmCisgICAgCiAgICAgUUFwcGxpY2F0aW9uOjpzZXRHcmFw
aGljc1N5c3RlbShRTGF0aW4xU3RyaW5nKCJyYXN0ZXIiKSk7CiAgICAgUUFwcGxpY2F0aW9uKiBh
cHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFyZ2MsIGFyZ3YpOwogI2lmbmRlZiBOREVCVUcKQEAgLTE1
Myw2ICsxNTgsMTEgQEAgUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChpbnQgYXJn
YywgY2hhcioqIGFyZ3YpCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIFJ1
bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwogCisgICAgQ29yZUlQQzo6Q29ubmVjdGlv
bjo6SWRlbnRpZmllciBpZGVudGlmaWVyOyAKKyNpZiBPUyhTWU1CSUFOKQorICAgIC8vIE5VTEws
IGFzIHdlIG9idGFpbiB0aGUgaGFuZGxlcyBkaXJlY3RseSBmcm9tIHRoZSAiZW52aXJvbm1lbnQg
ZGF0YSBzbG90cyIgb24gdGhlIFJQcm9jZXNzCisgICAgaWRlbnRpZmllciA9IDA7IAorI2Vsc2UK
ICAgICAvLyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24uCiAgICAgaWYgKGFwcC0+YXJndW1lbnRzKCku
c2l6ZSgpIDw9IDEpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkVycm9yOiB3cm9uZyBudW1iZXIg
b2YgYXJndW1lbnRzLiI7CkBAIC0xNjAsMTIgKzE3MCwxMyBAQCBRX0RFQ0xfRVhQT1JUIGludCBX
ZWJQcm9jZXNzTWFpblF0KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICB9CiAKICAgICBib29s
IHdhc051bWJlciA9IGZhbHNlOwotICAgIGludCBpZGVudGlmaWVyID0gYXBwLT5hcmd1bWVudHMo
KS5hdCgxKS50b0ludCgmd2FzTnVtYmVyLCAxMCk7CisgICAgaWRlbnRpZmllciA9IGFwcC0+YXJn
dW1lbnRzKCkuYXQoMSkudG9JbnQoJndhc051bWJlciwgMTApOwogICAgIGlmICghd2FzTnVtYmVy
KSB7CiAgICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvcjogY29ubmVjdGlvbiBpZGVudGlmaWVyIHdy
b25nLiI7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLQorI2VuZGlmCisgICAgCiAgICAgV2Vi
S2l0OjpXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKGlkZW50aWZpZXIsIFJ1bkxvb3A6
Om1haW4oKSk7CiAKICAgICBSdW5Mb29wOjpydW4oKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlC
cm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3BwIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3Nl
cldpbmRvdy5jcHAKaW5kZXggNTNmN2RlOS4uZGZmYmZjNyAxMDA2NDQKLS0tIGEvVG9vbHMvTWlu
aUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5jcHAKKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQv
QnJvd3NlcldpbmRvdy5jcHAKQEAgLTExOSwxMSArMTE5LDE5IEBAIEJyb3dzZXJXaW5kb3c6OkJy
b3dzZXJXaW5kb3coUVdLQ29udGV4dCogY29udGV4dCwgV2luZG93T3B0aW9ucyogb3B0aW9ucykK
ICAgICBjb25uZWN0KG1fYWRkcmVzc0JhciwgU0lHTkFMKHJldHVyblByZXNzZWQoKSksIFNMT1Qo
Y2hhbmdlTG9jYXRpb24oKSkpOwogCiAgICAgUVRvb2xCYXIqIGJhciA9IGFkZFRvb2xCYXIoIk5h
dmlnYXRpb24iKTsKKyNpZiBkZWZpbmVkKFFfT1NfU1lNQklBTikKKyAgICBiYXItPnNldEljb25T
aXplKFFTaXplKDE2LCAxNikpOworI2VuZGlmCiAgICAgYmFyLT5hZGRBY3Rpb24ocGFnZSgpLT5h
Y3Rpb24oUVdLUGFnZTo6QmFjaykpOwogICAgIGJhci0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9u
KFFXS1BhZ2U6OkZvcndhcmQpKTsKICAgICBiYXItPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihR
V0tQYWdlOjpSZWxvYWQpKTsKICAgICBiYXItPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQ
YWdlOjpTdG9wKSk7CisjaWYgZGVmaW5lZChRX09TX1NZTUJJQU4pCisgICAgYWRkVG9vbEJhckJy
ZWFrKCk7CisgICAgYWRkVG9vbEJhcigiTG9jYXRpb24iKS0+YWRkV2lkZ2V0KG1fYWRkcmVzc0Jh
cik7CisjZWxzZQogICAgIGJhci0+YWRkV2lkZ2V0KG1fYWRkcmVzc0Jhcik7CisjZW5kaWYKIAog
ICAgIFFTaG9ydGN1dCogc2VsZWN0QWRkcmVzc0JhciA9IG5ldyBRU2hvcnRjdXQoUXQ6OkNUUkwg
fCBRdDo6S2V5X0wsIHRoaXMpOwogICAgIGNvbm5lY3Qoc2VsZWN0QWRkcmVzc0JhciwgU0lHTkFM
KGFjdGl2YXRlZCgpKSwgdGhpcywgU0xPVChvcGVuTG9jYXRpb24oKSkpOwpAQCAtMTM3LDcgKzE0
NSwxMSBAQCBCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFFXS0NvbnRleHQqIGNvbnRleHQs
IFdpbmRvd09wdGlvbnMqIG9wdGlvbnMpCiAgICAgICAgIG1fem9vbUxldmVscyA8PCAxLjEgPDwg
MS4yIDw8IDEuMzMgPDwgMS41IDw8IDEuNyA8PCAyIDw8IDIuNCA8PCAzOwogICAgIH0KIAotICAg
IHJlc2l6ZSg4MDAsIDYwMCk7CisjaWYgZGVmaW5lZChRX09TX1NZTUJJQU4pCisgICAgc2V0V2lu
ZG93U3RhdGUoUXQ6OldpbmRvd01heGltaXplZCk7CisjZWxzZQorCXJlc2l6ZSg4MDAsIDYwMCk7
CisjZW5kaWYKICAgICBzaG93KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL01pbmlCcm93c2Vy
L3F0L01pbmlCcm93c2VyLnBybyBiL1Rvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBy
bwppbmRleCA4MDljOTM0Li5kM2Q3OTFhIDEwMDY0NAotLS0gYS9Ub29scy9NaW5pQnJvd3Nlci9x
dC9NaW5pQnJvd3Nlci5wcm8KKysrIGIvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIu
cHJvCkBAIC00OCw3ICs0OCwyMSBAQCBsaW51eC0qIHsKIAogc3ltYmlhbiB7CiAgICAgVEFSR0VU
LlVJRDMgPSAweEEwMDBFNTQ1Ci0gICAgVEFSR0VULkNBUEFCSUxJVFkgPSBSZWFkVXNlckRhdGEg
V3JpdGVVc2VyRGF0YSBOZXR3b3JrU2VydmljZXMKKyAgICBNTVBfUlVMRVMgKz0gcGFnZWRkYXRh
CisgICAgCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gUmVhZFVzZXJEYXRhIAorICAgIFRBUkdF
VC5DQVBBQklMSVRZICo9IFdyaXRlVXNlckRhdGEKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBO
ZXR3b3JrU2VydmljZXMgICMgUXROZXR3b3JrIGFuZCBCZWFyZXIKKyAgICBUQVJHRVQuQ0FQQUJJ
TElUWSAqPSBQb3dlck1nbXQgICAgICAgICMga2lsbGluZyB3ZWIgcHJvY2VzcyBmcm9tIFVJIHBy
b2Nlc3MKKyAgICAKKyAgICAjIFNlZSBRdE1vYmlsaXR5IGRvY3Mgb24gU3ltYmlhbiBjYXBhYmls
aXRpZXM6IAorICAgICMgaHR0cDovL2RvYy5xdC5ub2tpYS5jb20vcXRtb2JpbGl0eS9xdWlja3N0
YXJ0Lmh0bWwKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBMb2NhdGlvbiAgICAgICAgICMgZ2Vv
bG9jYXRpb24KKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBSZWFkRGV2aWNlRGF0YSAgICMgZ2Vv
bG9jYXRpb24sIHNlbnNvcnMKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBXcml0ZURldmljZURh
dGEgICMgZ2VvbG9jYXRpb24KKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBMb2NhbFNlcnZpY2Vz
ICAgICMgZ2VvbG9jYXRpb24sIHN5c2luZm8KKyAgICAKKyAgICAjIFdlIG1heSBsYXRlciBuZWVk
IFVzZXJFbnZpcm9ubWVudCBmb3IgbWljL2NhbWVyYSBpbnB1dAogfQogCiBjb250YWlucyhRVF9D
T05GSUcsIG9wZW5nbCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90623</attachid>
            <date>2011-04-21 16:07:54 -0700</date>
            <delta_ts>2011-04-21 16:20:00 -0700</delta_ts>
            <desc>Core IPC, process launching and shared memory for Symbian OS</desc>
            <filename>55875_v5.patch</filename>
            <type>text/plain</type>
            <size>52062</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODQ1NTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTEtMDQtMjEgIFNpZGRoYXJ0aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
W1dLMl1bU3ltYmlhbl0gQ29yZUlQQyBpbXBsZW1lbnRhdGlvbiBmb3IgU3ltYmlhbiBPUyAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODc3CisKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDogZXhjbHVkZSBTeW1iaWFuIGZyb20gVU5JWF9ET01BSU5f
U09DS0VUIHVzZXJzCisKIDIwMTEtMDQtMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4NDU0OC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDg0Mzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAyLDcgKzEyMDIsNyBAQAogICAgYnJlYWthZ2VzIG9uZSBwb3J0IGF0IGEgdGltZS4gKi8K
ICNkZWZpbmUgV1RGX1VTRV9FWFBPUlRfTUFDUk9TIDAKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShHVEspCisjaWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoU1lNQklBTikpIHx8IFBMQVRG
T1JNKEdUSykKICNkZWZpbmUgV1RGX1VTRV9VTklYX0RPTUFJTl9TT0NLRVRTIDEKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDU1MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxMS0wNC0yMSAgU2lkZGhh
cnRoIE1hdGh1ciAgPHNpZGRoYXJ0aC5tYXRodXJAbm9raWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF1bV0syXVtTeW1iaWFuXSBDb3Jl
IElQQywgcHJvY2VzcyBsYXVuY2hpbmcgYW5kIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODc3CisK
KyAgICAgICAgVGhpcyBpbml0aWFsIHBvcnQgdG8gU3ltYmlhbiBhbGxvd3MgdGhlIFF0IE1pbmlC
cm93c2VyIHRvIGxvYWQgZ29vZ2xlLmNvbSBvbiBhIE5va2lhIE44LgorICAgICAgICBUaGUgY2hh
bmdlIG1heGltaXplcyB1c2Ugb2YgdGhlIGV4aXN0aW5nIFF0IHBvcnQgb2YgV2ViS2l0Miwgd2hp
bGUgaW1wbGVtZW50aW5nIG9ubHkgdGhlIHZlcnkgcGxhdGZvcm0KKyAgICAgICAgc3BlY2lmaWMg
cG9ydGlvbnMgdXNpbmcgcHVyZSBTeW1iaWFuIE9TIEFQSXMKKworICAgICAgICBGb3IgSVBDLCB3
ZSB1c2UgaGFsZi1kdXBsZXggcGlwZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBk
aWZmZXJlbnQgZnJvbSBDb25uZWN0aW9uV2luLmNwcC4KKyAgICAgICAgRm9yIHByb2Nlc3MgbGF1
bmNoaW5nLCB3ZSB1c2UgdGhlIFJQcm9jZXNzIGNsYXNzIHdoaWNoIGFsbG93cyB0cmFuc2ZlciBv
ZiBkZXNjcmlwdG9ycyB0byBhIGNoaWxkLgorICAgICAgICBGb3Igc2hhcmVkIG1lbW9yeSwgd2Ug
dXNlIGdsb2JhbCBSQ2h1bmtzLgorCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dERlY29kZXIuY3BwOiBndWFyZCBhdHRhY2htZW50IHVzZXJzIHdpdGggVVNFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpCisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudERlY29kZXI6On5Bcmd1bWVudERl
Y29kZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcDog
Z3VhcmQgYXR0YWNobWVudCB1c2VycyB3aXRoIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAg
ICAgICAoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjp+QXJndW1lbnRFbmNvZGVyKToKKworICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOiBBc3NvcnRlZCB0eXBlZGVmcyBh
bmQgbWVtYmVyIHZhcmlhYmxlcyBmb3IgSVBDIGNoYW5uZWwKKyAgICAgICAgKiBQbGF0Zm9ybS9D
b3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcDogQWRkZWQuIE1haW4gY29ubmVjdGlvbiBz
ZXR1cCBhbmQgSVBDIGNsYXNzLgorICAgICAgICBGb3IgdGhlIHdvcmtlciBwcm9jZXNzLCB0aGlz
IGNsYXNzIG9wZW5zIHRoZSBwaXBlcyBwYXNzZWQgYnkgdGhlIFVJIHByb2Nlc3MncyBQcm9jZXNz
TGF1bmNoZXJTeW1iaWFuLmNwcC4KKyAgICAgICAgVGhlc2UgcGlwZXMgYXJlIGFscmVhZHkgaW4g
Y29ubmVjdGVkIHN0YXRlIHdoZW4gdGhlIHdvcmtlciBwcm9jZXNzIHJlY2VpdmVzIHRoZW0uCisg
ICAgICAgIFNpbmNlIHBpcGVzIGFyZSBhIHN0cmVhbSBvcmllbnRlZCBjaGFubmVsLCB3ZSBkbyBw
YXJzaW5nIG9mIHRoZSByZWFkIGJ1ZmZlciB0byBleHRyYWN0CisgICAgICAgIGluZGl2aWR1YWwg
bWVzc2FnZXMgKGRlbGltaXRlZCBieSBhIHRyYWlsZXIpLiBNZXNzYWdlcyBhcmUgdGhlbiBkaXNw
YXRjaGVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBs
YXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChDb3JlSVBDOjppc01lc3NhZ2VUcmFpbGVyKToK
KyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpOgorICAgICAg
ICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6b3Blbik6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0
aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKToKKyAgICAgICAgKENvcmVJUEM6
OkNvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UpOgorICAgICAgICAoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24pOgor
CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHA6
IEFkZGVkLiBRdCBzdHlsZSBRT2JqZWN0IHdoaWNoIHdyYXBzCisgICAgICAgIGEgU3ltYmlhbiBB
Y3RpdmUgT2JqZWN0IChBTykuIE1vbml0b3IgZGF0YSBhdmFpbGFibGUgdG8gcmVhZCBldmVudHMg
b24gYSBwaXBlLgorICAgICAgICBIZWxwcyB1cyB0YWxrIGluIFF0LXNwZWFrIHdpdGggcmVzdCBv
ZiBXZWJLaXQyLVF0IHBvcnQuCisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6UVN5bWJp
YW5QaXBlTm90aWZpZXIpOgorICAgICAgICAoUVN5bWJpYW5QaXBlTm90aWZpZXI6On5RU3ltYmlh
blBpcGVOb3RpZmllcik6CisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6c2V0RW5hYmxl
ZCk6CisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6ZXZlbnQpOgorICAgICAgICAqIFBs
YXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaDogQWRkZWQuCisgICAgICAg
ICogUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHA6IEFkZGVk
LiBUaGUgU3ltYmlhbiBBTyB3aGljaAorICAgICAgICByZWdpc3RlcnMgbm90aWZpY2F0aW9uIHJl
cXVlc3RzIHdpdGggdGhlIGtlcm5lbAorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6
OlN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KToKKyAgICAgICAgKFN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0Ojp+U3ltYmlhblBpcGVBY3RpdmVPYmplY3QpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3Rp
dmVPYmplY3Q6OnNldEVuYWJsZWQpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6
OlJ1bkwpOiBDYWxsZWQgYnkgdGhlIE9TIHdoZW4gbm90aWZpY2F0aW9uIG9jY3VycworICAgICAg
ICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRvQ2FuY2VsKToKKyAgICAgICAgKiBQbGF0Zm9y
bS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0Lmg6IEFkZGVkLgorCisgICAgICAg
ICogUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcDogZ3VhcmQgd2l0aCBV
U0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgv
Q29ubmVjdGlvblVuaXguY3BwOiBkaXR0bworCisgICAgICAgICogUGxhdGZvcm0vUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oOiBSUHJvY2VzcyBpcyB0aGUgZGVzaWduYXRlZCBpZGVudGlmaWVy
CisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6IE9TIHNwZWNpZmljIGhhbmRsZSBh
bmQgbmFtZSB0eXBlZGVmcworICAgICAgICAqIFBsYXRmb3JtL1dvcmtRdWV1ZS5oOiBuZXcgcmVn
aXN0ZXJFdmVudEhhbmRsZXIgc2lnbmF0dXJlIGZvciBRdCBvbiBTeW1iaWFuCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcDogQWRkZWQuIFVzZSBuYW1lZCBn
bG9iYWwgUkNodW5rcy4KKyAgICAgICAgS25vd24gaXNzdWUgaXMgdGhlIGFic2VuY2Ugb2YgQ2xv
c2UoKWluZyB0aGUgY2h1bmsgaGFuZGxlIGluIFNoYXJlZE1lbW9yeSBkJ3RvcgorICAgICAgICBU
aHVzIHdlIGxlYWsgbWVtb3J5IGF0IHRoZSBtb21lbnQuIE5lZWRzIHNlcGFyYXRlIHdvcmsgYW5k
IHBhdGNoIHRvIGZpZ3VyZSBvdXQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFu
ZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhh
bmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjppc051bGwpOgor
ICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKToKKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojp+
U2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5k
bGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKToKKwor
ICAgICAgICAqIFBsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAgICAgICAgKFdvcmtRdWV1
ZTo6cmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKTogVGFpbG9yZWQgdG8gY2xvc2VseSBtYXRjaCBR
dC1Vbml4J3MgaW1wbGVtZW50YXRpb24KKyAgICAgICAgKFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3Jr
T25UZXJtaW5hdGlvbik6CisgICAgICAgICogUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4
LmNwcDogZ3VhcmQgd2l0aCBIQVZFKE1NQVApIGZsYWcKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1
bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwOiBndWFyZCB3aXRoICFPUyhTWU1CSUFOKSBm
bGFnCisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3lt
Ymlhbi5jcHA6IEFkZGVkLiBDb3JyZWN0IHdheSB0byBvcGVuIGEgY2hhbm5lbCBhbmQgcGFzcwor
ICAgICAgICBvd25lcnNoaXAgdG8gYW5vdGhlciBwcm9jZXNzLiBXZSB1c2UgYSBwYWlyIG9mIGhh
bGYtZHVwbGV4IHBpcGVzLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5j
aFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVBy
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxp
ZGF0ZSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJR
dC5jcHA6IENsZWFudXAgdG8gc3VwcG9ydCBVTklYIGFuZCBTeW1iaWFuIE9TZXMKKyAgICAgICAg
VGhlIFF0IHBvcnQgY3VycmVudGx5IGRvZXNuJ3QgaW1wbGVtZW50IHRocmVhZGVkIG1vZGUgV0sy
CisgICAgICAgIChXZWJLaXQ6OmludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcik6CisgICAgICAg
IChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hl
cjo6Y3JlYXRlV2ViVGhyZWFkKToKKworICAgICAgICAqIFdlYktpdDIucHJpOiBBZGQgbmV3IHJw
aXBlIGxpYnJhcnkgbGlua2FnZQorICAgICAgICAqIFdlYktpdDIucHJvOiBBZGQgbmV3IGZpbGVz
CisgICAgICAgICogV2ViUHJvY2Vzcy5wcm86IENhcGFiaWxpdHkgYW5kIGRhdGEgcGFnaW5nIGNo
YW5nZXMKKworICAgICAgICAqIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHA6IFNl
dCBwcm9jZXNzIHByaW9yaXR5IG9mIHdvcmtlcgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
TWFpblF0KToKKwogMjAxMS0wNC0yMSAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViS2l0Mi5wcmkJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgc3ltYmlhbiB7CiAg
ICAgSU5DTFVERVBBVEggPSAkJFdFQktJVDJfSU5DTFVERVBBVEggJCRXRUJLSVQyX0dFTkVSQVRF
RF9TT1VSQ0VTX0RJUiAkJElOQ0xVREVQQVRICiB9CiAKK3N5bWJpYW46IExJQlMgKz0gLWxycGlw
ZQorCiBkZWZpbmVUZXN0KHByZXBlbmRXZWJLaXQyTGliKSB7CiAgICAgcGF0aFRvV2ViS2l0Mk91
dHB1dCA9ICQkQVJHUy8kJFdFQktJVDJfREVTVERJUgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwkocmV2
aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDYgKzEwMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMv
SGFuZGxlTWVzc2FnZS5oIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIFwKICAg
ICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCisgICAgUGxhdGZvcm0vQ29yZUlQ
Qy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oIFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmggXAog
ICAgIFBsYXRmb3JtL01vZHVsZS5oIFwKICAgICBQbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyLmggXApAQCAtMzA0LDYgKzMwNSw5IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9B
dHRhY2htZW50VW5peC5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9u
VW5peC5jcHAgXAorICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3Bw
IFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcCBcCisg
ICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHAgXAogICAg
IFBsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKICAgICBQ
bGF0Zm9ybS9SdW5Mb29wLmNwcCBcCkBAIC0zMTEsNiArMzE1LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQu
Y3BwIFwKICAgICBQbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAgXAorICAgIFBsYXRmb3JtL3F0
L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwIFwKICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9y
eVVuaXguY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAg
XAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAgXApAQCAtMzgzLDYgKzM4OCw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIu
Y3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBV
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKKyAgICBVSVByb2Nl
c3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAgXAogICAgIFVJUHJvY2Vz
cy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwkocmV2aXNpb24gODQzOTgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsMjEgQEAgbGludXgtKiB7CiAKIHN5bWJpYW4gewogICAgIFRBUkdFVC5VSUQzID0gMHhB
MDAwRTU0NAotICAgIFRBUkdFVC5DQVBBQklMSVRZID0gUmVhZFVzZXJEYXRhIFdyaXRlVXNlckRh
dGEgTmV0d29ya1NlcnZpY2VzCisgICAgTU1QX1JVTEVTICs9IHBhZ2VkZGF0YQorICAgIFJTU19S
VUxFUyArPSAiaGlkZGVuID0gS0FwcElzSGlkZGVuOyIgIyBObyBpY29uIGluIGFwcGxpY2F0aW9u
IGdyaWQKKyAgICAKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBSZWFkVXNlckRhdGEgCisgICAg
VEFSR0VULkNBUEFCSUxJVFkgKj0gV3JpdGVVc2VyRGF0YQorICAgIFRBUkdFVC5DQVBBQklMSVRZ
ICo9IE5ldHdvcmtTZXJ2aWNlcyAgIyBRdE5ldHdvcmsgYW5kIEJlYXJlcgorICAgIAorICAgICMg
U2VlIFF0TW9iaWxpdHkgZG9jcyBvbiBTeW1iaWFuIGNhcGFiaWxpdGllczogCisgICAgIyBodHRw
Oi8vZG9jLnF0Lm5va2lhLmNvbS9xdG1vYmlsaXR5L3F1aWNrc3RhcnQuaHRtbAorICAgIFRBUkdF
VC5DQVBBQklMSVRZICo9IFJlYWREZXZpY2VEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0g
V3JpdGVEZXZpY2VEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTG9jYWxTZXJ2aWNlcwor
ICAgIAorICAgICMgV2UgbWF5IGxhdGVyIG5lZWQgVXNlckVudmlyb25tZW50IGZvciBtaWMvY2Ft
ZXJhIGlucHV0CisgICAgCiB9CiAKIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsMTEgQEAg
dHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0o
V0lOKQogdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKICNlbGlmIFBM
QVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCit0eXBlZGVmIFJQcm9jZXNzKiBQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyOworI2Vsc2UKIHR5cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXI7CisjZW5kaWYKICNlbGlmIFBMQVRGT1JNKEdUSykKICNpZmRlZiBHX09TX1dJ
TjMyCiB0eXBlZGVmIHZvaWQqIEdQaWQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9T
aGFyZWRNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFy
ZWRNZW1vcnkuaAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9T
aGFyZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOwogI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NP
Q0tFVFMpCiAgICAgICAgIG11dGFibGUgaW50IG1fZmlsZURlc2NyaXB0b3I7CisjZWxpZiBPUyhT
WU1CSUFOKQorICAgICAgICBtdXRhYmxlIHVpbnQzMl90IG1fY2h1bmtOYW1lOwogI2VuZGlmCiAg
ICAgICAgIHNpemVfdCBtX3NpemU7CiAgICAgfTsKQEAgLTEwNSw2ICsxMDcsOCBAQCBwcml2YXRl
OgogICAgIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQog
ICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOworI2VsaWYgT1MoU1lNQklBTikKKyAgICBpbnQgbV9o
YW5kbGU7ICAgIAogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9X
b3JrUXVldWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuaAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIuaCIKIGNsYXNzIFFPYmplY3Q7CiBjbGFzcyBRVGhyZWFkOworI2lm
IE9TKFNZTUJJQU4pCisjaW5jbHVkZSAicXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaCIKKyNlbmRp
ZgogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaCIKIHR5cGVkZWYgc3RydWN0IF9HTWFpbkNvbnRleHQgR01haW5Db250ZXh0OwpAQCAtODQs
NyArODcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoSEFORExFLCBQYXNz
T3duUHRyPFdvcmtJdGVtPik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFO
RExFKTsKICNlbGlmIFBMQVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCisgICAgUVN5bWJpYW5Q
aXBlTm90aWZpZXIqIHJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxlcihSUGlwZSBwaXBlLCBRU3ltYmlh
blBpcGVOb3RpZmllcjo6RXZlbnRUeXBlIHR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJ
dGVtKTsKKyNlbHNlCiAgICAgUVNvY2tldE5vdGlmaWVyKiByZWdpc3RlclNvY2tldEV2ZW50SGFu
ZGxlcihpbnQsIFFTb2NrZXROb3RpZmllcjo6VHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4pOwor
I2VuZGlmCiAgICAgdm9pZCBzY2hlZHVsZVdvcmtPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllciwgUGFzc093blB0cjxXb3JrSXRlbT4pOwogI2VsaWYgUExBVEZP
Uk0oR1RLKQogICAgIHZvaWQgcmVnaXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50LCBpbnQsIFBh
c3NPd25QdHI8V29ya0l0ZW0+KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvQXJndW1lbnREZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAJKHJldmlzaW9uIDg0Mzk4KQorKysgU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIEFyZ3VtZW50RGVjb2Rlcjo6fkFyZ3VtZW50RGVjb2Rl
cigpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyKTsKICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Ci0j
aWYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKQorI2lmICFVU0UoVU5JWF9ET01BSU5f
U09DS0VUUykKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNwb3NlIG9mIHRoZSBtYWNoIHBv
cnRzIGluIGNhc2VzIG9mIGZhaWx1cmUuCiAjZWxzZQogICAgIERlcXVlPEF0dGFjaG1lbnQ+Ojpp
dGVyYXRvciBlbmQgPSBtX2F0dGFjaG1lbnRzLmVuZCgpOwpJbmRleDogU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAkocmV2aXNpb24g
ODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RW5jb2Rl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgQXJndW1lbnRFbmNvZGVyOjp+
QXJndW1lbnRFbmNvZGVyKCkKIHsKICAgICBpZiAobV9idWZmZXIpCiAgICAgICAgIGZhc3RGcmVl
KG1fYnVmZmVyKTsKLSNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShHVEspCisjaWYgIVVT
RShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGRpc3Bvc2Ug
b2YgdGhlIGF0dGFjaG1lbnRzIGluIGNhc2VzIG9mIGZhaWx1cmUuCiAjZWxzZQogICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbV9hdHRhY2htZW50cy5zaXplKCk7ICsraSkKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCShyZXZpc2lvbiA4NDM5OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Myw4ICs0MywxMiBAQAogI2VsaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUg
PHN0cmluZz4KICNlbGlmIFBMQVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSA8
cGxhdGZvcm0vcnBpcGUuaD4KKyNlbHNlCiBjbGFzcyBRU29ja2V0Tm90aWZpZXI7CiAjZW5kaWYK
KyNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICNpbmNsdWRlICJQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCkBAIC0xMDUsNiArMTA5LDggQEAgcHVibGljOgog
I2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHR5cGVkZWYgSEFORExFIElkZW50aWZpZXI7CiAgICAg
c3RhdGljIGJvb2wgY3JlYXRlU2VydmVyQW5kQ2xpZW50SWRlbnRpZmllcnMoSWRlbnRpZmllciYg
c2VydmVySWRlbnRpZmllciwgSWRlbnRpZmllciYgY2xpZW50SWRlbnRpZmllcik7CisjZWxpZiBQ
TEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyAgICB0eXBlZGVmIFJQaXBlKiBJZGVudGlmaWVy
OyAKICNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIHR5cGVkZWYgaW50IElkZW50
aWZpZXI7CiAjZW5kaWYKQEAgLTEzNSw3ICsxNDEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgbWFy
a0N1cnJlbnRseURpc3BhdGNoZWRNZXNzYWdlQXNJbnZhbGlkKCk7CiAKICAgICB2b2lkIHNldERl
ZmF1bHRTeW5jTWVzc2FnZVRpbWVvdXQoZG91YmxlKTsKLQorI2lmIFBMQVRGT1JNKFFUKSAmJiBP
UyhTWU1CSUFOKQorICAgIHN0YXRpYyBjb25zdCBpbnQgTWF4UGlwZUNhcGFjaXR5ID0gNDA5Njsg
CisjZW5kaWYKKyAgICAKICAgICBzdGF0aWMgY29uc3QgaW50IERlZmF1bHRUaW1lb3V0ID0gMDsK
ICAgICBzdGF0aWMgY29uc3QgaW50IE5vVGltZW91dCA9IC0xOwogCkBAIC0zMjksNiArMzM4LDE0
IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgUVNvY2tldE5vdGlmaWVyKiBtX3Nv
Y2tldE5vdGlmaWVyOwogI2VuZGlmCisjZWxpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikg
CisgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHF1ZXVlLgorICAgIHZvaWQgcmVhZHlS
ZWFkSGFuZGxlcigpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1fcmVhZEJ1ZmZlcjsKKyAgICBS
UGlwZSBtX3JlYWRQaXBlOworICAgIFJQaXBlIG1fd3JpdGVQaXBlOworICAgIFFTeW1iaWFuUGlw
ZU5vdGlmaWVyKiBtX3BpcGVSZWFkTm90aWZpZXI7CiAjZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblN5
bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTc5IEBA
CisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0o
UVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgorCisjaW5jbHVkZSAi
QXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiV29ya0l0ZW0uaCIKKyNpbmNsdWRlIDxRVmVj
dG9yPgorI2luY2x1ZGUgPHF0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmg+CisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KK25hbWVzcGFjZSBDb3JlSVBDIHsKKworc3RhdGljIGNvbnN0IHVpbnQz
Ml90IHRyYWlsZXIgPSAweERFQURDQUZFOworCitzdHJ1Y3QgUGFyc2VkTWVzc2FnZSB7CisgICAg
ICAgIHVpbnQ4X3QqIHN0YXJ0OyAvLyBiYXNlIGFkZHJlc3Mgb2YgbWVzc2FnZQorICAgICAgICB1
aW50MzJfdCBzaXplOyAvLyBzaXplIGluIGJ5dGVzCisgICAgICAgIHVpbnQzMl90IG1lc3NhZ2VJ
RDsKK307CisKK3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElkZW50aWZpZXIg
aWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pc1NlcnZlcikgeworICAgICAgICBtX3JlYWRQaXBl
ID0gc3RhdGljX2Nhc3Q8UlBpcGUqPihpZGVudGlmaWVyKVswXTsKKyAgICAgICAgbV93cml0ZVBp
cGUgPSBzdGF0aWNfY2FzdDxSUGlwZSo+KGlkZW50aWZpZXIpWzFdOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIFRJbnQgZXJyb3I7CisgICAgICAgIC8vIE9wZW4gcGlwZXMgdmlhIFJQcm9jZXNzJyAi
ZW52aXJvbm1lbnQgZGF0YSBzbG90cyIgbnVtYmVyIDMgJiA0LgorICAgICAgICAvLyBUaGUgY2hv
aWNlIG9mIDMgJiA0IGlzIGFyYml0cmFyeSBhbmQgbWF0Y2hlcyB0aGUgY29kZSBpbiBQcm9jZXNz
TGF1bmNoZXJTeW1iaWFuLmNwcC4KKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgU3ltYmlhbiBPUyB3
YXkgb2YgcGFzc2luZyBvd25lcnNoaXAgb2YgcmVzb3VyY2VzIGZyb20gcGFyZW50IHRvIGNoaWxk
CisgICAgICAgIGVycm9yID0gbV9yZWFkUGlwZS5PcGVuKDMpOyAKKyAgICAgICAgZXJyb3J8PSBt
X3dyaXRlUGlwZS5PcGVuKDQpOworICAgICAgICBpZiAoZXJyb3IpIHsgCisgICAgICAgICAgICBt
X2lzQ29ubmVjdGVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtX3BpcGVSZWFkTm90aWZpZXIgPSAwOworICAgIG1fcmVhZEJ1ZmZlci5yZXNp
emUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6TWF4UGlwZUNhcGFjaXR5KTsKKyAgICBtX2lzQ29ubmVj
dGVkID0gdHJ1ZTsgICAgICAgIAorfQorCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxp
ZGF0ZSgpCit7CisgICAgbV9yZWFkQnVmZmVyLnNocmluaygwKTsKKyAgICAKKyAgICBkZWxldGUg
bV9waXBlUmVhZE5vdGlmaWVyOworICAgIG1fcGlwZVJlYWROb3RpZmllciA9IDA7CisKKyAgICBt
X3JlYWRQaXBlLkNsb3NlKCk7CisgICAgbV93cml0ZVBpcGUuQ2xvc2UoKTsKKyAgICAvLyBUT0RP
OiBkZWxldGUgdGhlIG1lbW9yeSBmb3IgdGhlIFJQaXBlWzJdIGFycmF5CisKKyAgICBtX2lzQ29u
bmVjdGVkID0gZmFsc2U7Cit9CisKKy8vIENoZWNrIGlmIHRoZSBkYXRhIG1hdGNoZXMgdGhlIHRy
YWlsZXIgcGF0dGVybgorc3RhdGljIGlubGluZSBib29sIGlzTWVzc2FnZVRyYWlsZXIodWludDhf
dCAqZGF0YSkgCit7ICAKKyAgICByZXR1cm4gKCB0cmFpbGVyID09ICoocmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGRhdGEpKSApOyAgCit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cmVhZHlSZWFk
SGFuZGxlcigpCit7ICAgCisgICAgbV9waXBlUmVhZE5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNl
KTsKKyAgICBUUHRyOCByZWFkUHRyKG1fcmVhZEJ1ZmZlci5kYXRhKCksIDAsIG1fcmVhZEJ1ZmZl
ci5zaXplKCkpOworICAgIAorICAgIC8vIE5vdGUgdGhhdCBhIHJlYWQgb3BlcmF0aW9uIG1heSBy
ZXR1cm4gbXVsdGlwbGUgbWVzc2FnZXMgZHVlIHRvIGl0cyBzdHJlYW0tb3JpZW50ZWQgbmF0dXJl
LgorICAgIFRJbnQgYnl0ZXNSZWFkID0gbV9yZWFkUGlwZS5SZWFkKHJlYWRQdHIsIHJlYWRQdHIu
TWF4U2l6ZSgpKTsKKyAgICAKKyAgICBpZiAoYnl0ZXNSZWFkID4gMCkgeyAgICAgICAgICAgIAor
ICAgICAgICBfX0FTU0VSVF9BTFdBWVMoYnl0ZXNSZWFkID09IHJlYWRQdHIuU2l6ZSgpLCBVc2Vy
OjpJbnZhcmlhbnQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBTdGFydCBwYXJzaW5nIGZyb20g
dGhlIGVuZCBvZiB0aGUgYnVmZmVyLCB3aGVyZSB3ZSBleHBlY3QgdG8gc2VlIGEgdHJhaWxlciBh
bmQgdGhlIHNpemUgb2YgdGhpcyBtZXNzYWdlLgorICAgICAgICB1aW50OF90KiBtZXNzYWdlU3Rh
cnQgPSBtX3JlYWRCdWZmZXIuZGF0YSgpICsgYnl0ZXNSZWFkOworICAgICAgICAKKyAgICAgICAg
Ly8gVGVtcG9yYXJ5IHBsYWNlIHRvIGtlZXAgdHJhY2sgb2YgcGFyc2VkIG1lc3NhZ2VzLgorICAg
ICAgICBRVmVjdG9yPFBhcnNlZE1lc3NhZ2U+IG1lc3NzYWdlUG9pbnRlcnM7CisgICAgICAgIAor
ICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgbWVzc2FnZVN0YXJ0IC09IHNpemVv
Zih1aW50MzJfdCk7IC8vIHByZXBhcmUgdG8gcmVhZCA0LWJ5dGUgdHJhaWxlcgorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIWlzTWVzc2FnZVRyYWlsZXIobWVzc2FnZVN0YXJ0KSkKKyAg
ICAgICAgICAgICAgICBicmVhazsgCisgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgbWVz
c2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICB1aW50MzJfdCBtZXNz
YWdlU2l6ZSA9ICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4obWVzc2FnZVN0YXJ0KTsgCisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1lc3NhZ2VTdGFydCAtPSBzaXplb2YodWludDMyX3Qp
OworICAgICAgICAgICAgdWludDMyX3QgbWVzc2FnZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihtZXNzYWdlU3RhcnQpOyAKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbWVzc2Fn
ZVN0YXJ0IC09IChtZXNzYWdlU2l6ZSAtIHNpemVvZih1aW50MzJfdCkpOyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFNhdmUgbWVz
c2FnZSBib3VuZGFyeQorICAgICAgICAgICAgY29uc3QgUGFyc2VkTWVzc2FnZSBhTWVzc2FnZSA9
IHttZXNzYWdlU3RhcnQsIG1lc3NhZ2VTaXplIC0gc2l6ZW9mKHVpbnQzMl90KSwgbWVzc2FnZUlE
fTsKKyAgICAgICAgICAgIG1lc3NzYWdlUG9pbnRlcnMuYXBwZW5kKGFNZXNzYWdlKTsgCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIF9fQVNTRVJUX0FMV0FZUyhtZXNzYWdlU3RhcnQgPj0gIG1f
cmVhZEJ1ZmZlci5kYXRhKCksIFVzZXI6OkludmFyaWFudCgpKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKG1lc3NhZ2VTdGFydCA9PSBtX3JlYWRCdWZmZXIuZGF0YSgpKSAKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgfSAvLyB3aGlsZSBs
b29wCisgICAgICAKKyAgICAgICAgLy8gTm93IGRpc3BhdGNoIHBhcnNlZCBtZXNzYWdlcyBpbiB0
aGUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4gYnkgdGhlIHNlbmRlcgorICAgICAgICBmb3IgKGlu
dCBpID0gbWVzc3NhZ2VQb2ludGVycy5zaXplKCktMTsgaSA+PSAwIDsgaS0tKSB7CisgICAgICAg
ICAgICBjb25zdCBQYXJzZWRNZXNzYWdlIGFNZXNzYWdlID0gbWVzc3NhZ2VQb2ludGVycy5hdChp
KTsKKyAgICAgICAgICAgIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTWVzc2FnZUlEOjpmcm9tSW50
KGFNZXNzYWdlLm1lc3NhZ2VJRCksIGFkb3B0UHRyKG5ldyBBcmd1bWVudERlY29kZXIoYU1lc3Nh
Z2Uuc3RhcnQsIGFNZXNzYWdlLnNpemUpKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1lc3NzYWdlUG9pbnRlcnMuY2xlYXIoKTsKKyAgICB9CisgICAgCisgICAgbV9waXBlUmVhZE5v
dGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOworfQorCisKK2Jvb2wgQ29ubmVjdGlvbjo6b3Blbigp
Cit7CisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKSAKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAg
ICAKKyAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIHJlYWQgCisgICAgbV9waXBlUmVhZE5vdGlm
aWVyID0gbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKG1fcmVhZFBp
cGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUsIFdvcmtJdGVt
OjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsKKyAgICAgICAg
CisgICAgLy8gU2NoZWR1bGUgYSByZWFkLgorICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxl
V29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVy
KSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6cGxhdGZv
cm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNvbnN0Cit7CisgICAgLy8gQWx3YXlzIHRydWUs
IHNpbmNlIHRoZSBwaXBlIGlzIGxhcmdlIGVub3VnaCB0byBob2xkIG11bHRpcGxlIG1lc3NhZ2Vz
LgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01l
c3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxBcmd1bWVudEVuY29kZXI+IGFy
Z3VtZW50cykKK3sgICAgCisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIobWVzc2FnZUlELnRv
SW50KCkpOworICAgIAorICAgIC8vIFNpemUgb2YgbWVzc2FnZSBleGNsdWRpbmcgdGhpcyA0LWJ5
dGUgZmllbGQgYW5kIHRoZSA0LWJ5dGUgdHJhaWxlciB3aGljaCBmb2xsb3dzLgorICAgIGFyZ3Vt
ZW50cy0+ZW5jb2RlVUludDMyKGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpKTsKKyAgICAKKyAgICAv
LyBhIHRyYWlsZXIgbWFya2VyIChtYWdpYyBudW1iZXIpIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0
byBzcG90IG1lc3NhZ2UgYm91bmRhcnkgYXQgdGhlIHJlY2VpdmVyCisgICAgYXJndW1lbnRzLT5l
bmNvZGVVSW50MzIodHJhaWxlcik7CisgICAgCisgICAgVFB0cjggd3JpdGVCdWZmZXIoYXJndW1l
bnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCksIGFyZ3VtZW50cy0+YnVmZmVy
U2l6ZSgpICk7CisgICAgVEludCBieXRlc1dyaXR0ZW4gPSBtX3dyaXRlUGlwZS5Xcml0ZSh3cml0
ZUJ1ZmZlciwgd3JpdGVCdWZmZXIuU2l6ZSgpICk7ICAgICAKKyAgICAKKyAgICByZXR1cm4gKGJ5
dGVzV3JpdHRlbiA9PSB3cml0ZUJ1ZmZlci5TaXplKCkpOworfQorCit2b2lkIENvbm5lY3Rpb246
OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQoreworICAgIG1fY29ubmVjdGlvblF1ZXVl
LnNjaGVkdWxlV29ya09uVGVybWluYXRpb24ocHJvY2VzcywgV29ya0l0ZW06OmNyZWF0ZSh0aGlz
LCAmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IENvcmVJUEMKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9x
dC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlm
aWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAgICBDb3B5cmlnaHQg
KEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisK
KyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRGT1JNIChRVCkgJiYgT1MoU1lNQklBTikK
KyNpbmNsdWRlICJRU3ltYmlhblBpcGVOb3RpZmllci5oIgorCisjaW5jbHVkZSAiQXNzZXJ0aW9u
cy5oIgorI2luY2x1ZGUgIlFDb3JlQXBwbGljYXRpb24iCisjaW5jbHVkZSAiUUV2ZW50IgorI2lu
Y2x1ZGUgIlFPYmplY3QiCisjaW5jbHVkZSAiU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaCIKKyNp
bmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCisvLyBXcmFwcGVyIFFPYmplY3QgYXJvdW5kIGEg
U3ltYmlhbiBBY3RpdmUgT2JqZWN0IChBTykuIFdlIHVzZSB0aGUgQU8gdG8gd2F0Y2ggZm9yIG5v
dGlmaWNhdGlvbnMKKy8vIG9mIGRhdGEgYXZhaWxhYmxlL3NwYWNlIGF2YWlsYWJsZSBvbiB0aGUg
UlBpcGUuCitRU3ltYmlhblBpcGVOb3RpZmllcjo6UVN5bWJpYW5QaXBlTm90aWZpZXIoUlBpcGUm
IHBpcGUsIEV2ZW50VHlwZSB0eXBlLCBpbnQgYnl0ZXMsIFFPYmplY3QgKnBhcmVudCkgCisgICAg
OiBRT2JqZWN0KHBhcmVudCkKKyAgICAsbV9waXBlKHBpcGUpCisgICAgLG1fdHlwZSh0eXBlKQor
ICAgICxtX2J5dGVzKGJ5dGVzKQorICAgICxtX25vdGlmaWVyQU8obmV3IFN5bWJpYW5QaXBlQWN0
aXZlT2JqZWN0KHBpcGUsIHR5cGUsIGJ5dGVzLCB0aGlzKSkKK3sKK30KKworUVN5bWJpYW5QaXBl
Tm90aWZpZXI6On5RU3ltYmlhblBpcGVOb3RpZmllcigpIAoreworICAgIGRlbGV0ZSBtX25vdGlm
aWVyQU87Cit9CisKKy8vIFRoaXMgaW50ZXJmYWNlIGlzIG1vZGVsZWQgYWZ0ZXIgUVNvY2tldE5v
dGlmaWVyJ3Mgc2V0RW5hYmxlZCgpCit2b2lkIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpzZXRFbmFi
bGVkKGJvb2wgZW5hYmxlZCkgCit7IAorICAgIGlmICghbV9ub3RpZmllckFPKSB7CisgICAgICAg
IC8vIFdlIGRlbGV0ZWQgdGhlIEFPIHByZXZpb3VzbHksIHNvIGZpcmUgYSBkZWZlcnJlZCBpbml0
aWFsaXphdGlvbiByZXF1ZXN0IHZpYSBwb3N0RXZlbnQoKS4KKyAgICAgICAgLy8gVGhpcyBpcyBy
ZXF1aXJlZCB0byBzdXBwb3J0IFFPYmplY3QtPm1vdmVUb1RocmVhZCgpCisgICAgICAgIC8vIE5P
VEU6IFdlIGRpc2NhcmQgdGhlIHNwZWNpZmllZCBib29sZWFuIGFyZ3VtZW50LCBhbmQgYmxhbmtl
dCBlbmFibGUgbGF0ZXIgb24uCisgICAgICAgIFFFdmVudCogcG9zdFRocmVhZENoYW5nZUV2ZW50
ID0gbmV3IFFFdmVudChQb3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlKTsKKyAgICAgICAgUUNvcmVB
cHBsaWNhdGlvbjo6cG9zdEV2ZW50KHRoaXMsIHBvc3RUaHJlYWRDaGFuZ2VFdmVudCk7CisgICAg
ICAgIHJldHVybjsgCisgICAgfQorCisgICAgbV9ub3RpZmllckFPLT5zZXRFbmFibGVkKGVuYWJs
ZWQpOworfQorCisvLyBUaGlzIGV2ZW50IGhhbmRsZXIgZXhpc3RzIHB1cmVseSB0byBzdXBwb3J0
IFFPYmplY3QtPm1vdmVUb1RocmVhZC4KKy8vIFN5bWJpYW4gYWN0aXZlIG9iamVjdHMgKEFPcykg
YXJlIGJvdW5kIHRvIGFuIEFjdGl2ZSBTY2hlZHVsZXIgKEFTKSB3aGljaCBpcyB0aHJlYWQtbG9j
YWwuCisvLyBUaGVyZWZvcmUsIHRoZSBBTyBtdXN0IGJlIHJlLWNyZWF0ZWQgb24gdGhlIG5ldyB0
aHJlYWQgb25jZSB0aGUgcGFyZW50IFFPYmplY3QgaGFzIG1vdmVkCisvLyB0byB0aGUgbmV3IHRo
cmVhZAorYm9vbCBRU3ltYmlhblBpcGVOb3RpZmllcjo6ZXZlbnQoUUV2ZW50KiBldikKK3sgICAg
ICAgIAorICAgIGlmIChldi0+dHlwZSgpID09IFFFdmVudDo6VGhyZWFkQ2hhbmdlKSB7IC8vIHBy
ZS1taWdyYXRpb24gZXZlbnQKKyAgICAgICAgaWYgKG1fbm90aWZpZXJBTykgeworICAgICAgICAg
ICAgaWYgKG1fbm90aWZpZXJBTy0+SXNBZGRlZCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBv
bGRTdGF0ZSA9IG1fbm90aWZpZXJBTy0+SXNBY3RpdmUoKTsKKyAgICAgICAgICAgICAgICBtX25v
dGlmaWVyQU8tPkRlcXVlKCk7CisgICAgICAgICAgICB9ICAgICAKKyAgICAgICAgICAgIGRlbGV0
ZSBtX25vdGlmaWVyQU87CisgICAgICAgICAgICBtX25vdGlmaWVyQU8gPSAwOworICAgICAgICB9
CisgICAgICAgIC8vIEZpcmUgYSBkZWZlcnJlZCBpbml0aWFsaXphdGlvbiByZXF1ZXN0CisgICAg
ICAgIFFFdmVudCogcG9zdFRocmVhZENoYW5nZUV2ZW50ID0gbmV3IFFFdmVudChQb3N0VGhyZWFk
Q2hhbmdlRXZlbnRUeXBlKTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KHRo
aXMsIHBvc3RUaHJlYWRDaGFuZ2VFdmVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
CisgICAgCisgICAgaWYgKGV2LT50eXBlKCkgPT0gUG9zdFRocmVhZENoYW5nZUV2ZW50VHlwZSkg
eyAvLyBjdXN0b20sIHBvc3QtbWlncmF0aW9uIGV2ZW50CisgICAgICAgIGlmICghbV9ub3RpZmll
ckFPKSB7CisgICAgICAgICAgICBtX25vdGlmaWVyQU8gPSBuZXcgU3ltYmlhblBpcGVBY3RpdmVP
YmplY3QobV9waXBlLCBtX3R5cGUsIG1fYnl0ZXMsIHRoaXMpOworICAgICAgICAgICAgLy8gTk9U
RTogV2UgcHJlc3VtcHRpdmVseSBlbmFibGUgd2F0Y2gsIGV2ZW4gdGhvdWdoIG9sZFN0YXRlIG1h
eSBiZSBmYWxzZSBhYm92ZS4KKyAgICAgICAgICAgIG1fbm90aWZpZXJBTy0+c2V0RW5hYmxlZCh0
cnVlKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsgCisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5v
dGlmaWVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpZm5kZWYgUVN5bWJpYW5QaXBlTm90aWZpZXJfaAorI2RlZmluZSBRU3ltYmlhblBpcGVO
b3RpZmllcl9oCisKKyNpbmNsdWRlIDxRRXZlbnQ+CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNs
dWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCitjbGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDsK
KworY2xhc3MgUVN5bWJpYW5QaXBlTm90aWZpZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9P
QkpFQ1QKK3B1YmxpYzogCisgICAgZW51bSBFdmVudFR5cGUgeworICAgICAgICBQaXBlUmVhZERh
dGFBdmFpbGFibGUsIC8vIGRhdGEgY2FuIGJlIHJlYWQKKyAgICAgICAgUGlwZVdyaXRlU3BhY2VB
dmFpbGFibGUgLy8gd3JpdGUgcGlwZSBjYW4gdGFrZSBtb3JlIGRhdGEKKyAgICB9OworICAgIFFT
eW1iaWFuUGlwZU5vdGlmaWVyKFJQaXBlJiwgRXZlbnRUeXBlLCBpbnQsIFFPYmplY3QqIHBhcmVu
dCA9IDApOworICAgIH5RU3ltYmlhblBpcGVOb3RpZmllcigpOworICAgIGJvb2wgZXZlbnQoUUV2
ZW50Kik7CisgICAgCitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOwor
CitzaWduYWxzOgorICAgIC8vIGVtaXR0ZWQgd2hlbiBQaXBlUmVhZERhdGFBdmFpbGFibGUgb2Nj
dXJzCisgICAgdm9pZCByZWFkeVRvUmVhZChpbnQpOworICAgIC8vIGVtaXR0ZWQgd2hlbiBQaXBl
V3JpdGVTcGFjZUF2YWlsYWJsZSBvY2N1cnMKKyAgICB2b2lkIHJlYWR5VG9Xcml0ZShpbnQpOwor
ICAgIHZvaWQgZXJyb3JPY2N1cmVkKGludCk7CisgICAgCitwcml2YXRlOiAKKyAgICBSUGlwZSBt
X3BpcGU7IAorICAgIEV2ZW50VHlwZSBtX3R5cGU7CisgICAgaW50IG1fYnl0ZXM7ICAgCisgICAg
U3ltYmlhblBpcGVBY3RpdmVPYmplY3QqIG1fbm90aWZpZXJBTzsKKworICAgIC8vIEN1c3RvbSBl
dmVudCB0byBoZWxwIHdpdGggUU9iamVjdC0+bW92ZVRvVGhyZWFkKCkgCisgICAgc3RhdGljIGNv
bnN0IFFFdmVudDo6VHlwZSBQb3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlID0gKFFFdmVudDo6VHlw
ZSkoUUV2ZW50OjpVc2VyICsgMTAwKTsKKyAgICAgICAgCisgICAgZnJpZW5kIGNsYXNzIFN5bWJp
YW5QaXBlQWN0aXZlT2JqZWN0OworICAgIFFfRElTQUJMRV9DT1BZKFFTeW1iaWFuUGlwZU5vdGlm
aWVyKQorfTsKKworI2VuZGlmIC8vIFFTeW1iaWFuUGlwZU5vdGlmaWVyX2gKKwpJbmRleDogU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1i
aWFuUGlwZUFjdGl2ZU9iamVjdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJTeW1iaWFu
UGlwZUFjdGl2ZU9iamVjdC5oIgorCisjaW5jbHVkZSAiUVN5bWJpYW5QaXBlTm90aWZpZXIuaCIK
KyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCisKKy8vIFRoZSBTeW1iaWFuIEFjdGl2ZSBP
YmplY3QgdGhhdCByZWdpc3RlcnMgbm90aWZpY2F0aW9uIHJlcXVlc3RzIHdpdGggdGhlIGtlcm5l
bCwgc2ltaWxhciB0byBQT1NJWCdzIHNlbGVjdCgpIHN5c3RlbSBjYWxsCisvLyBOb3RlIHRoYXQg
dW5saWtlIGFueXRoaW5nIG9uIFVuaXgsIFN5bWJpYW4gQWN0aXZlIE9iamVjdHMgYXJlIHNjaGVk
dWxhYmxlIG9iamVjdHMgdGhhdCBhcmUgYm91bmQgdG8gdGhlIGN1cnJlbnQgdGhyZWFkJ3MgQWN0
aXZlIFNjaGVkdWxlci4gCisvLyBUaGVyZWZvcmUgdGhleSBhcmUgYSBsaWdodHdlaWdodCB2ZXJz
aW9uIG9mIHRocmVhZHMgZnJvbSBhIHJlc291cmNlIHV0aWxpemF0aW9uIFBPVi4gCitTeW1iaWFu
UGlwZUFjdGl2ZU9iamVjdDo6U3ltYmlhblBpcGVBY3RpdmVPYmplY3QoUlBpcGUgcGlwZSwgUVN5
bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSB0eXBlLCBpbnQgc3BhY2VJbkJ5dGVzLCBRU3lt
YmlhblBpcGVOb3RpZmllciogcXEpCisgICAgOiBDQWN0aXZlKENBY3RpdmU6OkVQcmlvcml0eVN0
YW5kYXJkKQorICAgICxtX3BpcGUocGlwZSkKKyAgICAsbV90eXBlKHR5cGUpCisgICAgLG1fYnl0
ZXMoc3BhY2VJbkJ5dGVzKQorICAgICxtX3BhcmVudChxcSkKK3sgCisgICAgQ0FjdGl2ZVNjaGVk
dWxlcjo6QWRkKHRoaXMpOworfQorICAgIAorU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6On5TeW1i
aWFuUGlwZUFjdGl2ZU9iamVjdCgpIAoreyAKKyAgICBDYW5jZWwoKTsKK30KKwordm9pZCBTeW1i
aWFuUGlwZUFjdGl2ZU9iamVjdDo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpIAoreworICAgIC8v
IHN0YXJ0IGxpc3RlbmluZworICAgIGlmIChlbmFibGVkICYmICFJc0FjdGl2ZSgpKSB7ICAKKyAg
ICAgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVJlYWREYXRhQXZh
aWxhYmxlKSB7IAorICAgICAgICAgICAgbV9waXBlLk5vdGlmeURhdGFBdmFpbGFibGUoaVN0YXR1
cyk7CisgICAgICAgICAgICBTZXRBY3RpdmUoKTsgLy8gYmFzZSBjbGFzcyBtZXRob2QgdG8gZGVj
bGFyZSB0aGUgYWJvdmUgcmVxdWVzdCBhcyAicGVuZGluZyIgY29tcGxldGlvbgorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQ
aXBlV3JpdGVTcGFjZUF2YWlsYWJsZSkgeworICAgICAgICAgICAgaW50IGZyZWVTcGFjZU5lZWRl
ZCA9IG1fYnl0ZXMgPCAwID8gMSA6IG1fYnl0ZXM7IAorICAgICAgICAgICAgbV9waXBlLk5vdGlm
eVNwYWNlQXZhaWxhYmxlKGZyZWVTcGFjZU5lZWRlZCwgaVN0YXR1cyk7CisgICAgICAgICAgICBT
ZXRBY3RpdmUoKTsgLy8gYmFzZSBjbGFzcyBtZXRob2QgdG8gZGVjbGFyZSB0aGUgYWJvdmUgcmVx
dWVzdCBhcyAicGVuZGluZyIgY29tcGxldGlvbgorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIHN0b3AgbGlzdGVuaW5nCisgICAgaWYgKCFl
bmFibGVkKSB7CisgICAgICAgIENhbmNlbCgpOyAvLyBBdXRvbWF0aWNhbGx5IGxlYWRzIHRvIGEg
RG9DYW5jZWwoKSAKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworLy8gVGhpcyBtZXRob2Qg
Z2V0cyBydW4gYnkgdGhlIFN5bWJpYW4gT1MgQWN0aXZlIFNjaGVkdWxlciB3aGVuIHRoZQorLy8g
cmVxdWVzdCBpbml0aWF0ZWQgYnkgTm90aWZ5RGF0YUF2YWlsYWJsZSBhYm92ZSBpcyBtYXJrZWQg
YXMgY29tcGxldGVkCisvLyBXZSBzZW5kIGEgUXQgc2lnbmFsIHZpYSBvdXIgcGFyZW50IFFPYmpl
Y3QsIGFuZCB0aGVuIGltcGxpY2l0bHkgZ28KKy8vIGludG8gYSBkaXNhYmxlZCBzdGF0ZSwgaS5l
IG5vdGlmaWNhdGlvbnMgYXJlIG9mZiAgCit2b2lkIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0OjpS
dW5MKCkgCit7CisgICAgaWYgKGlTdGF0dXMgIT0gS0Vyck5vbmUpIHsKKyAgICAgICAgZW1pdCBt
X3BhcmVudC0+ZXJyb3JPY2N1cmVkKGlTdGF0dXMuSW50KCkpOworICAgICAgICByZXR1cm47IAor
ICAgIH0KKyAgICAKKyAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBl
UmVhZERhdGFBdmFpbGFibGUpIHsKKyAgICAgICAgY29uc3QgaW50IGJ5dGVzQXZhaWxhYmxlID0g
IG1fcGlwZS5TaXplKCk7IC8vIHBlZWsgYnl0ZXMgYXZhaWxhYmxlIHRvIHJlYWQKKyAgICAgICAg
aWYgKGJ5dGVzQXZhaWxhYmxlID4gMCkKKyAgICAgICAgICAgIGVtaXQgbV9wYXJlbnQtPnJlYWR5
VG9SZWFkKGJ5dGVzQXZhaWxhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlV3JpdGVTcGFjZUF2YWls
YWJsZSkgeyAKKyAgICAgICAgZW1pdCBtX3BhcmVudC0+cmVhZHlUb1dyaXRlKDApOworICAgICAg
ICByZXR1cm47CisgICAgfQorCit9CisgIAordm9pZCBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6
RG9DYW5jZWwoKSAKK3sgCisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6
UGlwZVJlYWREYXRhQXZhaWxhYmxlKSB7IAorICAgICAgICBtX3BpcGUuQ2FuY2VsRGF0YUF2YWls
YWJsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAgICAgICAgCisgICAgaWYg
KG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVdyaXRlU3BhY2VBdmFpbGFibGUp
IHsgCisgICAgICAgIG1fcGlwZS5DYW5jZWxTcGFjZUF2YWlsYWJsZSgpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1N5
bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgU3ltYmlhblBpcGVBY3RpdmVPYmplY3RfaAorI2Rl
ZmluZSBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdF9oCisKKyNpbmNsdWRlICJRU3ltYmlhblBpcGVO
b3RpZmllci5oIgorI2luY2x1ZGUgInFnbG9iYWwuaCIKKyNpbmNsdWRlIDxlMzJiYXNlLmg+Cisj
aW5jbHVkZSA8cGxhdGZvcm0vcnBpcGUuaD4KKworY2xhc3MgU3ltYmlhblBpcGVBY3RpdmVPYmpl
Y3QgOiBwdWJsaWMgQ0FjdGl2ZSB7CitwdWJsaWM6CisgICAgU3ltYmlhblBpcGVBY3RpdmVPYmpl
Y3QoUlBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpFdmVudFR5cGUsIGludCwgUVN5bWJpYW5Q
aXBlTm90aWZpZXIqKTsKKyAgICB+U3ltYmlhblBpcGVBY3RpdmVPYmplY3QoKTsKKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIAorICAgIHZvaWQgUnVuTCgp
OworICAgIHZvaWQgRG9DYW5jZWwoKTsgCisKKyAgICBSUGlwZSBtX3BpcGU7CisgICAgUVN5bWJp
YW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSBtX3R5cGU7CisgICAgaW50IG1fYnl0ZXM7IC8vIG9u
bHkgdXNlZCBmb3Igd3JpdGUgcGlwZTsgLTEgbWVhbnMgdW51c2VkCisgICAgCisgICAgUVN5bWJp
YW5QaXBlTm90aWZpZXIgKiBtX3BhcmVudDsKKyAgICBmcmllbmQgY2xhc3MgUVN5bWJpYW5QaXBl
Tm90aWZpZXI7Cit9OworCisjZW5kaWYgLy8gU3ltYmlhblBpcGVBY3RpdmVPYmplY3RfaAorCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9B
dHRhY2htZW50VW5peC5jcHAJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjUsNiArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBVU0UoVU5JWF9E
T01BSU5fU09DS0VUUykKICNpbmNsdWRlICJBdHRhY2htZW50LmgiCiAKICNpbmNsdWRlIDx1bmlz
dGQuaD4KQEAgLTQ4LDMgKzQ5LDYgQEAgdm9pZCBBdHRhY2htZW50OjpkaXNwb3NlKCkKIH0KIAog
fSAvLyBuYW1lc3BhY2UgQ29yZUlQQworCisjZW5kaWYKKwpJbmRleDogU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCShy
ZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9D
b25uZWN0aW9uVW5peC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDkgQEAKICAqLwog
CiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogCisjaWYgSEFW
RShVTklYX0RPTUFJTl9TT0NLRVRTKQorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKICNpbmNsdWRl
ICJBcmd1bWVudEVuY29kZXIuaCIKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKICNpbmNs
dWRlICJXb3JrSXRlbS5oIgpAQCAtMzk5LDMgKzQwMCw2IEBAIHZvaWQgQ29ubmVjdGlvbjo6c2V0
U2hvdWxkQ2xvc2VDb25uZWN0aW8KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisK
KyNlbmRpZiAvLyBVTklYX0RPTUFJTl9TT0NLRVRTCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5U3ltYmlhbi5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAi
U2hhcmVkTWVtb3J5LmgiCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRl
ICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlIDxlMzJtYXRoLmg+CisjaW5jbHVkZSA8c3lz
L3BhcmFtLmg+CisKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NoYXJlZE1lbW9yeTo6SGFuZGxl
OjpIYW5kbGUoKQorICAgIDogbV9jaHVua05hbWUoMCkKKyAgICAsbV9zaXplKDApCit7Cit9CisK
K1NoYXJlZE1lbW9yeTo6SGFuZGxlOjp+SGFuZGxlKCkKK3sgICAKK30KKworYm9vbCBTaGFyZWRN
ZW1vcnk6OkhhbmRsZTo6aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fY2h1bmtOYW1l
OworfQorCit2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1l
bnRFbmNvZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOyAgICAK
KyAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIobV9zaXplKTsKKyAgICAvLyBuYW1lIG9mIHRoZSBn
bG9iYWwgY2h1bmsgKG1hc3F1ZXJhZGluZyBhcyB1aW50MzJfdCBmb3IgZWFzZSBvZiBzZXJpYWxp
emF0aW9uKQorICAgIGVuY29kZXItPmVuY29kZVVJbnQzMihtX2NodW5rTmFtZSk7Cit9CisKK2Jv
b2wgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIq
IGRlY29kZXIsIEhhbmRsZSYgaGFuZGxlKQoreworICAgIHNpemVfdCBzaXplOworICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlVUludDMyKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7IAorICAg
IAorICAgIHVpbnQzMl90IGNodW5rTmFtZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQz
MihjaHVua05hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgCisgICAgaGFuZGxl
Lm1fc2l6ZSA9IHNpemU7CisgICAgaGFuZGxlLm1fY2h1bmtOYW1lID0gY2h1bmtOYW1lOworICAg
IHJldHVybiB0cnVlOworfQorCitQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoc2l6ZV90IHNpemUpCit7CisgICAgLy8gT24gU3ltYmlhbiwgZ2xvYmFsIGNodW5r
cyAoc2hhcmVkIG1lbW9yeSBzZWdtZW50cykgaGF2ZSBzeXN0ZW0tdW5pcXVlIG5hbWVzLCBzbyB3
ZSBwaWNrIGEgcmFuZG9tIAorICAgIC8vIG51bWJlciBmcm9tIHRoZSBrZXJuZWwncyByYW5kb20g
cG9vbCBhbmQgdXNlIGl0IGFzIGEgc3RyaW5nLgorICAgIC8vIFVzaW5nIGFuIGludGVnZXIgc2lt
cGxpZmllcyBzZXJpYWxpemF0aW9uIG9mIHRoZSBuYW1lIGluIEhhbmRsZTo6ZW5jb2RlKCkKKyAg
ICB1aW50MzJfdCByYW5kb20gPSBNYXRoOjpSYW5kb20oKTsKKworICAgIFRCdWY8S01heEtlcm5l
bE5hbWU+IGNodW5rTmFtZTsKKyAgICBjaHVua05hbWUuRm9ybWF0KF9MKCIlZCIpLCByYW5kb20p
OworCisgICAgUkNodW5rIGNodW5rOworICAgIFRJbnQgZXJyb3IgPSBjaHVuay5DcmVhdGVHbG9i
YWwoY2h1bmtOYW1lLCBzaXplLCBzaXplKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5l
dyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1faGFuZGxlID0gY2h1bmsuSGFu
ZGxlKCk7CisgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBjaHVuay5TaXplKCk7CisgICAgc2hh
cmVkTWVtb3J5LT5tX2RhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oY2h1bmsuQmFzZSgpKTsKKyAg
ICAgICAgCisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQ
dHI8U2hhcmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRs
ZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCisg
ICAgICAgIHJldHVybiAwOworICAgICAKKyAgICAvLyBDb252ZXJ0IG51bWJlciB0byBzdHJpbmcs
IGFuZCBvcGVuIHRoZSBnbG9iYWwgY2h1bmsKKyAgICBUQnVmPEtNYXhLZXJuZWxOYW1lPiBjaHVu
a05hbWU7CisgICAgY2h1bmtOYW1lLkZvcm1hdChfTCgiJWQiKSwgaGFuZGxlLm1fY2h1bmtOYW1l
KTsKKworICAgIFJDaHVuayBjaHVuazsKKyAgICBUSW50IGVycm9yID0gY2h1bmsuT3Blbkdsb2Jh
bChjaHVua05hbWUsIGZhbHNlKTsgLy8gTk9URTogU3ltYmlhbiBPUyBkb2Vzbid0IHN1cHBvcnQg
cmVhZC1vbmx5IGdsb2JhbCBjaHVua3MKKyAgICBpZiAoZXJyb3IpIAorICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0
UmVmKG5ldyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1faGFuZGxlID0gY2h1
bmsuSGFuZGxlKCk7CisgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBjaHVuay5TaXplKCk7Cisg
ICAgc2hhcmVkTWVtb3J5LT5tX2RhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oY2h1bmsuQmFzZSgp
KTsKKyAgICAgIAorICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQorCitTaGFy
ZWRNZW1vcnk6On5TaGFyZWRNZW1vcnkoKQoreworICAgIFJDaHVuayBjaHVuazsKKyAgICBpZiAo
IWNodW5rLlNldFJldHVybmVkSGFuZGxlKG1faGFuZGxlKSkgeworICAgICAgICBUSGFuZGxlSW5m
byBpbmZvOworICAgICAgICBjaHVuay5IYW5kbGVJbmZvKCZpbmZvKTsKKyAgICAgICAgLy8gRklY
TUU6IFdlIG5lZWQgdG8gZmlndXJlIG91dCB3aGVuIHRvIERlY29tbWl0KCkgbWVtb3J5IGZyb20g
dGhlIGNodW5rCisgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGFsc28gdW5kZXJzdGFuZCBo
b3cgQ2xvc2UoKSBkZWNyZW1lbnRzIHRoZSBrZXJuZWwtc2lkZSByZWYgY291bnQgb2YgdGhlIAor
ICAgICAgICAvLyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYW5kIGxlYWRzIHRvIHByZW1hdHVyZSBk
ZWNvbW1pdHMoKSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhCisgICAgfQorfQorCitib29sIFNo
YXJlZE1lbW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3Rl
Y3Rpb24pCit7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5pc051bGwoKSk7CisgICAg
ICAgIAorICAgIFJDaHVuayBjaHVuazsgCisgICAgaWYgKGNodW5rLlNldFJldHVybmVkSGFuZGxl
KG1faGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIENvbnZlcnQg
dGhlIG5hbWUgKHN0cmluZyBmb3JtKSB0byBhIHVpbnQzMl90LgorICAgIFROYW1lIGdsb2JhbENo
dW5rTmFtZSA9IGNodW5rLk5hbWUoKTsKKyAgICBUTGV4IGxleGVyKGdsb2JhbENodW5rTmFtZSk7
CisgICAgVFVpbnQzMiBuYW1lQXNJbnQgPSAwOyAKKyAgICBpZiAobGV4ZXIuVmFsKG5hbWVBc0lu
dCwgRURlY2ltYWwpKSAKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAgICAgIAorICAgIGhh
bmRsZS5tX2NodW5rTmFtZSA9IG5hbWVBc0ludDsKKyAgICBoYW5kbGUubV9zaXplID0gbV9zaXpl
OworICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBTaGFyZWRNZW1vcnk6OnN5
c3RlbVBhZ2VTaXplKCkKK3sKKyAgICByZXR1cm4gUEFHRV9TSVpFOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9X
b3JrUXVldWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQv
V29ya1F1ZXVlUXQuY3BwCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMjMgQEAg
cHVibGljOgogICAgIFdvcmtJdGVtKiBtX3dvcmtJdGVtOwogfTsKIAorI2lmIE9TKFNZTUJJQU4p
CitRU3ltYmlhblBpcGVOb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclBpcGVFdmVudEhhbmRs
ZXIoUlBpcGUgcGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSB0eXBlLCBQYXNz
T3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSkgCit7CisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXIq
IG5vdGlmaWVyID0gbmV3IFFTeW1iaWFuUGlwZU5vdGlmaWVyKHBpcGUsIHR5cGUsIC0xKTsKKyAg
ICAgCisgICAgbm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOworICAgIG5vdGlmaWVyLT5tb3Zl
VG9UaHJlYWQobV93b3JrVGhyZWFkKTsKKyAgICAKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQq
IGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgbm90aWZpZXIsIFNJR05B
TChyZWFkeVRvUmVhZChpbnQpKSwgd29ya0l0ZW0ubGVha1B0cigpKTsKKyAgICAKKyAgICBpdGVt
UXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOyAgICAKKyAgICAKKyAgICBub3RpZmllci0+
c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAKKyAgICByZXR1cm4gbm90aWZpZXI7Cit9CisjZWxzZQog
UVNvY2tldE5vdGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGlu
dCBzb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlR5cGUgdHlwZSwgUGFzc093blB0
cjxXb3JrSXRlbT4gd29ya0l0ZW0pCiB7CiAgICAgQVNTRVJUKG1fd29ya1RocmVhZCk7CkBAIC04
OSw2ICsxMDYsNyBAQCBRU29ja2V0Tm90aWZpZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrCiAg
ICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgcmV0dXJuIG5vdGlmaWVyOwogfQor
I2VuZGlmCiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciop
CiB7CkBAIC0xMjAsOCArMTM4LDExIEBAIHZvaWQgV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmtBZnRl
ckRlbGF5KFAKIAogdm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29ya09uVGVybWluYXRpb24oV2Vi
S2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIFBhc3NPd25QdHI8V29ya0l0
ZW0+IHdvcmtJdGVtKQogeworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBhIHByb2Nl
c3Mgd2F0Y2hlciB1c2luZyBTeW1iaWFuIFJQcm9jZXNzCisjaWYgIU9TKFNZTUJJQU4pCiAgICAg
V29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0
KHRoaXMsIHByb2Nlc3MsIFNJR05BTChmaW5pc2hlZChpbnQsIFFQcm9jZXNzOjpFeGl0U3RhdHVz
KSksIHdvcmtJdGVtLmxlYWtQdHIoKSk7CiAgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3Jr
VGhyZWFkKTsKKyNlbmRpZgogfQogCiAjaW5jbHVkZSAiV29ya1F1ZXVlUXQubW9jIgpJbmRleDog
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3Bw
CShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVk
TWVtb3J5VW5peC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCisjaWYgSEFWRShNTUFQKQogI2luY2x1ZGUgIlNoYXJlZE1lbW9y
eS5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCkBAIC0yMzYsMyArMjM3LDYgQEAg
dW5zaWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYKKwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCShyZXZpc2lv
biA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNz
TGF1bmNoZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICAqLwogCiAj
aW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmICFPUyhTWU1CSUFOKQogI2lu
Y2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5oIgogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgpAQCAt
MTY0LDMgKzE2NSw1IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyUXQubW9j
IgorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Q
cm9jZXNzTGF1bmNoZXJTeW1iaWFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5j
aGVyU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJQcm9j
ZXNzTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSdW5M
b29wLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL3JwaXBl
LmgiCisjaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPHFnbG9iYWwuaD4KKworX0xJVChLV29y
a2VyUHJvY2Vzc05hbWUsICJRdFdlYlByb2Nlc3MuZXhlIik7CisKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6Omxh
dW5jaFByb2Nlc3MoKQoreworICAgIC8vIE1ha2UgYSBwYWlyIG9mIGhhbGYtZHVwbGV4IHBpcGVz
CisgICAgUlBpcGUqIGxvY2FsUGlwZXMgPSBuZXcgUlBpcGVbMl07IAorICAgIFJQaXBlKiByZW1v
dGVQaXBlcyA9IG5ldyBSUGlwZVsyXTsgCisgICAgIAorICAgIFJQaXBlOjpJbml0KCk7CisgICAg
Ly8gQ3JlYXRlIGEgcGlwZS4gRmlyc3QgYXJnIGlzIHRoZSByZWFkLWVuZCBSUGlwZSBhbmQgdGhl
IHNlY29uZCBpcyB0aGUgd3JpdGUtZW5kLiAKKyAgICBSUGlwZTo6Q3JlYXRlKENvcmVJUEM6OkNv
bm5lY3Rpb246Ok1heFBpcGVDYXBhY2l0eSwgcmVtb3RlUGlwZXNbMF0sIGxvY2FsUGlwZXNbMV0p
OworICAgIFJQaXBlOjpDcmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6TWF4UGlwZUNhcGFjaXR5
LCBsb2NhbFBpcGVzWzBdLCByZW1vdGVQaXBlc1sxXSk7CisgICAgCisgICAgLy8gUHJlcGFyZSB0
byBsYXVuY2ggd29ya2VyIHByb2Nlc3MKKyAgICBSUHJvY2Vzcyogd29ya2VyUHJvY2VzcyA9IG5l
dyBSUHJvY2VzcygpOworICAgIFRJbnQgZXJyb3IgPSB3b3JrZXJQcm9jZXNzLT5DcmVhdGUoS1dv
cmtlclByb2Nlc3NOYW1lKCksIEtOdWxsRGVzQyk7CisgICAgaWYgKGVycm9yKQorICAgICAgICBx
Q3JpdGljYWwoKSA8PCAiIEVycm9yIGluaXRpYWxpemluZyBXZWJLaXQyIHdlYiBwcm9jZXNzICIg
PDwgZXJyb3I7CisKKyAgICAvLyBQYXNzIG93bmVyc2hpcCBvZiBwaXBlcyB2aWEgUlByb2Nlc3Mn
ICJlbnZpcm9ubWVudCBkYXRhIHNsb3RzIi4gCisgICAgLy8gVGhpcyBpcyB0aGUgU3ltYmlhbiB3
YXkgb2YgcGFzc2luZyBvd25lcnNoaXAgb2YgaGFuZGxlcyBmcm9tIHBhcmVudCB0byBjaGlsZAor
ICAgIC8vIFRoZSBjaG9pY2Ugb2YgMyAmIDQgaXMgYXJiaXRyYXJ5IGFuZCBzaG91bGQgbWF0Y2gg
dGhlIHVzZSBvbiB0aGUgcmVjZWl2aW5nIHNpZGUgKENvbm5lY3Rpb24uY3BwKQorICAgIHdvcmtl
clByb2Nlc3MtPlNldFBhcmFtZXRlcigzLCByZW1vdGVQaXBlc1swXSk7IC8vIHJlYWRlcgorICAg
IHdvcmtlclByb2Nlc3MtPlNldFBhcmFtZXRlcig0LCByZW1vdGVQaXBlc1sxXSk7IC8vIHdyaXRl
cgorICAgICAgICAgICAgICAgIAorICAgIC8vIEJsb2NrIHVudGlsIHRoZSByZW1vdGUgcHJvY2Vz
cyBpcyB1cAorICAgIHdvcmtlclByb2Nlc3MtPlJlc3VtZSgpOworICAgIFRSZXF1ZXN0U3RhdHVz
IGxhdW5jaFN0YXR1czsgCisgICAgd29ya2VyUHJvY2Vzcy0+UmVuZGV6dm91cyhsYXVuY2hTdGF0
dXMpOyAKKyAgICBVc2VyOjpXYWl0Rm9yUmVxdWVzdChsYXVuY2hTdGF0dXMpOworICAgIAorICAg
IGlmIChsYXVuY2hTdGF0dXMuSW50KCkgIT0gS0Vyck5vbmUpIAorICAgICAgICBxQ3JpdGljYWwo
KSA8PCAiIFdvcmtlciBwcm9jZXNzIGZhaWxlZCB0byBsYXVuY2ggIiA8PCBsYXVuY2hTdGF0dXMu
SW50KCk7CisgICAgCisgICAgLy8gQ2xvc2UgdGhlIHBpcGUgZW5kcyB3ZSBqdXN0IHBhc3NlZCB0
byB0aGUgcmVtb3RlCisgICAgcmVtb3RlUGlwZXNbMF0uQ2xvc2UoKTsgCisgICAgcmVtb3RlUGlw
ZXNbMV0uQ2xvc2UoKTsKKyAgICBkZWxldGVbXSByZW1vdGVQaXBlczsKKyAgICAKKyAgICBDb3Jl
SVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBsb2NhbFBpcGVzOyAgCisg
ICAgCisgICAgLy8gRGVjbGFyZSBsYXVuY2ggcHJvY2VzcyBhcyBkb25lLiBOb3RlIHRoYXQgdGhp
cyBjbGFzcyBvd25zICd3b3JrZXJQcm9jZXNzJywgYnV0IENvbm5lY3Rpb24gb3ducyAnaWRlbnRp
ZmllcicgCisgICAgUnVuTG9vcDo6bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0
ZSh0aGlzLCAmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nl
c3MsIHdvcmtlclByb2Nlc3MsIGlkZW50aWZpZXIpKTsKK30KKwordm9pZCBQcm9jZXNzTGF1bmNo
ZXI6OnRlcm1pbmF0ZVByb2Nlc3MoKQoreworICAgIGlmICghbV9wcm9jZXNzSWRlbnRpZmllcikK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSW1wb3J0YW50OiBLaWxsaW5nIGFub3RoZXIgcHJv
Y2VzcyAoZXZlbiBpZiB3ZSBzcGF3bmVkIGl0KSByZXF1aXJlcyBQb3dlck1hbmFnZW1lbnQgY2Fw
YWJpbGl0eSwKKyAgICAvLyB3aGljaCBpcyBhIGhpZ2ggYmFyIHRvIGp1bXAgb3ZlciBmb3IgYW55
IHVzZXIgYXBwbGljYXRpb24uIEl0J3MgYWxzbyBhIHNlY3VyaXR5IHJpc2suCisgICAgLy8gVE9E
TzogQ2hlY2sgaWYgd2Ugc2hvdWxkIHNpZ25hbCB0aGUgd2ViIHByb2Nlc3MgdGhyb3VnaCB0aGUg
cGlwZSB0byB0ZXJtaW5hdGUgaXRzZWxmPworICAgIC8vIC4uYWx0aG91Z2ggdGhhdCB3b24ndCB3
b3JrIGlmIHRoZSBwcm9jZXNzIGlzIHVucmVzcG9uc2l2ZSEKKyAgICBSUHJvY2VzcyBtZTsKKyAg
ICBpZiAobWUuSGFzQ2FwYWJpbGl0eShFQ2FwYWJpbGl0eVBvd2VyTWdtdCkpCisgICAgICAgIG1f
cHJvY2Vzc0lkZW50aWZpZXItPlRlcm1pbmF0ZShLRXJyTm9uZSk7Cit9CisKK3ZvaWQgUHJvY2Vz
c0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIGlmICghbV9wcm9jZXNzSWRl
bnRpZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9jZXNzSWRlbnRpZmllci0+Q2xv
c2UoKTsKKyAgICBkZWxldGUgbV9wcm9jZXNzSWRlbnRpZmllcjsKKyAgICBtX3Byb2Nlc3NJZGVu
dGlmaWVyID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKworI2VuZGlmCkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Ro
cmVhZExhdW5jaGVyUXQuY3BwCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDcsMzEgKzQ3LDQxIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2Ug
V2ViS2l0IHsKIAorc3RhdGljIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaW52YWxp
ZENvbm5lY3Rpb25JZGVudGlmaWVyKCkKK3sgCisgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBpZGVudGlmaWVyOyAKKyNpZiBPUyhTWU1CSUFOKQorICAgIGlkZW50aWZpZXIgPSAw
OyAvLyBpbnZhbGlkIFJQcm9jZXNzKgorI2Vsc2UKKyAgICBpZGVudGlmaWVyID0gLTE7IC8vIGlu
dmFsaWQgc29ja2V0IGRlc2NyaXB0b3IKKyNlbmRpZgorICAgIHJldHVybiBpZGVudGlmaWVyOwor
fQorCiBzdGF0aWMgdm9pZCogd2ViVGhyZWFkQm9keSh2b2lkKiAvKiBjb250ZXh0ICovKQogewog
ICAgIC8vIEluaXRpYWxpemF0aW9uCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAg
ICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogCi0gICAgLy8gRklYTUU6IFdlIGRvIG5v
dCBzdXBwb3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KKyAgICAvLyBGSVhNRTogVGhlIFF0IHBv
cnQgZG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cuCiAKLSAgICBXZWJQcm9j
ZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKC0xLCBSdW5Mb29wOjpjdXJyZW50KCkpOworICAgIFdl
YlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVy
KCksIFJ1bkxvb3A6OmN1cnJlbnQoKSk7CiAgICAgUnVuTG9vcDo6cnVuKCk7CiAKICAgICByZXR1
cm4gMDsKIH0KIAogQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBUaHJlYWRMYXVuY2hl
cjo6Y3JlYXRlV2ViVGhyZWFkKCkKLXsKLSAgICBzcmFuZG9tKHRpbWUoMCkpOwotICAgIGludCBj
b25uZWN0aW9uSWRlbnRpZmllciA9IHJhbmRvbSgpOwotCi0gICAgaWYgKCFjcmVhdGVUaHJlYWQo
d2ViVGhyZWFkQm9keSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29ubmVjdGlvbklkZW50aWZp
ZXIpLCAiV2ViS2l0MjogV2ViVGhyZWFkIikpIHsKK3sgIAorICAgIC8vIEZJWE1FOiBUaGUgUXQg
cG9ydCBkb2VzIG5vdCBzdXBwb3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KKyAgICAKKyAgICBp
ZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCAwLCAiV2ViS2l0MjogV2ViVGhyZWFkIikp
IHsKICAgICAgICAgcVdhcm5pbmcoKSA8PCAiZmFpbGVkIHN0YXJ0aW5nIHRocmVhZCI7Ci0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVy
KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbm5lY3Rpb25JZGVudGlmaWVyOworICAgIHJldHVy
biBpbnZhbGlkQ29ubmVjdGlvbklkZW50aWZpZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vz
c01haW5RdC5jcHAJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiwx
MSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplUHJveHkoKQogCiBRX0RFQ0xfRVhQT1JUIGludCBX
ZWJQcm9jZXNzTWFpblF0KGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKKyNpZiBkZWZpbmVkKFFf
T1NfU1lNQklBTikKKyAgICBSUHJvY2VzcyBwcm9jZXNzOyAKKyAgICBwcm9jZXNzLlNldFByaW9y
aXR5KEVQcmlvcml0eUJhY2tncm91bmQpOworI2VuZGlmCisgICAgCiAgICAgUUFwcGxpY2F0aW9u
OjpzZXRHcmFwaGljc1N5c3RlbShRTGF0aW4xU3RyaW5nKCJyYXN0ZXIiKSk7CiAgICAgUUFwcGxp
Y2F0aW9uKiBhcHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFyZ2MsIGFyZ3YpOwogI2lmbmRlZiBOREVC
VUcKQEAgLTE1Myw2ICsxNTgsMTEgQEAgUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5R
dChpbnQgYQogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjpp
bml0aWFsaXplTWFpblJ1bkxvb3AoKTsKIAorICAgIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50
aWZpZXIgaWRlbnRpZmllcjsgCisjaWYgT1MoU1lNQklBTikKKyAgICAvLyBOVUxMLCBhcyB3ZSBv
YnRhaW4gdGhlIGhhbmRsZXMgZGlyZWN0bHkgZnJvbSB0aGUgImVudmlyb25tZW50IGRhdGEgc2xv
dHMiIG9uIHRoZSBSUHJvY2VzcworICAgIGlkZW50aWZpZXIgPSAwOyAKKyNlbHNlCiAgICAgLy8g
Q3JlYXRlIHRoZSBjb25uZWN0aW9uLgogICAgIGlmIChhcHAtPmFyZ3VtZW50cygpLnNpemUoKSA8
PSAxKSB7CiAgICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvcjogd3JvbmcgbnVtYmVyIG9mIGFyZ3Vt
ZW50cy4iOwpAQCAtMTYwLDEyICsxNzAsMTMgQEAgUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vz
c01haW5RdChpbnQgYQogICAgIH0KIAogICAgIGJvb2wgd2FzTnVtYmVyID0gZmFsc2U7Ci0gICAg
aW50IGlkZW50aWZpZXIgPSBhcHAtPmFyZ3VtZW50cygpLmF0KDEpLnRvSW50KCZ3YXNOdW1iZXIs
IDEwKTsKKyAgICBpZGVudGlmaWVyID0gYXBwLT5hcmd1bWVudHMoKS5hdCgxKS50b0ludCgmd2Fz
TnVtYmVyLCAxMCk7CiAgICAgaWYgKCF3YXNOdW1iZXIpIHsKICAgICAgICAgcURlYnVnKCkgPDwg
IkVycm9yOiBjb25uZWN0aW9uIGlkZW50aWZpZXIgd3JvbmcuIjsKICAgICAgICAgcmV0dXJuIDE7
CiAgICAgfQotCisjZW5kaWYKKyAgICAKICAgICBXZWJLaXQ6OldlYlByb2Nlc3M6OnNoYXJlZCgp
LmluaXRpYWxpemUoaWRlbnRpZmllciwgUnVuTG9vcDo6bWFpbigpKTsKIAogICAgIFJ1bkxvb3A6
OnJ1bigpOwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gODQ1NTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNCBAQAorMjAxMS0wNC0yMSAgU2lkZGhhcnRoIE1hdGh1ciAgPHNpZGRoYXJ0
aC5tYXRodXJAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFtRdF1bV0syXVtTeW1iaWFuXSBDb3JyZWN0aW9ucyB0byBkZWZhdWx0IHdp
bmRvdyBtb2RlIG9uIFN5bWJpYW4gZGV2aWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4NzcKKworICAgICAgICAqIE1pbmlCcm93c2VyL3F0L0Jy
b3dzZXJXaW5kb3cuY3BwOgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyk6
CisgICAgICAgICogTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvOgorCiAyMDExLTA0LTIx
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcAko
cmV2aXNpb24gODQzOTgpCisrKyBUb29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIzLDExICsxMjMsMTkgQEAgQnJvd3NlcldpbmRvdzo6QnJv
d3NlcldpbmRvdyhRV0tDb250ZXh0KgogICAgIGNvbm5lY3QobV9hZGRyZXNzQmFyLCBTSUdOQUwo
cmV0dXJuUHJlc3NlZCgpKSwgU0xPVChjaGFuZ2VMb2NhdGlvbigpKSk7CiAKICAgICBRVG9vbEJh
ciogYmFyID0gYWRkVG9vbEJhcigiTmF2aWdhdGlvbiIpOworI2lmIGRlZmluZWQoUV9PU19TWU1C
SUFOKQorICAgIGJhci0+c2V0SWNvblNpemUoUVNpemUoMTYsIDE2KSk7CisjZW5kaWYKICAgICBi
YXItPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpCYWNrKSk7CiAgICAgYmFyLT5h
ZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdLUGFnZTo6Rm9yd2FyZCkpOwogICAgIGJhci0+YWRk
QWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXS1BhZ2U6OlJlbG9hZCkpOwogICAgIGJhci0+YWRkQWN0
aW9uKHBhZ2UoKS0+YWN0aW9uKFFXS1BhZ2U6OlN0b3ApKTsKKyNpZiBkZWZpbmVkKFFfT1NfU1lN
QklBTikKKyAgICBhZGRUb29sQmFyQnJlYWsoKTsKKyAgICBhZGRUb29sQmFyKCJMb2NhdGlvbiIp
LT5hZGRXaWRnZXQobV9hZGRyZXNzQmFyKTsKKyNlbHNlCiAgICAgYmFyLT5hZGRXaWRnZXQobV9h
ZGRyZXNzQmFyKTsKKyNlbmRpZgogCiAgICAgUVNob3J0Y3V0KiBzZWxlY3RBZGRyZXNzQmFyID0g
bmV3IFFTaG9ydGN1dChRdDo6Q1RSTCB8IFF0OjpLZXlfTCwgdGhpcyk7CiAgICAgY29ubmVjdChz
ZWxlY3RBZGRyZXNzQmFyLCBTSUdOQUwoYWN0aXZhdGVkKCkpLCB0aGlzLCBTTE9UKG9wZW5Mb2Nh
dGlvbigpKSk7CkluZGV4OiBUb29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvCShyZXZpc2lv
biA4NDM5OCkKKysrIFRvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtNDgsNyArNDgsMjEgQEAgbGludXgtKiB7CiAKIHN5bWJpYW4gewogICAgIFRB
UkdFVC5VSUQzID0gMHhBMDAwRTU0NQotICAgIFRBUkdFVC5DQVBBQklMSVRZID0gUmVhZFVzZXJE
YXRhIFdyaXRlVXNlckRhdGEgTmV0d29ya1NlcnZpY2VzCisgICAgTU1QX1JVTEVTICs9IHBhZ2Vk
ZGF0YQorICAgIAorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9IFJlYWRVc2VyRGF0YSAKKyAgICBU
QVJHRVQuQ0FQQUJJTElUWSAqPSBXcml0ZVVzZXJEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkg
Kj0gTmV0d29ya1NlcnZpY2VzICAjIFF0TmV0d29yayBhbmQgQmVhcmVyCisgICAgVEFSR0VULkNB
UEFCSUxJVFkgKj0gUG93ZXJNZ210ICAgICAgICAjIGtpbGxpbmcgd2ViIHByb2Nlc3MgZnJvbSBV
SSBwcm9jZXNzCisgICAgCisgICAgIyBTZWUgUXRNb2JpbGl0eSBkb2NzIG9uIFN5bWJpYW4gY2Fw
YWJpbGl0aWVzOiAKKyAgICAjIGh0dHA6Ly9kb2MucXQubm9raWEuY29tL3F0bW9iaWxpdHkvcXVp
Y2tzdGFydC5odG1sCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTG9jYXRpb24gICAgICAgICAj
IGdlb2xvY2F0aW9uCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gUmVhZERldmljZURhdGEgICAj
IGdlb2xvY2F0aW9uLCBzZW5zb3JzCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gV3JpdGVEZXZp
Y2VEYXRhICAjIGdlb2xvY2F0aW9uCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTG9jYWxTZXJ2
aWNlcyAgICAjIGdlb2xvY2F0aW9uLCBzeXNpbmZvCisgICAgCisgICAgIyBXZSBtYXkgbGF0ZXIg
bmVlZCBVc2VyRW52aXJvbm1lbnQgZm9yIG1pYy9jYW1lcmEgaW5wdXQKIH0KIAogY29udGFpbnMo
UVRfQ09ORklHLCBvcGVuZ2wpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90627</attachid>
            <date>2011-04-21 16:20:00 -0700</date>
            <delta_ts>2011-04-21 19:16:47 -0700</delta_ts>
            <desc>Style fixes</desc>
            <filename>55875_v6.patch</filename>
            <type>text/plain</type>
            <size>51967</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODQ1NTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTEtMDQtMjEgIFNpZGRoYXJ0aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
W1dLMl1bU3ltYmlhbl0gQ29yZUlQQyBpbXBsZW1lbnRhdGlvbiBmb3IgU3ltYmlhbiBPUyAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODc3CisKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDogZXhjbHVkZSBTeW1iaWFuIGZyb20gVU5JWF9ET01BSU5f
U09DS0VUIHVzZXJzCisKIDIwMTEtMDQtMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4NDU0OC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDg0Mzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAyLDcgKzEyMDIsNyBAQAogICAgYnJlYWthZ2VzIG9uZSBwb3J0IGF0IGEgdGltZS4gKi8K
ICNkZWZpbmUgV1RGX1VTRV9FWFBPUlRfTUFDUk9TIDAKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShHVEspCisjaWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoU1lNQklBTikpIHx8IFBMQVRG
T1JNKEdUSykKICNkZWZpbmUgV1RGX1VTRV9VTklYX0RPTUFJTl9TT0NLRVRTIDEKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDU1MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxMS0wNC0yMSAgU2lkZGhh
cnRoIE1hdGh1ciAgPHNpZGRoYXJ0aC5tYXRodXJAbm9raWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF1bV0syXVtTeW1iaWFuXSBDb3Jl
IElQQywgcHJvY2VzcyBsYXVuY2hpbmcgYW5kIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODc3CisK
KyAgICAgICAgVGhpcyBpbml0aWFsIHBvcnQgdG8gU3ltYmlhbiBhbGxvd3MgdGhlIFF0IE1pbmlC
cm93c2VyIHRvIGxvYWQgZ29vZ2xlLmNvbSBvbiBhIE5va2lhIE44LgorICAgICAgICBUaGUgY2hh
bmdlIG1heGltaXplcyB1c2Ugb2YgdGhlIGV4aXN0aW5nIFF0IHBvcnQgb2YgV2ViS2l0Miwgd2hp
bGUgaW1wbGVtZW50aW5nIG9ubHkgdGhlIHZlcnkgcGxhdGZvcm0KKyAgICAgICAgc3BlY2lmaWMg
cG9ydGlvbnMgdXNpbmcgcHVyZSBTeW1iaWFuIE9TIEFQSXMKKworICAgICAgICBGb3IgSVBDLCB3
ZSB1c2UgaGFsZi1kdXBsZXggcGlwZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBk
aWZmZXJlbnQgZnJvbSBDb25uZWN0aW9uV2luLmNwcC4KKyAgICAgICAgRm9yIHByb2Nlc3MgbGF1
bmNoaW5nLCB3ZSB1c2UgdGhlIFJQcm9jZXNzIGNsYXNzIHdoaWNoIGFsbG93cyB0cmFuc2ZlciBv
ZiBkZXNjcmlwdG9ycyB0byBhIGNoaWxkLgorICAgICAgICBGb3Igc2hhcmVkIG1lbW9yeSwgd2Ug
dXNlIGdsb2JhbCBSQ2h1bmtzLgorCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dERlY29kZXIuY3BwOiBndWFyZCBhdHRhY2htZW50IHVzZXJzIHdpdGggVVNFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpCisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudERlY29kZXI6On5Bcmd1bWVudERl
Y29kZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcDog
Z3VhcmQgYXR0YWNobWVudCB1c2VycyB3aXRoIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAg
ICAgICAoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjp+QXJndW1lbnRFbmNvZGVyKToKKworICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOiBBc3NvcnRlZCB0eXBlZGVmcyBh
bmQgbWVtYmVyIHZhcmlhYmxlcyBmb3IgSVBDIGNoYW5uZWwKKyAgICAgICAgKiBQbGF0Zm9ybS9D
b3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcDogQWRkZWQuIE1haW4gY29ubmVjdGlvbiBz
ZXR1cCBhbmQgSVBDIGNsYXNzLgorICAgICAgICBGb3IgdGhlIHdvcmtlciBwcm9jZXNzLCB0aGlz
IGNsYXNzIG9wZW5zIHRoZSBwaXBlcyBwYXNzZWQgYnkgdGhlIFVJIHByb2Nlc3MncyBQcm9jZXNz
TGF1bmNoZXJTeW1iaWFuLmNwcC4KKyAgICAgICAgVGhlc2UgcGlwZXMgYXJlIGFscmVhZHkgaW4g
Y29ubmVjdGVkIHN0YXRlIHdoZW4gdGhlIHdvcmtlciBwcm9jZXNzIHJlY2VpdmVzIHRoZW0uCisg
ICAgICAgIFNpbmNlIHBpcGVzIGFyZSBhIHN0cmVhbSBvcmllbnRlZCBjaGFubmVsLCB3ZSBkbyBw
YXJzaW5nIG9mIHRoZSByZWFkIGJ1ZmZlciB0byBleHRyYWN0CisgICAgICAgIGluZGl2aWR1YWwg
bWVzc2FnZXMgKGRlbGltaXRlZCBieSBhIHRyYWlsZXIpLiBNZXNzYWdlcyBhcmUgdGhlbiBkaXNw
YXRjaGVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBs
YXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChDb3JlSVBDOjppc01lc3NhZ2VUcmFpbGVyKToK
KyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpOgorICAgICAg
ICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6b3Blbik6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0
aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKToKKyAgICAgICAgKENvcmVJUEM6
OkNvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UpOgorICAgICAgICAoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24pOgor
CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHA6
IEFkZGVkLiBRdCBzdHlsZSBRT2JqZWN0IHdoaWNoIHdyYXBzCisgICAgICAgIGEgU3ltYmlhbiBB
Y3RpdmUgT2JqZWN0IChBTykuIE1vbml0b3IgZGF0YSBhdmFpbGFibGUgdG8gcmVhZCBldmVudHMg
b24gYSBwaXBlLgorICAgICAgICBIZWxwcyB1cyB0YWxrIGluIFF0LXNwZWFrIHdpdGggcmVzdCBv
ZiBXZWJLaXQyLVF0IHBvcnQuCisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6UVN5bWJp
YW5QaXBlTm90aWZpZXIpOgorICAgICAgICAoUVN5bWJpYW5QaXBlTm90aWZpZXI6On5RU3ltYmlh
blBpcGVOb3RpZmllcik6CisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6c2V0RW5hYmxl
ZCk6CisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6ZXZlbnQpOgorICAgICAgICAqIFBs
YXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaDogQWRkZWQuCisgICAgICAg
ICogUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHA6IEFkZGVk
LiBUaGUgU3ltYmlhbiBBTyB3aGljaAorICAgICAgICByZWdpc3RlcnMgbm90aWZpY2F0aW9uIHJl
cXVlc3RzIHdpdGggdGhlIGtlcm5lbAorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6
OlN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KToKKyAgICAgICAgKFN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0Ojp+U3ltYmlhblBpcGVBY3RpdmVPYmplY3QpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3Rp
dmVPYmplY3Q6OnNldEVuYWJsZWQpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6
OlJ1bkwpOiBDYWxsZWQgYnkgdGhlIE9TIHdoZW4gbm90aWZpY2F0aW9uIG9jY3VycworICAgICAg
ICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRvQ2FuY2VsKToKKyAgICAgICAgKiBQbGF0Zm9y
bS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0Lmg6IEFkZGVkLgorCisgICAgICAg
ICogUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcDogZ3VhcmQgd2l0aCBV
U0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgv
Q29ubmVjdGlvblVuaXguY3BwOiBkaXR0bworCisgICAgICAgICogUGxhdGZvcm0vUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oOiBSUHJvY2VzcyBpcyB0aGUgZGVzaWduYXRlZCBpZGVudGlmaWVy
CisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6IE9TIHNwZWNpZmljIGhhbmRsZSBh
bmQgbmFtZSB0eXBlZGVmcworICAgICAgICAqIFBsYXRmb3JtL1dvcmtRdWV1ZS5oOiBuZXcgcmVn
aXN0ZXJFdmVudEhhbmRsZXIgc2lnbmF0dXJlIGZvciBRdCBvbiBTeW1iaWFuCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcDogQWRkZWQuIFVzZSBuYW1lZCBn
bG9iYWwgUkNodW5rcy4KKyAgICAgICAgS25vd24gaXNzdWUgaXMgdGhlIGFic2VuY2Ugb2YgQ2xv
c2UoKWluZyB0aGUgY2h1bmsgaGFuZGxlIGluIFNoYXJlZE1lbW9yeSBkJ3RvcgorICAgICAgICBU
aHVzIHdlIGxlYWsgbWVtb3J5IGF0IHRoZSBtb21lbnQuIE5lZWRzIHNlcGFyYXRlIHdvcmsgYW5k
IHBhdGNoIHRvIGZpZ3VyZSBvdXQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFu
ZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhh
bmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjppc051bGwpOgor
ICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKToKKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojp+
U2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5k
bGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKToKKwor
ICAgICAgICAqIFBsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAgICAgICAgKFdvcmtRdWV1
ZTo6cmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKTogVGFpbG9yZWQgdG8gY2xvc2VseSBtYXRjaCBR
dC1Vbml4J3MgaW1wbGVtZW50YXRpb24KKyAgICAgICAgKFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3Jr
T25UZXJtaW5hdGlvbik6CisgICAgICAgICogUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4
LmNwcDogZ3VhcmQgd2l0aCBIQVZFKE1NQVApIGZsYWcKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1
bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwOiBndWFyZCB3aXRoICFPUyhTWU1CSUFOKSBm
bGFnCisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3lt
Ymlhbi5jcHA6IEFkZGVkLiBDb3JyZWN0IHdheSB0byBvcGVuIGEgY2hhbm5lbCBhbmQgcGFzcwor
ICAgICAgICBvd25lcnNoaXAgdG8gYW5vdGhlciBwcm9jZXNzLiBXZSB1c2UgYSBwYWlyIG9mIGhh
bGYtZHVwbGV4IHBpcGVzLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5j
aFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVBy
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxp
ZGF0ZSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJR
dC5jcHA6IENsZWFudXAgdG8gc3VwcG9ydCBVTklYIGFuZCBTeW1iaWFuIE9TZXMKKyAgICAgICAg
VGhlIFF0IHBvcnQgY3VycmVudGx5IGRvZXNuJ3QgaW1wbGVtZW50IHRocmVhZGVkIG1vZGUgV0sy
CisgICAgICAgIChXZWJLaXQ6OmludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcik6CisgICAgICAg
IChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hl
cjo6Y3JlYXRlV2ViVGhyZWFkKToKKworICAgICAgICAqIFdlYktpdDIucHJpOiBBZGQgbmV3IHJw
aXBlIGxpYnJhcnkgbGlua2FnZQorICAgICAgICAqIFdlYktpdDIucHJvOiBBZGQgbmV3IGZpbGVz
CisgICAgICAgICogV2ViUHJvY2Vzcy5wcm86IENhcGFiaWxpdHkgYW5kIGRhdGEgcGFnaW5nIGNo
YW5nZXMKKworICAgICAgICAqIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHA6IFNl
dCBwcm9jZXNzIHByaW9yaXR5IG9mIHdvcmtlcgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
TWFpblF0KToKKwogMjAxMS0wNC0yMSAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViS2l0Mi5wcmkJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgc3ltYmlhbiB7CiAg
ICAgSU5DTFVERVBBVEggPSAkJFdFQktJVDJfSU5DTFVERVBBVEggJCRXRUJLSVQyX0dFTkVSQVRF
RF9TT1VSQ0VTX0RJUiAkJElOQ0xVREVQQVRICiB9CiAKK3N5bWJpYW46IExJQlMgKz0gLWxycGlw
ZQorCiBkZWZpbmVUZXN0KHByZXBlbmRXZWJLaXQyTGliKSB7CiAgICAgcGF0aFRvV2ViS2l0Mk91
dHB1dCA9ICQkQVJHUy8kJFdFQktJVDJfREVTVERJUgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwkocmV2
aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDYgKzEwMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMv
SGFuZGxlTWVzc2FnZS5oIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIFwKICAg
ICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCisgICAgUGxhdGZvcm0vQ29yZUlQ
Qy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oIFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmggXAog
ICAgIFBsYXRmb3JtL01vZHVsZS5oIFwKICAgICBQbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyLmggXApAQCAtMzA0LDYgKzMwNSw5IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9B
dHRhY2htZW50VW5peC5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9u
VW5peC5jcHAgXAorICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3Bw
IFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcCBcCisg
ICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHAgXAogICAg
IFBsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKICAgICBQ
bGF0Zm9ybS9SdW5Mb29wLmNwcCBcCkBAIC0zMTEsNiArMzE1LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQu
Y3BwIFwKICAgICBQbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAgXAorICAgIFBsYXRmb3JtL3F0
L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwIFwKICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9y
eVVuaXguY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAg
XAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAgXApAQCAtMzgzLDYgKzM4OCw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIu
Y3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBV
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKKyAgICBVSVByb2Nl
c3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAgXAogICAgIFVJUHJvY2Vz
cy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwkocmV2aXNpb24gODQzOTgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsMjEgQEAgbGludXgtKiB7CiAKIHN5bWJpYW4gewogICAgIFRBUkdFVC5VSUQzID0gMHhB
MDAwRTU0NAotICAgIFRBUkdFVC5DQVBBQklMSVRZID0gUmVhZFVzZXJEYXRhIFdyaXRlVXNlckRh
dGEgTmV0d29ya1NlcnZpY2VzCisgICAgTU1QX1JVTEVTICs9IHBhZ2VkZGF0YQorICAgIFJTU19S
VUxFUyArPSAiaGlkZGVuID0gS0FwcElzSGlkZGVuOyIgIyBObyBpY29uIGluIGFwcGxpY2F0aW9u
IGdyaWQKKyAgICAKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBSZWFkVXNlckRhdGEgCisgICAg
VEFSR0VULkNBUEFCSUxJVFkgKj0gV3JpdGVVc2VyRGF0YQorICAgIFRBUkdFVC5DQVBBQklMSVRZ
ICo9IE5ldHdvcmtTZXJ2aWNlcyAgIyBRdE5ldHdvcmsgYW5kIEJlYXJlcgorICAgIAorICAgICMg
U2VlIFF0TW9iaWxpdHkgZG9jcyBvbiBTeW1iaWFuIGNhcGFiaWxpdGllczogCisgICAgIyBodHRw
Oi8vZG9jLnF0Lm5va2lhLmNvbS9xdG1vYmlsaXR5L3F1aWNrc3RhcnQuaHRtbAorICAgIFRBUkdF
VC5DQVBBQklMSVRZICo9IFJlYWREZXZpY2VEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0g
V3JpdGVEZXZpY2VEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTG9jYWxTZXJ2aWNlcwor
ICAgIAorICAgICMgV2UgbWF5IGxhdGVyIG5lZWQgVXNlckVudmlyb25tZW50IGZvciBtaWMvY2Ft
ZXJhIGlucHV0CisgICAgCiB9CiAKIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsMTEgQEAg
dHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0o
V0lOKQogdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKICNlbGlmIFBM
QVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCit0eXBlZGVmIFJQcm9jZXNzKiBQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyOworI2Vsc2UKIHR5cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXI7CisjZW5kaWYKICNlbGlmIFBMQVRGT1JNKEdUSykKICNpZmRlZiBHX09TX1dJ
TjMyCiB0eXBlZGVmIHZvaWQqIEdQaWQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9T
aGFyZWRNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFy
ZWRNZW1vcnkuaAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9T
aGFyZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOwogI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NP
Q0tFVFMpCiAgICAgICAgIG11dGFibGUgaW50IG1fZmlsZURlc2NyaXB0b3I7CisjZWxpZiBPUyhT
WU1CSUFOKQorICAgICAgICBtdXRhYmxlIHVpbnQzMl90IG1fY2h1bmtOYW1lOwogI2VuZGlmCiAg
ICAgICAgIHNpemVfdCBtX3NpemU7CiAgICAgfTsKQEAgLTEwNSw2ICsxMDcsOCBAQCBwcml2YXRl
OgogICAgIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQog
ICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOworI2VsaWYgT1MoU1lNQklBTikKKyAgICBpbnQgbV9o
YW5kbGU7ICAgIAogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9X
b3JrUXVldWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuaAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIuaCIKIGNsYXNzIFFPYmplY3Q7CiBjbGFzcyBRVGhyZWFkOworI2lm
IE9TKFNZTUJJQU4pCisjaW5jbHVkZSAicXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaCIKKyNlbmRp
ZgogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaCIKIHR5cGVkZWYgc3RydWN0IF9HTWFpbkNvbnRleHQgR01haW5Db250ZXh0OwpAQCAtODQs
NyArODcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoSEFORExFLCBQYXNz
T3duUHRyPFdvcmtJdGVtPik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFO
RExFKTsKICNlbGlmIFBMQVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCisgICAgUVN5bWJpYW5Q
aXBlTm90aWZpZXIqIHJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxlcihSUGlwZSwgUVN5bWJpYW5QaXBl
Tm90aWZpZXI6OkV2ZW50VHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4pOworI2Vsc2UKICAgICBR
U29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5v
dGlmaWVyOjpUeXBlLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CisjZW5kaWYKICAgICB2b2lkIHNj
aGVkdWxlV29ya09uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCBy
ZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQsIGludCwgUGFzc093blB0cjxXb3JrSXRlbT4p
OwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1l
bnREZWNvZGVyLmNwcAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgQXJndW1lbnREZWNvZGVyOjp+QXJndW1lbnREZWNvZGVyKCkKIHsKICAgICBBU1NFUlQo
bV9idWZmZXIpOwogICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKLSNpZiAhUExBVEZPUk0oUVQpICYm
ICFQTEFURk9STShHVEspCisjaWYgIVVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIGRpc3Bvc2Ugb2YgdGhlIG1hY2ggcG9ydHMgaW4gY2FzZXMgb2YgZmFp
bHVyZS4KICNlbHNlCiAgICAgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yIGVuZCA9IG1fYXR0
YWNobWVudHMuZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50RW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCBBcmd1bWVudEVuY29kZXI6On5Bcmd1bWVudEVuY29kZXIoKQog
ewogICAgIGlmIChtX2J1ZmZlcikKICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOwotI2lmICFQ
TEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdUSykKKyNpZiAhVVNFKFVOSVhfRE9NQUlOX1NPQ0tF
VFMpCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgYXR0YWNobWVudHMg
aW4gY2FzZXMgb2YgZmFpbHVyZS4KICNlbHNlCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2F0
dGFjaG1lbnRzLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9Db25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Db25uZWN0aW9uLmgJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDEyIEBACiAjZWxpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8c3RyaW5nPgogI2VsaWYgUExB
VEZPUk0oUVQpCisjaWYgT1MoU1lNQklBTikKKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgor
I2Vsc2UKIGNsYXNzIFFTb2NrZXROb3RpZmllcjsKICNlbmRpZgorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIuaCIKQEAgLTEwNSw2ICsxMDksOCBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShXSU4p
CiAgICAgdHlwZWRlZiBIQU5ETEUgSWRlbnRpZmllcjsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVT
ZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVycyhJZGVudGlmaWVyJiBzZXJ2ZXJJZGVudGlmaWVyLCBJ
ZGVudGlmaWVyJiBjbGllbnRJZGVudGlmaWVyKTsKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBPUyhT
WU1CSUFOKQorICAgIHR5cGVkZWYgUlBpcGUqIElkZW50aWZpZXI7IAogI2VsaWYgVVNFKFVOSVhf
RE9NQUlOX1NPQ0tFVFMpCiAgICAgdHlwZWRlZiBpbnQgSWRlbnRpZmllcjsKICNlbmRpZgpAQCAt
MTM1LDcgKzE0MSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrQ3VycmVudGx5RGlzcGF0Y2hl
ZE1lc3NhZ2VBc0ludmFsaWQoKTsKIAogICAgIHZvaWQgc2V0RGVmYXVsdFN5bmNNZXNzYWdlVGlt
ZW91dChkb3VibGUpOwotCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisgICAgc3Rh
dGljIGNvbnN0IGludCBNYXhQaXBlQ2FwYWNpdHkgPSA0MDk2OyAKKyNlbmRpZgorICAgIAogICAg
IHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFRpbWVvdXQgPSAwOwogICAgIHN0YXRpYyBjb25zdCBp
bnQgTm9UaW1lb3V0ID0gLTE7CiAKQEAgLTMyOSw2ICszMzgsMTQgQEAgcHJpdmF0ZToKICNpZiBQ
TEFURk9STShRVCkKICAgICBRU29ja2V0Tm90aWZpZXIqIG1fc29ja2V0Tm90aWZpZXI7CiAjZW5k
aWYKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBPUyhTWU1CSUFOKSAKKyAgICAvLyBDYWxsZWQgb24g
dGhlIGNvbm5lY3Rpb24gcXVldWUuCisgICAgdm9pZCByZWFkeVJlYWRIYW5kbGVyKCk7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gbV9yZWFkQnVmZmVyOworICAgIFJQaXBlIG1fcmVhZFBpcGU7Cisg
ICAgUlBpcGUgbV93cml0ZVBpcGU7CisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXIqIG1fcGlwZVJl
YWROb3RpZmllcjsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1i
aWFuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikK
KyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIK
KyNpbmNsdWRlICJXb3JrSXRlbS5oIgorI2luY2x1ZGUgPFFWZWN0b3I+CisjaW5jbHVkZSA8cXQv
UVN5bWJpYW5QaXBlTm90aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorbmFt
ZXNwYWNlIENvcmVJUEMgeworCitzdGF0aWMgY29uc3QgdWludDMyX3QgdHJhaWxlciA9IDB4REVB
RENBRkU7CisKK3N0cnVjdCBQYXJzZWRNZXNzYWdlIHsKKyAgICAgICAgdWludDhfdCogc3RhcnQ7
IC8vIGJhc2UgYWRkcmVzcyBvZiBtZXNzYWdlCisgICAgICAgIHVpbnQzMl90IHNpemU7IC8vIHNp
emUgaW4gYnl0ZXMKKyAgICAgICAgdWludDMyX3QgbWVzc2FnZUlEOworfTsKKwordm9pZCBDb25u
ZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IGlmIChtX2lzU2VydmVyKSB7CisgICAgICAgIG1fcmVhZFBpcGUgPSBzdGF0aWNfY2FzdDxSUGlw
ZSo+KGlkZW50aWZpZXIpWzBdOworICAgICAgICBtX3dyaXRlUGlwZSA9IHN0YXRpY19jYXN0PFJQ
aXBlKj4oaWRlbnRpZmllcilbMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgVEludCBlcnJvcjsK
KyAgICAgICAgLy8gT3BlbiBwaXBlcyB2aWEgUlByb2Nlc3MnICJlbnZpcm9ubWVudCBkYXRhIHNs
b3RzIiBudW1iZXIgMyAmIDQuCisgICAgICAgIC8vIFRoZSBjaG9pY2Ugb2YgMyAmIDQgaXMgYXJi
aXRyYXJ5IGFuZCBtYXRjaGVzIHRoZSBjb2RlIGluIFByb2Nlc3NMYXVuY2hlclN5bWJpYW4uY3Bw
LgorICAgICAgICAvLyBUaGlzIGlzIHRoZSBTeW1iaWFuIE9TIHdheSBvZiBwYXNzaW5nIG93bmVy
c2hpcCBvZiByZXNvdXJjZXMgZnJvbSBwYXJlbnQgdG8gY2hpbGQKKyAgICAgICAgZXJyb3IgPSBt
X3JlYWRQaXBlLk9wZW4oMyk7IAorICAgICAgICBlcnJvcnw9IG1fd3JpdGVQaXBlLk9wZW4oNCk7
CisgICAgICAgIGlmIChlcnJvcikgeyAKKyAgICAgICAgICAgIG1faXNDb25uZWN0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcGlwZVJl
YWROb3RpZmllciA9IDA7CisgICAgbV9yZWFkQnVmZmVyLnJlc2l6ZShDb3JlSVBDOjpDb25uZWN0
aW9uOjpNYXhQaXBlQ2FwYWNpdHkpOworICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOyAgICAgICAg
Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX3Jl
YWRCdWZmZXIuc2hyaW5rKDApOworICAgIAorICAgIGRlbGV0ZSBtX3BpcGVSZWFkTm90aWZpZXI7
CisgICAgbV9waXBlUmVhZE5vdGlmaWVyID0gMDsKKworICAgIG1fcmVhZFBpcGUuQ2xvc2UoKTsK
KyAgICBtX3dyaXRlUGlwZS5DbG9zZSgpOworICAgIC8vIFRPRE86IGRlbGV0ZSB0aGUgbWVtb3J5
IGZvciB0aGUgUlBpcGVbMl0gYXJyYXkKKworICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKK30K
KworLy8gQ2hlY2sgaWYgdGhlIGRhdGEgbWF0Y2hlcyB0aGUgdHJhaWxlciBwYXR0ZXJuCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNNZXNzYWdlVHJhaWxlcih1aW50OF90ICpkYXRhKSAKK3sgIAorICAg
IHJldHVybiAoIHRyYWlsZXIgPT0gKihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGF0YSkp
ICk7ICAKK30KKwordm9pZCBDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKCkKK3sgICAKKyAg
ICBtX3BpcGVSZWFkTm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOworICAgIFRQdHI4IHJlYWRQ
dHIobV9yZWFkQnVmZmVyLmRhdGEoKSwgMCwgbV9yZWFkQnVmZmVyLnNpemUoKSk7CisgICAgCisg
ICAgLy8gTm90ZSB0aGF0IGEgcmVhZCBvcGVyYXRpb24gbWF5IHJldHVybiBtdWx0aXBsZSBtZXNz
YWdlcyBkdWUgdG8gaXRzIHN0cmVhbS1vcmllbnRlZCBuYXR1cmUuCisgICAgVEludCBieXRlc1Jl
YWQgPSBtX3JlYWRQaXBlLlJlYWQocmVhZFB0ciwgcmVhZFB0ci5NYXhTaXplKCkpOworICAgIAor
ICAgIGlmIChieXRlc1JlYWQgPiAwKSB7ICAgICAgICAgICAgCisgICAgICAgIF9fQVNTRVJUX0FM
V0FZUyhieXRlc1JlYWQgPT0gcmVhZFB0ci5TaXplKCksIFVzZXI6OkludmFyaWFudCgpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFN0YXJ0IHBhcnNpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZm
ZXIsIHdoZXJlIHdlIGV4cGVjdCB0byBzZWUgYSB0cmFpbGVyIGFuZCB0aGUgc2l6ZSBvZiB0aGlz
IG1lc3NhZ2UuCisgICAgICAgIHVpbnQ4X3QqIG1lc3NhZ2VTdGFydCA9IG1fcmVhZEJ1ZmZlci5k
YXRhKCkgKyBieXRlc1JlYWQ7CisgICAgICAgIAorICAgICAgICAvLyBUZW1wb3JhcnkgcGxhY2Ug
dG8ga2VlcCB0cmFjayBvZiBwYXJzZWQgbWVzc2FnZXMuCisgICAgICAgIFFWZWN0b3I8UGFyc2Vk
TWVzc2FnZT4gbWVzc3NhZ2VQb2ludGVyczsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gc2l6ZW9mKHVpbnQzMl90KTsgLy8gcHJl
cGFyZSB0byByZWFkIDQtYnl0ZSB0cmFpbGVyCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghaXNNZXNzYWdlVHJhaWxlcihtZXNzYWdlU3RhcnQpKQorICAgICAgICAgICAgICAgIGJyZWFr
OyAKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gc2l6ZW9m
KHVpbnQzMl90KTsKKyAgICAgICAgICAgIHVpbnQzMl90IG1lc3NhZ2VTaXplID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihtZXNzYWdlU3RhcnQpOyAKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICB1aW50
MzJfdCBtZXNzYWdlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KG1lc3NhZ2VTdGFy
dCk7IAorICAgICAgICAgICAgCisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gKG1lc3NhZ2VT
aXplIC0gc2l6ZW9mKHVpbnQzMl90KSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2F2ZSBtZXNzYWdlIGJvdW5kYXJ5CisgICAg
ICAgICAgICBjb25zdCBQYXJzZWRNZXNzYWdlIGFNZXNzYWdlID0ge21lc3NhZ2VTdGFydCwgbWVz
c2FnZVNpemUgLSBzaXplb2YodWludDMyX3QpLCBtZXNzYWdlSUR9OworICAgICAgICAgICAgbWVz
c3NhZ2VQb2ludGVycy5hcHBlbmQoYU1lc3NhZ2UpOyAKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgX19BU1NFUlRfQUxXQVlTKG1lc3NhZ2VTdGFydCA+PSAgbV9yZWFkQnVmZmVyLmRhdGEoKSwg
VXNlcjo6SW52YXJpYW50KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobWVzc2Fn
ZVN0YXJ0ID09IG1fcmVhZEJ1ZmZlci5kYXRhKCkpIAorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICB9IC8vIHdoaWxlIGxvb3AKKyAgICAgIAorICAgICAg
ICAvLyBOb3cgZGlzcGF0Y2ggcGFyc2VkIG1lc3NhZ2VzIGluIHRoZSBvcmRlciB0aGV5IHdlcmUg
d3JpdHRlbiBieSB0aGUgc2VuZGVyCisgICAgICAgIGZvciAoaW50IGkgPSBtZXNzc2FnZVBvaW50
ZXJzLnNpemUoKS0xOyBpID49IDAgOyBpLS0pIHsKKyAgICAgICAgICAgIGNvbnN0IFBhcnNlZE1l
c3NhZ2UgYU1lc3NhZ2UgPSBtZXNzc2FnZVBvaW50ZXJzLmF0KGkpOworICAgICAgICAgICAgcHJv
Y2Vzc0luY29taW5nTWVzc2FnZShNZXNzYWdlSUQ6OmZyb21JbnQoYU1lc3NhZ2UubWVzc2FnZUlE
KSwgYWRvcHRQdHIobmV3IEFyZ3VtZW50RGVjb2RlcihhTWVzc2FnZS5zdGFydCwgYU1lc3NhZ2Uu
c2l6ZSkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbWVzc3NhZ2VQb2ludGVycy5j
bGVhcigpOworICAgIH0KKyAgICAKKyAgICBtX3BpcGVSZWFkTm90aWZpZXItPnNldEVuYWJsZWQo
dHJ1ZSk7Cit9CisKKworYm9vbCBDb25uZWN0aW9uOjpvcGVuKCkKK3sKKyAgICBpZiAoIW1faXND
b25uZWN0ZWQpIAorICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgIAorICAgIC8vIFN0YXJ0IGxp
c3RlbmluZyBmb3IgcmVhZCAKKyAgICBtX3BpcGVSZWFkTm90aWZpZXIgPSBtX2Nvbm5lY3Rpb25R
dWV1ZS5yZWdpc3RlclBpcGVFdmVudEhhbmRsZXIobV9yZWFkUGlwZSwgUVN5bWJpYW5QaXBlTm90
aWZpZXI6OlBpcGVSZWFkRGF0YUF2YWlsYWJsZSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29u
bmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOworICAgICAgICAKKyAgICAvLyBTY2hlZHVsZSBh
IHJlYWQuCisgICAgbV9jb25uZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVh
dGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsKKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01l
c3NhZ2VzKCkgY29uc3QKK3sKKyAgICAvLyBBbHdheXMgdHJ1ZSwgc2luY2UgdGhlIHBpcGUgaXMg
bGFyZ2UgZW5vdWdoIHRvIGhvbGQgbXVsdGlwbGUgbWVzc2FnZXMuCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVz
c2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQoreyAgICAKKyAg
ICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMihtZXNzYWdlSUQudG9JbnQoKSk7CisgICAgCisgICAg
Ly8gU2l6ZSBvZiBtZXNzYWdlIGV4Y2x1ZGluZyB0aGlzIDQtYnl0ZSBmaWVsZCBhbmQgdGhlIDQt
Ynl0ZSB0cmFpbGVyIHdoaWNoIGZvbGxvd3MuCisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIo
YXJndW1lbnRzLT5idWZmZXJTaXplKCkpOworICAgIAorICAgIC8vIGEgdHJhaWxlciBtYXJrZXIg
KG1hZ2ljIG51bWJlcikgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNwb3QgbWVzc2FnZSBib3Vu
ZGFyeSBhdCB0aGUgcmVjZWl2ZXIKKyAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMih0cmFpbGVy
KTsKKyAgICAKKyAgICBUUHRyOCB3cml0ZUJ1ZmZlcihhcmd1bWVudHMtPmJ1ZmZlcigpLCBhcmd1
bWVudHMtPmJ1ZmZlclNpemUoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCkgKTsKKyAgICBUSW50
IGJ5dGVzV3JpdHRlbiA9IG1fd3JpdGVQaXBlLldyaXRlKHdyaXRlQnVmZmVyLCB3cml0ZUJ1ZmZl
ci5TaXplKCkgKTsgICAgIAorICAgIAorICAgIHJldHVybiAoYnl0ZXNXcml0dGVuID09IHdyaXRl
QnVmZmVyLlNpemUoKSk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25u
ZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyIHByb2Nlc3MpCit7CisgICAgbV9jb25uZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrT25UZXJt
aW5hdGlvbihwcm9jZXNzLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25u
ZWN0aW9uRGlkQ2xvc2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ29yZUlQQworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlm
aWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0
L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDk1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaWYgUExBVEZPUk0gKFFUKSAmJiBPUyhTWU1CSUFOKQorI2luY2x1ZGUgIlFTeW1iaWFu
UGlwZU5vdGlmaWVyLmgiCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiUUNv
cmVBcHBsaWNhdGlvbiIKKyNpbmNsdWRlICJRRXZlbnQiCisjaW5jbHVkZSAiUU9iamVjdCIKKyNp
bmNsdWRlICJTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5oIgorI2luY2x1ZGUgPHBsYXRmb3JtL3Jw
aXBlLmg+CisKKy8vIFdyYXBwZXIgUU9iamVjdCBhcm91bmQgYSBTeW1iaWFuIEFjdGl2ZSBPYmpl
Y3QgKEFPKS4gV2UgdXNlIHRoZSBBTyB0byB3YXRjaCBmb3Igbm90aWZpY2F0aW9ucworLy8gb2Yg
ZGF0YSBhdmFpbGFibGUvc3BhY2UgYXZhaWxhYmxlIG9uIHRoZSBSUGlwZS4KK1FTeW1iaWFuUGlw
ZU5vdGlmaWVyOjpRU3ltYmlhblBpcGVOb3RpZmllcihSUGlwZSYgcGlwZSwgRXZlbnRUeXBlIHR5
cGUsIGludCBieXRlcywgUU9iamVjdCAqcGFyZW50KSAKKyAgICA6IFFPYmplY3QocGFyZW50KQor
ICAgICwgbV9waXBlKHBpcGUpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fYnl0ZXMoYnl0
ZXMpCisgICAgLCBtX25vdGlmaWVyQU8obmV3IFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KHBpcGUs
IHR5cGUsIGJ5dGVzLCB0aGlzKSkKK3sKK30KKworUVN5bWJpYW5QaXBlTm90aWZpZXI6On5RU3lt
YmlhblBpcGVOb3RpZmllcigpIAoreworICAgIGRlbGV0ZSBtX25vdGlmaWVyQU87Cit9CisKKy8v
IFRoaXMgaW50ZXJmYWNlIGlzIG1vZGVsZWQgYWZ0ZXIgUVNvY2tldE5vdGlmaWVyJ3Mgc2V0RW5h
YmxlZCgpCit2b2lkIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxl
ZCkgCit7IAorICAgIGlmICghbV9ub3RpZmllckFPKSB7CisgICAgICAgIC8vIFdlIGRlbGV0ZWQg
dGhlIEFPIHByZXZpb3VzbHksIHNvIGZpcmUgYSBkZWZlcnJlZCBpbml0aWFsaXphdGlvbiByZXF1
ZXN0IHZpYSBwb3N0RXZlbnQoKS4KKyAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBzdXBw
b3J0IFFPYmplY3QtPm1vdmVUb1RocmVhZCgpCisgICAgICAgIC8vIE5PVEU6IFdlIGRpc2NhcmQg
dGhlIHNwZWNpZmllZCBib29sZWFuIGFyZ3VtZW50LCBhbmQgYmxhbmtldCBlbmFibGUgbGF0ZXIg
b24uCisgICAgICAgIFFFdmVudCogcG9zdFRocmVhZENoYW5nZUV2ZW50ID0gbmV3IFFFdmVudChQ
b3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlKTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6cG9z
dEV2ZW50KHRoaXMsIHBvc3RUaHJlYWRDaGFuZ2VFdmVudCk7CisgICAgICAgIHJldHVybjsgCisg
ICAgfQorCisgICAgbV9ub3RpZmllckFPLT5zZXRFbmFibGVkKGVuYWJsZWQpOworfQorCisvLyBU
aGlzIGV2ZW50IGhhbmRsZXIgZXhpc3RzIHB1cmVseSB0byBzdXBwb3J0IFFPYmplY3QtPm1vdmVU
b1RocmVhZC4KKy8vIFN5bWJpYW4gYWN0aXZlIG9iamVjdHMgKEFPcykgYXJlIGJvdW5kIHRvIGFu
IEFjdGl2ZSBTY2hlZHVsZXIgKEFTKSB3aGljaCBpcyB0aHJlYWQtbG9jYWwuCisvLyBUaGVyZWZv
cmUsIHRoZSBBTyBtdXN0IGJlIHJlLWNyZWF0ZWQgb24gdGhlIG5ldyB0aHJlYWQgb25jZSB0aGUg
cGFyZW50IFFPYmplY3QgaGFzIG1vdmVkCisvLyB0byB0aGUgbmV3IHRocmVhZAorYm9vbCBRU3lt
YmlhblBpcGVOb3RpZmllcjo6ZXZlbnQoUUV2ZW50KiBldikKK3sgICAgICAgIAorICAgIGlmIChl
di0+dHlwZSgpID09IFFFdmVudDo6VGhyZWFkQ2hhbmdlKSB7IC8vIHByZS1taWdyYXRpb24gZXZl
bnQKKyAgICAgICAgaWYgKG1fbm90aWZpZXJBTykgeworICAgICAgICAgICAgaWYgKG1fbm90aWZp
ZXJBTy0+SXNBZGRlZCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBvbGRTdGF0ZSA9IG1fbm90
aWZpZXJBTy0+SXNBY3RpdmUoKTsKKyAgICAgICAgICAgICAgICBtX25vdGlmaWVyQU8tPkRlcXVl
KCk7CisgICAgICAgICAgICB9ICAgICAKKyAgICAgICAgICAgIGRlbGV0ZSBtX25vdGlmaWVyQU87
CisgICAgICAgICAgICBtX25vdGlmaWVyQU8gPSAwOworICAgICAgICB9CisgICAgICAgIC8vIEZp
cmUgYSBkZWZlcnJlZCBpbml0aWFsaXphdGlvbiByZXF1ZXN0CisgICAgICAgIFFFdmVudCogcG9z
dFRocmVhZENoYW5nZUV2ZW50ID0gbmV3IFFFdmVudChQb3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBl
KTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KHRoaXMsIHBvc3RUaHJlYWRD
aGFuZ2VFdmVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisgICAgCisgICAgaWYg
KGV2LT50eXBlKCkgPT0gUG9zdFRocmVhZENoYW5nZUV2ZW50VHlwZSkgeyAvLyBjdXN0b20sIHBv
c3QtbWlncmF0aW9uIGV2ZW50CisgICAgICAgIGlmICghbV9ub3RpZmllckFPKSB7CisgICAgICAg
ICAgICBtX25vdGlmaWVyQU8gPSBuZXcgU3ltYmlhblBpcGVBY3RpdmVPYmplY3QobV9waXBlLCBt
X3R5cGUsIG1fYnl0ZXMsIHRoaXMpOworICAgICAgICAgICAgLy8gTk9URTogV2UgcHJlc3VtcHRp
dmVseSBlbmFibGUgd2F0Y2gsIGV2ZW4gdGhvdWdoIG9sZFN0YXRlIG1heSBiZSBmYWxzZSBhYm92
ZS4KKyAgICAgICAgICAgIG1fbm90aWZpZXJBTy0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsgCisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJp
YW5QaXBlTm90aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUVN5
bWJpYW5QaXBlTm90aWZpZXJfaAorI2RlZmluZSBRU3ltYmlhblBpcGVOb3RpZmllcl9oCisKKyNp
bmNsdWRlIDxRRXZlbnQ+CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9y
cGlwZS5oPgorCitjbGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDsKKworY2xhc3MgUVN5bWJp
YW5QaXBlTm90aWZpZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzog
CisgICAgZW51bSBFdmVudFR5cGUgeworICAgICAgICBQaXBlUmVhZERhdGFBdmFpbGFibGUsIC8v
IGRhdGEgY2FuIGJlIHJlYWQKKyAgICAgICAgUGlwZVdyaXRlU3BhY2VBdmFpbGFibGUgLy8gd3Jp
dGUgcGlwZSBjYW4gdGFrZSBtb3JlIGRhdGEKKyAgICB9OworICAgIFFTeW1iaWFuUGlwZU5vdGlm
aWVyKFJQaXBlJiwgRXZlbnRUeXBlLCBpbnQsIFFPYmplY3QqIHBhcmVudCA9IDApOworICAgIH5R
U3ltYmlhblBpcGVOb3RpZmllcigpOworICAgIGJvb2wgZXZlbnQoUUV2ZW50Kik7CisgICAgCitw
dWJsaWMgc2xvdHM6CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCitzaWduYWxzOgorICAg
IC8vIGVtaXR0ZWQgd2hlbiBQaXBlUmVhZERhdGFBdmFpbGFibGUgb2NjdXJzCisgICAgdm9pZCBy
ZWFkeVRvUmVhZChpbnQpOworICAgIC8vIGVtaXR0ZWQgd2hlbiBQaXBlV3JpdGVTcGFjZUF2YWls
YWJsZSBvY2N1cnMKKyAgICB2b2lkIHJlYWR5VG9Xcml0ZShpbnQpOworICAgIHZvaWQgZXJyb3JP
Y2N1cmVkKGludCk7CisgICAgCitwcml2YXRlOiAKKyAgICBSUGlwZSBtX3BpcGU7IAorICAgIEV2
ZW50VHlwZSBtX3R5cGU7CisgICAgaW50IG1fYnl0ZXM7ICAgCisgICAgU3ltYmlhblBpcGVBY3Rp
dmVPYmplY3QqIG1fbm90aWZpZXJBTzsKKworICAgIC8vIEN1c3RvbSBldmVudCB0byBoZWxwIHdp
dGggUU9iamVjdC0+bW92ZVRvVGhyZWFkKCkgCisgICAgc3RhdGljIGNvbnN0IFFFdmVudDo6VHlw
ZSBQb3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlID0gKFFFdmVudDo6VHlwZSkoUUV2ZW50OjpVc2Vy
ICsgMTAwKTsKKyAgICAgICAgCisgICAgZnJpZW5kIGNsYXNzIFN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0OworICAgIFFfRElTQUJMRV9DT1BZKFFTeW1iaWFuUGlwZU5vdGlmaWVyKQorfTsKKworI2Vu
ZGlmIC8vIFFTeW1iaWFuUGlwZU5vdGlmaWVyX2gKKwpJbmRleDogU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9i
amVjdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MTAgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9v
ciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFU
Rk9STShRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJTeW1iaWFuUGlwZUFjdGl2ZU9iamVj
dC5oIgorCisjaW5jbHVkZSAiUVN5bWJpYW5QaXBlTm90aWZpZXIuaCIKKyNpbmNsdWRlIDxwbGF0
Zm9ybS9ycGlwZS5oPgorCisKKy8vIFRoZSBTeW1iaWFuIEFjdGl2ZSBPYmplY3QgdGhhdCByZWdp
c3RlcnMgbm90aWZpY2F0aW9uIHJlcXVlc3RzIHdpdGggdGhlIGtlcm5lbCwgc2ltaWxhciB0byBQ
T1NJWCdzIHNlbGVjdCgpIHN5c3RlbSBjYWxsCisvLyBOb3RlIHRoYXQgdW5saWtlIGFueXRoaW5n
IG9uIFVuaXgsIFN5bWJpYW4gQWN0aXZlIE9iamVjdHMgYXJlIHNjaGVkdWxhYmxlIG9iamVjdHMg
dGhhdCBhcmUgYm91bmQgdG8gdGhlIGN1cnJlbnQgdGhyZWFkJ3MgQWN0aXZlIFNjaGVkdWxlci4g
CisvLyBUaGVyZWZvcmUgdGhleSBhcmUgYSBsaWdodHdlaWdodCB2ZXJzaW9uIG9mIHRocmVhZHMg
ZnJvbSBhIHJlc291cmNlIHV0aWxpemF0aW9uIFBPVi4gCitTeW1iaWFuUGlwZUFjdGl2ZU9iamVj
dDo6U3ltYmlhblBpcGVBY3RpdmVPYmplY3QoUlBpcGUgcGlwZSwgUVN5bWJpYW5QaXBlTm90aWZp
ZXI6OkV2ZW50VHlwZSB0eXBlLCBpbnQgc3BhY2VJbkJ5dGVzLCBRU3ltYmlhblBpcGVOb3RpZmll
ciogcXEpCisgICAgOiBDQWN0aXZlKENBY3RpdmU6OkVQcmlvcml0eVN0YW5kYXJkKQorICAgICwg
bV9waXBlKHBpcGUpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fYnl0ZXMoc3BhY2VJbkJ5
dGVzKQorICAgICwgbV9wYXJlbnQocXEpCit7IAorICAgIENBY3RpdmVTY2hlZHVsZXI6OkFkZCh0
aGlzKTsKK30KKyAgICAKK1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0Ojp+U3ltYmlhblBpcGVBY3Rp
dmVPYmplY3QoKSAKK3sgCisgICAgQ2FuY2VsKCk7Cit9CisKK3ZvaWQgU3ltYmlhblBpcGVBY3Rp
dmVPYmplY3Q6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSAKK3sKKyAgICAvLyBzdGFydCBsaXN0
ZW5pbmcKKyAgICBpZiAoZW5hYmxlZCAmJiAhSXNBY3RpdmUoKSkgeyAgCisgICAgICAgIGlmICht
X3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVSZWFkRGF0YUF2YWlsYWJsZSkgeyAK
KyAgICAgICAgICAgIG1fcGlwZS5Ob3RpZnlEYXRhQXZhaWxhYmxlKGlTdGF0dXMpOworICAgICAg
ICAgICAgU2V0QWN0aXZlKCk7IC8vIGJhc2UgY2xhc3MgbWV0aG9kIHRvIGRlY2xhcmUgdGhlIGFi
b3ZlIHJlcXVlc3QgYXMgInBlbmRpbmciIGNvbXBsZXRpb24KKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVdyaXRlU3Bh
Y2VBdmFpbGFibGUpIHsKKyAgICAgICAgICAgIGludCBmcmVlU3BhY2VOZWVkZWQgPSBtX2J5dGVz
IDwgMCA/IDEgOiBtX2J5dGVzOyAKKyAgICAgICAgICAgIG1fcGlwZS5Ob3RpZnlTcGFjZUF2YWls
YWJsZShmcmVlU3BhY2VOZWVkZWQsIGlTdGF0dXMpOworICAgICAgICAgICAgU2V0QWN0aXZlKCk7
IC8vIGJhc2UgY2xhc3MgbWV0aG9kIHRvIGRlY2xhcmUgdGhlIGFib3ZlIHJlcXVlc3QgYXMgInBl
bmRpbmciIGNvbXBsZXRpb24KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICAvLyBzdG9wIGxpc3RlbmluZworICAgIGlmICghZW5hYmxlZCkgewor
ICAgICAgICBDYW5jZWwoKTsgLy8gQXV0b21hdGljYWxseSBsZWFkcyB0byBhIERvQ2FuY2VsKCkg
CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGdldHMgcnVuIGJ5
IHRoZSBTeW1iaWFuIE9TIEFjdGl2ZSBTY2hlZHVsZXIgd2hlbiB0aGUKKy8vIHJlcXVlc3QgaW5p
dGlhdGVkIGJ5IE5vdGlmeURhdGFBdmFpbGFibGUgYWJvdmUgaXMgbWFya2VkIGFzIGNvbXBsZXRl
ZAorLy8gV2Ugc2VuZCBhIFF0IHNpZ25hbCB2aWEgb3VyIHBhcmVudCBRT2JqZWN0LCBhbmQgdGhl
biBpbXBsaWNpdGx5IGdvCisvLyBpbnRvIGEgZGlzYWJsZWQgc3RhdGUsIGkuZSBub3RpZmljYXRp
b25zIGFyZSBvZmYgIAordm9pZCBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6UnVuTCgpIAorewor
ICAgIGlmIChpU3RhdHVzICE9IEtFcnJOb25lKSB7CisgICAgICAgIGVtaXQgbV9wYXJlbnQtPmVy
cm9yT2NjdXJlZChpU3RhdHVzLkludCgpKTsKKyAgICAgICAgcmV0dXJuOyAKKyAgICB9CisgICAg
CisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVJlYWREYXRhQXZh
aWxhYmxlKSB7CisgICAgICAgIGNvbnN0IGludCBieXRlc0F2YWlsYWJsZSA9ICBtX3BpcGUuU2l6
ZSgpOyAvLyBwZWVrIGJ5dGVzIGF2YWlsYWJsZSB0byByZWFkCisgICAgICAgIGlmIChieXRlc0F2
YWlsYWJsZSA+IDApCisgICAgICAgICAgICBlbWl0IG1fcGFyZW50LT5yZWFkeVRvUmVhZChieXRl
c0F2YWlsYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKG1fdHlw
ZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVdyaXRlU3BhY2VBdmFpbGFibGUpIHsgCisg
ICAgICAgIGVtaXQgbV9wYXJlbnQtPnJlYWR5VG9Xcml0ZSgwKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworfQorICAKK3ZvaWQgU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRvQ2FuY2VsKCkg
Cit7IAorICAgIGlmIChtX3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVSZWFkRGF0
YUF2YWlsYWJsZSkgeyAKKyAgICAgICAgbV9waXBlLkNhbmNlbERhdGFBdmFpbGFibGUoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgICAgICAgIAorICAgIGlmIChtX3R5cGUgPT0g
UVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlKSB7IAorICAgICAg
ICBtX3BpcGUuQ2FuY2VsU3BhY2VBdmFpbGFibGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFj
dGl2ZU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaWZuZGVmIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKyNkZWZpbmUgU3ltYmlh
blBpcGVBY3RpdmVPYmplY3RfaAorCisjaW5jbHVkZSAiUVN5bWJpYW5QaXBlTm90aWZpZXIuaCIK
KyNpbmNsdWRlICJxZ2xvYmFsLmgiCisjaW5jbHVkZSA8ZTMyYmFzZS5oPgorI2luY2x1ZGUgPHBs
YXRmb3JtL3JwaXBlLmg+CisKK2NsYXNzIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0IDogcHVibGlj
IENBY3RpdmUgeworcHVibGljOgorICAgIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KFJQaXBlLCBR
U3ltYmlhblBpcGVOb3RpZmllcjo6RXZlbnRUeXBlLCBpbnQsIFFTeW1iaWFuUGlwZU5vdGlmaWVy
Kik7CisgICAgflN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KCk7CisgICAgCitwcml2YXRlOgorICAg
IHZvaWQgc2V0RW5hYmxlZChib29sKTsKKyAgICAKKyAgICB2b2lkIFJ1bkwoKTsKKyAgICB2b2lk
IERvQ2FuY2VsKCk7IAorCisgICAgUlBpcGUgbV9waXBlOworICAgIFFTeW1iaWFuUGlwZU5vdGlm
aWVyOjpFdmVudFR5cGUgbV90eXBlOworICAgIGludCBtX2J5dGVzOyAvLyBvbmx5IHVzZWQgZm9y
IHdyaXRlIHBpcGU7IC0xIG1lYW5zIHVudXNlZAorICAgIAorICAgIFFTeW1iaWFuUGlwZU5vdGlm
aWVyICogbV9wYXJlbnQ7CisgICAgZnJpZW5kIGNsYXNzIFFTeW1iaWFuUGlwZU5vdGlmaWVyOwor
fTsKKworI2VuZGlmIC8vIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKwpJbmRleDogU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVu
aXguY3BwCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tF
VFMpCiAjaW5jbHVkZSAiQXR0YWNobWVudC5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC00
OCwzICs0OSw2IEBAIHZvaWQgQXR0YWNobWVudDo6ZGlzcG9zZSgpCiB9CiAKIH0gLy8gbmFtZXNw
YWNlIENvcmVJUEMKKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAkocmV2aXNpb24gODQz
OTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVu
aXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw4IEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgSEFWRShVTklYX0RPTUFJTl9TT0NLRVRTKQogI2luY2x1ZGUgIkNv
bm5lY3Rpb24uaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgpAQCAtMzk5LDMgKzQw
MSw2IEBAIHZvaWQgQ29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW8KICNlbmRpZgog
CiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisKKyNlbmRpZiAvLyBVTklYX0RPTUFJTl9TT0NLRVRT
CisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9y
eVN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQv
U2hhcmVkTWVtb3J5U3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1IEBACisv
KgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1
YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQp
ICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiU2hhcmVkTWVtb3J5LmgiCisKKyNpbmNsdWRlICJB
cmd1bWVudERlY29kZXIuaCIKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRl
IDxlMzJtYXRoLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK1NoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUoKQorICAgIDogbV9jaHVua05hbWUo
MCkKKyAgICAsIG1fc2l6ZSgwKQoreworfQorCitTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRs
ZSgpCit7ICAgCit9CisKK2Jvb2wgU2hhcmVkTWVtb3J5OjpIYW5kbGU6OmlzTnVsbCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICFtX2NodW5rTmFtZTsKK30KKwordm9pZCBTaGFyZWRNZW1vcnk6Okhh
bmRsZTo6ZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sK
KyAgICBBU1NFUlQoIWlzTnVsbCgpKTsgICAgCisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKG1f
c2l6ZSk7CisgICAgLy8gbmFtZSBvZiB0aGUgZ2xvYmFsIGNodW5rIChtYXNxdWVyYWRpbmcgYXMg
dWludDMyX3QgZm9yIGVhc2Ugb2Ygc2VyaWFsaXphdGlvbikKKyAgICBlbmNvZGVyLT5lbmNvZGVV
SW50MzIobV9jaHVua05hbWUpOworfQorCitib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNv
ZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIGhhbmRsZSkKK3sK
KyAgICBzaXplX3Qgc2l6ZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQzMihzaXplKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAKKyAgICB1aW50MzJfdCBjaHVua05hbWU7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGVVSW50MzIoY2h1bmtOYW1lKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgIAorICAgIGhhbmRsZS5tX3NpemUgPSBzaXplOworICAgIGhhbmRsZS5t
X2NodW5rTmFtZSA9IGNodW5rTmFtZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0
cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQoreworICAg
IC8vIE9uIFN5bWJpYW4sIGdsb2JhbCBjaHVua3MgKHNoYXJlZCBtZW1vcnkgc2VnbWVudHMpIGhh
dmUgc3lzdGVtLXVuaXF1ZSBuYW1lcywgc28gd2UgcGljayBhIHJhbmRvbSAKKyAgICAvLyBudW1i
ZXIgZnJvbSB0aGUga2VybmVsJ3MgcmFuZG9tIHBvb2wgYW5kIHVzZSBpdCBhcyBhIHN0cmluZy4K
KyAgICAvLyBVc2luZyBhbiBpbnRlZ2VyIHNpbXBsaWZpZXMgc2VyaWFsaXphdGlvbiBvZiB0aGUg
bmFtZSBpbiBIYW5kbGU6OmVuY29kZSgpCisgICAgdWludDMyX3QgcmFuZG9tID0gTWF0aDo6UmFu
ZG9tKCk7CisKKyAgICBUQnVmPEtNYXhLZXJuZWxOYW1lPiBjaHVua05hbWU7CisgICAgY2h1bmtO
YW1lLkZvcm1hdChfTCgiJWQiKSwgcmFuZG9tKTsKKworICAgIFJDaHVuayBjaHVuazsKKyAgICBU
SW50IGVycm9yID0gY2h1bmsuQ3JlYXRlR2xvYmFsKGNodW5rTmFtZSwgc2l6ZSwgc2l6ZSk7Cisg
ICAgaWYgKGVycm9yKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1v
cnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hhcmVk
TWVtb3J5LT5tX2hhbmRsZSA9IGNodW5rLkhhbmRsZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9z
aXplID0gY2h1bmsuU2l6ZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gc3RhdGljX2Nh
c3Q8dm9pZCo+KGNodW5rLkJhc2UoKSk7CisgICAgICAgIAorICAgIHJldHVybiBzaGFyZWRNZW1v
cnkucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5
OjpjcmVhdGUoY29uc3QgSGFuZGxlJiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3sK
KyAgICBpZiAoaGFuZGxlLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgCisgICAg
Ly8gQ29udmVydCBudW1iZXIgdG8gc3RyaW5nLCBhbmQgb3BlbiB0aGUgZ2xvYmFsIGNodW5rCisg
ICAgVEJ1ZjxLTWF4S2VybmVsTmFtZT4gY2h1bmtOYW1lOworICAgIGNodW5rTmFtZS5Gb3JtYXQo
X0woIiVkIiksIGhhbmRsZS5tX2NodW5rTmFtZSk7CisKKyAgICBSQ2h1bmsgY2h1bms7CisgICAg
VEludCBlcnJvciA9IGNodW5rLk9wZW5HbG9iYWwoY2h1bmtOYW1lLCBmYWxzZSk7IC8vIE5PVEU6
IFN5bWJpYW4gT1MgZG9lc24ndCBzdXBwb3J0IHJlYWQtb25seSBnbG9iYWwgY2h1bmtzCisgICAg
aWYgKGVycm9yKSAKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIAorICAgIFJlZlB0cjxTaGFy
ZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAg
c2hhcmVkTWVtb3J5LT5tX2hhbmRsZSA9IGNodW5rLkhhbmRsZSgpOworICAgIHNoYXJlZE1lbW9y
eS0+bV9zaXplID0gY2h1bmsuU2l6ZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gc3Rh
dGljX2Nhc3Q8dm9pZCo+KGNodW5rLkJhc2UoKSk7CisgICAgICAKKyAgICByZXR1cm4gc2hhcmVk
TWVtb3J5LnJlbGVhc2UoKTsKK30KKworU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKK3sK
KyAgICBSQ2h1bmsgY2h1bms7CisgICAgaWYgKCFjaHVuay5TZXRSZXR1cm5lZEhhbmRsZShtX2hh
bmRsZSkpIHsKKyAgICAgICAgVEhhbmRsZUluZm8gaW5mbzsKKyAgICAgICAgY2h1bmsuSGFuZGxl
SW5mbygmaW5mbyk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hl
biB0byBEZWNvbW1pdCgpIG1lbW9yeSBmcm9tIHRoZSBjaHVuaworICAgICAgICAvLyBGSVhNRTog
V2UgbmVlZCB0byBhbHNvIHVuZGVyc3RhbmQgaG93IENsb3NlKCkgZGVjcmVtZW50cyB0aGUga2Vy
bmVsLXNpZGUgcmVmIGNvdW50IG9mIHRoZSAKKyAgICAgICAgLy8gc2hhcmVkIG1lbW9yeSBzZWdt
ZW50IGFuZCBsZWFkcyB0byBwcmVtYXR1cmUgZGVjb21taXRzKCkgb2YgdGhlIHNoYXJlZCBtZW1v
cnkgYXJlYQorICAgIH0KK30KKworYm9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShIYW5k
bGUmIGhhbmRsZSwgUHJvdGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIEFTU0VSVF9BUkcoaGFu
ZGxlLCBoYW5kbGUuaXNOdWxsKCkpOworICAgICAgICAKKyAgICBSQ2h1bmsgY2h1bms7IAorICAg
IGlmIChjaHVuay5TZXRSZXR1cm5lZEhhbmRsZShtX2hhbmRsZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICAvLyBDb252ZXJ0IHRoZSBuYW1lIChzdHJpbmcgZm9ybSkgdG8gYSB1
aW50MzJfdC4KKyAgICBUTmFtZSBnbG9iYWxDaHVua05hbWUgPSBjaHVuay5OYW1lKCk7CisgICAg
VExleCBsZXhlcihnbG9iYWxDaHVua05hbWUpOworICAgIFRVaW50MzIgbmFtZUFzSW50ID0gMDsg
CisgICAgaWYgKGxleGVyLlZhbChuYW1lQXNJbnQsIEVEZWNpbWFsKSkgCisgICAgICAgIHJldHVy
biBmYWxzZTsgCisgICAgICAgICAKKyAgICBoYW5kbGUubV9jaHVua05hbWUgPSBuYW1lQXNJbnQ7
CisgICAgaGFuZGxlLm1fc2l6ZSA9IG1fc2l6ZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordW5zaWduZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCit7CisgICAgcmV0dXJu
IFBBR0VfU0laRTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAkocmV2aXNpb24gODQz
OTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc3LDYgKzc3LDIzIEBAIHB1YmxpYzoKICAgICBXb3JrSXRlbSogbV93b3Jr
SXRlbTsKIH07CiAKKyNpZiBPUyhTWU1CSUFOKQorUVN5bWJpYW5QaXBlTm90aWZpZXIqIFdvcmtR
dWV1ZTo6cmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKFJQaXBlIHBpcGUsIFFTeW1iaWFuUGlwZU5v
dGlmaWVyOjpFdmVudFR5cGUgdHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0pIAor
eworICAgIFFTeW1iaWFuUGlwZU5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBRU3ltYmlhblBpcGVO
b3RpZmllcihwaXBlLCB0eXBlLCAtMSk7CisgICAgIAorICAgIG5vdGlmaWVyLT5zZXRFbmFibGVk
KGZhbHNlKTsKKyAgICBub3RpZmllci0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAg
CisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3Jr
SXRlbVF0KHRoaXMsIG5vdGlmaWVyLCBTSUdOQUwocmVhZHlUb1JlYWQoaW50KSksIHdvcmtJdGVt
LmxlYWtQdHIoKSk7CisgICAgCisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFk
KTsgICAgCisgICAgCisgICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgCisgICAg
cmV0dXJuIG5vdGlmaWVyOworfQorI2Vsc2UKIFFTb2NrZXROb3RpZmllciogV29ya1F1ZXVlOjpy
ZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5v
dGlmaWVyOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJdGVtKQogewogICAg
IEFTU0VSVChtX3dvcmtUaHJlYWQpOwpAQCAtODksNiArMTA2LDcgQEAgUVNvY2tldE5vdGlmaWVy
KiBXb3JrUXVldWU6OnJlZ2lzdGVyU29jawogICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUp
OwogICAgIHJldHVybiBub3RpZmllcjsKIH0KKyNlbmRpZgogCiB2b2lkIFdvcmtRdWV1ZTo6cGxh
dGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqKQogewpAQCAtMTIwLDggKzEzOCwxMSBAQCB2b2lk
IFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3JrQWZ0ZXJEZWxheShQCiAKIHZvaWQgV29ya1F1ZXVlOjpz
Y2hlZHVsZVdvcmtPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
ciBwcm9jZXNzLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSkKIHsKKyAgICAvLyBGSVhN
RTogTmVlZCB0byBpbXBsZW1lbnQgYSBwcm9jZXNzIHdhdGNoZXIgdXNpbmcgU3ltYmlhbiBSUHJv
Y2VzcworI2lmICFPUyhTWU1CSUFOKQogICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0
ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNo
ZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCB3b3JrSXRlbS5sZWFrUHRyKCkpOwogICAg
IGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisjZW5kaWYKIH0KIAogI2luY2x1
ZGUgIldvcmtRdWV1ZVF0Lm1vYyIKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgv
U2hhcmVkTWVtb3J5VW5peC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEhBVkUo
TU1BUCkKICNpbmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVj
b2Rlci5oIgpAQCAtMjM2LDMgKzIzNyw2IEBAIHVuc2lnbmVkIFNoYXJlZE1lbW9yeTo6c3lzdGVt
UGFnZVNpemUoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCisKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1By
b2Nlc3NMYXVuY2hlclF0LmNwcAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRG
T1JNKFFUKSAmJiAhT1MoU1lNQklBTikKICNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKIAog
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKQEAgLTE2NCwzICsxNjUsNSBAQCB2b2lkIFByb2Nlc3NM
YXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2lu
Y2x1ZGUgIlByb2Nlc3NMYXVuY2hlclF0Lm1vYyIKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NM
YXVuY2hlclN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDg4IEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYm
IE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJD
b25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3Mu
aCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9ycGlwZS5oIgorI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNs
dWRlIDxxZ2xvYmFsLmg+CisKK19MSVQoS1dvcmtlclByb2Nlc3NOYW1lLCAiUXRXZWJQcm9jZXNz
LmV4ZSIpOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICAvLyBNYWtl
IGEgcGFpciBvZiBoYWxmLWR1cGxleCBwaXBlcworICAgIFJQaXBlKiBsb2NhbFBpcGVzID0gbmV3
IFJQaXBlWzJdOyAKKyAgICBSUGlwZSogcmVtb3RlUGlwZXMgPSBuZXcgUlBpcGVbMl07IAorICAg
ICAKKyAgICBSUGlwZTo6SW5pdCgpOworICAgIC8vIENyZWF0ZSBhIHBpcGUuIEZpcnN0IGFyZyBp
cyB0aGUgcmVhZC1lbmQgUlBpcGUgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIHdyaXRlLWVuZC4gCisg
ICAgUlBpcGU6OkNyZWF0ZShDb3JlSVBDOjpDb25uZWN0aW9uOjpNYXhQaXBlQ2FwYWNpdHksIHJl
bW90ZVBpcGVzWzBdLCBsb2NhbFBpcGVzWzFdKTsKKyAgICBSUGlwZTo6Q3JlYXRlKENvcmVJUEM6
OkNvbm5lY3Rpb246Ok1heFBpcGVDYXBhY2l0eSwgbG9jYWxQaXBlc1swXSwgcmVtb3RlUGlwZXNb
MV0pOworICAgIAorICAgIC8vIFByZXBhcmUgdG8gbGF1bmNoIHdvcmtlciBwcm9jZXNzCisgICAg
UlByb2Nlc3MqIHdvcmtlclByb2Nlc3MgPSBuZXcgUlByb2Nlc3MoKTsKKyAgICBUSW50IGVycm9y
ID0gd29ya2VyUHJvY2Vzcy0+Q3JlYXRlKEtXb3JrZXJQcm9jZXNzTmFtZSgpLCBLTnVsbERlc0Mp
OworICAgIGlmIChlcnJvcikKKyAgICAgICAgcUNyaXRpY2FsKCkgPDwgIiBFcnJvciBpbml0aWFs
aXppbmcgV2ViS2l0MiB3ZWIgcHJvY2VzcyAiIDw8IGVycm9yOworCisgICAgLy8gUGFzcyBvd25l
cnNoaXAgb2YgcGlwZXMgdmlhIFJQcm9jZXNzJyAiZW52aXJvbm1lbnQgZGF0YSBzbG90cyIuIAor
ICAgIC8vIFRoaXMgaXMgdGhlIFN5bWJpYW4gd2F5IG9mIHBhc3Npbmcgb3duZXJzaGlwIG9mIGhh
bmRsZXMgZnJvbSBwYXJlbnQgdG8gY2hpbGQKKyAgICAvLyBUaGUgY2hvaWNlIG9mIDMgJiA0IGlz
IGFyYml0cmFyeSBhbmQgc2hvdWxkIG1hdGNoIHRoZSB1c2Ugb24gdGhlIHJlY2VpdmluZyBzaWRl
IChDb25uZWN0aW9uLmNwcCkKKyAgICB3b3JrZXJQcm9jZXNzLT5TZXRQYXJhbWV0ZXIoMywgcmVt
b3RlUGlwZXNbMF0pOyAvLyByZWFkZXIKKyAgICB3b3JrZXJQcm9jZXNzLT5TZXRQYXJhbWV0ZXIo
NCwgcmVtb3RlUGlwZXNbMV0pOyAvLyB3cml0ZXIKKyAgICAgICAgICAgICAgICAKKyAgICAvLyBC
bG9jayB1bnRpbCB0aGUgcmVtb3RlIHByb2Nlc3MgaXMgdXAKKyAgICB3b3JrZXJQcm9jZXNzLT5S
ZXN1bWUoKTsKKyAgICBUUmVxdWVzdFN0YXR1cyBsYXVuY2hTdGF0dXM7IAorICAgIHdvcmtlclBy
b2Nlc3MtPlJlbmRlenZvdXMobGF1bmNoU3RhdHVzKTsgCisgICAgVXNlcjo6V2FpdEZvclJlcXVl
c3QobGF1bmNoU3RhdHVzKTsKKyAgICAKKyAgICBpZiAobGF1bmNoU3RhdHVzLkludCgpICE9IEtF
cnJOb25lKSAKKyAgICAgICAgcUNyaXRpY2FsKCkgPDwgIiBXb3JrZXIgcHJvY2VzcyBmYWlsZWQg
dG8gbGF1bmNoICIgPDwgbGF1bmNoU3RhdHVzLkludCgpOworICAgIAorICAgIC8vIENsb3NlIHRo
ZSBwaXBlIGVuZHMgd2UganVzdCBwYXNzZWQgdG8gdGhlIHJlbW90ZQorICAgIHJlbW90ZVBpcGVz
WzBdLkNsb3NlKCk7IAorICAgIHJlbW90ZVBpcGVzWzFdLkNsb3NlKCk7CisgICAgZGVsZXRlW10g
cmVtb3RlUGlwZXM7CisgICAgCisgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBp
ZGVudGlmaWVyID0gbG9jYWxQaXBlczsgIAorICAgIAorICAgIC8vIERlY2xhcmUgbGF1bmNoIHBy
b2Nlc3MgYXMgZG9uZS4gTm90ZSB0aGF0IHRoaXMgY2xhc3Mgb3ducyAnd29ya2VyUHJvY2Vzcycs
IGJ1dCBDb25uZWN0aW9uIG93bnMgJ2lkZW50aWZpZXInIAorICAgIFJ1bkxvb3A6Om1haW4oKS0+
c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJldlYktpdDo6UHJvY2Vzc0xhdW5j
aGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9jZXNzLCB3b3JrZXJQcm9jZXNzLCBpZGVudGlmaWVy
KSk7Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKK3sKKyAg
ICBpZiAoIW1fcHJvY2Vzc0lkZW50aWZpZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIElt
cG9ydGFudDogS2lsbGluZyBhbm90aGVyIHByb2Nlc3MgKGV2ZW4gaWYgd2Ugc3Bhd25lZCBpdCkg
cmVxdWlyZXMgUG93ZXJNYW5hZ2VtZW50IGNhcGFiaWxpdHksCisgICAgLy8gd2hpY2ggaXMgYSBo
aWdoIGJhciB0byBqdW1wIG92ZXIgZm9yIGFueSB1c2VyIGFwcGxpY2F0aW9uLiBJdCdzIGFsc28g
YSBzZWN1cml0eSByaXNrLgorICAgIC8vIFRPRE86IENoZWNrIGlmIHdlIHNob3VsZCBzaWduYWwg
dGhlIHdlYiBwcm9jZXNzIHRocm91Z2ggdGhlIHBpcGUgdG8gdGVybWluYXRlIGl0c2VsZj8KKyAg
ICAvLyAuLmFsdGhvdWdoIHRoYXQgd29uJ3Qgd29yayBpZiB0aGUgcHJvY2VzcyBpcyB1bnJlc3Bv
bnNpdmUhCisgICAgUlByb2Nlc3MgbWU7CisgICAgaWYgKG1lLkhhc0NhcGFiaWxpdHkoRUNhcGFi
aWxpdHlQb3dlck1nbXQpKQorICAgICAgICBtX3Byb2Nlc3NJZGVudGlmaWVyLT5UZXJtaW5hdGUo
S0Vyck5vbmUpOworfQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRl
KCkKK3sKKyAgICBpZiAoIW1fcHJvY2Vzc0lkZW50aWZpZXIpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fcHJvY2Vzc0lkZW50aWZpZXItPkNsb3NlKCk7CisgICAgZGVsZXRlIG1fcHJvY2Vzc0lk
ZW50aWZpZXI7CisgICAgbV9wcm9jZXNzSWRlbnRpZmllciA9IDA7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xh
dW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcAkocmV2aXNpb24g
ODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1
bmNoZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDMxICs0Nyw0MSBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKK3N0YXRpYyBDb3JlSVBDOjpD
b25uZWN0aW9uOjpJZGVudGlmaWVyIGludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcigpCit7IAor
ICAgIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaWRlbnRpZmllcjsgCisjaWYgT1Mo
U1lNQklBTikKKyAgICBpZGVudGlmaWVyID0gMDsgLy8gaW52YWxpZCBSUHJvY2VzcyoKKyNlbHNl
CisgICAgaWRlbnRpZmllciA9IC0xOyAvLyBpbnZhbGlkIHNvY2tldCBkZXNjcmlwdG9yCisjZW5k
aWYKKyAgICByZXR1cm4gaWRlbnRpZmllcjsKK30KKwogc3RhdGljIHZvaWQqIHdlYlRocmVhZEJv
ZHkodm9pZCogLyogY29udGV4dCAqLykKIHsKICAgICAvLyBJbml0aWFsaXphdGlvbgogICAgIEpT
Qzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQo
KTsKIAotICAgIC8vIEZJWE1FOiBXZSBkbyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBu
b3cuCisgICAgLy8gRklYTUU6IFRoZSBRdCBwb3J0IGRvZXMgbm90IHN1cHBvcnQgdGhyZWFkZWQg
bW9kZSBmb3Igbm93LgogCi0gICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZSgtMSwg
UnVuTG9vcDo6Y3VycmVudCgpKTsKKyAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXpl
KGludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcigpLCBSdW5Mb29wOjpjdXJyZW50KCkpOwogICAg
IFJ1bkxvb3A6OnJ1bigpOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKIENvcmVJUEM6OkNvbm5lY3Rp
b246OklkZW50aWZpZXIgVGhyZWFkTGF1bmNoZXI6OmNyZWF0ZVdlYlRocmVhZCgpCi17Ci0gICAg
c3JhbmRvbSh0aW1lKDApKTsKLSAgICBpbnQgY29ubmVjdGlvbklkZW50aWZpZXIgPSByYW5kb20o
KTsKLQotICAgIGlmICghY3JlYXRlVGhyZWFkKHdlYlRocmVhZEJvZHksIHJlaW50ZXJwcmV0X2Nh
c3Q8dm9pZCo+KGNvbm5lY3Rpb25JZGVudGlmaWVyKSwgIldlYktpdDI6IFdlYlRocmVhZCIpKSB7
Cit7ICAKKyAgICAvLyBGSVhNRTogVGhlIFF0IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRl
ZCBtb2RlIGZvciBub3cuCisgICAgCisgICAgaWYgKCFjcmVhdGVUaHJlYWQod2ViVGhyZWFkQm9k
eSwgMCwgIldlYktpdDI6IFdlYlRocmVhZCIpKSB7CiAgICAgICAgIHFXYXJuaW5nKCkgPDwgImZh
aWxlZCBzdGFydGluZyB0aHJlYWQiOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IGludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcigpOwogICAgIH0KIAotICAgIHJldHVybiBjb25u
ZWN0aW9uSWRlbnRpZmllcjsKKyAgICByZXR1cm4gaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVy
KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCShyZXZpc2lvbiA4NDM5OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIsMTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVBy
b3h5KCkKIAogUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChpbnQgYXJnYywgY2hh
cioqIGFyZ3YpCiB7CisjaWYgZGVmaW5lZChRX09TX1NZTUJJQU4pCisgICAgUlByb2Nlc3MgcHJv
Y2VzczsgCisgICAgcHJvY2Vzcy5TZXRQcmlvcml0eShFUHJpb3JpdHlCYWNrZ3JvdW5kKTsKKyNl
bmRpZgorICAgIAogICAgIFFBcHBsaWNhdGlvbjo6c2V0R3JhcGhpY3NTeXN0ZW0oUUxhdGluMVN0
cmluZygicmFzdGVyIikpOwogICAgIFFBcHBsaWNhdGlvbiogYXBwID0gbmV3IFFBcHBsaWNhdGlv
bihhcmdjLCBhcmd2KTsKICNpZm5kZWYgTkRFQlVHCkBAIC0xNTMsNiArMTU4LDExIEBAIFFfREVD
TF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoaW50IGEKICAgICBXVEY6OmluaXRpYWxpemVN
YWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CiAKKyAg
ICBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGlkZW50aWZpZXI7IAorI2lmIE9TKFNZ
TUJJQU4pCisgICAgLy8gV2Ugb2J0YWluIHRoZSBoYW5kbGVzIGRpcmVjdGx5IGZyb20gdGhlICJl
bnZpcm9ubWVudCBkYXRhIHNsb3RzIiBvZiB0aGUgUlByb2Nlc3MKKyAgICBpZGVudGlmaWVyID0g
MDsgCisjZWxzZQogICAgIC8vIENyZWF0ZSB0aGUgY29ubmVjdGlvbi4KICAgICBpZiAoYXBwLT5h
cmd1bWVudHMoKS5zaXplKCkgPD0gMSkgewogICAgICAgICBxRGVidWcoKSA8PCAiRXJyb3I6IHdy
b25nIG51bWJlciBvZiBhcmd1bWVudHMuIjsKQEAgLTE2MCwxMiArMTcwLDEzIEBAIFFfREVDTF9F
WFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoaW50IGEKICAgICB9CiAKICAgICBib29sIHdhc051
bWJlciA9IGZhbHNlOwotICAgIGludCBpZGVudGlmaWVyID0gYXBwLT5hcmd1bWVudHMoKS5hdCgx
KS50b0ludCgmd2FzTnVtYmVyLCAxMCk7CisgICAgaWRlbnRpZmllciA9IGFwcC0+YXJndW1lbnRz
KCkuYXQoMSkudG9JbnQoJndhc051bWJlciwgMTApOwogICAgIGlmICghd2FzTnVtYmVyKSB7CiAg
ICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvcjogY29ubmVjdGlvbiBpZGVudGlmaWVyIHdyb25nLiI7
CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLQorI2VuZGlmCisgICAgCiAgICAgV2ViS2l0OjpX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKGlkZW50aWZpZXIsIFJ1bkxvb3A6Om1haW4o
KSk7CiAKICAgICBSdW5Mb29wOjpydW4oKTsKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDg0NTUwKQorKysgVG9vbHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDQtMjEgIFNpZGRoYXJ0
aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdW1dLMl1bU3ltYmlhbl0gQ29ycmVj
dGlvbnMgdG8gZGVmYXVsdCB3aW5kb3cgbW9kZSBvbiBTeW1iaWFuIGRldmljZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODc3CisKKyAgICAgICAg
KiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcDoKKyAgICAgICAgKEJyb3dzZXJXaW5k
b3c6OkJyb3dzZXJXaW5kb3cpOgorICAgICAgICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2Vy
LnBybzoKKwogMjAxMS0wNC0yMSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogVG9vbHMvTWluaUJyb3dzZXIv
cXQvQnJvd3NlcldpbmRvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvcXQv
QnJvd3NlcldpbmRvdy5jcHAJKHJldmlzaW9uIDg0Mzk4KQorKysgVG9vbHMvTWluaUJyb3dzZXIv
cXQvQnJvd3NlcldpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxMSArMTIzLDE5IEBA
IEJyb3dzZXJXaW5kb3c6OkJyb3dzZXJXaW5kb3coUVdLQ29udGV4dCoKICAgICBjb25uZWN0KG1f
YWRkcmVzc0JhciwgU0lHTkFMKHJldHVyblByZXNzZWQoKSksIFNMT1QoY2hhbmdlTG9jYXRpb24o
KSkpOwogCiAgICAgUVRvb2xCYXIqIGJhciA9IGFkZFRvb2xCYXIoIk5hdmlnYXRpb24iKTsKKyNp
ZiBkZWZpbmVkKFFfT1NfU1lNQklBTikKKyAgICBiYXItPnNldEljb25TaXplKFFTaXplKDE2LCAx
NikpOworI2VuZGlmCiAgICAgYmFyLT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdLUGFnZTo6
QmFjaykpOwogICAgIGJhci0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXS1BhZ2U6OkZvcndh
cmQpKTsKICAgICBiYXItPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpSZWxvYWQp
KTsKICAgICBiYXItPmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpTdG9wKSk7Cisj
aWYgZGVmaW5lZChRX09TX1NZTUJJQU4pCisgICAgYWRkVG9vbEJhckJyZWFrKCk7CisgICAgYWRk
VG9vbEJhcigiTG9jYXRpb24iKS0+YWRkV2lkZ2V0KG1fYWRkcmVzc0Jhcik7CisjZWxzZQogICAg
IGJhci0+YWRkV2lkZ2V0KG1fYWRkcmVzc0Jhcik7CisjZW5kaWYKIAogICAgIFFTaG9ydGN1dCog
c2VsZWN0QWRkcmVzc0JhciA9IG5ldyBRU2hvcnRjdXQoUXQ6OkNUUkwgfCBRdDo6S2V5X0wsIHRo
aXMpOwogICAgIGNvbm5lY3Qoc2VsZWN0QWRkcmVzc0JhciwgU0lHTkFMKGFjdGl2YXRlZCgpKSwg
dGhpcywgU0xPVChvcGVuTG9jYXRpb24oKSkpOwpJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvcXQv
TWluaUJyb3dzZXIucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL3F0L01pbmlC
cm93c2VyLnBybwkocmV2aXNpb24gODQzOTgpCisrKyBUb29scy9NaW5pQnJvd3Nlci9xdC9NaW5p
QnJvd3Nlci5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDIxIEBAIGxpbnV4LSogewog
CiBzeW1iaWFuIHsKICAgICBUQVJHRVQuVUlEMyA9IDB4QTAwMEU1NDUKLSAgICBUQVJHRVQuQ0FQ
QUJJTElUWSA9IFJlYWRVc2VyRGF0YSBXcml0ZVVzZXJEYXRhIE5ldHdvcmtTZXJ2aWNlcworICAg
IE1NUF9SVUxFUyArPSBwYWdlZGRhdGEKKyAgICAKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBS
ZWFkVXNlckRhdGEgCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gV3JpdGVVc2VyRGF0YQorICAg
IFRBUkdFVC5DQVBBQklMSVRZICo9IE5ldHdvcmtTZXJ2aWNlcyAgIyBRdE5ldHdvcmsgYW5kIEJl
YXJlcgorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9IFBvd2VyTWdtdCAgICAgICAgIyBraWxsaW5n
IHdlYiBwcm9jZXNzIGZyb20gVUkgcHJvY2VzcworICAgIAorICAgICMgU2VlIFF0TW9iaWxpdHkg
ZG9jcyBvbiBTeW1iaWFuIGNhcGFiaWxpdGllczogCisgICAgIyBodHRwOi8vZG9jLnF0Lm5va2lh
LmNvbS9xdG1vYmlsaXR5L3F1aWNrc3RhcnQuaHRtbAorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9
IExvY2F0aW9uICAgICAgICAgIyBnZW9sb2NhdGlvbgorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9
IFJlYWREZXZpY2VEYXRhICAgIyBnZW9sb2NhdGlvbiwgc2Vuc29ycworICAgIFRBUkdFVC5DQVBB
QklMSVRZICo9IFdyaXRlRGV2aWNlRGF0YSAgIyBnZW9sb2NhdGlvbgorICAgIFRBUkdFVC5DQVBB
QklMSVRZICo9IExvY2FsU2VydmljZXMgICAgIyBnZW9sb2NhdGlvbiwgc3lzaW5mbworICAgIAor
ICAgICMgV2UgbWF5IGxhdGVyIG5lZWQgVXNlckVudmlyb25tZW50IGZvciBtaWMvY2FtZXJhIGlu
cHV0CiB9CiAKIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90654</attachid>
            <date>2011-04-21 19:16:47 -0700</date>
            <delta_ts>2011-04-22 10:16:04 -0700</delta_ts>
            <desc>fix Qt build on Linux</desc>
            <filename>55875_v7.patch</filename>
            <type>text/plain</type>
            <size>52047</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODQ1NTApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTEtMDQtMjEgIFNpZGRoYXJ0aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
W1dLMl1bU3ltYmlhbl0gQ29yZUlQQyBpbXBsZW1lbnRhdGlvbiBmb3IgU3ltYmlhbiBPUyAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODc3CisKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDogZXhjbHVkZSBTeW1iaWFuIGZyb20gVU5JWF9ET01BSU5f
U09DS0VUIHVzZXJzCisKIDIwMTEtMDQtMjEgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5i
b3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI4NDU0OC4K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDg0Mzk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjAyLDcgKzEyMDIsNyBAQAogICAgYnJlYWthZ2VzIG9uZSBwb3J0IGF0IGEgdGltZS4gKi8K
ICNkZWZpbmUgV1RGX1VTRV9FWFBPUlRfTUFDUk9TIDAKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShHVEspCisjaWYgKFBMQVRGT1JNKFFUKSAmJiAhT1MoU1lNQklBTikpIHx8IFBMQVRG
T1JNKEdUSykKICNkZWZpbmUgV1RGX1VTRV9VTklYX0RPTUFJTl9TT0NLRVRTIDEKICNlbmRpZgog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDU1MCkKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMCBAQAorMjAxMS0wNC0yMSAgU2lkZGhh
cnRoIE1hdGh1ciAgPHNpZGRoYXJ0aC5tYXRodXJAbm9raWEuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF1bV0syXVtTeW1iaWFuXSBDb3Jl
IElQQywgcHJvY2VzcyBsYXVuY2hpbmcgYW5kIHNoYXJlZCBtZW1vcnkgaW1wbGVtZW50YXRpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODc3CisK
KyAgICAgICAgVGhpcyBpbml0aWFsIHBvcnQgdG8gU3ltYmlhbiBhbGxvd3MgdGhlIFF0IE1pbmlC
cm93c2VyIHRvIGxvYWQgZ29vZ2xlLmNvbSBvbiBhIE5va2lhIE44LgorICAgICAgICBUaGUgY2hh
bmdlIG1heGltaXplcyB1c2Ugb2YgdGhlIGV4aXN0aW5nIFF0IHBvcnQgb2YgV2ViS2l0Miwgd2hp
bGUgaW1wbGVtZW50aW5nIG9ubHkgdGhlIHZlcnkgcGxhdGZvcm0KKyAgICAgICAgc3BlY2lmaWMg
cG9ydGlvbnMgdXNpbmcgcHVyZSBTeW1iaWFuIE9TIEFQSXMKKworICAgICAgICBGb3IgSVBDLCB3
ZSB1c2UgaGFsZi1kdXBsZXggcGlwZXMuIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBk
aWZmZXJlbnQgZnJvbSBDb25uZWN0aW9uV2luLmNwcC4KKyAgICAgICAgRm9yIHByb2Nlc3MgbGF1
bmNoaW5nLCB3ZSB1c2UgdGhlIFJQcm9jZXNzIGNsYXNzIHdoaWNoIGFsbG93cyB0cmFuc2ZlciBv
ZiBkZXNjcmlwdG9ycyB0byBhIGNoaWxkLgorICAgICAgICBGb3Igc2hhcmVkIG1lbW9yeSwgd2Ug
dXNlIGdsb2JhbCBSQ2h1bmtzLgorCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVu
dERlY29kZXIuY3BwOiBndWFyZCBhdHRhY2htZW50IHVzZXJzIHdpdGggVVNFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpCisgICAgICAgIChDb3JlSVBDOjpBcmd1bWVudERlY29kZXI6On5Bcmd1bWVudERl
Y29kZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcDog
Z3VhcmQgYXR0YWNobWVudCB1c2VycyB3aXRoIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQorICAg
ICAgICAoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjp+QXJndW1lbnRFbmNvZGVyKToKKworICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOiBBc3NvcnRlZCB0eXBlZGVmcyBh
bmQgbWVtYmVyIHZhcmlhYmxlcyBmb3IgSVBDIGNoYW5uZWwKKyAgICAgICAgKiBQbGF0Zm9ybS9D
b3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcDogQWRkZWQuIE1haW4gY29ubmVjdGlvbiBz
ZXR1cCBhbmQgSVBDIGNsYXNzLgorICAgICAgICBGb3IgdGhlIHdvcmtlciBwcm9jZXNzLCB0aGlz
IGNsYXNzIG9wZW5zIHRoZSBwaXBlcyBwYXNzZWQgYnkgdGhlIFVJIHByb2Nlc3MncyBQcm9jZXNz
TGF1bmNoZXJTeW1iaWFuLmNwcC4KKyAgICAgICAgVGhlc2UgcGlwZXMgYXJlIGFscmVhZHkgaW4g
Y29ubmVjdGVkIHN0YXRlIHdoZW4gdGhlIHdvcmtlciBwcm9jZXNzIHJlY2VpdmVzIHRoZW0uCisg
ICAgICAgIFNpbmNlIHBpcGVzIGFyZSBhIHN0cmVhbSBvcmllbnRlZCBjaGFubmVsLCB3ZSBkbyBw
YXJzaW5nIG9mIHRoZSByZWFkIGJ1ZmZlciB0byBleHRyYWN0CisgICAgICAgIGluZGl2aWR1YWwg
bWVzc2FnZXMgKGRlbGltaXRlZCBieSBhIHRyYWlsZXIpLiBNZXNzYWdlcyBhcmUgdGhlbiBkaXNw
YXRjaGVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBs
YXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChDb3JlSVBDOjppc01lc3NhZ2VUcmFpbGVyKToK
KyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpOgorICAgICAg
ICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6b3Blbik6CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0
aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKToKKyAgICAgICAgKENvcmVJUEM6
OkNvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UpOgorICAgICAgICAoQ29yZUlQQzo6Q29u
bmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24pOgor
CisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHA6
IEFkZGVkLiBRdCBzdHlsZSBRT2JqZWN0IHdoaWNoIHdyYXBzCisgICAgICAgIGEgU3ltYmlhbiBB
Y3RpdmUgT2JqZWN0IChBTykuIE1vbml0b3IgZGF0YSBhdmFpbGFibGUgdG8gcmVhZCBldmVudHMg
b24gYSBwaXBlLgorICAgICAgICBIZWxwcyB1cyB0YWxrIGluIFF0LXNwZWFrIHdpdGggcmVzdCBv
ZiBXZWJLaXQyLVF0IHBvcnQuCisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6UVN5bWJp
YW5QaXBlTm90aWZpZXIpOgorICAgICAgICAoUVN5bWJpYW5QaXBlTm90aWZpZXI6On5RU3ltYmlh
blBpcGVOb3RpZmllcik6CisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6c2V0RW5hYmxl
ZCk6CisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmllcjo6ZXZlbnQpOgorICAgICAgICAqIFBs
YXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaDogQWRkZWQuCisgICAgICAg
ICogUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHA6IEFkZGVk
LiBUaGUgU3ltYmlhbiBBTyB3aGljaAorICAgICAgICByZWdpc3RlcnMgbm90aWZpY2F0aW9uIHJl
cXVlc3RzIHdpdGggdGhlIGtlcm5lbAorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6
OlN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KToKKyAgICAgICAgKFN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0Ojp+U3ltYmlhblBpcGVBY3RpdmVPYmplY3QpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3Rp
dmVPYmplY3Q6OnNldEVuYWJsZWQpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6
OlJ1bkwpOiBDYWxsZWQgYnkgdGhlIE9TIHdoZW4gbm90aWZpY2F0aW9uIG9jY3VycworICAgICAg
ICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRvQ2FuY2VsKToKKyAgICAgICAgKiBQbGF0Zm9y
bS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0Lmg6IEFkZGVkLgorCisgICAgICAg
ICogUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcDogZ3VhcmQgd2l0aCBV
U0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgv
Q29ubmVjdGlvblVuaXguY3BwOiBkaXR0bworCisgICAgICAgICogUGxhdGZvcm0vUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oOiBSUHJvY2VzcyBpcyB0aGUgZGVzaWduYXRlZCBpZGVudGlmaWVy
CisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6IE9TIHNwZWNpZmljIGhhbmRsZSBh
bmQgbmFtZSB0eXBlZGVmcworICAgICAgICAqIFBsYXRmb3JtL1dvcmtRdWV1ZS5oOiBuZXcgcmVn
aXN0ZXJFdmVudEhhbmRsZXIgc2lnbmF0dXJlIGZvciBRdCBvbiBTeW1iaWFuCisKKyAgICAgICAg
KiBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcDogQWRkZWQuIFVzZSBuYW1lZCBn
bG9iYWwgUkNodW5rcy4KKyAgICAgICAgS25vd24gaXNzdWUgaXMgdGhlIGFic2VuY2Ugb2YgQ2xv
c2UoKWluZyB0aGUgY2h1bmsgaGFuZGxlIGluIFNoYXJlZE1lbW9yeSBkJ3RvcgorICAgICAgICBU
aHVzIHdlIGxlYWsgbWVtb3J5IGF0IHRoZSBtb21lbnQuIE5lZWRzIHNlcGFyYXRlIHdvcmsgYW5k
IHBhdGNoIHRvIGZpZ3VyZSBvdXQuCisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFu
ZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhh
bmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjppc051bGwpOgor
ICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKToKKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6
OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5Ojp+
U2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5k
bGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6OnN5c3RlbVBhZ2VTaXplKToKKwor
ICAgICAgICAqIFBsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAgICAgICAgKFdvcmtRdWV1
ZTo6cmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKTogVGFpbG9yZWQgdG8gY2xvc2VseSBtYXRjaCBR
dC1Vbml4J3MgaW1wbGVtZW50YXRpb24KKyAgICAgICAgKFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3Jr
T25UZXJtaW5hdGlvbik6CisgICAgICAgICogUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4
LmNwcDogZ3VhcmQgd2l0aCBIQVZFKE1NQVApIGZsYWcKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1
bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwOiBndWFyZCB3aXRoICFPUyhTWU1CSUFOKSBm
bGFnCisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3lt
Ymlhbi5jcHA6IEFkZGVkLiBDb3JyZWN0IHdheSB0byBvcGVuIGEgY2hhbm5lbCBhbmQgcGFzcwor
ICAgICAgICBvd25lcnNoaXAgdG8gYW5vdGhlciBwcm9jZXNzLiBXZSB1c2UgYSBwYWlyIG9mIGhh
bGYtZHVwbGV4IHBpcGVzLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5j
aFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVBy
b2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxp
ZGF0ZSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJR
dC5jcHA6IENsZWFudXAgdG8gc3VwcG9ydCBVTklYIGFuZCBTeW1iaWFuIE9TZXMKKyAgICAgICAg
VGhlIFF0IHBvcnQgY3VycmVudGx5IGRvZXNuJ3QgaW1wbGVtZW50IHRocmVhZGVkIG1vZGUgV0sy
CisgICAgICAgIChXZWJLaXQ6OmludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcik6CisgICAgICAg
IChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hl
cjo6Y3JlYXRlV2ViVGhyZWFkKToKKworICAgICAgICAqIFdlYktpdDIucHJpOiBBZGQgbmV3IHJw
aXBlIGxpYnJhcnkgbGlua2FnZQorICAgICAgICAqIFdlYktpdDIucHJvOiBBZGQgbmV3IGZpbGVz
CisgICAgICAgICogV2ViUHJvY2Vzcy5wcm86IENhcGFiaWxpdHkgYW5kIGRhdGEgcGFnaW5nIGNo
YW5nZXMKKworICAgICAgICAqIFdlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHA6IFNl
dCBwcm9jZXNzIHByaW9yaXR5IG9mIHdvcmtlcgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNz
TWFpblF0KToKKwogMjAxMS0wNC0yMSAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdAbm9r
aWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdDIvV2ViS2l0Mi5wcmkJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNlL1dlYktpdDIv
V2ViS2l0Mi5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDggQEAgc3ltYmlhbiB7CiAg
ICAgSU5DTFVERVBBVEggPSAkJFdFQktJVDJfSU5DTFVERVBBVEggJCRXRUJLSVQyX0dFTkVSQVRF
RF9TT1VSQ0VTX0RJUiAkJElOQ0xVREVQQVRICiB9CiAKK3N5bWJpYW46IExJQlMgKz0gLWxycGlw
ZQorCiBkZWZpbmVUZXN0KHByZXBlbmRXZWJLaXQyTGliKSB7CiAgICAgcGF0aFRvV2ViS2l0Mk91
dHB1dCA9ICQkQVJHUy8kJFdFQktJVDJfREVTVERJUgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwkocmV2
aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwkod29ya2luZyBjb3B5
KQpAQCAtMTAwLDYgKzEwMCw3IEBAIEhFQURFUlMgKz0gXAogICAgIFBsYXRmb3JtL0NvcmVJUEMv
SGFuZGxlTWVzc2FnZS5oIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VJRC5oIFwKICAg
ICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCisgICAgUGxhdGZvcm0vQ29yZUlQ
Qy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oIFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5nLmggXAog
ICAgIFBsYXRmb3JtL01vZHVsZS5oIFwKICAgICBQbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyLmggXApAQCAtMzA0LDYgKzMwNSw5IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9B
dHRhY2htZW50VW5peC5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9u
VW5peC5jcHAgXAorICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3Bw
IFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcCBcCisg
ICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHAgXAogICAg
IFBsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKICAgICBQbGF0Zm9ybS9Nb2R1bGUuY3BwIFwKICAgICBQ
bGF0Zm9ybS9SdW5Mb29wLmNwcCBcCkBAIC0zMTEsNiArMzE1LDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgUGxhdGZvcm0vcXQvTW9kdWxlUXQuY3BwIFwKICAgICBQbGF0Zm9ybS9xdC9SdW5Mb29wUXQu
Y3BwIFwKICAgICBQbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAgXAorICAgIFBsYXRmb3JtL3F0
L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwIFwKICAgICBQbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9y
eVVuaXguY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5jcHAg
XAogICAgIFBsdWdpblByb2Nlc3MvUGx1Z2luUHJvY2Vzcy5jcHAgXApAQCAtMzgzLDYgKzM4OCw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIu
Y3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvVGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBV
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwIFwKKyAgICBVSVByb2Nl
c3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAgXAogICAgIFVJUHJvY2Vz
cy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJv
Y2Vzc1Byb3h5LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwkocmV2aXNpb24gODQzOTgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzLnBybwkod29ya2luZyBjb3B5KQpAQCAtMzUs
NyArMzUsMjEgQEAgbGludXgtKiB7CiAKIHN5bWJpYW4gewogICAgIFRBUkdFVC5VSUQzID0gMHhB
MDAwRTU0NAotICAgIFRBUkdFVC5DQVBBQklMSVRZID0gUmVhZFVzZXJEYXRhIFdyaXRlVXNlckRh
dGEgTmV0d29ya1NlcnZpY2VzCisgICAgTU1QX1JVTEVTICs9IHBhZ2VkZGF0YQorICAgIFJTU19S
VUxFUyArPSAiaGlkZGVuID0gS0FwcElzSGlkZGVuOyIgIyBObyBpY29uIGluIGFwcGxpY2F0aW9u
IGdyaWQKKyAgICAKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBSZWFkVXNlckRhdGEgCisgICAg
VEFSR0VULkNBUEFCSUxJVFkgKj0gV3JpdGVVc2VyRGF0YQorICAgIFRBUkdFVC5DQVBBQklMSVRZ
ICo9IE5ldHdvcmtTZXJ2aWNlcyAgIyBRdE5ldHdvcmsgYW5kIEJlYXJlcgorICAgIAorICAgICMg
U2VlIFF0TW9iaWxpdHkgZG9jcyBvbiBTeW1iaWFuIGNhcGFiaWxpdGllczogCisgICAgIyBodHRw
Oi8vZG9jLnF0Lm5va2lhLmNvbS9xdG1vYmlsaXR5L3F1aWNrc3RhcnQuaHRtbAorICAgIFRBUkdF
VC5DQVBBQklMSVRZICo9IFJlYWREZXZpY2VEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0g
V3JpdGVEZXZpY2VEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTG9jYWxTZXJ2aWNlcwor
ICAgIAorICAgICMgV2UgbWF5IGxhdGVyIG5lZWQgVXNlckVudmlyb25tZW50IGZvciBtaWMvY2Ft
ZXJhIGlucHV0CisgICAgCiB9CiAKIGNvbnRhaW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsMTEgQEAg
dHlwZWRlZiBwaWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0o
V0lOKQogdHlwZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKICNlbGlmIFBM
QVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCit0eXBlZGVmIFJQcm9jZXNzKiBQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyOworI2Vsc2UKIHR5cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXI7CisjZW5kaWYKICNlbGlmIFBMQVRGT1JNKEdUSykKICNpZmRlZiBHX09TX1dJ
TjMyCiB0eXBlZGVmIHZvaWQqIEdQaWQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9T
aGFyZWRNZW1vcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFy
ZWRNZW1vcnkuaAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9T
aGFyZWRNZW1vcnkuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsNiArNzIsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIG11dGFibGUgSEFORExFIG1faGFuZGxlOwogI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NP
Q0tFVFMpCiAgICAgICAgIG11dGFibGUgaW50IG1fZmlsZURlc2NyaXB0b3I7CisjZWxpZiBPUyhT
WU1CSUFOKQorICAgICAgICBtdXRhYmxlIHVpbnQzMl90IG1fY2h1bmtOYW1lOwogI2VuZGlmCiAg
ICAgICAgIHNpemVfdCBtX3NpemU7CiAgICAgfTsKQEAgLTEwNSw2ICsxMDcsOCBAQCBwcml2YXRl
OgogICAgIEhBTkRMRSBtX2hhbmRsZTsKICNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQog
ICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOworI2VsaWYgT1MoU1lNQklBTikKKyAgICBpbnQgbV9o
YW5kbGU7ICAgIAogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9X
b3JrUXVldWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuaAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVl
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsOSBAQAogI2luY2x1ZGUgIlBsYXRmb3Jt
UHJvY2Vzc0lkZW50aWZpZXIuaCIKIGNsYXNzIFFPYmplY3Q7CiBjbGFzcyBRVGhyZWFkOworI2lm
IE9TKFNZTUJJQU4pCisjaW5jbHVkZSAicXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaCIKKyNlbmRp
ZgogI2VsaWYgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXIuaCIKIHR5cGVkZWYgc3RydWN0IF9HTWFpbkNvbnRleHQgR01haW5Db250ZXh0OwpAQCAtODQs
NyArODcsMTEgQEAgcHVibGljOgogICAgIHZvaWQgcmVnaXN0ZXJIYW5kbGUoSEFORExFLCBQYXNz
T3duUHRyPFdvcmtJdGVtPik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFO
RExFKTsKICNlbGlmIFBMQVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCisgICAgUVN5bWJpYW5Q
aXBlTm90aWZpZXIqIHJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxlcihSUGlwZSwgUVN5bWJpYW5QaXBl
Tm90aWZpZXI6OkV2ZW50VHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4pOworI2Vsc2UKICAgICBR
U29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5v
dGlmaWVyOjpUeXBlLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CisjZW5kaWYKICAgICB2b2lkIHNj
aGVkdWxlV29ya09uVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CiAjZWxpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCBy
ZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihpbnQsIGludCwgUGFzc093blB0cjxXb3JrSXRlbT4p
OwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1l
bnREZWNvZGVyLmNwcAkocmV2aXNpb24gODQzOTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3
LDcgQEAgQXJndW1lbnREZWNvZGVyOjp+QXJndW1lbnREZWNvZGVyKCkKIHsKICAgICBBU1NFUlQo
bV9idWZmZXIpOwogICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKLSNpZiAhUExBVEZPUk0oUVQpICYm
ICFQTEFURk9STShHVEspCisjaWYgIVVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIC8vIEZJ
WE1FOiBXZSBuZWVkIHRvIGRpc3Bvc2Ugb2YgdGhlIG1hY2ggcG9ydHMgaW4gY2FzZXMgb2YgZmFp
bHVyZS4KICNlbHNlCiAgICAgRGVxdWU8QXR0YWNobWVudD46Oml0ZXJhdG9yIGVuZCA9IG1fYXR0
YWNobWVudHMuZW5kKCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Fy
Z3VtZW50RW5jb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNyBAQCBBcmd1bWVudEVuY29kZXI6On5Bcmd1bWVudEVuY29kZXIoKQog
ewogICAgIGlmIChtX2J1ZmZlcikKICAgICAgICAgZmFzdEZyZWUobV9idWZmZXIpOwotI2lmICFQ
TEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdUSykKKyNpZiAhVVNFKFVOSVhfRE9NQUlOX1NPQ0tF
VFMpCiAgICAgLy8gRklYTUU6IFdlIG5lZWQgdG8gZGlzcG9zZSBvZiB0aGUgYXR0YWNobWVudHMg
aW4gY2FzZXMgb2YgZmFpbHVyZS4KICNlbHNlCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2F0
dGFjaG1lbnRzLnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9Db25uZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9Db25uZWN0aW9uLmgJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQz
LDEyIEBACiAjZWxpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8c3RyaW5nPgogI2VsaWYgUExB
VEZPUk0oUVQpCisjaWYgT1MoU1lNQklBTikKKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgor
I2Vsc2UKIGNsYXNzIFFTb2NrZXROb3RpZmllcjsKICNlbmRpZgorI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIuaCIKQEAgLTEwNSw2ICsxMDksOCBAQCBwdWJsaWM6CiAjZWxpZiBQTEFURk9STShXSU4p
CiAgICAgdHlwZWRlZiBIQU5ETEUgSWRlbnRpZmllcjsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVT
ZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVycyhJZGVudGlmaWVyJiBzZXJ2ZXJJZGVudGlmaWVyLCBJ
ZGVudGlmaWVyJiBjbGllbnRJZGVudGlmaWVyKTsKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBPUyhT
WU1CSUFOKQorICAgIHR5cGVkZWYgUlBpcGUqIElkZW50aWZpZXI7IAogI2VsaWYgVVNFKFVOSVhf
RE9NQUlOX1NPQ0tFVFMpCiAgICAgdHlwZWRlZiBpbnQgSWRlbnRpZmllcjsKICNlbmRpZgpAQCAt
MTM1LDcgKzE0MSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBtYXJrQ3VycmVudGx5RGlzcGF0Y2hl
ZE1lc3NhZ2VBc0ludmFsaWQoKTsKIAogICAgIHZvaWQgc2V0RGVmYXVsdFN5bmNNZXNzYWdlVGlt
ZW91dChkb3VibGUpOwotCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisgICAgc3Rh
dGljIGNvbnN0IGludCBNYXhQaXBlQ2FwYWNpdHkgPSA0MDk2OyAKKyNlbmRpZgorICAgIAogICAg
IHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFRpbWVvdXQgPSAwOwogICAgIHN0YXRpYyBjb25zdCBp
bnQgTm9UaW1lb3V0ID0gLTE7CiAKQEAgLTMyOSw2ICszMzgsMTQgQEAgcHJpdmF0ZToKICNpZiBQ
TEFURk9STShRVCkKICAgICBRU29ja2V0Tm90aWZpZXIqIG1fc29ja2V0Tm90aWZpZXI7CiAjZW5k
aWYKKyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBPUyhTWU1CSUFOKSAKKyAgICAvLyBDYWxsZWQgb24g
dGhlIGNvbm5lY3Rpb24gcXVldWUuCisgICAgdm9pZCByZWFkeVJlYWRIYW5kbGVyKCk7CisKKyAg
ICBWZWN0b3I8dWludDhfdD4gbV9yZWFkQnVmZmVyOworICAgIFJQaXBlIG1fcmVhZFBpcGU7Cisg
ICAgUlBpcGUgbV93cml0ZVBpcGU7CisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXIqIG1fcGlwZVJl
YWROb3RpZmllcjsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
Q29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1i
aWFuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgICAgQ29weXJpZ2h0
IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQor
CisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikK
KyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIK
KyNpbmNsdWRlICJXb3JrSXRlbS5oIgorI2luY2x1ZGUgPFFWZWN0b3I+CisjaW5jbHVkZSA8cXQv
UVN5bWJpYW5QaXBlTm90aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorbmFt
ZXNwYWNlIENvcmVJUEMgeworCitzdGF0aWMgY29uc3QgdWludDMyX3QgdHJhaWxlciA9IDB4REVB
RENBRkU7CisKK3N0cnVjdCBQYXJzZWRNZXNzYWdlIHsKKyAgICAgICAgdWludDhfdCogc3RhcnQ7
IC8vIGJhc2UgYWRkcmVzcyBvZiBtZXNzYWdlCisgICAgICAgIHVpbnQzMl90IHNpemU7IC8vIHNp
emUgaW4gYnl0ZXMKKyAgICAgICAgdWludDMyX3QgbWVzc2FnZUlEOworfTsKKwordm9pZCBDb25u
ZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVyKQoreworICAg
IGlmIChtX2lzU2VydmVyKSB7CisgICAgICAgIG1fcmVhZFBpcGUgPSBzdGF0aWNfY2FzdDxSUGlw
ZSo+KGlkZW50aWZpZXIpWzBdOworICAgICAgICBtX3dyaXRlUGlwZSA9IHN0YXRpY19jYXN0PFJQ
aXBlKj4oaWRlbnRpZmllcilbMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgVEludCBlcnJvcjsK
KyAgICAgICAgLy8gT3BlbiBwaXBlcyB2aWEgUlByb2Nlc3MnICJlbnZpcm9ubWVudCBkYXRhIHNs
b3RzIiBudW1iZXIgMyAmIDQuCisgICAgICAgIC8vIFRoZSBjaG9pY2Ugb2YgMyAmIDQgaXMgYXJi
aXRyYXJ5IGFuZCBtYXRjaGVzIHRoZSBjb2RlIGluIFByb2Nlc3NMYXVuY2hlclN5bWJpYW4uY3Bw
LgorICAgICAgICAvLyBUaGlzIGlzIHRoZSBTeW1iaWFuIE9TIHdheSBvZiBwYXNzaW5nIG93bmVy
c2hpcCBvZiByZXNvdXJjZXMgZnJvbSBwYXJlbnQgdG8gY2hpbGQKKyAgICAgICAgZXJyb3IgPSBt
X3JlYWRQaXBlLk9wZW4oMyk7IAorICAgICAgICBlcnJvcnw9IG1fd3JpdGVQaXBlLk9wZW4oNCk7
CisgICAgICAgIGlmIChlcnJvcikgeyAKKyAgICAgICAgICAgIG1faXNDb25uZWN0ZWQgPSBmYWxz
ZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcGlwZVJl
YWROb3RpZmllciA9IDA7CisgICAgbV9yZWFkQnVmZmVyLnJlc2l6ZShDb3JlSVBDOjpDb25uZWN0
aW9uOjpNYXhQaXBlQ2FwYWNpdHkpOworICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOyAgICAgICAg
Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX3Jl
YWRCdWZmZXIuc2hyaW5rKDApOworICAgIAorICAgIGRlbGV0ZSBtX3BpcGVSZWFkTm90aWZpZXI7
CisgICAgbV9waXBlUmVhZE5vdGlmaWVyID0gMDsKKworICAgIG1fcmVhZFBpcGUuQ2xvc2UoKTsK
KyAgICBtX3dyaXRlUGlwZS5DbG9zZSgpOworICAgIC8vIFRPRE86IGRlbGV0ZSB0aGUgbWVtb3J5
IGZvciB0aGUgUlBpcGVbMl0gYXJyYXkKKworICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKK30K
KworLy8gQ2hlY2sgaWYgdGhlIGRhdGEgbWF0Y2hlcyB0aGUgdHJhaWxlciBwYXR0ZXJuCitzdGF0
aWMgaW5saW5lIGJvb2wgaXNNZXNzYWdlVHJhaWxlcih1aW50OF90ICpkYXRhKSAKK3sgIAorICAg
IHJldHVybiAoIHRyYWlsZXIgPT0gKihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGF0YSkp
ICk7ICAKK30KKwordm9pZCBDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKCkKK3sgICAKKyAg
ICBtX3BpcGVSZWFkTm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOworICAgIFRQdHI4IHJlYWRQ
dHIobV9yZWFkQnVmZmVyLmRhdGEoKSwgMCwgbV9yZWFkQnVmZmVyLnNpemUoKSk7CisgICAgCisg
ICAgLy8gTm90ZSB0aGF0IGEgcmVhZCBvcGVyYXRpb24gbWF5IHJldHVybiBtdWx0aXBsZSBtZXNz
YWdlcyBkdWUgdG8gaXRzIHN0cmVhbS1vcmllbnRlZCBuYXR1cmUuCisgICAgVEludCBieXRlc1Jl
YWQgPSBtX3JlYWRQaXBlLlJlYWQocmVhZFB0ciwgcmVhZFB0ci5NYXhTaXplKCkpOworICAgIAor
ICAgIGlmIChieXRlc1JlYWQgPiAwKSB7ICAgICAgICAgICAgCisgICAgICAgIF9fQVNTRVJUX0FM
V0FZUyhieXRlc1JlYWQgPT0gcmVhZFB0ci5TaXplKCksIFVzZXI6OkludmFyaWFudCgpKTsKKyAg
ICAgICAgCisgICAgICAgIC8vIFN0YXJ0IHBhcnNpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZm
ZXIsIHdoZXJlIHdlIGV4cGVjdCB0byBzZWUgYSB0cmFpbGVyIGFuZCB0aGUgc2l6ZSBvZiB0aGlz
IG1lc3NhZ2UuCisgICAgICAgIHVpbnQ4X3QqIG1lc3NhZ2VTdGFydCA9IG1fcmVhZEJ1ZmZlci5k
YXRhKCkgKyBieXRlc1JlYWQ7CisgICAgICAgIAorICAgICAgICAvLyBUZW1wb3JhcnkgcGxhY2Ug
dG8ga2VlcCB0cmFjayBvZiBwYXJzZWQgbWVzc2FnZXMuCisgICAgICAgIFFWZWN0b3I8UGFyc2Vk
TWVzc2FnZT4gbWVzc3NhZ2VQb2ludGVyczsKKyAgICAgICAgCisgICAgICAgIHdoaWxlICh0cnVl
KSB7CisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gc2l6ZW9mKHVpbnQzMl90KTsgLy8gcHJl
cGFyZSB0byByZWFkIDQtYnl0ZSB0cmFpbGVyCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghaXNNZXNzYWdlVHJhaWxlcihtZXNzYWdlU3RhcnQpKQorICAgICAgICAgICAgICAgIGJyZWFr
OyAKKyAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gc2l6ZW9m
KHVpbnQzMl90KTsKKyAgICAgICAgICAgIHVpbnQzMl90IG1lc3NhZ2VTaXplID0gKnJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihtZXNzYWdlU3RhcnQpOyAKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgbWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICB1aW50
MzJfdCBtZXNzYWdlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KG1lc3NhZ2VTdGFy
dCk7IAorICAgICAgICAgICAgCisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gKG1lc3NhZ2VT
aXplIC0gc2l6ZW9mKHVpbnQzMl90KSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gU2F2ZSBtZXNzYWdlIGJvdW5kYXJ5CisgICAg
ICAgICAgICBjb25zdCBQYXJzZWRNZXNzYWdlIGFNZXNzYWdlID0ge21lc3NhZ2VTdGFydCwgbWVz
c2FnZVNpemUgLSBzaXplb2YodWludDMyX3QpLCBtZXNzYWdlSUR9OworICAgICAgICAgICAgbWVz
c3NhZ2VQb2ludGVycy5hcHBlbmQoYU1lc3NhZ2UpOyAKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgX19BU1NFUlRfQUxXQVlTKG1lc3NhZ2VTdGFydCA+PSAgbV9yZWFkQnVmZmVyLmRhdGEoKSwg
VXNlcjo6SW52YXJpYW50KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobWVzc2Fn
ZVN0YXJ0ID09IG1fcmVhZEJ1ZmZlci5kYXRhKCkpIAorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICB9IC8vIHdoaWxlIGxvb3AKKyAgICAgIAorICAgICAg
ICAvLyBOb3cgZGlzcGF0Y2ggcGFyc2VkIG1lc3NhZ2VzIGluIHRoZSBvcmRlciB0aGV5IHdlcmUg
d3JpdHRlbiBieSB0aGUgc2VuZGVyCisgICAgICAgIGZvciAoaW50IGkgPSBtZXNzc2FnZVBvaW50
ZXJzLnNpemUoKS0xOyBpID49IDAgOyBpLS0pIHsKKyAgICAgICAgICAgIGNvbnN0IFBhcnNlZE1l
c3NhZ2UgYU1lc3NhZ2UgPSBtZXNzc2FnZVBvaW50ZXJzLmF0KGkpOworICAgICAgICAgICAgcHJv
Y2Vzc0luY29taW5nTWVzc2FnZShNZXNzYWdlSUQ6OmZyb21JbnQoYU1lc3NhZ2UubWVzc2FnZUlE
KSwgYWRvcHRQdHIobmV3IEFyZ3VtZW50RGVjb2RlcihhTWVzc2FnZS5zdGFydCwgYU1lc3NhZ2Uu
c2l6ZSkpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbWVzc3NhZ2VQb2ludGVycy5j
bGVhcigpOworICAgIH0KKyAgICAKKyAgICBtX3BpcGVSZWFkTm90aWZpZXItPnNldEVuYWJsZWQo
dHJ1ZSk7Cit9CisKKworYm9vbCBDb25uZWN0aW9uOjpvcGVuKCkKK3sKKyAgICBpZiAoIW1faXND
b25uZWN0ZWQpIAorICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgIAorICAgIC8vIFN0YXJ0IGxp
c3RlbmluZyBmb3IgcmVhZCAKKyAgICBtX3BpcGVSZWFkTm90aWZpZXIgPSBtX2Nvbm5lY3Rpb25R
dWV1ZS5yZWdpc3RlclBpcGVFdmVudEhhbmRsZXIobV9yZWFkUGlwZSwgUVN5bWJpYW5QaXBlTm90
aWZpZXI6OlBpcGVSZWFkRGF0YUF2YWlsYWJsZSwgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29u
bmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOworICAgICAgICAKKyAgICAvLyBTY2hlZHVsZSBh
IHJlYWQuCisgICAgbV9jb25uZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVh
dGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpKTsKKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01l
c3NhZ2VzKCkgY29uc3QKK3sKKyAgICAvLyBBbHdheXMgdHJ1ZSwgc2luY2UgdGhlIHBpcGUgaXMg
bGFyZ2UgZW5vdWdoIHRvIGhvbGQgbXVsdGlwbGUgbWVzc2FnZXMuCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVz
c2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50RW5jb2Rlcj4gYXJndW1lbnRzKQoreyAgICAKKyAg
ICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMihtZXNzYWdlSUQudG9JbnQoKSk7CisgICAgCisgICAg
Ly8gU2l6ZSBvZiBtZXNzYWdlIGV4Y2x1ZGluZyB0aGlzIDQtYnl0ZSBmaWVsZCBhbmQgdGhlIDQt
Ynl0ZSB0cmFpbGVyIHdoaWNoIGZvbGxvd3MuCisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIo
YXJndW1lbnRzLT5idWZmZXJTaXplKCkpOworICAgIAorICAgIC8vIGEgdHJhaWxlciBtYXJrZXIg
KG1hZ2ljIG51bWJlcikgd2hpY2ggbWFrZXMgaXQgZWFzaWVyIHRvIHNwb3QgbWVzc2FnZSBib3Vu
ZGFyeSBhdCB0aGUgcmVjZWl2ZXIKKyAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMih0cmFpbGVy
KTsKKyAgICAKKyAgICBUUHRyOCB3cml0ZUJ1ZmZlcihhcmd1bWVudHMtPmJ1ZmZlcigpLCBhcmd1
bWVudHMtPmJ1ZmZlclNpemUoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCkgKTsKKyAgICBUSW50
IGJ5dGVzV3JpdHRlbiA9IG1fd3JpdGVQaXBlLldyaXRlKHdyaXRlQnVmZmVyLCB3cml0ZUJ1ZmZl
ci5TaXplKCkgKTsgICAgIAorICAgIAorICAgIHJldHVybiAoYnl0ZXNXcml0dGVuID09IHdyaXRl
QnVmZmVyLlNpemUoKSk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25u
ZWN0aW9uT25Qcm9jZXNzVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlm
aWVyIHByb2Nlc3MpCit7CisgICAgbV9jb25uZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrT25UZXJt
aW5hdGlvbihwcm9jZXNzLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25u
ZWN0aW9uRGlkQ2xvc2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ29yZUlQQworI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlm
aWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0
L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDk1IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaWYgUExBVEZPUk0gKFFUKSAmJiBPUyhTWU1CSUFOKQorI2luY2x1ZGUgIlFTeW1iaWFu
UGlwZU5vdGlmaWVyLmgiCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiUUNv
cmVBcHBsaWNhdGlvbiIKKyNpbmNsdWRlICJRRXZlbnQiCisjaW5jbHVkZSAiUU9iamVjdCIKKyNp
bmNsdWRlICJTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5oIgorI2luY2x1ZGUgPHBsYXRmb3JtL3Jw
aXBlLmg+CisKKy8vIFdyYXBwZXIgUU9iamVjdCBhcm91bmQgYSBTeW1iaWFuIEFjdGl2ZSBPYmpl
Y3QgKEFPKS4gV2UgdXNlIHRoZSBBTyB0byB3YXRjaCBmb3Igbm90aWZpY2F0aW9ucworLy8gb2Yg
ZGF0YSBhdmFpbGFibGUvc3BhY2UgYXZhaWxhYmxlIG9uIHRoZSBSUGlwZS4KK1FTeW1iaWFuUGlw
ZU5vdGlmaWVyOjpRU3ltYmlhblBpcGVOb3RpZmllcihSUGlwZSYgcGlwZSwgRXZlbnRUeXBlIHR5
cGUsIGludCBieXRlcywgUU9iamVjdCAqcGFyZW50KSAKKyAgICA6IFFPYmplY3QocGFyZW50KQor
ICAgICwgbV9waXBlKHBpcGUpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1fYnl0ZXMoYnl0
ZXMpCisgICAgLCBtX25vdGlmaWVyQU8obmV3IFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KHBpcGUs
IHR5cGUsIGJ5dGVzLCB0aGlzKSkKK3sKK30KKworUVN5bWJpYW5QaXBlTm90aWZpZXI6On5RU3lt
YmlhblBpcGVOb3RpZmllcigpIAoreworICAgIGRlbGV0ZSBtX25vdGlmaWVyQU87Cit9CisKKy8v
IFRoaXMgaW50ZXJmYWNlIGlzIG1vZGVsZWQgYWZ0ZXIgUVNvY2tldE5vdGlmaWVyJ3Mgc2V0RW5h
YmxlZCgpCit2b2lkIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpzZXRFbmFibGVkKGJvb2wgZW5hYmxl
ZCkgCit7IAorICAgIGlmICghbV9ub3RpZmllckFPKSB7CisgICAgICAgIC8vIFdlIGRlbGV0ZWQg
dGhlIEFPIHByZXZpb3VzbHksIHNvIGZpcmUgYSBkZWZlcnJlZCBpbml0aWFsaXphdGlvbiByZXF1
ZXN0IHZpYSBwb3N0RXZlbnQoKS4KKyAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBzdXBw
b3J0IFFPYmplY3QtPm1vdmVUb1RocmVhZCgpCisgICAgICAgIC8vIE5PVEU6IFdlIGRpc2NhcmQg
dGhlIHNwZWNpZmllZCBib29sZWFuIGFyZ3VtZW50LCBhbmQgYmxhbmtldCBlbmFibGUgbGF0ZXIg
b24uCisgICAgICAgIFFFdmVudCogcG9zdFRocmVhZENoYW5nZUV2ZW50ID0gbmV3IFFFdmVudChQ
b3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlKTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6cG9z
dEV2ZW50KHRoaXMsIHBvc3RUaHJlYWRDaGFuZ2VFdmVudCk7CisgICAgICAgIHJldHVybjsgCisg
ICAgfQorCisgICAgbV9ub3RpZmllckFPLT5zZXRFbmFibGVkKGVuYWJsZWQpOworfQorCisvLyBU
aGlzIGV2ZW50IGhhbmRsZXIgZXhpc3RzIHB1cmVseSB0byBzdXBwb3J0IFFPYmplY3QtPm1vdmVU
b1RocmVhZC4KKy8vIFN5bWJpYW4gYWN0aXZlIG9iamVjdHMgKEFPcykgYXJlIGJvdW5kIHRvIGFu
IEFjdGl2ZSBTY2hlZHVsZXIgKEFTKSB3aGljaCBpcyB0aHJlYWQtbG9jYWwuCisvLyBUaGVyZWZv
cmUsIHRoZSBBTyBtdXN0IGJlIHJlLWNyZWF0ZWQgb24gdGhlIG5ldyB0aHJlYWQgb25jZSB0aGUg
cGFyZW50IFFPYmplY3QgaGFzIG1vdmVkCisvLyB0byB0aGUgbmV3IHRocmVhZAorYm9vbCBRU3lt
YmlhblBpcGVOb3RpZmllcjo6ZXZlbnQoUUV2ZW50KiBldikKK3sgICAgICAgIAorICAgIGlmIChl
di0+dHlwZSgpID09IFFFdmVudDo6VGhyZWFkQ2hhbmdlKSB7IC8vIHByZS1taWdyYXRpb24gZXZl
bnQKKyAgICAgICAgaWYgKG1fbm90aWZpZXJBTykgeworICAgICAgICAgICAgaWYgKG1fbm90aWZp
ZXJBTy0+SXNBZGRlZCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBvbGRTdGF0ZSA9IG1fbm90
aWZpZXJBTy0+SXNBY3RpdmUoKTsKKyAgICAgICAgICAgICAgICBtX25vdGlmaWVyQU8tPkRlcXVl
KCk7CisgICAgICAgICAgICB9ICAgICAKKyAgICAgICAgICAgIGRlbGV0ZSBtX25vdGlmaWVyQU87
CisgICAgICAgICAgICBtX25vdGlmaWVyQU8gPSAwOworICAgICAgICB9CisgICAgICAgIC8vIEZp
cmUgYSBkZWZlcnJlZCBpbml0aWFsaXphdGlvbiByZXF1ZXN0CisgICAgICAgIFFFdmVudCogcG9z
dFRocmVhZENoYW5nZUV2ZW50ID0gbmV3IFFFdmVudChQb3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBl
KTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KHRoaXMsIHBvc3RUaHJlYWRD
aGFuZ2VFdmVudCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gCisgICAgCisgICAgaWYg
KGV2LT50eXBlKCkgPT0gUG9zdFRocmVhZENoYW5nZUV2ZW50VHlwZSkgeyAvLyBjdXN0b20sIHBv
c3QtbWlncmF0aW9uIGV2ZW50CisgICAgICAgIGlmICghbV9ub3RpZmllckFPKSB7CisgICAgICAg
ICAgICBtX25vdGlmaWVyQU8gPSBuZXcgU3ltYmlhblBpcGVBY3RpdmVPYmplY3QobV9waXBlLCBt
X3R5cGUsIG1fYnl0ZXMsIHRoaXMpOworICAgICAgICAgICAgLy8gTk9URTogV2UgcHJlc3VtcHRp
dmVseSBlbmFibGUgd2F0Y2gsIGV2ZW4gdGhvdWdoIG9sZFN0YXRlIG1heSBiZSBmYWxzZSBhYm92
ZS4KKyAgICAgICAgICAgIG1fbm90aWZpZXJBTy0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gdHJ1ZTsgCisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJp
YW5QaXBlTm90aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lh
IENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgUVN5
bWJpYW5QaXBlTm90aWZpZXJfaAorI2RlZmluZSBRU3ltYmlhblBpcGVOb3RpZmllcl9oCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNs
dWRlIDxRRXZlbnQ+CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlw
ZS5oPgorCitjbGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDsKKworY2xhc3MgUVN5bWJpYW5Q
aXBlTm90aWZpZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QKK3B1YmxpYzogCisg
ICAgZW51bSBFdmVudFR5cGUgeworICAgICAgICBQaXBlUmVhZERhdGFBdmFpbGFibGUsIC8vIGRh
dGEgY2FuIGJlIHJlYWQKKyAgICAgICAgUGlwZVdyaXRlU3BhY2VBdmFpbGFibGUgLy8gd3JpdGUg
cGlwZSBjYW4gdGFrZSBtb3JlIGRhdGEKKyAgICB9OworICAgIFFTeW1iaWFuUGlwZU5vdGlmaWVy
KFJQaXBlJiwgRXZlbnRUeXBlLCBpbnQsIFFPYmplY3QqIHBhcmVudCA9IDApOworICAgIH5RU3lt
YmlhblBpcGVOb3RpZmllcigpOworICAgIGJvb2wgZXZlbnQoUUV2ZW50Kik7CisgICAgCitwdWJs
aWMgc2xvdHM6CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCitzaWduYWxzOgorICAgIC8v
IGVtaXR0ZWQgd2hlbiBQaXBlUmVhZERhdGFBdmFpbGFibGUgb2NjdXJzCisgICAgdm9pZCByZWFk
eVRvUmVhZChpbnQpOworICAgIC8vIGVtaXR0ZWQgd2hlbiBQaXBlV3JpdGVTcGFjZUF2YWlsYWJs
ZSBvY2N1cnMKKyAgICB2b2lkIHJlYWR5VG9Xcml0ZShpbnQpOworICAgIHZvaWQgZXJyb3JPY2N1
cmVkKGludCk7CisgICAgCitwcml2YXRlOiAKKyAgICBSUGlwZSBtX3BpcGU7IAorICAgIEV2ZW50
VHlwZSBtX3R5cGU7CisgICAgaW50IG1fYnl0ZXM7ICAgCisgICAgU3ltYmlhblBpcGVBY3RpdmVP
YmplY3QqIG1fbm90aWZpZXJBTzsKKworICAgIC8vIEN1c3RvbSBldmVudCB0byBoZWxwIHdpdGgg
UU9iamVjdC0+bW92ZVRvVGhyZWFkKCkgCisgICAgc3RhdGljIGNvbnN0IFFFdmVudDo6VHlwZSBQ
b3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlID0gKFFFdmVudDo6VHlwZSkoUUV2ZW50OjpVc2VyICsg
MTAwKTsKKyAgICAgICAgCisgICAgZnJpZW5kIGNsYXNzIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0
OworICAgIFFfRElTQUJMRV9DT1BZKFFTeW1iaWFuUGlwZU5vdGlmaWVyKQorfTsKKworI2VuZGlm
IC8vIE9TKFNZTUJJQU4pIAorCisjZW5kaWYgLy8gUVN5bWJpYW5QaXBlTm90aWZpZXJfaAorCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRGT1JNKFFUKSAmJiBPUyhTWU1CSUFOKQorI2luY2x1ZGUg
IlN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmgiCisKKyNpbmNsdWRlICJRU3ltYmlhblBpcGVOb3Rp
Zmllci5oIgorI2luY2x1ZGUgPHBsYXRmb3JtL3JwaXBlLmg+CisKKworLy8gVGhlIFN5bWJpYW4g
QWN0aXZlIE9iamVjdCB0aGF0IHJlZ2lzdGVycyBub3RpZmljYXRpb24gcmVxdWVzdHMgd2l0aCB0
aGUga2VybmVsLCBzaW1pbGFyIHRvIFBPU0lYJ3Mgc2VsZWN0KCkgc3lzdGVtIGNhbGwKKy8vIE5v
dGUgdGhhdCB1bmxpa2UgYW55dGhpbmcgb24gVW5peCwgU3ltYmlhbiBBY3RpdmUgT2JqZWN0cyBh
cmUgc2NoZWR1bGFibGUgb2JqZWN0cyB0aGF0IGFyZSBib3VuZCB0byB0aGUgY3VycmVudCB0aHJl
YWQncyBBY3RpdmUgU2NoZWR1bGVyLiAKKy8vIFRoZXJlZm9yZSB0aGV5IGFyZSBhIGxpZ2h0d2Vp
Z2h0IHZlcnNpb24gb2YgdGhyZWFkcyBmcm9tIGEgcmVzb3VyY2UgdXRpbGl6YXRpb24gUE9WLiAK
K1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0OjpTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChSUGlwZSBw
aXBlLCBRU3ltYmlhblBpcGVOb3RpZmllcjo6RXZlbnRUeXBlIHR5cGUsIGludCBzcGFjZUluQnl0
ZXMsIFFTeW1iaWFuUGlwZU5vdGlmaWVyKiBxcSkKKyAgICA6IENBY3RpdmUoQ0FjdGl2ZTo6RVBy
aW9yaXR5U3RhbmRhcmQpCisgICAgLCBtX3BpcGUocGlwZSkKKyAgICAsIG1fdHlwZSh0eXBlKQor
ICAgICwgbV9ieXRlcyhzcGFjZUluQnl0ZXMpCisgICAgLCBtX3BhcmVudChxcSkKK3sgCisgICAg
Q0FjdGl2ZVNjaGVkdWxlcjo6QWRkKHRoaXMpOworfQorICAgIAorU3ltYmlhblBpcGVBY3RpdmVP
YmplY3Q6On5TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCgpIAoreyAKKyAgICBDYW5jZWwoKTsKK30K
Kwordm9pZCBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQp
IAoreworICAgIC8vIHN0YXJ0IGxpc3RlbmluZworICAgIGlmIChlbmFibGVkICYmICFJc0FjdGl2
ZSgpKSB7ICAKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlw
ZVJlYWREYXRhQXZhaWxhYmxlKSB7IAorICAgICAgICAgICAgbV9waXBlLk5vdGlmeURhdGFBdmFp
bGFibGUoaVN0YXR1cyk7CisgICAgICAgICAgICBTZXRBY3RpdmUoKTsgLy8gYmFzZSBjbGFzcyBt
ZXRob2QgdG8gZGVjbGFyZSB0aGUgYWJvdmUgcmVxdWVzdCBhcyAicGVuZGluZyIgY29tcGxldGlv
bgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlw
ZU5vdGlmaWVyOjpQaXBlV3JpdGVTcGFjZUF2YWlsYWJsZSkgeworICAgICAgICAgICAgaW50IGZy
ZWVTcGFjZU5lZWRlZCA9IG1fYnl0ZXMgPCAwID8gMSA6IG1fYnl0ZXM7IAorICAgICAgICAgICAg
bV9waXBlLk5vdGlmeVNwYWNlQXZhaWxhYmxlKGZyZWVTcGFjZU5lZWRlZCwgaVN0YXR1cyk7Cisg
ICAgICAgICAgICBTZXRBY3RpdmUoKTsgLy8gYmFzZSBjbGFzcyBtZXRob2QgdG8gZGVjbGFyZSB0
aGUgYWJvdmUgcmVxdWVzdCBhcyAicGVuZGluZyIgY29tcGxldGlvbgorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIHN0b3AgbGlzdGVuaW5n
CisgICAgaWYgKCFlbmFibGVkKSB7CisgICAgICAgIENhbmNlbCgpOyAvLyBBdXRvbWF0aWNhbGx5
IGxlYWRzIHRvIGEgRG9DYW5jZWwoKSAKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworLy8g
VGhpcyBtZXRob2QgZ2V0cyBydW4gYnkgdGhlIFN5bWJpYW4gT1MgQWN0aXZlIFNjaGVkdWxlciB3
aGVuIHRoZQorLy8gcmVxdWVzdCBpbml0aWF0ZWQgYnkgTm90aWZ5RGF0YUF2YWlsYWJsZSBhYm92
ZSBpcyBtYXJrZWQgYXMgY29tcGxldGVkCisvLyBXZSBzZW5kIGEgUXQgc2lnbmFsIHZpYSBvdXIg
cGFyZW50IFFPYmplY3QsIGFuZCB0aGVuIGltcGxpY2l0bHkgZ28KKy8vIGludG8gYSBkaXNhYmxl
ZCBzdGF0ZSwgaS5lIG5vdGlmaWNhdGlvbnMgYXJlIG9mZiAgCit2b2lkIFN5bWJpYW5QaXBlQWN0
aXZlT2JqZWN0OjpSdW5MKCkgCit7CisgICAgaWYgKGlTdGF0dXMgIT0gS0Vyck5vbmUpIHsKKyAg
ICAgICAgZW1pdCBtX3BhcmVudC0+ZXJyb3JPY2N1cmVkKGlTdGF0dXMuSW50KCkpOworICAgICAg
ICByZXR1cm47IAorICAgIH0KKyAgICAKKyAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5v
dGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsKKyAgICAgICAgY29uc3QgaW50IGJ5dGVz
QXZhaWxhYmxlID0gIG1fcGlwZS5TaXplKCk7IC8vIHBlZWsgYnl0ZXMgYXZhaWxhYmxlIHRvIHJl
YWQKKyAgICAgICAgaWYgKGJ5dGVzQXZhaWxhYmxlID4gMCkKKyAgICAgICAgICAgIGVtaXQgbV9w
YXJlbnQtPnJlYWR5VG9SZWFkKGJ5dGVzQXZhaWxhYmxlKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlV3Jp
dGVTcGFjZUF2YWlsYWJsZSkgeyAKKyAgICAgICAgZW1pdCBtX3BhcmVudC0+cmVhZHlUb1dyaXRl
KDApOworICAgICAgICByZXR1cm47CisgICAgfQorCit9CisgIAordm9pZCBTeW1iaWFuUGlwZUFj
dGl2ZU9iamVjdDo6RG9DYW5jZWwoKSAKK3sgCisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBp
cGVOb3RpZmllcjo6UGlwZVJlYWREYXRhQXZhaWxhYmxlKSB7IAorICAgICAgICBtX3BpcGUuQ2Fu
Y2VsRGF0YUF2YWlsYWJsZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgICAgICAgICAg
ICAgCisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVdyaXRlU3Bh
Y2VBdmFpbGFibGUpIHsgCisgICAgICAgIG1fcGlwZS5DYW5jZWxTcGFjZUF2YWlsYWJsZSgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorfQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBl
QWN0aXZlT2JqZWN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9D
b3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
ICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpZm5kZWYgU3ltYmlhblBpcGVBY3RpdmVP
YmplY3RfaAorI2RlZmluZSBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdF9oCisKKyNpbmNsdWRlICJR
U3ltYmlhblBpcGVOb3RpZmllci5oIgorI2luY2x1ZGUgInFnbG9iYWwuaCIKKyNpbmNsdWRlIDxl
MzJiYXNlLmg+CisjaW5jbHVkZSA8cGxhdGZvcm0vcnBpcGUuaD4KKworY2xhc3MgU3ltYmlhblBp
cGVBY3RpdmVPYmplY3QgOiBwdWJsaWMgQ0FjdGl2ZSB7CitwdWJsaWM6CisgICAgU3ltYmlhblBp
cGVBY3RpdmVPYmplY3QoUlBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpFdmVudFR5cGUsIGlu
dCwgUVN5bWJpYW5QaXBlTm90aWZpZXIqKTsKKyAgICB+U3ltYmlhblBpcGVBY3RpdmVPYmplY3Qo
KTsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworICAgIAorICAg
IHZvaWQgUnVuTCgpOworICAgIHZvaWQgRG9DYW5jZWwoKTsgCisKKyAgICBSUGlwZSBtX3BpcGU7
CisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSBtX3R5cGU7CisgICAgaW50IG1f
Ynl0ZXM7IC8vIG9ubHkgdXNlZCBmb3Igd3JpdGUgcGlwZTsgLTEgbWVhbnMgdW51c2VkCisgICAg
CisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXIgKiBtX3BhcmVudDsKKyAgICBmcmllbmQgY2xhc3Mg
UVN5bWJpYW5QaXBlTm90aWZpZXI7Cit9OworCisjZW5kaWYgLy8gU3ltYmlhblBpcGVBY3RpdmVP
YmplY3RfaAorCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0
YWNobWVudFVuaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNp
ZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKICNpbmNsdWRlICJBdHRhY2htZW50LmgiCiAKICNp
bmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQ4LDMgKzQ5LDYgQEAgdm9pZCBBdHRhY2htZW50OjpkaXNw
b3NlKCkKIH0KIAogfSAvLyBuYW1lc3BhY2UgQ29yZUlQQworCisjZW5kaWYKKwpJbmRleDogU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1
LDggQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBIQVZFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRF
bmNvZGVyLmgiCkBAIC0zOTksMyArNDAxLDYgQEAgdm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRD
bG9zZUNvbm5lY3RpbwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKKworI2VuZGlm
IC8vIFVOSVhfRE9NQUlOX1NPQ0tFVFMKKwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0v
cXQvU2hhcmVkTWVtb3J5U3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5U3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENv
cnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJTaGFyZWRN
ZW1vcnkuaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgorI2luY2x1ZGUgIkFyZ3Vt
ZW50RW5jb2Rlci5oIgorI2luY2x1ZGUgPGUzMm1hdGguaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0u
aD4KKworCituYW1lc3BhY2UgV2ViS2l0IHsKKworU2hhcmVkTWVtb3J5OjpIYW5kbGU6OkhhbmRs
ZSgpCisgICAgOiBtX2NodW5rTmFtZSgwKQorICAgICwgbV9zaXplKDApCit7Cit9CisKK1NoYXJl
ZE1lbW9yeTo6SGFuZGxlOjp+SGFuZGxlKCkKK3sgICAKK30KKworYm9vbCBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6aXNOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fY2h1bmtOYW1lOworfQor
Cit2b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjplbmNvZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNv
ZGVyKiBlbmNvZGVyKSBjb25zdAoreworICAgIEFTU0VSVCghaXNOdWxsKCkpOyAgICAKKyAgICBl
bmNvZGVyLT5lbmNvZGVVSW50MzIobV9zaXplKTsKKyAgICAvLyBuYW1lIG9mIHRoZSBnbG9iYWwg
Y2h1bmsgKG1hc3F1ZXJhZGluZyBhcyB1aW50MzJfdCBmb3IgZWFzZSBvZiBzZXJpYWxpemF0aW9u
KQorICAgIGVuY29kZXItPmVuY29kZVVJbnQzMihtX2NodW5rTmFtZSk7Cit9CisKK2Jvb2wgU2hh
cmVkTWVtb3J5OjpIYW5kbGU6OmRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqIGRlY29k
ZXIsIEhhbmRsZSYgaGFuZGxlKQoreworICAgIHNpemVfdCBzaXplOworICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlVUludDMyKHNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7IAorICAgIAorICAg
IHVpbnQzMl90IGNodW5rTmFtZTsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQzMihjaHVu
a05hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgCisgICAgaGFuZGxlLm1fc2l6
ZSA9IHNpemU7CisgICAgaGFuZGxlLm1fY2h1bmtOYW1lID0gY2h1bmtOYW1lOworICAgIHJldHVy
biB0cnVlOworfQorCitQYXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVh
dGUoc2l6ZV90IHNpemUpCit7CisgICAgLy8gT24gU3ltYmlhbiwgZ2xvYmFsIGNodW5rcyAoc2hh
cmVkIG1lbW9yeSBzZWdtZW50cykgaGF2ZSBzeXN0ZW0tdW5pcXVlIG5hbWVzLCBzbyB3ZSBwaWNr
IGEgcmFuZG9tIAorICAgIC8vIG51bWJlciBmcm9tIHRoZSBrZXJuZWwncyByYW5kb20gcG9vbCBh
bmQgdXNlIGl0IGFzIGEgc3RyaW5nLgorICAgIC8vIFVzaW5nIGFuIGludGVnZXIgc2ltcGxpZmll
cyBzZXJpYWxpemF0aW9uIG9mIHRoZSBuYW1lIGluIEhhbmRsZTo6ZW5jb2RlKCkKKyAgICB1aW50
MzJfdCByYW5kb20gPSBNYXRoOjpSYW5kb20oKTsKKworICAgIFRCdWY8S01heEtlcm5lbE5hbWU+
IGNodW5rTmFtZTsKKyAgICBjaHVua05hbWUuRm9ybWF0KF9MKCIlZCIpLCByYW5kb20pOworCisg
ICAgUkNodW5rIGNodW5rOworICAgIFRJbnQgZXJyb3IgPSBjaHVuay5DcmVhdGVHbG9iYWwoY2h1
bmtOYW1lLCBzaXplLCBzaXplKTsKKyAgICBpZiAoZXJyb3IpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5ldyBTaGFy
ZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1faGFuZGxlID0gY2h1bmsuSGFuZGxlKCk7
CisgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBjaHVuay5TaXplKCk7CisgICAgc2hhcmVkTWVt
b3J5LT5tX2RhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oY2h1bmsuQmFzZSgpKTsKKyAgICAgICAg
CisgICAgcmV0dXJuIHNoYXJlZE1lbW9yeS5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8U2hh
cmVkTWVtb3J5PiBTaGFyZWRNZW1vcnk6OmNyZWF0ZShjb25zdCBIYW5kbGUmIGhhbmRsZSwgUHJv
dGVjdGlvbiBwcm90ZWN0aW9uKQoreworICAgIGlmIChoYW5kbGUuaXNOdWxsKCkpCisgICAgICAg
IHJldHVybiAwOworICAgICAKKyAgICAvLyBDb252ZXJ0IG51bWJlciB0byBzdHJpbmcsIGFuZCBv
cGVuIHRoZSBnbG9iYWwgY2h1bmsKKyAgICBUQnVmPEtNYXhLZXJuZWxOYW1lPiBjaHVua05hbWU7
CisgICAgY2h1bmtOYW1lLkZvcm1hdChfTCgiJWQiKSwgaGFuZGxlLm1fY2h1bmtOYW1lKTsKKwor
ICAgIFJDaHVuayBjaHVuazsKKyAgICBUSW50IGVycm9yID0gY2h1bmsuT3Blbkdsb2JhbChjaHVu
a05hbWUsIGZhbHNlKTsgLy8gTk9URTogU3ltYmlhbiBPUyBkb2Vzbid0IHN1cHBvcnQgcmVhZC1v
bmx5IGdsb2JhbCBjaHVua3MKKyAgICBpZiAoZXJyb3IpIAorICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgCisgICAgUmVmUHRyPFNoYXJlZE1lbW9yeT4gc2hhcmVkTWVtb3J5KGFkb3B0UmVmKG5l
dyBTaGFyZWRNZW1vcnkpKTsKKyAgICBzaGFyZWRNZW1vcnktPm1faGFuZGxlID0gY2h1bmsuSGFu
ZGxlKCk7CisgICAgc2hhcmVkTWVtb3J5LT5tX3NpemUgPSBjaHVuay5TaXplKCk7CisgICAgc2hh
cmVkTWVtb3J5LT5tX2RhdGEgPSBzdGF0aWNfY2FzdDx2b2lkKj4oY2h1bmsuQmFzZSgpKTsKKyAg
ICAgIAorICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQorCitTaGFyZWRNZW1v
cnk6On5TaGFyZWRNZW1vcnkoKQoreworICAgIFJDaHVuayBjaHVuazsKKyAgICBpZiAoIWNodW5r
LlNldFJldHVybmVkSGFuZGxlKG1faGFuZGxlKSkgeworICAgICAgICBUSGFuZGxlSW5mbyBpbmZv
OworICAgICAgICBjaHVuay5IYW5kbGVJbmZvKCZpbmZvKTsKKyAgICAgICAgLy8gRklYTUU6IFdl
IG5lZWQgdG8gZmlndXJlIG91dCB3aGVuIHRvIERlY29tbWl0KCkgbWVtb3J5IGZyb20gdGhlIGNo
dW5rCisgICAgICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGFsc28gdW5kZXJzdGFuZCBob3cgQ2xv
c2UoKSBkZWNyZW1lbnRzIHRoZSBrZXJuZWwtc2lkZSByZWYgY291bnQgb2YgdGhlIAorICAgICAg
ICAvLyBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgYW5kIGxlYWRzIHRvIHByZW1hdHVyZSBkZWNvbW1p
dHMoKSBvZiB0aGUgc2hhcmVkIG1lbW9yeSBhcmVhCisgICAgfQorfQorCitib29sIFNoYXJlZE1l
bW9yeTo6Y3JlYXRlSGFuZGxlKEhhbmRsZSYgaGFuZGxlLCBQcm90ZWN0aW9uIHByb3RlY3Rpb24p
Cit7CisgICAgQVNTRVJUX0FSRyhoYW5kbGUsIGhhbmRsZS5pc051bGwoKSk7CisgICAgICAgIAor
ICAgIFJDaHVuayBjaHVuazsgCisgICAgaWYgKGNodW5rLlNldFJldHVybmVkSGFuZGxlKG1faGFu
ZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIENvbnZlcnQgdGhlIG5h
bWUgKHN0cmluZyBmb3JtKSB0byBhIHVpbnQzMl90LgorICAgIFROYW1lIGdsb2JhbENodW5rTmFt
ZSA9IGNodW5rLk5hbWUoKTsKKyAgICBUTGV4IGxleGVyKGdsb2JhbENodW5rTmFtZSk7CisgICAg
VFVpbnQzMiBuYW1lQXNJbnQgPSAwOyAKKyAgICBpZiAobGV4ZXIuVmFsKG5hbWVBc0ludCwgRURl
Y2ltYWwpKSAKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAgICAgIAorICAgIGhhbmRsZS5t
X2NodW5rTmFtZSA9IG5hbWVBc0ludDsKKyAgICBoYW5kbGUubV9zaXplID0gbV9zaXplOworICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCit1bnNpZ25lZCBTaGFyZWRNZW1vcnk6OnN5c3RlbVBh
Z2VTaXplKCkKK3sKKyAgICByZXR1cm4gUEFHRV9TSVpFOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVl
dWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1
ZXVlUXQuY3BwCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0
L1dvcmtRdWV1ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMjMgQEAgcHVibGlj
OgogICAgIFdvcmtJdGVtKiBtX3dvcmtJdGVtOwogfTsKIAorI2lmIE9TKFNZTUJJQU4pCitRU3lt
YmlhblBpcGVOb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclBpcGVFdmVudEhhbmRsZXIoUlBp
cGUgcGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSB0eXBlLCBQYXNzT3duUHRy
PFdvcmtJdGVtPiB3b3JrSXRlbSkgCit7CisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXIqIG5vdGlm
aWVyID0gbmV3IFFTeW1iaWFuUGlwZU5vdGlmaWVyKHBpcGUsIHR5cGUsIC0xKTsKKyAgICAgCisg
ICAgbm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOworICAgIG5vdGlmaWVyLT5tb3ZlVG9UaHJl
YWQobV93b3JrVGhyZWFkKTsKKyAgICAKKyAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1R
dCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywgbm90aWZpZXIsIFNJR05BTChyZWFk
eVRvUmVhZChpbnQpKSwgd29ya0l0ZW0ubGVha1B0cigpKTsKKyAgICAKKyAgICBpdGVtUXQtPm1v
dmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOyAgICAKKyAgICAKKyAgICBub3RpZmllci0+c2V0RW5h
YmxlZCh0cnVlKTsKKyAgICAKKyAgICByZXR1cm4gbm90aWZpZXI7Cit9CisjZWxzZQogUVNvY2tl
dE5vdGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0RXZlbnRIYW5kbGVyKGludCBzb2Nr
ZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlR5cGUgdHlwZSwgUGFzc093blB0cjxXb3Jr
SXRlbT4gd29ya0l0ZW0pCiB7CiAgICAgQVNTRVJUKG1fd29ya1RocmVhZCk7CkBAIC04OSw2ICsx
MDYsNyBAQCBRU29ja2V0Tm90aWZpZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJTb2NrCiAgICAgbm90
aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgcmV0dXJuIG5vdGlmaWVyOwogfQorI2VuZGlm
CiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxpemUoY29uc3QgY2hhciopCiB7CkBA
IC0xMjAsOCArMTM4LDExIEBAIHZvaWQgV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmtBZnRlckRlbGF5
KFAKIAogdm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29ya09uVGVybWluYXRpb24oV2ViS2l0OjpQ
bGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdv
cmtJdGVtKQogeworICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBhIHByb2Nlc3Mgd2F0
Y2hlciB1c2luZyBTeW1iaWFuIFJQcm9jZXNzCisjaWYgIU9TKFNZTUJJQU4pCiAgICAgV29ya1F1
ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMs
IHByb2Nlc3MsIFNJR05BTChmaW5pc2hlZChpbnQsIFFQcm9jZXNzOjpFeGl0U3RhdHVzKSksIHdv
cmtJdGVtLmxlYWtQdHIoKSk7CiAgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFk
KTsKKyNlbmRpZgogfQogCiAjaW5jbHVkZSAiV29ya1F1ZXVlUXQubW9jIgpJbmRleDogU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4L1NoYXJlZE1lbW9yeVVuaXguY3BwCShyZXZp
c2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5
VW5peC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaWYgSEFWRShNTUFQKQogI2luY2x1ZGUgIlNoYXJlZE1lbW9yeS5oIgog
CiAjaW5jbHVkZSAiQXJndW1lbnREZWNvZGVyLmgiCkBAIC0yMzYsMyArMjM3LDYgQEAgdW5zaWdu
ZWQgU2hhcmVkTWVtb3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYKKwpJbmRleDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVy
L3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCShyZXZpc2lvbiA4NDM5
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNo
ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmICFPUyhTWU1CSUFOKQogI2luY2x1ZGUg
IlByb2Nlc3NMYXVuY2hlci5oIgogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgpAQCAtMTY0LDMg
KzE2NSw1IEBAIHZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAogCiAjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyUXQubW9jIgorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNz
TGF1bmNoZXJTeW1iaWFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3lt
Ymlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODggQEAKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJQcm9jZXNzTGF1
bmNoZXIuaCIKKworI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgi
CisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL3JwaXBlLmgiCisj
aW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUgPHFnbG9iYWwuaD4KKworX0xJVChLV29ya2VyUHJv
Y2Vzc05hbWUsICJRdFdlYlByb2Nlc3MuZXhlIik7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFBy
b2Nlc3MoKQoreworICAgIC8vIE1ha2UgYSBwYWlyIG9mIGhhbGYtZHVwbGV4IHBpcGVzCisgICAg
UlBpcGUqIGxvY2FsUGlwZXMgPSBuZXcgUlBpcGVbMl07IAorICAgIFJQaXBlKiByZW1vdGVQaXBl
cyA9IG5ldyBSUGlwZVsyXTsgCisgICAgIAorICAgIFJQaXBlOjpJbml0KCk7CisgICAgLy8gQ3Jl
YXRlIGEgcGlwZS4gRmlyc3QgYXJnIGlzIHRoZSByZWFkLWVuZCBSUGlwZSBhbmQgdGhlIHNlY29u
ZCBpcyB0aGUgd3JpdGUtZW5kLiAKKyAgICBSUGlwZTo6Q3JlYXRlKENvcmVJUEM6OkNvbm5lY3Rp
b246Ok1heFBpcGVDYXBhY2l0eSwgcmVtb3RlUGlwZXNbMF0sIGxvY2FsUGlwZXNbMV0pOworICAg
IFJQaXBlOjpDcmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6TWF4UGlwZUNhcGFjaXR5LCBsb2Nh
bFBpcGVzWzBdLCByZW1vdGVQaXBlc1sxXSk7CisgICAgCisgICAgLy8gUHJlcGFyZSB0byBsYXVu
Y2ggd29ya2VyIHByb2Nlc3MKKyAgICBSUHJvY2Vzcyogd29ya2VyUHJvY2VzcyA9IG5ldyBSUHJv
Y2VzcygpOworICAgIFRJbnQgZXJyb3IgPSB3b3JrZXJQcm9jZXNzLT5DcmVhdGUoS1dvcmtlclBy
b2Nlc3NOYW1lKCksIEtOdWxsRGVzQyk7CisgICAgaWYgKGVycm9yKQorICAgICAgICBxQ3JpdGlj
YWwoKSA8PCAiIEVycm9yIGluaXRpYWxpemluZyBXZWJLaXQyIHdlYiBwcm9jZXNzICIgPDwgZXJy
b3I7CisKKyAgICAvLyBQYXNzIG93bmVyc2hpcCBvZiBwaXBlcyB2aWEgUlByb2Nlc3MnICJlbnZp
cm9ubWVudCBkYXRhIHNsb3RzIi4gCisgICAgLy8gVGhpcyBpcyB0aGUgU3ltYmlhbiB3YXkgb2Yg
cGFzc2luZyBvd25lcnNoaXAgb2YgaGFuZGxlcyBmcm9tIHBhcmVudCB0byBjaGlsZAorICAgIC8v
IFRoZSBjaG9pY2Ugb2YgMyAmIDQgaXMgYXJiaXRyYXJ5IGFuZCBzaG91bGQgbWF0Y2ggdGhlIHVz
ZSBvbiB0aGUgcmVjZWl2aW5nIHNpZGUgKENvbm5lY3Rpb24uY3BwKQorICAgIHdvcmtlclByb2Nl
c3MtPlNldFBhcmFtZXRlcigzLCByZW1vdGVQaXBlc1swXSk7IC8vIHJlYWRlcgorICAgIHdvcmtl
clByb2Nlc3MtPlNldFBhcmFtZXRlcig0LCByZW1vdGVQaXBlc1sxXSk7IC8vIHdyaXRlcgorICAg
ICAgICAgICAgICAgIAorICAgIC8vIEJsb2NrIHVudGlsIHRoZSByZW1vdGUgcHJvY2VzcyBpcyB1
cAorICAgIHdvcmtlclByb2Nlc3MtPlJlc3VtZSgpOworICAgIFRSZXF1ZXN0U3RhdHVzIGxhdW5j
aFN0YXR1czsgCisgICAgd29ya2VyUHJvY2Vzcy0+UmVuZGV6dm91cyhsYXVuY2hTdGF0dXMpOyAK
KyAgICBVc2VyOjpXYWl0Rm9yUmVxdWVzdChsYXVuY2hTdGF0dXMpOworICAgIAorICAgIGlmIChs
YXVuY2hTdGF0dXMuSW50KCkgIT0gS0Vyck5vbmUpIAorICAgICAgICBxQ3JpdGljYWwoKSA8PCAi
IFdvcmtlciBwcm9jZXNzIGZhaWxlZCB0byBsYXVuY2ggIiA8PCBsYXVuY2hTdGF0dXMuSW50KCk7
CisgICAgCisgICAgLy8gQ2xvc2UgdGhlIHBpcGUgZW5kcyB3ZSBqdXN0IHBhc3NlZCB0byB0aGUg
cmVtb3RlCisgICAgcmVtb3RlUGlwZXNbMF0uQ2xvc2UoKTsgCisgICAgcmVtb3RlUGlwZXNbMV0u
Q2xvc2UoKTsKKyAgICBkZWxldGVbXSByZW1vdGVQaXBlczsKKyAgICAKKyAgICBDb3JlSVBDOjpD
b25uZWN0aW9uOjpJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBsb2NhbFBpcGVzOyAgCisgICAgCisg
ICAgLy8gRGVjbGFyZSBsYXVuY2ggcHJvY2VzcyBhcyBkb25lLiBOb3RlIHRoYXQgdGhpcyBjbGFz
cyBvd25zICd3b3JrZXJQcm9jZXNzJywgYnV0IENvbm5lY3Rpb24gb3ducyAnaWRlbnRpZmllcicg
CisgICAgUnVuTG9vcDo6bWFpbigpLT5zY2hlZHVsZVdvcmsoV29ya0l0ZW06OmNyZWF0ZSh0aGlz
LCAmV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmRpZEZpbmlzaExhdW5jaGluZ1Byb2Nlc3MsIHdv
cmtlclByb2Nlc3MsIGlkZW50aWZpZXIpKTsKK30KKwordm9pZCBQcm9jZXNzTGF1bmNoZXI6OnRl
cm1pbmF0ZVByb2Nlc3MoKQoreworICAgIGlmICghbV9wcm9jZXNzSWRlbnRpZmllcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gSW1wb3J0YW50OiBLaWxsaW5nIGFub3RoZXIgcHJvY2VzcyAo
ZXZlbiBpZiB3ZSBzcGF3bmVkIGl0KSByZXF1aXJlcyBQb3dlck1hbmFnZW1lbnQgY2FwYWJpbGl0
eSwKKyAgICAvLyB3aGljaCBpcyBhIGhpZ2ggYmFyIHRvIGp1bXAgb3ZlciBmb3IgYW55IHVzZXIg
YXBwbGljYXRpb24uIEl0J3MgYWxzbyBhIHNlY3VyaXR5IHJpc2suCisgICAgLy8gVE9ETzogQ2hl
Y2sgaWYgd2Ugc2hvdWxkIHNpZ25hbCB0aGUgd2ViIHByb2Nlc3MgdGhyb3VnaCB0aGUgcGlwZSB0
byB0ZXJtaW5hdGUgaXRzZWxmPworICAgIC8vIC4uYWx0aG91Z2ggdGhhdCB3b24ndCB3b3JrIGlm
IHRoZSBwcm9jZXNzIGlzIHVucmVzcG9uc2l2ZSEKKyAgICBSUHJvY2VzcyBtZTsKKyAgICBpZiAo
bWUuSGFzQ2FwYWJpbGl0eShFQ2FwYWJpbGl0eVBvd2VyTWdtdCkpCisgICAgICAgIG1fcHJvY2Vz
c0lkZW50aWZpZXItPlRlcm1pbmF0ZShLRXJyTm9uZSk7Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5j
aGVyOjpwbGF0Zm9ybUludmFsaWRhdGUoKQoreworICAgIGlmICghbV9wcm9jZXNzSWRlbnRpZmll
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wcm9jZXNzSWRlbnRpZmllci0+Q2xvc2UoKTsK
KyAgICBkZWxldGUgbV9wcm9jZXNzSWRlbnRpZmllcjsKKyAgICBtX3Byb2Nlc3NJZGVudGlmaWVy
ID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExh
dW5jaGVyUXQuY3BwCShyZXZpc2lvbiA4NDM5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcs
MzEgKzQ3LDQxIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAorc3RhdGljIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaW52YWxpZENvbm5l
Y3Rpb25JZGVudGlmaWVyKCkKK3sgCisgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmll
ciBpZGVudGlmaWVyOyAKKyNpZiBPUyhTWU1CSUFOKQorICAgIGlkZW50aWZpZXIgPSAwOyAvLyBp
bnZhbGlkIFJQcm9jZXNzKgorI2Vsc2UKKyAgICBpZGVudGlmaWVyID0gLTE7IC8vIGludmFsaWQg
c29ja2V0IGRlc2NyaXB0b3IKKyNlbmRpZgorICAgIHJldHVybiBpZGVudGlmaWVyOworfQorCiBz
dGF0aWMgdm9pZCogd2ViVGhyZWFkQm9keSh2b2lkKiAvKiBjb250ZXh0ICovKQogewogICAgIC8v
IEluaXRpYWxpemF0aW9uCiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RG
Ojppbml0aWFsaXplTWFpblRocmVhZCgpOwogCi0gICAgLy8gRklYTUU6IFdlIGRvIG5vdCBzdXBw
b3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KKyAgICAvLyBGSVhNRTogVGhlIFF0IHBvcnQgZG9l
cyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cuCiAKLSAgICBXZWJQcm9jZXNzOjpz
aGFyZWQoKS5pbml0aWFsaXplKC0xLCBSdW5Mb29wOjpjdXJyZW50KCkpOworICAgIFdlYlByb2Nl
c3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVyKCksIFJ1
bkxvb3A6OmN1cnJlbnQoKSk7CiAgICAgUnVuTG9vcDo6cnVuKCk7CiAKICAgICByZXR1cm4gMDsK
IH0KIAogQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBUaHJlYWRMYXVuY2hlcjo6Y3Jl
YXRlV2ViVGhyZWFkKCkKLXsKLSAgICBzcmFuZG9tKHRpbWUoMCkpOwotICAgIGludCBjb25uZWN0
aW9uSWRlbnRpZmllciA9IHJhbmRvbSgpOwotCi0gICAgaWYgKCFjcmVhdGVUaHJlYWQod2ViVGhy
ZWFkQm9keSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY29ubmVjdGlvbklkZW50aWZpZXIpLCAi
V2ViS2l0MjogV2ViVGhyZWFkIikpIHsKK3sgIAorICAgIC8vIEZJWE1FOiBUaGUgUXQgcG9ydCBk
b2VzIG5vdCBzdXBwb3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KKyAgICAKKyAgICBpZiAoIWNy
ZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCAwLCAiV2ViS2l0MjogV2ViVGhyZWFkIikpIHsKICAg
ICAgICAgcVdhcm5pbmcoKSA8PCAiZmFpbGVkIHN0YXJ0aW5nIHRocmVhZCI7Ci0gICAgICAgIHJl
dHVybiAwOworICAgICAgICByZXR1cm4gaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVyKCk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGNvbm5lY3Rpb25JZGVudGlmaWVyOworICAgIHJldHVybiBpbnZh
bGlkQ29ubmVjdGlvbklkZW50aWZpZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5R
dC5jcHAJKHJldmlzaW9uIDg0Mzk4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9X
ZWJQcm9jZXNzTWFpblF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiwxMSBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplUHJveHkoKQogCiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9j
ZXNzTWFpblF0KGludCBhcmdjLCBjaGFyKiogYXJndikKIHsKKyNpZiBkZWZpbmVkKFFfT1NfU1lN
QklBTikKKyAgICBSUHJvY2VzcyBwcm9jZXNzOyAKKyAgICBwcm9jZXNzLlNldFByaW9yaXR5KEVQ
cmlvcml0eUJhY2tncm91bmQpOworI2VuZGlmCisgICAgCiAgICAgUUFwcGxpY2F0aW9uOjpzZXRH
cmFwaGljc1N5c3RlbShRTGF0aW4xU3RyaW5nKCJyYXN0ZXIiKSk7CiAgICAgUUFwcGxpY2F0aW9u
KiBhcHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFyZ2MsIGFyZ3YpOwogI2lmbmRlZiBOREVCVUcKQEAg
LTE1Myw2ICsxNTgsMTEgQEAgUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChpbnQg
YQogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFs
aXplTWFpblJ1bkxvb3AoKTsKIAorICAgIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIg
aWRlbnRpZmllcjsgCisjaWYgT1MoU1lNQklBTikKKyAgICAvLyBXZSBvYnRhaW4gdGhlIGhhbmRs
ZXMgZGlyZWN0bHkgZnJvbSB0aGUgImVudmlyb25tZW50IGRhdGEgc2xvdHMiIG9mIHRoZSBSUHJv
Y2VzcworICAgIGlkZW50aWZpZXIgPSAwOyAKKyNlbHNlCiAgICAgLy8gQ3JlYXRlIHRoZSBjb25u
ZWN0aW9uLgogICAgIGlmIChhcHAtPmFyZ3VtZW50cygpLnNpemUoKSA8PSAxKSB7CiAgICAgICAg
IHFEZWJ1ZygpIDw8ICJFcnJvcjogd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4iOwpAQCAtMTYw
LDEyICsxNzAsMTMgQEAgUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChpbnQgYQog
ICAgIH0KIAogICAgIGJvb2wgd2FzTnVtYmVyID0gZmFsc2U7Ci0gICAgaW50IGlkZW50aWZpZXIg
PSBhcHAtPmFyZ3VtZW50cygpLmF0KDEpLnRvSW50KCZ3YXNOdW1iZXIsIDEwKTsKKyAgICBpZGVu
dGlmaWVyID0gYXBwLT5hcmd1bWVudHMoKS5hdCgxKS50b0ludCgmd2FzTnVtYmVyLCAxMCk7CiAg
ICAgaWYgKCF3YXNOdW1iZXIpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkVycm9yOiBjb25uZWN0
aW9uIGlkZW50aWZpZXIgd3JvbmcuIjsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotCisjZW5k
aWYKKyAgICAKICAgICBXZWJLaXQ6OldlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaWRl
bnRpZmllciwgUnVuTG9vcDo6bWFpbigpKTsKIAogICAgIFJ1bkxvb3A6OnJ1bigpOwpJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
ODQ1NTApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBA
QAorMjAxMS0wNC0yMSAgU2lkZGhhcnRoIE1hdGh1ciAgPHNpZGRoYXJ0aC5tYXRodXJAbm9raWEu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtR
dF1bV0syXVtTeW1iaWFuXSBDb3JyZWN0aW9ucyB0byBkZWZhdWx0IHdpbmRvdyBtb2RlIG9uIFN5
bWJpYW4gZGV2aWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTU4NzcKKworICAgICAgICAqIE1pbmlCcm93c2VyL3F0L0Jyb3dzZXJXaW5kb3cuY3Bw
OgorICAgICAgICAoQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyk6CisgICAgICAgICogTWlu
aUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvOgorCiAyMDExLTA0LTIxICBBZGFtIEJhcnRoICA8
YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCklu
ZGV4OiBUb29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcAkocmV2aXNpb24gODQzOTgp
CisrKyBUb29scy9NaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2luZG93LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDExICsxMjMsMTkgQEAgQnJvd3NlcldpbmRvdzo6QnJvd3NlcldpbmRvdyhRV0tD
b250ZXh0KgogICAgIGNvbm5lY3QobV9hZGRyZXNzQmFyLCBTSUdOQUwocmV0dXJuUHJlc3NlZCgp
KSwgU0xPVChjaGFuZ2VMb2NhdGlvbigpKSk7CiAKICAgICBRVG9vbEJhciogYmFyID0gYWRkVG9v
bEJhcigiTmF2aWdhdGlvbiIpOworI2lmIGRlZmluZWQoUV9PU19TWU1CSUFOKQorICAgIGJhci0+
c2V0SWNvblNpemUoUVNpemUoMTYsIDE2KSk7CisjZW5kaWYKICAgICBiYXItPmFkZEFjdGlvbihw
YWdlKCktPmFjdGlvbihRV0tQYWdlOjpCYWNrKSk7CiAgICAgYmFyLT5hZGRBY3Rpb24ocGFnZSgp
LT5hY3Rpb24oUVdLUGFnZTo6Rm9yd2FyZCkpOwogICAgIGJhci0+YWRkQWN0aW9uKHBhZ2UoKS0+
YWN0aW9uKFFXS1BhZ2U6OlJlbG9hZCkpOwogICAgIGJhci0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0
aW9uKFFXS1BhZ2U6OlN0b3ApKTsKKyNpZiBkZWZpbmVkKFFfT1NfU1lNQklBTikKKyAgICBhZGRU
b29sQmFyQnJlYWsoKTsKKyAgICBhZGRUb29sQmFyKCJMb2NhdGlvbiIpLT5hZGRXaWRnZXQobV9h
ZGRyZXNzQmFyKTsKKyNlbHNlCiAgICAgYmFyLT5hZGRXaWRnZXQobV9hZGRyZXNzQmFyKTsKKyNl
bmRpZgogCiAgICAgUVNob3J0Y3V0KiBzZWxlY3RBZGRyZXNzQmFyID0gbmV3IFFTaG9ydGN1dChR
dDo6Q1RSTCB8IFF0OjpLZXlfTCwgdGhpcyk7CiAgICAgY29ubmVjdChzZWxlY3RBZGRyZXNzQmFy
LCBTSUdOQUwoYWN0aXZhdGVkKCkpLCB0aGlzLCBTTE9UKG9wZW5Mb2NhdGlvbigpKSk7CkluZGV4
OiBUb29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJvCShyZXZpc2lvbiA4NDM5OCkKKysrIFRv
b2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybwkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsMjEgQEAgbGludXgtKiB7CiAKIHN5bWJpYW4gewogICAgIFRBUkdFVC5VSUQzID0gMHhB
MDAwRTU0NQotICAgIFRBUkdFVC5DQVBBQklMSVRZID0gUmVhZFVzZXJEYXRhIFdyaXRlVXNlckRh
dGEgTmV0d29ya1NlcnZpY2VzCisgICAgTU1QX1JVTEVTICs9IHBhZ2VkZGF0YQorICAgIAorICAg
IFRBUkdFVC5DQVBBQklMSVRZICo9IFJlYWRVc2VyRGF0YSAKKyAgICBUQVJHRVQuQ0FQQUJJTElU
WSAqPSBXcml0ZVVzZXJEYXRhCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTmV0d29ya1NlcnZp
Y2VzICAjIFF0TmV0d29yayBhbmQgQmVhcmVyCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gUG93
ZXJNZ210ICAgICAgICAjIGtpbGxpbmcgd2ViIHByb2Nlc3MgZnJvbSBVSSBwcm9jZXNzCisgICAg
CisgICAgIyBTZWUgUXRNb2JpbGl0eSBkb2NzIG9uIFN5bWJpYW4gY2FwYWJpbGl0aWVzOiAKKyAg
ICAjIGh0dHA6Ly9kb2MucXQubm9raWEuY29tL3F0bW9iaWxpdHkvcXVpY2tzdGFydC5odG1sCisg
ICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTG9jYXRpb24gICAgICAgICAjIGdlb2xvY2F0aW9uCisg
ICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gUmVhZERldmljZURhdGEgICAjIGdlb2xvY2F0aW9uLCBz
ZW5zb3JzCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gV3JpdGVEZXZpY2VEYXRhICAjIGdlb2xv
Y2F0aW9uCisgICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gTG9jYWxTZXJ2aWNlcyAgICAjIGdlb2xv
Y2F0aW9uLCBzeXNpbmZvCisgICAgCisgICAgIyBXZSBtYXkgbGF0ZXIgbmVlZCBVc2VyRW52aXJv
bm1lbnQgZm9yIG1pYy9jYW1lcmEgaW5wdXQKIH0KIAogY29udGFpbnMoUVRfQ09ORklHLCBvcGVu
Z2wpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90717</attachid>
            <date>2011-04-22 10:16:04 -0700</date>
            <delta_ts>2011-05-17 13:48:18 -0700</delta_ts>
            <desc>Qt-Linux should build correctly</desc>
            <filename>55875_v9.patch</filename>
            <type>text/plain</type>
            <size>51952</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODQ2MjMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTEtMDQtMjIgIFNpZGRoYXJ0aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRd
W1dLMl1bU3ltYmlhbl0gQ29yZUlQQyBpbXBsZW1lbnRhdGlvbiBmb3IgU3ltYmlhbiBPUyAKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU1ODc3CisKKyAg
ICAgICAgKiB3dGYvUGxhdGZvcm0uaDogZXhjbHVkZSBTeW1iaWFuIGZyb20gVU5JWF9ET01BSU5f
U09DS0VUIHVzZXJzCisKIDIwMTEtMDQtMjIgIFBhdHJpY2sgR2Fuc3RlcmVyICA8cGFyb2dhQHdl
YmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gQnVpbGQgZml4IGZvciBFTkFCTEUoSU5U
RVJQUkVURVIpIGFmdGVyIHI4NDU1Ni4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRm
b3JtLmgJKHJldmlzaW9uIDg0NjIzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0
Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogICAgYnJlYWthZ2Vz
IG9uZSBwb3J0IGF0IGEgdGltZS4gKi8KICNkZWZpbmUgV1RGX1VTRV9FWFBPUlRfTUFDUk9TIDAK
IAotI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCisjaWYgKFBMQVRGT1JNKFFUKSAm
JiAhT1MoU1lNQklBTikpIHx8IFBMQVRGT1JNKEdUSykKICNkZWZpbmUgV1RGX1VTRV9VTklYX0RP
TUFJTl9TT0NLRVRTIDEKICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiA4NDYyMykK
KysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEw
MCBAQAorMjAxMS0wNC0yMiAgU2lkZGhhcnRoIE1hdGh1ciAgPHNpZGRoYXJ0aC5tYXRodXJAbm9r
aWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtRdF1bV0syXVtTeW1iaWFuXSBDb3JlIElQQywgcHJvY2VzcyBsYXVuY2hpbmcgYW5kIHNoYXJl
ZCBtZW1vcnkgaW1wbGVtZW50YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU1ODc3CisKKyAgICAgICAgVGhpcyBpbml0aWFsIHBvcnQgdG8gU3lt
YmlhbiBhbGxvd3MgdGhlIFF0IE1pbmlCcm93c2VyIHRvIGxvYWQgZ29vZ2xlLmNvbSBvbiBhIE5v
a2lhIE44LgorICAgICAgICBUaGUgY2hhbmdlIG1heGltaXplcyB1c2Ugb2YgdGhlIGV4aXN0aW5n
IFF0IHBvcnQgb2YgV2ViS2l0Miwgd2hpbGUgaW1wbGVtZW50aW5nIG9ubHkgdGhlIHZlcnkgcGxh
dGZvcm0KKyAgICAgICAgc3BlY2lmaWMgcG9ydGlvbnMgdXNpbmcgcHVyZSBTeW1iaWFuIE9TIEFQ
SXMKKworICAgICAgICBGb3IgSVBDLCB3ZSB1c2UgaGFsZi1kdXBsZXggcGlwZXMuIFRoZSBpbXBs
ZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBkaWZmZXJlbnQgZnJvbSBDb25uZWN0aW9uV2luLmNwcC4K
KyAgICAgICAgRm9yIHByb2Nlc3MgbGF1bmNoaW5nLCB3ZSB1c2UgdGhlIFJQcm9jZXNzIGNsYXNz
IHdoaWNoIGFsbG93cyB0cmFuc2ZlciBvZiBkZXNjcmlwdG9ycyB0byBhIGNoaWxkLgorICAgICAg
ICBGb3Igc2hhcmVkIG1lbW9yeSwgd2UgdXNlIGdsb2JhbCBSQ2h1bmtzLgorCisgICAgICAgICog
UGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERlY29kZXIuY3BwOiBndWFyZCBhdHRhY2htZW50IHVz
ZXJzIHdpdGggVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgICAgIChDb3JlSVBDOjpBcmd1
bWVudERlY29kZXI6On5Bcmd1bWVudERlY29kZXIpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJ
UEMvQXJndW1lbnRFbmNvZGVyLmNwcDogZ3VhcmQgYXR0YWNobWVudCB1c2VycyB3aXRoIFVTRShV
TklYX0RPTUFJTl9TT0NLRVRTKQorICAgICAgICAoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyOjp+
QXJndW1lbnRFbmNvZGVyKToKKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlv
bi5oOiBBc3NvcnRlZCB0eXBlZGVmcyBhbmQgbWVtYmVyIHZhcmlhYmxlcyBmb3IgSVBDIGNoYW5u
ZWwKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcDog
QWRkZWQuIE1haW4gY29ubmVjdGlvbiBzZXR1cCBhbmQgSVBDIGNsYXNzLgorICAgICAgICBGb3Ig
dGhlIHdvcmtlciBwcm9jZXNzLCB0aGlzIGNsYXNzIG9wZW5zIHRoZSBwaXBlcyBwYXNzZWQgYnkg
dGhlIFVJIHByb2Nlc3MncyBQcm9jZXNzTGF1bmNoZXJTeW1iaWFuLmNwcC4KKyAgICAgICAgVGhl
c2UgcGlwZXMgYXJlIGFscmVhZHkgaW4gY29ubmVjdGVkIHN0YXRlIHdoZW4gdGhlIHdvcmtlciBw
cm9jZXNzIHJlY2VpdmVzIHRoZW0uCisgICAgICAgIFNpbmNlIHBpcGVzIGFyZSBhIHN0cmVhbSBv
cmllbnRlZCBjaGFubmVsLCB3ZSBkbyBwYXJzaW5nIG9mIHRoZSByZWFkIGJ1ZmZlciB0byBleHRy
YWN0CisgICAgICAgIGluZGl2aWR1YWwgbWVzc2FnZXMgKGRlbGltaXRlZCBieSBhIHRyYWlsZXIp
LiBNZXNzYWdlcyBhcmUgdGhlbiBkaXNwYXRjaGVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLgorICAg
ICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKToKKyAgICAgICAg
KENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisgICAgICAgIChDb3Jl
SVBDOjppc01lc3NhZ2VUcmFpbGVyKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnJl
YWR5UmVhZEhhbmRsZXIpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6b3Blbik6Cisg
ICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3Nh
Z2VzKToKKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2Up
OgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9u
T25Qcm9jZXNzVGVybWluYXRpb24pOgorCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9xdC9R
U3ltYmlhblBpcGVOb3RpZmllci5jcHA6IEFkZGVkLiBRdCBzdHlsZSBRT2JqZWN0IHdoaWNoIHdy
YXBzCisgICAgICAgIGEgU3ltYmlhbiBBY3RpdmUgT2JqZWN0IChBTykuIE1vbml0b3IgZGF0YSBh
dmFpbGFibGUgdG8gcmVhZCBldmVudHMgb24gYSBwaXBlLgorICAgICAgICBIZWxwcyB1cyB0YWxr
IGluIFF0LXNwZWFrIHdpdGggcmVzdCBvZiBXZWJLaXQyLVF0IHBvcnQuCisgICAgICAgIChRU3lt
YmlhblBpcGVOb3RpZmllcjo6UVN5bWJpYW5QaXBlTm90aWZpZXIpOgorICAgICAgICAoUVN5bWJp
YW5QaXBlTm90aWZpZXI6On5RU3ltYmlhblBpcGVOb3RpZmllcik6CisgICAgICAgIChRU3ltYmlh
blBpcGVOb3RpZmllcjo6c2V0RW5hYmxlZCk6CisgICAgICAgIChRU3ltYmlhblBpcGVOb3RpZmll
cjo6ZXZlbnQpOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90
aWZpZXIuaDogQWRkZWQuCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdC5jcHA6IEFkZGVkLiBUaGUgU3ltYmlhbiBBTyB3aGljaAorICAgICAgICBy
ZWdpc3RlcnMgbm90aWZpY2F0aW9uIHJlcXVlc3RzIHdpdGggdGhlIGtlcm5lbAorICAgICAgICAo
U3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KToKKyAgICAg
ICAgKFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0Ojp+U3ltYmlhblBpcGVBY3RpdmVPYmplY3QpOgor
ICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OnNldEVuYWJsZWQpOgorICAgICAgICAo
U3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlJ1bkwpOiBDYWxsZWQgYnkgdGhlIE9TIHdoZW4gbm90
aWZpY2F0aW9uIG9jY3VycworICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRvQ2Fu
Y2VsKToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0Lmg6IEFkZGVkLgorCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1l
bnRVbml4LmNwcDogZ3VhcmQgd2l0aCBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKKyAgICAgICAg
KiBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwOiBkaXR0bworCisgICAg
ICAgICogUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oOiBSUHJvY2VzcyBpcyB0
aGUgZGVzaWduYXRlZCBpZGVudGlmaWVyCisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5
Lmg6IE9TIHNwZWNpZmljIGhhbmRsZSBhbmQgbmFtZSB0eXBlZGVmcworICAgICAgICAqIFBsYXRm
b3JtL1dvcmtRdWV1ZS5oOiBuZXcgcmVnaXN0ZXJFdmVudEhhbmRsZXIgc2lnbmF0dXJlIGZvciBR
dCBvbiBTeW1iaWFuCisKKyAgICAgICAgKiBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFu
LmNwcDogQWRkZWQuIFVzZSBuYW1lZCBnbG9iYWwgUkNodW5rcy4KKyAgICAgICAgS25vd24gaXNz
dWUgaXMgdGhlIGFic2VuY2Ugb2YgQ2xvc2UoKWluZyB0aGUgY2h1bmsgaGFuZGxlIGluIFNoYXJl
ZE1lbW9yeSBkJ3RvcgorICAgICAgICBUaHVzIHdlIGxlYWsgbWVtb3J5IGF0IHRoZSBtb21lbnQu
IE5lZWRzIHNlcGFyYXRlIHdvcmsgYW5kIHBhdGNoIHRvIGZpZ3VyZSBvdXQuCisgICAgICAgIChX
ZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlOjpIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpT
aGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1l
bW9yeTo6SGFuZGxlOjppc051bGwpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1vcnk6Okhh
bmRsZTo6ZW5jb2RlKToKKyAgICAgICAgKFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmRl
Y29kZSk6CisgICAgICAgIChXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6Y3JlYXRlKToKKyAgICAgICAg
KFdlYktpdDo6U2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KToKKyAgICAgICAgKFdlYktpdDo6
U2hhcmVkTWVtb3J5OjpjcmVhdGVIYW5kbGUpOgorICAgICAgICAoV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OnN5c3RlbVBhZ2VTaXplKToKKworICAgICAgICAqIFBsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0
LmNwcDoKKyAgICAgICAgKFdvcmtRdWV1ZTo6cmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKTogVGFp
bG9yZWQgdG8gY2xvc2VseSBtYXRjaCBRdC1Vbml4J3MgaW1wbGVtZW50YXRpb24KKyAgICAgICAg
KFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbik6CisgICAgICAgICogUGxhdGZv
cm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcDogZ3VhcmQgd2l0aCBIQVZFKE1NQVApIGZsYWcK
KyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwOiBn
dWFyZCB3aXRoICFPUyhTWU1CSUFOKSBmbGFnCisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1bmNo
ZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHA6IEFkZGVkLiBDb3JyZWN0IHdheSB0byBv
cGVuIGEgY2hhbm5lbCBhbmQgcGFzcworICAgICAgICBvd25lcnNoaXAgdG8gYW5vdGhlciBwcm9j
ZXNzLiBXZSB1c2UgYSBwYWlyIG9mIGhhbGYtZHVwbGV4IHBpcGVzLgorICAgICAgICAoV2ViS2l0
OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9j
ZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNz
TGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSk6CisKKyAgICAgICAgKiBVSVByb2Nlc3MvTGF1
bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHA6IENsZWFudXAgdG8gc3VwcG9ydCBVTklYIGFu
ZCBTeW1iaWFuIE9TZXMKKyAgICAgICAgVGhlIFF0IHBvcnQgY3VycmVudGx5IGRvZXNuJ3QgaW1w
bGVtZW50IHRocmVhZGVkIG1vZGUgV0syCisgICAgICAgIChXZWJLaXQ6OmludmFsaWRDb25uZWN0
aW9uSWRlbnRpZmllcik6CisgICAgICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAgICAg
ICAoV2ViS2l0OjpUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKworICAgICAgICAq
IFdlYktpdDIucHJpOiBBZGQgbmV3IHJwaXBlIGxpYnJhcnkgbGlua2FnZQorICAgICAgICAqIFdl
YktpdDIucHJvOiBBZGQgbmV3IGZpbGVzCisgICAgICAgICogV2ViUHJvY2Vzcy5wcm86IENhcGFi
aWxpdHkgYW5kIGRhdGEgcGFnaW5nIGNoYW5nZXMKKworICAgICAgICAqIFdlYlByb2Nlc3MvcXQv
V2ViUHJvY2Vzc01haW5RdC5jcHA6IFNldCBwcm9jZXNzIHByaW9yaXR5IG9mIHdvcmtlcgorICAg
ICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzTWFpblF0KToKKwogMjAxMS0wNC0yMiAgQW5kcmVhcyBL
bGluZyAgPGFuZHJlYXMua2xpbmdAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNh
bSBXZWluaWcuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQkocmV2aXNpb24gODQ2MjMpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJLaXQyLnByaQkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBzeW1i
aWFuIHsKICAgICBJTkNMVURFUEFUSCA9ICQkV0VCS0lUMl9JTkNMVURFUEFUSCAkJFdFQktJVDJf
R0VORVJBVEVEX1NPVVJDRVNfRElSICQkSU5DTFVERVBBVEgKIH0KIAorc3ltYmlhbjogTElCUyAr
PSAtbHJwaXBlCisKIGRlZmluZVRlc3QocHJlcGVuZFdlYktpdDJMaWIpIHsKICAgICBwYXRoVG9X
ZWJLaXQyT3V0cHV0ID0gJCRBUkdTLyQkV0VCS0lUMl9ERVNURElSCiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYktpdDIucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cHJvCShyZXZpc2lvbiA4NDYyMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMDMsNiArMzAzLDggQEAgSEVBREVSUyArPSBcCiAgICAgV2ViUHJvY2Vz
cy9XZWJQcm9jZXNzLmggXAogICAgICQkV0VCS0lUMl9HRU5FUkFURURfSEVBREVSUwogCitzeW1i
aWFuOiBIRUFERVJTICs9IFBsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIu
aAorCiBTT1VSQ0VTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5j
cHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNvZGVyLmNwcCBcCkBAIC0zMTIs
NiArMzE0LDkgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9EYXRhUmVmZXJl
bmNlLmNwcCBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcCBc
CiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBcCisgICAgUGxh
dGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAgXAorICAgIFBsYXRmb3JtL0Nv
cmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuY3BwIFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBD
L3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmNwcCBcCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5j
cHAgXAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAogICAgIFBsYXRmb3JtL1JlZ2lvbi5jcHAg
XApAQCAtMzIwLDYgKzMyNSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFBsYXRmb3JtL3F0L01vZHVs
ZVF0LmNwcCBcCiAgICAgUGxhdGZvcm0vcXQvUnVuTG9vcFF0LmNwcCBcCiAgICAgUGxhdGZvcm0v
cXQvV29ya1F1ZXVlUXQuY3BwIFwKKyAgICBQbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFu
LmNwcCBcCiAgICAgUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlVbml4LmNwcCBcCiAgICAgUGx1
Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwIFwKICAgICBQbHVnaW5Qcm9jZXNz
L1BsdWdpblByb2Nlc3MuY3BwIFwKQEAgLTM5Nyw2ICs0MDMsNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9jZXNz
L0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0
L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCBcCisgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nl
c3NMYXVuY2hlclN5bWJpYW4uY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFk
TGF1bmNoZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpbkluZm9TdG9yZS5j
cHAgXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQcm94eS5jcHAgXApJbmRl
eDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy5wcm8JKHJldmlzaW9uIDg0NjIzKQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDIxIEBAIGxpbnV4LSog
ewogCiBzeW1iaWFuIHsKICAgICBUQVJHRVQuVUlEMyA9IDB4QTAwMEU1NDQKLSAgICBUQVJHRVQu
Q0FQQUJJTElUWSA9IFJlYWRVc2VyRGF0YSBXcml0ZVVzZXJEYXRhIE5ldHdvcmtTZXJ2aWNlcwor
ICAgIE1NUF9SVUxFUyArPSBwYWdlZGRhdGEKKyAgICBSU1NfUlVMRVMgKz0gImhpZGRlbiA9IEtB
cHBJc0hpZGRlbjsiICMgTm8gaWNvbiBpbiBhcHBsaWNhdGlvbiBncmlkCisgICAgCisgICAgVEFS
R0VULkNBUEFCSUxJVFkgKj0gUmVhZFVzZXJEYXRhIAorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9
IFdyaXRlVXNlckRhdGEKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBOZXR3b3JrU2VydmljZXMg
ICMgUXROZXR3b3JrIGFuZCBCZWFyZXIKKyAgICAKKyAgICAjIFNlZSBRdE1vYmlsaXR5IGRvY3Mg
b24gU3ltYmlhbiBjYXBhYmlsaXRpZXM6IAorICAgICMgaHR0cDovL2RvYy5xdC5ub2tpYS5jb20v
cXRtb2JpbGl0eS9xdWlja3N0YXJ0Lmh0bWwKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBSZWFk
RGV2aWNlRGF0YQorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9IFdyaXRlRGV2aWNlRGF0YQorICAg
IFRBUkdFVC5DQVBBQklMSVRZICo9IExvY2FsU2VydmljZXMKKyAgICAKKyAgICAjIFdlIG1heSBs
YXRlciBuZWVkIFVzZXJFbnZpcm9ubWVudCBmb3IgbWljL2NhbWVyYSBpbnB1dAorICAgIAogfQog
CiBjb250YWlucyhRVF9DT05GSUcsIG9wZW5nbCkgewpJbmRleDogU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaAkocmV2aXNpb24gODQ2
MjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDExIEBAIHR5cGVkZWYgcGlkX3QgUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllcjsKICNlbGlmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgSEFORExF
IFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiAjZWxpZiBQTEFURk9STShRVCkKKyNpZiBPUyhT
WU1CSUFOKQordHlwZWRlZiBSUHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNl
bHNlCiB0eXBlZGVmIFFQcm9jZXNzKiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VuZGlm
CiAjZWxpZiBQTEFURk9STShHVEspCiAjaWZkZWYgR19PU19XSU4zMgogdHlwZWRlZiB2b2lkKiBH
UGlkOwpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHJldmlzaW9u
IDg0NjIzKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHdvcmtp
bmcgY29weSkKQEAgLTcyLDYgKzcyLDggQEAgcHVibGljOgogICAgICAgICBtdXRhYmxlIEhBTkRM
RSBtX2hhbmRsZTsKICNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgICAgICBtdXRh
YmxlIGludCBtX2ZpbGVEZXNjcmlwdG9yOworI2VsaWYgT1MoU1lNQklBTikKKyAgICAgICAgbXV0
YWJsZSB1aW50MzJfdCBtX2NodW5rTmFtZTsKICNlbmRpZgogICAgICAgICBzaXplX3QgbV9zaXpl
OwogICAgIH07CkBAIC0xMDUsNiArMTA3LDggQEAgcHJpdmF0ZToKICAgICBIQU5ETEUgbV9oYW5k
bGU7CiAjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKICAgICBpbnQgbV9maWxlRGVzY3Jp
cHRvcjsKKyNlbGlmIE9TKFNZTUJJQU4pCisgICAgaW50IG1faGFuZGxlOyAgICAKICNlbmRpZgog
fTsKIApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgJKHJldmlzaW9uIDg0NjIz
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDYgKzQ1LDkgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgi
CiBjbGFzcyBRT2JqZWN0OwogY2xhc3MgUVRocmVhZDsKKyNpZiBPUyhTWU1CSUFOKQorI2luY2x1
ZGUgInF0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgiCisjZW5kaWYKICNlbGlmIFBMQVRGT1JNKEdU
SykKICNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCiB0eXBlZGVmIHN0cnVj
dCBfR01haW5Db250ZXh0IEdNYWluQ29udGV4dDsKQEAgLTg0LDcgKzg3LDExIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRMRSwgUGFzc093blB0cjxXb3JrSXRlbT4pOwog
ICAgIHZvaWQgdW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRMRSk7CiAjZWxpZiBQTEFURk9S
TShRVCkKKyNpZiBPUyhTWU1CSUFOKQorICAgIFFTeW1iaWFuUGlwZU5vdGlmaWVyKiByZWdpc3Rl
clBpcGVFdmVudEhhbmRsZXIoUlBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpFdmVudFR5cGUs
IFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKKyNlbHNlCiAgICAgUVNvY2tldE5vdGlmaWVyKiByZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIFFTb2NrZXROb3RpZmllcjo6VHlwZSwgUGFzc093
blB0cjxXb3JrSXRlbT4pOworI2VuZGlmCiAgICAgdm9pZCBzY2hlZHVsZVdvcmtPblRlcm1pbmF0
aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwgUGFzc093blB0cjxXb3JrSXRl
bT4pOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgcmVnaXN0ZXJFdmVudFNvdXJjZUhh
bmRsZXIoaW50LCBpbnQsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnREZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0FyZ3VtZW50RGVjb2Rlci5jcHAJKHJldmlz
aW9uIDg0NjIzKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudERl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIEFyZ3VtZW50RGVjb2Rl
cjo6fkFyZ3VtZW50RGVjb2RlcigpCiB7CiAgICAgQVNTRVJUKG1fYnVmZmVyKTsKICAgICBmYXN0
RnJlZShtX2J1ZmZlcik7Ci0jaWYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKQorI2lm
ICFVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBkaXNw
b3NlIG9mIHRoZSBtYWNoIHBvcnRzIGluIGNhc2VzIG9mIGZhaWx1cmUuCiAjZWxzZQogICAgIERl
cXVlPEF0dGFjaG1lbnQ+OjppdGVyYXRvciBlbmQgPSBtX2F0dGFjaG1lbnRzLmVuZCgpOwpJbmRl
eDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Bcmd1bWVudEVuY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXJndW1lbnRFbmNv
ZGVyLmNwcAkocmV2aXNpb24gODQ2MjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL0FyZ3VtZW50RW5jb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAg
QXJndW1lbnRFbmNvZGVyOjp+QXJndW1lbnRFbmNvZGVyKCkKIHsKICAgICBpZiAobV9idWZmZXIp
CiAgICAgICAgIGZhc3RGcmVlKG1fYnVmZmVyKTsKLSNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFU
Rk9STShHVEspCisjaWYgIVVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIGRpc3Bvc2Ugb2YgdGhlIGF0dGFjaG1lbnRzIGluIGNhc2VzIG9mIGZhaWx1cmUu
CiAjZWxzZQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9hdHRhY2htZW50cy5zaXplKCk7ICsr
aSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5o
CShyZXZpc2lvbiA4NDYyMykKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29u
bmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4ICs0MywxMiBAQAogI2VsaWYgUExBVEZP
Uk0oV0lOKQogI2luY2x1ZGUgPHN0cmluZz4KICNlbGlmIFBMQVRGT1JNKFFUKQorI2lmIE9TKFNZ
TUJJQU4pCisjaW5jbHVkZSA8cGxhdGZvcm0vcnBpcGUuaD4KKyNlbHNlCiBjbGFzcyBRU29ja2V0
Tm90aWZpZXI7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEdUSykKICNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgiCkBAIC0xMDUsNiAr
MTA5LDggQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHR5cGVkZWYgSEFORExF
IElkZW50aWZpZXI7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlU2VydmVyQW5kQ2xpZW50SWRlbnRp
ZmllcnMoSWRlbnRpZmllciYgc2VydmVySWRlbnRpZmllciwgSWRlbnRpZmllciYgY2xpZW50SWRl
bnRpZmllcik7CisjZWxpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyAgICB0eXBlZGVm
IFJQaXBlKiBJZGVudGlmaWVyOyAKICNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAg
IHR5cGVkZWYgaW50IElkZW50aWZpZXI7CiAjZW5kaWYKQEAgLTEzNSw3ICsxNDEsMTAgQEAgcHVi
bGljOgogICAgIHZvaWQgbWFya0N1cnJlbnRseURpc3BhdGNoZWRNZXNzYWdlQXNJbnZhbGlkKCk7
CiAKICAgICB2b2lkIHNldERlZmF1bHRTeW5jTWVzc2FnZVRpbWVvdXQoZG91YmxlKTsKLQorI2lm
IFBMQVRGT1JNKFFUKSAmJiBPUyhTWU1CSUFOKQorICAgIHN0YXRpYyBjb25zdCBpbnQgTWF4UGlw
ZUNhcGFjaXR5ID0gNDA5NjsgCisjZW5kaWYKKyAgICAKICAgICBzdGF0aWMgY29uc3QgaW50IERl
ZmF1bHRUaW1lb3V0ID0gMDsKICAgICBzdGF0aWMgY29uc3QgaW50IE5vVGltZW91dCA9IC0xOwog
CkBAIC0zMjksNiArMzM4LDE0IEBAIHByaXZhdGU6CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgUVNv
Y2tldE5vdGlmaWVyKiBtX3NvY2tldE5vdGlmaWVyOwogI2VuZGlmCisjZWxpZiBQTEFURk9STShR
VCkgJiYgT1MoU1lNQklBTikgCisgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHF1ZXVl
LgorICAgIHZvaWQgcmVhZHlSZWFkSGFuZGxlcigpOworCisgICAgVmVjdG9yPHVpbnQ4X3Q+IG1f
cmVhZEJ1ZmZlcjsKKyAgICBSUGlwZSBtX3JlYWRQaXBlOworICAgIFJQaXBlIG1fd3JpdGVQaXBl
OworICAgIFFTeW1iaWFuUGlwZU5vdGlmaWVyKiBtX3BpcGVSZWFkTm90aWZpZXI7CiAjZW5kaWYK
IH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVjdGlv
blN5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTc5IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiQ29ubmVjdGlv
bi5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiV29ya0l0ZW0u
aCIKKyNpbmNsdWRlIDxRVmVjdG9yPgorI2luY2x1ZGUgPHF0L1FTeW1iaWFuUGlwZU5vdGlmaWVy
Lmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KK25hbWVzcGFjZSBDb3JlSVBDIHsKKwor
c3RhdGljIGNvbnN0IHVpbnQzMl90IHRyYWlsZXIgPSAweERFQURDQUZFOworCitzdHJ1Y3QgUGFy
c2VkTWVzc2FnZSB7CisgICAgICAgIHVpbnQ4X3QqIHN0YXJ0OyAvLyBiYXNlIGFkZHJlc3Mgb2Yg
bWVzc2FnZQorICAgICAgICB1aW50MzJfdCBzaXplOyAvLyBzaXplIGluIGJ5dGVzCisgICAgICAg
IHVpbnQzMl90IG1lc3NhZ2VJRDsKK307CisKK3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0
aWFsaXplKElkZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pc1NlcnZlcikgewor
ICAgICAgICBtX3JlYWRQaXBlID0gc3RhdGljX2Nhc3Q8UlBpcGUqPihpZGVudGlmaWVyKVswXTsK
KyAgICAgICAgbV93cml0ZVBpcGUgPSBzdGF0aWNfY2FzdDxSUGlwZSo+KGlkZW50aWZpZXIpWzFd
OworICAgIH0gZWxzZSB7CisgICAgICAgIFRJbnQgZXJyb3I7CisgICAgICAgIC8vIE9wZW4gcGlw
ZXMgdmlhIFJQcm9jZXNzJyAiZW52aXJvbm1lbnQgZGF0YSBzbG90cyIgbnVtYmVyIDMgJiA0Lgor
ICAgICAgICAvLyBUaGUgY2hvaWNlIG9mIDMgJiA0IGlzIGFyYml0cmFyeSBhbmQgbWF0Y2hlcyB0
aGUgY29kZSBpbiBQcm9jZXNzTGF1bmNoZXJTeW1iaWFuLmNwcC4KKyAgICAgICAgLy8gVGhpcyBp
cyB0aGUgU3ltYmlhbiBPUyB3YXkgb2YgcGFzc2luZyBvd25lcnNoaXAgb2YgcmVzb3VyY2VzIGZy
b20gcGFyZW50IHRvIGNoaWxkCisgICAgICAgIGVycm9yID0gbV9yZWFkUGlwZS5PcGVuKDMpOyAK
KyAgICAgICAgZXJyb3J8PSBtX3dyaXRlUGlwZS5PcGVuKDQpOworICAgICAgICBpZiAoZXJyb3Ip
IHsgCisgICAgICAgICAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX3BpcGVSZWFkTm90aWZpZXIgPSAwOworICAg
IG1fcmVhZEJ1ZmZlci5yZXNpemUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6TWF4UGlwZUNhcGFjaXR5
KTsKKyAgICBtX2lzQ29ubmVjdGVkID0gdHJ1ZTsgICAgICAgIAorfQorCit2b2lkIENvbm5lY3Rp
b246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgbV9yZWFkQnVmZmVyLnNocmluaygwKTsK
KyAgICAKKyAgICBkZWxldGUgbV9waXBlUmVhZE5vdGlmaWVyOworICAgIG1fcGlwZVJlYWROb3Rp
ZmllciA9IDA7CisKKyAgICBtX3JlYWRQaXBlLkNsb3NlKCk7CisgICAgbV93cml0ZVBpcGUuQ2xv
c2UoKTsKKyAgICAvLyBUT0RPOiBkZWxldGUgdGhlIG1lbW9yeSBmb3IgdGhlIFJQaXBlWzJdIGFy
cmF5CisKKyAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7Cit9CisKKy8vIENoZWNrIGlmIHRoZSBk
YXRhIG1hdGNoZXMgdGhlIHRyYWlsZXIgcGF0dGVybgorc3RhdGljIGlubGluZSBib29sIGlzTWVz
c2FnZVRyYWlsZXIodWludDhfdCAqZGF0YSkgCit7ICAKKyAgICByZXR1cm4gKCB0cmFpbGVyID09
ICoocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRhdGEpKSApOyAgCit9CisKK3ZvaWQgQ29u
bmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcigpCit7ICAgCisgICAgbV9waXBlUmVhZE5vdGlmaWVy
LT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBUUHRyOCByZWFkUHRyKG1fcmVhZEJ1ZmZlci5kYXRh
KCksIDAsIG1fcmVhZEJ1ZmZlci5zaXplKCkpOworICAgIAorICAgIC8vIE5vdGUgdGhhdCBhIHJl
YWQgb3BlcmF0aW9uIG1heSByZXR1cm4gbXVsdGlwbGUgbWVzc2FnZXMgZHVlIHRvIGl0cyBzdHJl
YW0tb3JpZW50ZWQgbmF0dXJlLgorICAgIFRJbnQgYnl0ZXNSZWFkID0gbV9yZWFkUGlwZS5SZWFk
KHJlYWRQdHIsIHJlYWRQdHIuTWF4U2l6ZSgpKTsKKyAgICAKKyAgICBpZiAoYnl0ZXNSZWFkID4g
MCkgeyAgICAgICAgICAgIAorICAgICAgICBfX0FTU0VSVF9BTFdBWVMoYnl0ZXNSZWFkID09IHJl
YWRQdHIuU2l6ZSgpLCBVc2VyOjpJbnZhcmlhbnQoKSk7CisgICAgICAgIAorICAgICAgICAvLyBT
dGFydCBwYXJzaW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCB3aGVyZSB3ZSBleHBlY3Qg
dG8gc2VlIGEgdHJhaWxlciBhbmQgdGhlIHNpemUgb2YgdGhpcyBtZXNzYWdlLgorICAgICAgICB1
aW50OF90KiBtZXNzYWdlU3RhcnQgPSBtX3JlYWRCdWZmZXIuZGF0YSgpICsgYnl0ZXNSZWFkOwor
ICAgICAgICAKKyAgICAgICAgLy8gVGVtcG9yYXJ5IHBsYWNlIHRvIGtlZXAgdHJhY2sgb2YgcGFy
c2VkIG1lc3NhZ2VzLgorICAgICAgICBRVmVjdG9yPFBhcnNlZE1lc3NhZ2U+IG1lc3NzYWdlUG9p
bnRlcnM7CisgICAgICAgIAorICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgbWVz
c2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7IC8vIHByZXBhcmUgdG8gcmVhZCA0LWJ5dGUg
dHJhaWxlcgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWlzTWVzc2FnZVRyYWlsZXIo
bWVzc2FnZVN0YXJ0KSkKKyAgICAgICAgICAgICAgICBicmVhazsgCisgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgbWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAg
ICAgICB1aW50MzJfdCBtZXNzYWdlU2l6ZSA9ICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4o
bWVzc2FnZVN0YXJ0KTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1lc3NhZ2VTdGFydCAt
PSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgdWludDMyX3QgbWVzc2FnZUlEID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtZXNzYWdlU3RhcnQpOyAKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbWVzc2FnZVN0YXJ0IC09IChtZXNzYWdlU2l6ZSAtIHNpemVvZih1aW50MzJf
dCkpOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIFNhdmUgbWVzc2FnZSBib3VuZGFyeQorICAgICAgICAgICAgY29uc3QgUGFyc2Vk
TWVzc2FnZSBhTWVzc2FnZSA9IHttZXNzYWdlU3RhcnQsIG1lc3NhZ2VTaXplIC0gc2l6ZW9mKHVp
bnQzMl90KSwgbWVzc2FnZUlEfTsKKyAgICAgICAgICAgIG1lc3NzYWdlUG9pbnRlcnMuYXBwZW5k
KGFNZXNzYWdlKTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIF9fQVNTRVJUX0FMV0FZUyht
ZXNzYWdlU3RhcnQgPj0gIG1fcmVhZEJ1ZmZlci5kYXRhKCksIFVzZXI6OkludmFyaWFudCgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1lc3NhZ2VTdGFydCA9PSBtX3JlYWRCdWZm
ZXIuZGF0YSgpKSAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgfSAvLyB3aGlsZSBsb29wCisgICAgICAKKyAgICAgICAgLy8gTm93IGRpc3BhdGNoIHBh
cnNlZCBtZXNzYWdlcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4gYnkgdGhlIHNlbmRl
cgorICAgICAgICBmb3IgKGludCBpID0gbWVzc3NhZ2VQb2ludGVycy5zaXplKCktMTsgaSA+PSAw
IDsgaS0tKSB7CisgICAgICAgICAgICBjb25zdCBQYXJzZWRNZXNzYWdlIGFNZXNzYWdlID0gbWVz
c3NhZ2VQb2ludGVycy5hdChpKTsKKyAgICAgICAgICAgIHByb2Nlc3NJbmNvbWluZ01lc3NhZ2Uo
TWVzc2FnZUlEOjpmcm9tSW50KGFNZXNzYWdlLm1lc3NhZ2VJRCksIGFkb3B0UHRyKG5ldyBBcmd1
bWVudERlY29kZXIoYU1lc3NhZ2Uuc3RhcnQsIGFNZXNzYWdlLnNpemUpKSk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIG1lc3NzYWdlUG9pbnRlcnMuY2xlYXIoKTsKKyAgICB9CisgICAg
CisgICAgbV9waXBlUmVhZE5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOworfQorCisKK2Jvb2wg
Q29ubmVjdGlvbjo6b3BlbigpCit7CisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKSAKKyAgICAgICAg
cmV0dXJuIGZhbHNlOyAKKyAgICAKKyAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIHJlYWQgCisg
ICAgbV9waXBlUmVhZE5vdGlmaWVyID0gbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJQaXBlRXZl
bnRIYW5kbGVyKG1fcmVhZFBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFB
dmFpbGFibGUsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhh
bmRsZXIpKTsKKyAgICAgICAgCisgICAgLy8gU2NoZWR1bGUgYSByZWFkLgorICAgIG1fY29ubmVj
dGlvblF1ZXVlLnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9u
OjpyZWFkeVJlYWRIYW5kbGVyKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
Q29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNvbnN0Cit7Cisg
ICAgLy8gQWx3YXlzIHRydWUsIHNpbmNlIHRoZSBwaXBlIGlzIGxhcmdlIGVub3VnaCB0byBob2xk
IG11bHRpcGxlIG1lc3NhZ2VzLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rp
b246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxB
cmd1bWVudEVuY29kZXI+IGFyZ3VtZW50cykKK3sgICAgCisgICAgYXJndW1lbnRzLT5lbmNvZGVV
SW50MzIobWVzc2FnZUlELnRvSW50KCkpOworICAgIAorICAgIC8vIFNpemUgb2YgbWVzc2FnZSBl
eGNsdWRpbmcgdGhpcyA0LWJ5dGUgZmllbGQgYW5kIHRoZSA0LWJ5dGUgdHJhaWxlciB3aGljaCBm
b2xsb3dzLgorICAgIGFyZ3VtZW50cy0+ZW5jb2RlVUludDMyKGFyZ3VtZW50cy0+YnVmZmVyU2l6
ZSgpKTsKKyAgICAKKyAgICAvLyBhIHRyYWlsZXIgbWFya2VyIChtYWdpYyBudW1iZXIpIHdoaWNo
IG1ha2VzIGl0IGVhc2llciB0byBzcG90IG1lc3NhZ2UgYm91bmRhcnkgYXQgdGhlIHJlY2VpdmVy
CisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIodHJhaWxlcik7CisgICAgCisgICAgVFB0cjgg
d3JpdGVCdWZmZXIoYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCks
IGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpICk7CisgICAgVEludCBieXRlc1dyaXR0ZW4gPSBtX3dy
aXRlUGlwZS5Xcml0ZSh3cml0ZUJ1ZmZlciwgd3JpdGVCdWZmZXIuU2l6ZSgpICk7ICAgICAKKyAg
ICAKKyAgICByZXR1cm4gKGJ5dGVzV3JpdHRlbiA9PSB3cml0ZUJ1ZmZlci5TaXplKCkpOworfQor
Cit2b2lkIENvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1p
bmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQoreworICAg
IG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29ya09uVGVybWluYXRpb24ocHJvY2VzcywgV29y
a0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIENvcmVJUEMKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmll
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0
L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NSBAQAor
LyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBz
dWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRGT1JNIChR
VCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJRU3ltYmlhblBpcGVOb3RpZmllci5oIgorCisj
aW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIlFDb3JlQXBwbGljYXRpb24iCisjaW5j
bHVkZSAiUUV2ZW50IgorI2luY2x1ZGUgIlFPYmplY3QiCisjaW5jbHVkZSAiU3ltYmlhblBpcGVB
Y3RpdmVPYmplY3QuaCIKKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCisvLyBXcmFwcGVy
IFFPYmplY3QgYXJvdW5kIGEgU3ltYmlhbiBBY3RpdmUgT2JqZWN0IChBTykuIFdlIHVzZSB0aGUg
QU8gdG8gd2F0Y2ggZm9yIG5vdGlmaWNhdGlvbnMKKy8vIG9mIGRhdGEgYXZhaWxhYmxlL3NwYWNl
IGF2YWlsYWJsZSBvbiB0aGUgUlBpcGUuCitRU3ltYmlhblBpcGVOb3RpZmllcjo6UVN5bWJpYW5Q
aXBlTm90aWZpZXIoUlBpcGUmIHBpcGUsIEV2ZW50VHlwZSB0eXBlLCBpbnQgYnl0ZXMsIFFPYmpl
Y3QgKnBhcmVudCkgCisgICAgOiBRT2JqZWN0KHBhcmVudCkKKyAgICAsIG1fcGlwZShwaXBlKQor
ICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX2J5dGVzKGJ5dGVzKQorICAgICwgbV9ub3RpZmll
ckFPKG5ldyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChwaXBlLCB0eXBlLCBieXRlcywgdGhpcykp
Cit7Cit9CisKK1FTeW1iaWFuUGlwZU5vdGlmaWVyOjp+UVN5bWJpYW5QaXBlTm90aWZpZXIoKSAK
K3sKKyAgICBkZWxldGUgbV9ub3RpZmllckFPOworfQorCisvLyBUaGlzIGludGVyZmFjZSBpcyBt
b2RlbGVkIGFmdGVyIFFTb2NrZXROb3RpZmllcidzIHNldEVuYWJsZWQoKQordm9pZCBRU3ltYmlh
blBpcGVOb3RpZmllcjo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpIAoreyAKKyAgICBpZiAoIW1f
bm90aWZpZXJBTykgeworICAgICAgICAvLyBXZSBkZWxldGVkIHRoZSBBTyBwcmV2aW91c2x5LCBz
byBmaXJlIGEgZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24gcmVxdWVzdCB2aWEgcG9zdEV2ZW50KCku
CisgICAgICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gc3VwcG9ydCBRT2JqZWN0LT5tb3ZlVG9U
aHJlYWQoKQorICAgICAgICAvLyBOT1RFOiBXZSBkaXNjYXJkIHRoZSBzcGVjaWZpZWQgYm9vbGVh
biBhcmd1bWVudCwgYW5kIGJsYW5rZXQgZW5hYmxlIGxhdGVyIG9uLgorICAgICAgICBRRXZlbnQq
IHBvc3RUaHJlYWRDaGFuZ2VFdmVudCA9IG5ldyBRRXZlbnQoUG9zdFRocmVhZENoYW5nZUV2ZW50
VHlwZSk7CisgICAgICAgIFFDb3JlQXBwbGljYXRpb246OnBvc3RFdmVudCh0aGlzLCBwb3N0VGhy
ZWFkQ2hhbmdlRXZlbnQpOworICAgICAgICByZXR1cm47IAorICAgIH0KKworICAgIG1fbm90aWZp
ZXJBTy0+c2V0RW5hYmxlZChlbmFibGVkKTsKK30KKworLy8gVGhpcyBldmVudCBoYW5kbGVyIGV4
aXN0cyBwdXJlbHkgdG8gc3VwcG9ydCBRT2JqZWN0LT5tb3ZlVG9UaHJlYWQuCisvLyBTeW1iaWFu
IGFjdGl2ZSBvYmplY3RzIChBT3MpIGFyZSBib3VuZCB0byBhbiBBY3RpdmUgU2NoZWR1bGVyIChB
Uykgd2hpY2ggaXMgdGhyZWFkLWxvY2FsLgorLy8gVGhlcmVmb3JlLCB0aGUgQU8gbXVzdCBiZSBy
ZS1jcmVhdGVkIG9uIHRoZSBuZXcgdGhyZWFkIG9uY2UgdGhlIHBhcmVudCBRT2JqZWN0IGhhcyBt
b3ZlZAorLy8gdG8gdGhlIG5ldyB0aHJlYWQKK2Jvb2wgUVN5bWJpYW5QaXBlTm90aWZpZXI6OmV2
ZW50KFFFdmVudCogZXYpCit7ICAgICAgICAKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSBRRXZlbnQ6
OlRocmVhZENoYW5nZSkgeyAvLyBwcmUtbWlncmF0aW9uIGV2ZW50CisgICAgICAgIGlmIChtX25v
dGlmaWVyQU8pIHsKKyAgICAgICAgICAgIGlmIChtX25vdGlmaWVyQU8tPklzQWRkZWQoKSkgewor
ICAgICAgICAgICAgICAgIGJvb2wgb2xkU3RhdGUgPSBtX25vdGlmaWVyQU8tPklzQWN0aXZlKCk7
CisgICAgICAgICAgICAgICAgbV9ub3RpZmllckFPLT5EZXF1ZSgpOworICAgICAgICAgICAgfSAg
ICAgCisgICAgICAgICAgICBkZWxldGUgbV9ub3RpZmllckFPOworICAgICAgICAgICAgbV9ub3Rp
ZmllckFPID0gMDsKKyAgICAgICAgfQorICAgICAgICAvLyBGaXJlIGEgZGVmZXJyZWQgaW5pdGlh
bGl6YXRpb24gcmVxdWVzdAorICAgICAgICBRRXZlbnQqIHBvc3RUaHJlYWRDaGFuZ2VFdmVudCA9
IG5ldyBRRXZlbnQoUG9zdFRocmVhZENoYW5nZUV2ZW50VHlwZSk7CisgICAgICAgIFFDb3JlQXBw
bGljYXRpb246OnBvc3RFdmVudCh0aGlzLCBwb3N0VGhyZWFkQ2hhbmdlRXZlbnQpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9IAorICAgIAorICAgIGlmIChldi0+dHlwZSgpID09IFBvc3RU
aHJlYWRDaGFuZ2VFdmVudFR5cGUpIHsgLy8gY3VzdG9tLCBwb3N0LW1pZ3JhdGlvbiBldmVudAor
ICAgICAgICBpZiAoIW1fbm90aWZpZXJBTykgeworICAgICAgICAgICAgbV9ub3RpZmllckFPID0g
bmV3IFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KG1fcGlwZSwgbV90eXBlLCBtX2J5dGVzLCB0aGlz
KTsKKyAgICAgICAgICAgIC8vIE5PVEU6IFdlIHByZXN1bXB0aXZlbHkgZW5hYmxlIHdhdGNoLCBl
dmVuIHRob3VnaCBvbGRTdGF0ZSBtYXkgYmUgZmFsc2UgYWJvdmUuCisgICAgICAgICAgICBtX25v
dGlmaWVyQU8tPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7IAorICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBp
cGVOb3RpZmllci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29y
ZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0
IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3Ig
aXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaWZuZGVmIFFTeW1iaWFuUGlwZU5vdGlmaWVyX2gK
KyNkZWZpbmUgUVN5bWJpYW5QaXBlTm90aWZpZXJfaAorCisjaW5jbHVkZSA8UUV2ZW50PgorI2lu
Y2x1ZGUgPFFPYmplY3Q+CisjaW5jbHVkZSA8cGxhdGZvcm0vcnBpcGUuaD4KKworY2xhc3MgU3lt
YmlhblBpcGVBY3RpdmVPYmplY3Q7CisKK2NsYXNzIFFTeW1iaWFuUGlwZU5vdGlmaWVyIDogcHVi
bGljIFFPYmplY3QgeworICAgIFFfT0JKRUNUCitwdWJsaWM6IAorICAgIGVudW0gRXZlbnRUeXBl
IHsKKyAgICAgICAgUGlwZVJlYWREYXRhQXZhaWxhYmxlLCAvLyBkYXRhIGNhbiBiZSByZWFkCisg
ICAgICAgIFBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlIC8vIHdyaXRlIHBpcGUgY2FuIHRha2UgbW9y
ZSBkYXRhCisgICAgfTsKKyAgICBRU3ltYmlhblBpcGVOb3RpZmllcihSUGlwZSYsIEV2ZW50VHlw
ZSwgaW50LCBRT2JqZWN0KiBwYXJlbnQgPSAwKTsKKyAgICB+UVN5bWJpYW5QaXBlTm90aWZpZXIo
KTsKKyAgICBib29sIGV2ZW50KFFFdmVudCopOworICAgIAorcHVibGljIHNsb3RzOgorICAgIHZv
aWQgc2V0RW5hYmxlZChib29sKTsKKworc2lnbmFsczoKKyAgICAvLyBlbWl0dGVkIHdoZW4gUGlw
ZVJlYWREYXRhQXZhaWxhYmxlIG9jY3VycworICAgIHZvaWQgcmVhZHlUb1JlYWQoaW50KTsKKyAg
ICAvLyBlbWl0dGVkIHdoZW4gUGlwZVdyaXRlU3BhY2VBdmFpbGFibGUgb2NjdXJzCisgICAgdm9p
ZCByZWFkeVRvV3JpdGUoaW50KTsKKyAgICB2b2lkIGVycm9yT2NjdXJlZChpbnQpOworICAgIAor
cHJpdmF0ZTogCisgICAgUlBpcGUgbV9waXBlOyAKKyAgICBFdmVudFR5cGUgbV90eXBlOworICAg
IGludCBtX2J5dGVzOyAgIAorICAgIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KiBtX25vdGlmaWVy
QU87CisKKyAgICAvLyBDdXN0b20gZXZlbnQgdG8gaGVscCB3aXRoIFFPYmplY3QtPm1vdmVUb1Ro
cmVhZCgpIAorICAgIHN0YXRpYyBjb25zdCBRRXZlbnQ6OlR5cGUgUG9zdFRocmVhZENoYW5nZUV2
ZW50VHlwZSA9IChRRXZlbnQ6OlR5cGUpKFFFdmVudDo6VXNlciArIDEwMCk7CisgICAgICAgIAor
ICAgIGZyaWVuZCBjbGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDsKKyAgICBRX0RJU0FCTEVf
Q09QWShRU3ltYmlhblBpcGVOb3RpZmllcikKK307CisKKyNlbmRpZiAvLyBRU3ltYmlhblBpcGVO
b3RpZmllcl9oCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3lt
YmlhblBpcGVBY3RpdmVPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2
ZU9iamVjdC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICAgIENvcHly
aWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWll
cykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJ
QU4pCisjaW5jbHVkZSAiU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaCIKKworI2luY2x1ZGUgIlFT
eW1iaWFuUGlwZU5vdGlmaWVyLmgiCisjaW5jbHVkZSA8cGxhdGZvcm0vcnBpcGUuaD4KKworCisv
LyBUaGUgU3ltYmlhbiBBY3RpdmUgT2JqZWN0IHRoYXQgcmVnaXN0ZXJzIG5vdGlmaWNhdGlvbiBy
ZXF1ZXN0cyB3aXRoIHRoZSBrZXJuZWwsIHNpbWlsYXIgdG8gUE9TSVgncyBzZWxlY3QoKSBzeXN0
ZW0gY2FsbAorLy8gTm90ZSB0aGF0IHVubGlrZSBhbnl0aGluZyBvbiBVbml4LCBTeW1iaWFuIEFj
dGl2ZSBPYmplY3RzIGFyZSBzY2hlZHVsYWJsZSBvYmplY3RzIHRoYXQgYXJlIGJvdW5kIHRvIHRo
ZSBjdXJyZW50IHRocmVhZCdzIEFjdGl2ZSBTY2hlZHVsZXIuIAorLy8gVGhlcmVmb3JlIHRoZXkg
YXJlIGEgbGlnaHR3ZWlnaHQgdmVyc2lvbiBvZiB0aHJlYWRzIGZyb20gYSByZXNvdXJjZSB1dGls
aXphdGlvbiBQT1YuIAorU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlN5bWJpYW5QaXBlQWN0aXZl
T2JqZWN0KFJQaXBlIHBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpFdmVudFR5cGUgdHlwZSwg
aW50IHNwYWNlSW5CeXRlcywgUVN5bWJpYW5QaXBlTm90aWZpZXIqIHFxKQorICAgIDogQ0FjdGl2
ZShDQWN0aXZlOjpFUHJpb3JpdHlTdGFuZGFyZCkKKyAgICAsIG1fcGlwZShwaXBlKQorICAgICwg
bV90eXBlKHR5cGUpCisgICAgLCBtX2J5dGVzKHNwYWNlSW5CeXRlcykKKyAgICAsIG1fcGFyZW50
KHFxKQoreyAKKyAgICBDQWN0aXZlU2NoZWR1bGVyOjpBZGQodGhpcyk7Cit9CisgICAgCitTeW1i
aWFuUGlwZUFjdGl2ZU9iamVjdDo6flN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KCkgCit7IAorICAg
IENhbmNlbCgpOworfQorCit2b2lkIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0OjpzZXRFbmFibGVk
KGJvb2wgZW5hYmxlZCkgCit7CisgICAgLy8gc3RhcnQgbGlzdGVuaW5nCisgICAgaWYgKGVuYWJs
ZWQgJiYgIUlzQWN0aXZlKCkpIHsgIAorICAgICAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlw
ZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsgCisgICAgICAgICAgICBtX3BpcGUu
Tm90aWZ5RGF0YUF2YWlsYWJsZShpU3RhdHVzKTsKKyAgICAgICAgICAgIFNldEFjdGl2ZSgpOyAv
LyBiYXNlIGNsYXNzIG1ldGhvZCB0byBkZWNsYXJlIHRoZSBhYm92ZSByZXF1ZXN0IGFzICJwZW5k
aW5nIiBjb21wbGV0aW9uCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX3R5cGUg
PT0gUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlKSB7CisgICAg
ICAgICAgICBpbnQgZnJlZVNwYWNlTmVlZGVkID0gbV9ieXRlcyA8IDAgPyAxIDogbV9ieXRlczsg
CisgICAgICAgICAgICBtX3BpcGUuTm90aWZ5U3BhY2VBdmFpbGFibGUoZnJlZVNwYWNlTmVlZGVk
LCBpU3RhdHVzKTsKKyAgICAgICAgICAgIFNldEFjdGl2ZSgpOyAvLyBiYXNlIGNsYXNzIG1ldGhv
ZCB0byBkZWNsYXJlIHRoZSBhYm92ZSByZXF1ZXN0IGFzICJwZW5kaW5nIiBjb21wbGV0aW9uCisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8g
c3RvcCBsaXN0ZW5pbmcKKyAgICBpZiAoIWVuYWJsZWQpIHsKKyAgICAgICAgQ2FuY2VsKCk7IC8v
IEF1dG9tYXRpY2FsbHkgbGVhZHMgdG8gYSBEb0NhbmNlbCgpIAorICAgICAgICByZXR1cm47Cisg
ICAgfQorfQorCisvLyBUaGlzIG1ldGhvZCBnZXRzIHJ1biBieSB0aGUgU3ltYmlhbiBPUyBBY3Rp
dmUgU2NoZWR1bGVyIHdoZW4gdGhlCisvLyByZXF1ZXN0IGluaXRpYXRlZCBieSBOb3RpZnlEYXRh
QXZhaWxhYmxlIGFib3ZlIGlzIG1hcmtlZCBhcyBjb21wbGV0ZWQKKy8vIFdlIHNlbmQgYSBRdCBz
aWduYWwgdmlhIG91ciBwYXJlbnQgUU9iamVjdCwgYW5kIHRoZW4gaW1wbGljaXRseSBnbworLy8g
aW50byBhIGRpc2FibGVkIHN0YXRlLCBpLmUgbm90aWZpY2F0aW9ucyBhcmUgb2ZmICAKK3ZvaWQg
U3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlJ1bkwoKSAKK3sKKyAgICBpZiAoaVN0YXR1cyAhPSBL
RXJyTm9uZSkgeworICAgICAgICBlbWl0IG1fcGFyZW50LT5lcnJvck9jY3VyZWQoaVN0YXR1cy5J
bnQoKSk7CisgICAgICAgIHJldHVybjsgCisgICAgfQorICAgIAorICAgIGlmIChtX3R5cGUgPT0g
UVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVSZWFkRGF0YUF2YWlsYWJsZSkgeworICAgICAgICBj
b25zdCBpbnQgYnl0ZXNBdmFpbGFibGUgPSAgbV9waXBlLlNpemUoKTsgLy8gcGVlayBieXRlcyBh
dmFpbGFibGUgdG8gcmVhZAorICAgICAgICBpZiAoYnl0ZXNBdmFpbGFibGUgPiAwKQorICAgICAg
ICAgICAgZW1pdCBtX3BhcmVudC0+cmVhZHlUb1JlYWQoYnl0ZXNBdmFpbGFibGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChtX3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90
aWZpZXI6OlBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlKSB7IAorICAgICAgICBlbWl0IG1fcGFyZW50
LT5yZWFkeVRvV3JpdGUoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKK30KKyAgCit2b2lk
IFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0OjpEb0NhbmNlbCgpIAoreyAKKyAgICBpZiAobV90eXBl
ID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsgCisgICAg
ICAgIG1fcGlwZS5DYW5jZWxEYXRhQXZhaWxhYmxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgICAgICAgICAgICAKKyAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVy
OjpQaXBlV3JpdGVTcGFjZUF2YWlsYWJsZSkgeyAKKyAgICAgICAgbV9waXBlLkNhbmNlbFNwYWNl
QXZhaWxhYmxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCit9CisKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2
ZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
cXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEg
Q29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBTeW1i
aWFuUGlwZUFjdGl2ZU9iamVjdF9oCisjZGVmaW5lIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gK
KworI2luY2x1ZGUgIlFTeW1iaWFuUGlwZU5vdGlmaWVyLmgiCisjaW5jbHVkZSAicWdsb2JhbC5o
IgorI2luY2x1ZGUgPGUzMmJhc2UuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCitj
bGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCA6IHB1YmxpYyBDQWN0aXZlIHsKK3B1YmxpYzoK
KyAgICBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChSUGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6
OkV2ZW50VHlwZSwgaW50LCBRU3ltYmlhblBpcGVOb3RpZmllciopOworICAgIH5TeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdCgpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9v
bCk7CisgICAgCisgICAgdm9pZCBSdW5MKCk7CisgICAgdm9pZCBEb0NhbmNlbCgpOyAKKworICAg
IFJQaXBlIG1fcGlwZTsKKyAgICBRU3ltYmlhblBpcGVOb3RpZmllcjo6RXZlbnRUeXBlIG1fdHlw
ZTsKKyAgICBpbnQgbV9ieXRlczsgLy8gb25seSB1c2VkIGZvciB3cml0ZSBwaXBlOyAtMSBtZWFu
cyB1bnVzZWQKKyAgICAKKyAgICBRU3ltYmlhblBpcGVOb3RpZmllciAqIG1fcGFyZW50OworICAg
IGZyaWVuZCBjbGFzcyBRU3ltYmlhblBpcGVOb3RpZmllcjsKK307CisKKyNlbmRpZiAvLyBTeW1i
aWFuUGlwZUFjdGl2ZU9iamVjdF9oCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAkocmV2aXNpb24gODQ2
MjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVu
aXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogI2luY2x1ZGUgIkF0dGFj
aG1lbnQuaCIKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNDgsMyArNDksNiBAQCB2b2lkIEF0
dGFjaG1lbnQ6OmRpc3Bvc2UoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisKKyNlbmRp
ZgorCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlv
blVuaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMv
dW5peC9Db25uZWN0aW9uVW5peC5jcHAJKHJldmlzaW9uIDg0NjIzKQorKysgU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShVTklYX0RPTUFJTl9TT0NLRVRTKQogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKIAogI2luY2x1
ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgpAQCAtMzk5LDMgKzQwMSw2IEBAIHZvaWQgQ29ubmVjdGlv
bjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW8KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBDb3Jl
SVBDCisKKyNlbmRpZiAvLyBVTklYX0RPTUFJTl9TT0NLRVRTCisKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvU2hhcmVkTWVtb3J5U3ltYmlhbi5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICAgIENvcHlyaWdodCAoQykg
MjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5j
bHVkZSAiU2hhcmVkTWVtb3J5LmgiCisKKyNpbmNsdWRlICJBcmd1bWVudERlY29kZXIuaCIKKyNp
bmNsdWRlICJBcmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlIDxlMzJtYXRoLmg+CisjaW5jbHVk
ZSA8c3lzL3BhcmFtLmg+CisKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1NoYXJlZE1lbW9yeTo6
SGFuZGxlOjpIYW5kbGUoKQorICAgIDogbV9jaHVua05hbWUoMCkKKyAgICAsIG1fc2l6ZSgwKQor
eworfQorCitTaGFyZWRNZW1vcnk6OkhhbmRsZTo6fkhhbmRsZSgpCit7ICAgCit9CisKK2Jvb2wg
U2hhcmVkTWVtb3J5OjpIYW5kbGU6OmlzTnVsbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2No
dW5rTmFtZTsKK30KKwordm9pZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZW5jb2RlKENvcmVJUEM6
OkFyZ3VtZW50RW5jb2RlciogZW5jb2RlcikgY29uc3QKK3sKKyAgICBBU1NFUlQoIWlzTnVsbCgp
KTsgICAgCisgICAgZW5jb2Rlci0+ZW5jb2RlVUludDMyKG1fc2l6ZSk7CisgICAgLy8gbmFtZSBv
ZiB0aGUgZ2xvYmFsIGNodW5rIChtYXNxdWVyYWRpbmcgYXMgdWludDMyX3QgZm9yIGVhc2Ugb2Yg
c2VyaWFsaXphdGlvbikKKyAgICBlbmNvZGVyLT5lbmNvZGVVSW50MzIobV9jaHVua05hbWUpOwor
fQorCitib29sIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjpkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKiBkZWNvZGVyLCBIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAg
ICBpZiAoIWRlY29kZXItPmRlY29kZVVJbnQzMihzaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OyAKKyAgICAKKyAgICB1aW50MzJfdCBjaHVua05hbWU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGVVSW50MzIoY2h1bmtOYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgIAorICAg
IGhhbmRsZS5tX3NpemUgPSBzaXplOworICAgIGhhbmRsZS5tX2NodW5rTmFtZSA9IGNodW5rTmFt
ZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJl
ZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQoreworICAgIC8vIE9uIFN5bWJpYW4sIGdsb2Jh
bCBjaHVua3MgKHNoYXJlZCBtZW1vcnkgc2VnbWVudHMpIGhhdmUgc3lzdGVtLXVuaXF1ZSBuYW1l
cywgc28gd2UgcGljayBhIHJhbmRvbSAKKyAgICAvLyBudW1iZXIgZnJvbSB0aGUga2VybmVsJ3Mg
cmFuZG9tIHBvb2wgYW5kIHVzZSBpdCBhcyBhIHN0cmluZy4KKyAgICAvLyBVc2luZyBhbiBpbnRl
Z2VyIHNpbXBsaWZpZXMgc2VyaWFsaXphdGlvbiBvZiB0aGUgbmFtZSBpbiBIYW5kbGU6OmVuY29k
ZSgpCisgICAgdWludDMyX3QgcmFuZG9tID0gTWF0aDo6UmFuZG9tKCk7CisKKyAgICBUQnVmPEtN
YXhLZXJuZWxOYW1lPiBjaHVua05hbWU7CisgICAgY2h1bmtOYW1lLkZvcm1hdChfTCgiJWQiKSwg
cmFuZG9tKTsKKworICAgIFJDaHVuayBjaHVuazsKKyAgICBUSW50IGVycm9yID0gY2h1bmsuQ3Jl
YXRlR2xvYmFsKGNodW5rTmFtZSwgc2l6ZSwgc2l6ZSk7CisgICAgaWYgKGVycm9yKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9yeShhZG9w
dFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hhcmVkTWVtb3J5LT5tX2hhbmRsZSA9IGNo
dW5rLkhhbmRsZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gY2h1bmsuU2l6ZSgpOwor
ICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGNodW5rLkJhc2Uo
KSk7CisgICAgICAgIAorICAgIHJldHVybiBzaGFyZWRNZW1vcnkucmVsZWFzZSgpOworfQorCitQ
YXNzUmVmUHRyPFNoYXJlZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoY29uc3QgSGFuZGxl
JiBoYW5kbGUsIFByb3RlY3Rpb24gcHJvdGVjdGlvbikKK3sKKyAgICBpZiAoaGFuZGxlLmlzTnVs
bCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAgCisgICAgLy8gQ29udmVydCBudW1iZXIgdG8g
c3RyaW5nLCBhbmQgb3BlbiB0aGUgZ2xvYmFsIGNodW5rCisgICAgVEJ1ZjxLTWF4S2VybmVsTmFt
ZT4gY2h1bmtOYW1lOworICAgIGNodW5rTmFtZS5Gb3JtYXQoX0woIiVkIiksIGhhbmRsZS5tX2No
dW5rTmFtZSk7CisKKyAgICBSQ2h1bmsgY2h1bms7CisgICAgVEludCBlcnJvciA9IGNodW5rLk9w
ZW5HbG9iYWwoY2h1bmtOYW1lLCBmYWxzZSk7IC8vIE5PVEU6IFN5bWJpYW4gT1MgZG9lc24ndCBz
dXBwb3J0IHJlYWQtb25seSBnbG9iYWwgY2h1bmtzCisgICAgaWYgKGVycm9yKSAKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgICAgIAorICAgIFJlZlB0cjxTaGFyZWRNZW1vcnk+IHNoYXJlZE1lbW9y
eShhZG9wdFJlZihuZXcgU2hhcmVkTWVtb3J5KSk7CisgICAgc2hhcmVkTWVtb3J5LT5tX2hhbmRs
ZSA9IGNodW5rLkhhbmRsZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9zaXplID0gY2h1bmsuU2l6
ZSgpOworICAgIHNoYXJlZE1lbW9yeS0+bV9kYXRhID0gc3RhdGljX2Nhc3Q8dm9pZCo+KGNodW5r
LkJhc2UoKSk7CisgICAgICAKKyAgICByZXR1cm4gc2hhcmVkTWVtb3J5LnJlbGVhc2UoKTsKK30K
KworU2hhcmVkTWVtb3J5Ojp+U2hhcmVkTWVtb3J5KCkKK3sKKyAgICBSQ2h1bmsgY2h1bms7Cisg
ICAgaWYgKCFjaHVuay5TZXRSZXR1cm5lZEhhbmRsZShtX2hhbmRsZSkpIHsKKyAgICAgICAgVEhh
bmRsZUluZm8gaW5mbzsKKyAgICAgICAgY2h1bmsuSGFuZGxlSW5mbygmaW5mbyk7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlbiB0byBEZWNvbW1pdCgpIG1lbW9y
eSBmcm9tIHRoZSBjaHVuaworICAgICAgICAvLyBGSVhNRTogV2UgbmVlZCB0byBhbHNvIHVuZGVy
c3RhbmQgaG93IENsb3NlKCkgZGVjcmVtZW50cyB0aGUga2VybmVsLXNpZGUgcmVmIGNvdW50IG9m
IHRoZSAKKyAgICAgICAgLy8gc2hhcmVkIG1lbW9yeSBzZWdtZW50IGFuZCBsZWFkcyB0byBwcmVt
YXR1cmUgZGVjb21taXRzKCkgb2YgdGhlIHNoYXJlZCBtZW1vcnkgYXJlYQorICAgIH0KK30KKwor
Ym9vbCBTaGFyZWRNZW1vcnk6OmNyZWF0ZUhhbmRsZShIYW5kbGUmIGhhbmRsZSwgUHJvdGVjdGlv
biBwcm90ZWN0aW9uKQoreworICAgIEFTU0VSVF9BUkcoaGFuZGxlLCBoYW5kbGUuaXNOdWxsKCkp
OworICAgICAgICAKKyAgICBSQ2h1bmsgY2h1bms7IAorICAgIGlmIChjaHVuay5TZXRSZXR1cm5l
ZEhhbmRsZShtX2hhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBD
b252ZXJ0IHRoZSBuYW1lIChzdHJpbmcgZm9ybSkgdG8gYSB1aW50MzJfdC4KKyAgICBUTmFtZSBn
bG9iYWxDaHVua05hbWUgPSBjaHVuay5OYW1lKCk7CisgICAgVExleCBsZXhlcihnbG9iYWxDaHVu
a05hbWUpOworICAgIFRVaW50MzIgbmFtZUFzSW50ID0gMDsgCisgICAgaWYgKGxleGVyLlZhbChu
YW1lQXNJbnQsIEVEZWNpbWFsKSkgCisgICAgICAgIHJldHVybiBmYWxzZTsgCisgICAgICAgICAK
KyAgICBoYW5kbGUubV9jaHVua05hbWUgPSBuYW1lQXNJbnQ7CisgICAgaGFuZGxlLm1fc2l6ZSA9
IG1fc2l6ZTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordW5zaWduZWQgU2hhcmVkTWVt
b3J5OjpzeXN0ZW1QYWdlU2l6ZSgpCit7CisgICAgcmV0dXJuIFBBR0VfU0laRTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vcXQvV29ya1F1ZXVlUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAkocmV2aXNpb24gODQ2MjMpCisrKyBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3
LDIzIEBAIHB1YmxpYzoKICAgICBXb3JrSXRlbSogbV93b3JrSXRlbTsKIH07CiAKKyNpZiBPUyhT
WU1CSUFOKQorUVN5bWJpYW5QaXBlTm90aWZpZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJQaXBlRXZl
bnRIYW5kbGVyKFJQaXBlIHBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpFdmVudFR5cGUgdHlw
ZSwgUGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0pIAoreworICAgIFFTeW1iaWFuUGlwZU5v
dGlmaWVyKiBub3RpZmllciA9IG5ldyBRU3ltYmlhblBpcGVOb3RpZmllcihwaXBlLCB0eXBlLCAt
MSk7CisgICAgIAorICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBub3RpZmll
ci0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgCisgICAgV29ya1F1ZXVlOjpXb3Jr
SXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIG5vdGlmaWVy
LCBTSUdOQUwocmVhZHlUb1JlYWQoaW50KSksIHdvcmtJdGVtLmxlYWtQdHIoKSk7CisgICAgCisg
ICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsgICAgCisgICAgCisgICAgbm90
aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgCisgICAgcmV0dXJuIG5vdGlmaWVyOworfQor
I2Vsc2UKIFFTb2NrZXROb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFu
ZGxlcihpbnQgc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlmaWVyOjpUeXBlIHR5cGUsIFBh
c3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJdGVtKQogewogICAgIEFTU0VSVChtX3dvcmtUaHJlYWQp
OwpAQCAtODksNiArMTA2LDcgQEAgUVNvY2tldE5vdGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lzdGVy
U29jawogICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOwogICAgIHJldHVybiBub3RpZmll
cjsKIH0KKyNlbmRpZgogCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0
IGNoYXIqKQogewpAQCAtMTIwLDggKzEzOCwxMSBAQCB2b2lkIFdvcmtRdWV1ZTo6c2NoZWR1bGVX
b3JrQWZ0ZXJEZWxheShQCiAKIHZvaWQgV29ya1F1ZXVlOjpzY2hlZHVsZVdvcmtPblRlcm1pbmF0
aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBwcm9jZXNzLCBQYXNzT3duUHRy
PFdvcmtJdGVtPiB3b3JrSXRlbSkKIHsKKyAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQg
YSBwcm9jZXNzIHdhdGNoZXIgdXNpbmcgU3ltYmlhbiBSUHJvY2VzcworI2lmICFPUyhTWU1CSUFO
KQogICAgIFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29y
a0l0ZW1RdCh0aGlzLCBwcm9jZXNzLCBTSUdOQUwoZmluaXNoZWQoaW50LCBRUHJvY2Vzczo6RXhp
dFN0YXR1cykpLCB3b3JrSXRlbS5sZWFrUHRyKCkpOwogICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFk
KG1fd29ya1RocmVhZCk7CisjZW5kaWYKIH0KIAogI2luY2x1ZGUgIldvcmtRdWV1ZVF0Lm1vYyIK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3VuaXgvU2hhcmVkTWVtb3J5VW5peC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vdW5peC9TaGFyZWRNZW1vcnlV
bml4LmNwcAkocmV2aXNpb24gODQ2MjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS91bml4
L1NoYXJlZE1lbW9yeVVuaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIEhBVkUoTU1BUCkKICNpbmNsdWRlICJTaGFy
ZWRNZW1vcnkuaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50RGVjb2Rlci5oIgpAQCAtMjM2LDMgKzIz
Nyw2IEBAIHVuc2lnbmVkIFNoYXJlZE1lbW9yeTo6c3lzdGVtUGFnZVNpemUoKQogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAko
cmV2aXNpb24gODQ2MjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQv
UHJvY2Vzc0xhdW5jaGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmICFkZWZpbmVkKFFfT1NfU1lNQklBTikKICNp
bmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKQEAg
LTE2NCwzICsxNjUsNSBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRl
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlclF0Lm1v
YyIKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQv
UHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclN5bWJpYW4uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVu
Y2hlclN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg4IEBACisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiUHJv
Y2Vzc0xhdW5jaGVyLmgiCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUnVu
TG9vcC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9ycGlw
ZS5oIgorI2luY2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisKK19MSVQoS1dv
cmtlclByb2Nlc3NOYW1lLCAiUXRXZWJQcm9jZXNzLmV4ZSIpOworCit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjps
YXVuY2hQcm9jZXNzKCkKK3sKKyAgICAvLyBNYWtlIGEgcGFpciBvZiBoYWxmLWR1cGxleCBwaXBl
cworICAgIFJQaXBlKiBsb2NhbFBpcGVzID0gbmV3IFJQaXBlWzJdOyAKKyAgICBSUGlwZSogcmVt
b3RlUGlwZXMgPSBuZXcgUlBpcGVbMl07IAorICAgICAKKyAgICBSUGlwZTo6SW5pdCgpOworICAg
IC8vIENyZWF0ZSBhIHBpcGUuIEZpcnN0IGFyZyBpcyB0aGUgcmVhZC1lbmQgUlBpcGUgYW5kIHRo
ZSBzZWNvbmQgaXMgdGhlIHdyaXRlLWVuZC4gCisgICAgUlBpcGU6OkNyZWF0ZShDb3JlSVBDOjpD
b25uZWN0aW9uOjpNYXhQaXBlQ2FwYWNpdHksIHJlbW90ZVBpcGVzWzBdLCBsb2NhbFBpcGVzWzFd
KTsKKyAgICBSUGlwZTo6Q3JlYXRlKENvcmVJUEM6OkNvbm5lY3Rpb246Ok1heFBpcGVDYXBhY2l0
eSwgbG9jYWxQaXBlc1swXSwgcmVtb3RlUGlwZXNbMV0pOworICAgIAorICAgIC8vIFByZXBhcmUg
dG8gbGF1bmNoIHdvcmtlciBwcm9jZXNzCisgICAgUlByb2Nlc3MqIHdvcmtlclByb2Nlc3MgPSBu
ZXcgUlByb2Nlc3MoKTsKKyAgICBUSW50IGVycm9yID0gd29ya2VyUHJvY2Vzcy0+Q3JlYXRlKEtX
b3JrZXJQcm9jZXNzTmFtZSgpLCBLTnVsbERlc0MpOworICAgIGlmIChlcnJvcikKKyAgICAgICAg
cUNyaXRpY2FsKCkgPDwgIiBFcnJvciBpbml0aWFsaXppbmcgV2ViS2l0MiB3ZWIgcHJvY2VzcyAi
IDw8IGVycm9yOworCisgICAgLy8gUGFzcyBvd25lcnNoaXAgb2YgcGlwZXMgdmlhIFJQcm9jZXNz
JyAiZW52aXJvbm1lbnQgZGF0YSBzbG90cyIuIAorICAgIC8vIFRoaXMgaXMgdGhlIFN5bWJpYW4g
d2F5IG9mIHBhc3Npbmcgb3duZXJzaGlwIG9mIGhhbmRsZXMgZnJvbSBwYXJlbnQgdG8gY2hpbGQK
KyAgICAvLyBUaGUgY2hvaWNlIG9mIDMgJiA0IGlzIGFyYml0cmFyeSBhbmQgc2hvdWxkIG1hdGNo
IHRoZSB1c2Ugb24gdGhlIHJlY2VpdmluZyBzaWRlIChDb25uZWN0aW9uLmNwcCkKKyAgICB3b3Jr
ZXJQcm9jZXNzLT5TZXRQYXJhbWV0ZXIoMywgcmVtb3RlUGlwZXNbMF0pOyAvLyByZWFkZXIKKyAg
ICB3b3JrZXJQcm9jZXNzLT5TZXRQYXJhbWV0ZXIoNCwgcmVtb3RlUGlwZXNbMV0pOyAvLyB3cml0
ZXIKKyAgICAgICAgICAgICAgICAKKyAgICAvLyBCbG9jayB1bnRpbCB0aGUgcmVtb3RlIHByb2Nl
c3MgaXMgdXAKKyAgICB3b3JrZXJQcm9jZXNzLT5SZXN1bWUoKTsKKyAgICBUUmVxdWVzdFN0YXR1
cyBsYXVuY2hTdGF0dXM7IAorICAgIHdvcmtlclByb2Nlc3MtPlJlbmRlenZvdXMobGF1bmNoU3Rh
dHVzKTsgCisgICAgVXNlcjo6V2FpdEZvclJlcXVlc3QobGF1bmNoU3RhdHVzKTsKKyAgICAKKyAg
ICBpZiAobGF1bmNoU3RhdHVzLkludCgpICE9IEtFcnJOb25lKSAKKyAgICAgICAgcUNyaXRpY2Fs
KCkgPDwgIiBXb3JrZXIgcHJvY2VzcyBmYWlsZWQgdG8gbGF1bmNoICIgPDwgbGF1bmNoU3RhdHVz
LkludCgpOworICAgIAorICAgIC8vIENsb3NlIHRoZSBwaXBlIGVuZHMgd2UganVzdCBwYXNzZWQg
dG8gdGhlIHJlbW90ZQorICAgIHJlbW90ZVBpcGVzWzBdLkNsb3NlKCk7IAorICAgIHJlbW90ZVBp
cGVzWzFdLkNsb3NlKCk7CisgICAgZGVsZXRlW10gcmVtb3RlUGlwZXM7CisgICAgCisgICAgQ29y
ZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyID0gbG9jYWxQaXBlczsgIAor
ICAgIAorICAgIC8vIERlY2xhcmUgbGF1bmNoIHByb2Nlc3MgYXMgZG9uZS4gTm90ZSB0aGF0IHRo
aXMgY2xhc3Mgb3ducyAnd29ya2VyUHJvY2VzcycsIGJ1dCBDb25uZWN0aW9uIG93bnMgJ2lkZW50
aWZpZXInIAorICAgIFJ1bkxvb3A6Om1haW4oKS0+c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVh
dGUodGhpcywgJldlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9j
ZXNzLCB3b3JrZXJQcm9jZXNzLCBpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5j
aGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fcHJvY2Vzc0lkZW50aWZpZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEltcG9ydGFudDogS2lsbGluZyBhbm90aGVyIHBy
b2Nlc3MgKGV2ZW4gaWYgd2Ugc3Bhd25lZCBpdCkgcmVxdWlyZXMgUG93ZXJNYW5hZ2VtZW50IGNh
cGFiaWxpdHksCisgICAgLy8gd2hpY2ggaXMgYSBoaWdoIGJhciB0byBqdW1wIG92ZXIgZm9yIGFu
eSB1c2VyIGFwcGxpY2F0aW9uLiBJdCdzIGFsc28gYSBzZWN1cml0eSByaXNrLgorICAgIC8vIFRP
RE86IENoZWNrIGlmIHdlIHNob3VsZCBzaWduYWwgdGhlIHdlYiBwcm9jZXNzIHRocm91Z2ggdGhl
IHBpcGUgdG8gdGVybWluYXRlIGl0c2VsZj8KKyAgICAvLyAuLmFsdGhvdWdoIHRoYXQgd29uJ3Qg
d29yayBpZiB0aGUgcHJvY2VzcyBpcyB1bnJlc3BvbnNpdmUhCisgICAgUlByb2Nlc3MgbWU7Cisg
ICAgaWYgKG1lLkhhc0NhcGFiaWxpdHkoRUNhcGFiaWxpdHlQb3dlck1nbXQpKQorICAgICAgICBt
X3Byb2Nlc3NJZGVudGlmaWVyLT5UZXJtaW5hdGUoS0Vyck5vbmUpOworfQorCit2b2lkIFByb2Nl
c3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoIW1fcHJvY2Vzc0lk
ZW50aWZpZXIpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcHJvY2Vzc0lkZW50aWZpZXItPkNs
b3NlKCk7CisgICAgZGVsZXRlIG1fcHJvY2Vzc0lkZW50aWZpZXI7CisgICAgbV9wcm9jZXNzSWRl
bnRpZmllciA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9U
aHJlYWRMYXVuY2hlclF0LmNwcAkocmV2aXNpb24gODQ2MjMpCisrKyBTb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDMxICs0Nyw0MSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNl
IFdlYktpdCB7CiAKK3N0YXRpYyBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIGludmFs
aWRDb25uZWN0aW9uSWRlbnRpZmllcigpCit7IAorICAgIENvcmVJUEM6OkNvbm5lY3Rpb246Oklk
ZW50aWZpZXIgaWRlbnRpZmllcjsgCisjaWYgT1MoU1lNQklBTikKKyAgICBpZGVudGlmaWVyID0g
MDsgLy8gaW52YWxpZCBSUHJvY2VzcyoKKyNlbHNlCisgICAgaWRlbnRpZmllciA9IC0xOyAvLyBp
bnZhbGlkIHNvY2tldCBkZXNjcmlwdG9yCisjZW5kaWYKKyAgICByZXR1cm4gaWRlbnRpZmllcjsK
K30KKwogc3RhdGljIHZvaWQqIHdlYlRocmVhZEJvZHkodm9pZCogLyogY29udGV4dCAqLykKIHsK
ICAgICAvLyBJbml0aWFsaXphdGlvbgogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwog
ICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKIAotICAgIC8vIEZJWE1FOiBXZSBkbyBu
b3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cuCisgICAgLy8gRklYTUU6IFRoZSBRdCBw
b3J0IGRvZXMgbm90IHN1cHBvcnQgdGhyZWFkZWQgbW9kZSBmb3Igbm93LgogCi0gICAgV2ViUHJv
Y2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZSgtMSwgUnVuTG9vcDo6Y3VycmVudCgpKTsKKyAgICBX
ZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKGludmFsaWRDb25uZWN0aW9uSWRlbnRpZmll
cigpLCBSdW5Mb29wOjpjdXJyZW50KCkpOwogICAgIFJ1bkxvb3A6OnJ1bigpOwogCiAgICAgcmV0
dXJuIDA7CiB9CiAKIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgVGhyZWFkTGF1bmNo
ZXI6OmNyZWF0ZVdlYlRocmVhZCgpCi17Ci0gICAgc3JhbmRvbSh0aW1lKDApKTsKLSAgICBpbnQg
Y29ubmVjdGlvbklkZW50aWZpZXIgPSByYW5kb20oKTsKLQotICAgIGlmICghY3JlYXRlVGhyZWFk
KHdlYlRocmVhZEJvZHksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGNvbm5lY3Rpb25JZGVudGlm
aWVyKSwgIldlYktpdDI6IFdlYlRocmVhZCIpKSB7Cit7ICAKKyAgICAvLyBGSVhNRTogVGhlIFF0
IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZvciBub3cuCisgICAgCisgICAg
aWYgKCFjcmVhdGVUaHJlYWQod2ViVGhyZWFkQm9keSwgMCwgIldlYktpdDI6IFdlYlRocmVhZCIp
KSB7CiAgICAgICAgIHFXYXJuaW5nKCkgPDwgImZhaWxlZCBzdGFydGluZyB0aHJlYWQiOwotICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGludmFsaWRDb25uZWN0aW9uSWRlbnRpZmll
cigpOwogICAgIH0KIAotICAgIHJldHVybiBjb25uZWN0aW9uSWRlbnRpZmllcjsKKyAgICByZXR1
cm4gaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVyKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YktpdApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nl
c3NNYWluUXQuY3BwCShyZXZpc2lvbiA4NDYyMykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiw2ICsxMzIs
MTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVByb3h5KCkKIAogUV9ERUNMX0VYUE9SVCBpbnQg
V2ViUHJvY2Vzc01haW5RdChpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiB7CisjaWYgZGVmaW5lZChR
X09TX1NZTUJJQU4pCisgICAgUlByb2Nlc3MgcHJvY2VzczsgCisgICAgcHJvY2Vzcy5TZXRQcmlv
cml0eShFUHJpb3JpdHlCYWNrZ3JvdW5kKTsKKyNlbmRpZgorICAgIAogICAgIFFBcHBsaWNhdGlv
bjo6c2V0R3JhcGhpY3NTeXN0ZW0oUUxhdGluMVN0cmluZygicmFzdGVyIikpOwogICAgIFFBcHBs
aWNhdGlvbiogYXBwID0gbmV3IFFBcHBsaWNhdGlvbihhcmdjLCBhcmd2KTsKICNpZm5kZWYgTkRF
QlVHCkBAIC0xNTMsNiArMTU4LDExIEBAIFFfREVDTF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWlu
UXQoaW50IGEKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAgICAgUnVuTG9vcDo6
aW5pdGlhbGl6ZU1haW5SdW5Mb29wKCk7CiAKKyAgICBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVu
dGlmaWVyIGlkZW50aWZpZXI7IAorI2lmIE9TKFNZTUJJQU4pCisgICAgLy8gV2Ugb2J0YWluIHRo
ZSBoYW5kbGVzIGRpcmVjdGx5IGZyb20gdGhlICJlbnZpcm9ubWVudCBkYXRhIHNsb3RzIiBvZiB0
aGUgUlByb2Nlc3MKKyAgICBpZGVudGlmaWVyID0gMDsgCisjZWxzZQogICAgIC8vIENyZWF0ZSB0
aGUgY29ubmVjdGlvbi4KICAgICBpZiAoYXBwLT5hcmd1bWVudHMoKS5zaXplKCkgPD0gMSkgewog
ICAgICAgICBxRGVidWcoKSA8PCAiRXJyb3I6IHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMuIjsK
QEAgLTE2MCwxMiArMTcwLDEzIEBAIFFfREVDTF9FWFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQo
aW50IGEKICAgICB9CiAKICAgICBib29sIHdhc051bWJlciA9IGZhbHNlOwotICAgIGludCBpZGVu
dGlmaWVyID0gYXBwLT5hcmd1bWVudHMoKS5hdCgxKS50b0ludCgmd2FzTnVtYmVyLCAxMCk7Cisg
ICAgaWRlbnRpZmllciA9IGFwcC0+YXJndW1lbnRzKCkuYXQoMSkudG9JbnQoJndhc051bWJlciwg
MTApOwogICAgIGlmICghd2FzTnVtYmVyKSB7CiAgICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvcjog
Y29ubmVjdGlvbiBpZGVudGlmaWVyIHdyb25nLiI7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0K
LQorI2VuZGlmCisgICAgCiAgICAgV2ViS2l0OjpXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFs
aXplKGlkZW50aWZpZXIsIFJ1bkxvb3A6Om1haW4oKSk7CiAKICAgICBSdW5Mb29wOjpydW4oKTsK
SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDg0NjIzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTQgQEAKKzIwMTEtMDQtMjIgIFNpZGRoYXJ0aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVy
QG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbUXRdW1dLMl1bU3ltYmlhbl0gQ29ycmVjdGlvbnMgdG8gZGVmYXVsdCB3aW5kb3cgbW9k
ZSBvbiBTeW1iaWFuIGRldmljZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU1ODc3CisKKyAgICAgICAgKiBNaW5pQnJvd3Nlci9xdC9Ccm93c2VyV2lu
ZG93LmNwcDoKKyAgICAgICAgKEJyb3dzZXJXaW5kb3c6OkJyb3dzZXJXaW5kb3cpOgorICAgICAg
ICAqIE1pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybzoKKwogMjAxMS0wNC0yMiAgQmFsYXpz
IEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQ3Nh
YmEgT3N6dHJvZ29uw6FjLgpJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRvdy5j
cHAJKHJldmlzaW9uIDg0NjIzKQorKysgVG9vbHMvTWluaUJyb3dzZXIvcXQvQnJvd3NlcldpbmRv
dy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMywxMSArMTIzLDE5IEBAIEJyb3dzZXJXaW5kb3c6
OkJyb3dzZXJXaW5kb3coUVdLQ29udGV4dCoKICAgICBjb25uZWN0KG1fYWRkcmVzc0JhciwgU0lH
TkFMKHJldHVyblByZXNzZWQoKSksIFNMT1QoY2hhbmdlTG9jYXRpb24oKSkpOwogCiAgICAgUVRv
b2xCYXIqIGJhciA9IGFkZFRvb2xCYXIoIk5hdmlnYXRpb24iKTsKKyNpZiBkZWZpbmVkKFFfT1Nf
U1lNQklBTikKKyAgICBiYXItPnNldEljb25TaXplKFFTaXplKDE2LCAxNikpOworI2VuZGlmCiAg
ICAgYmFyLT5hZGRBY3Rpb24ocGFnZSgpLT5hY3Rpb24oUVdLUGFnZTo6QmFjaykpOwogICAgIGJh
ci0+YWRkQWN0aW9uKHBhZ2UoKS0+YWN0aW9uKFFXS1BhZ2U6OkZvcndhcmQpKTsKICAgICBiYXIt
PmFkZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpSZWxvYWQpKTsKICAgICBiYXItPmFk
ZEFjdGlvbihwYWdlKCktPmFjdGlvbihRV0tQYWdlOjpTdG9wKSk7CisjaWYgZGVmaW5lZChRX09T
X1NZTUJJQU4pCisgICAgYWRkVG9vbEJhckJyZWFrKCk7CisgICAgYWRkVG9vbEJhcigiTG9jYXRp
b24iKS0+YWRkV2lkZ2V0KG1fYWRkcmVzc0Jhcik7CisjZWxzZQogICAgIGJhci0+YWRkV2lkZ2V0
KG1fYWRkcmVzc0Jhcik7CisjZW5kaWYKIAogICAgIFFTaG9ydGN1dCogc2VsZWN0QWRkcmVzc0Jh
ciA9IG5ldyBRU2hvcnRjdXQoUXQ6OkNUUkwgfCBRdDo6S2V5X0wsIHRoaXMpOwogICAgIGNvbm5l
Y3Qoc2VsZWN0QWRkcmVzc0JhciwgU0lHTkFMKGFjdGl2YXRlZCgpKSwgdGhpcywgU0xPVChvcGVu
TG9jYXRpb24oKSkpOwpJbmRleDogVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dzZXIucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL01pbmlCcm93c2VyL3F0L01pbmlCcm93c2VyLnBybwkocmV2
aXNpb24gODQ2MjMpCisrKyBUb29scy9NaW5pQnJvd3Nlci9xdC9NaW5pQnJvd3Nlci5wcm8JKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDIxIEBAIGxpbnV4LSogewogCiBzeW1iaWFuIHsKICAg
ICBUQVJHRVQuVUlEMyA9IDB4QTAwMEU1NDUKLSAgICBUQVJHRVQuQ0FQQUJJTElUWSA9IFJlYWRV
c2VyRGF0YSBXcml0ZVVzZXJEYXRhIE5ldHdvcmtTZXJ2aWNlcworICAgIE1NUF9SVUxFUyArPSBw
YWdlZGRhdGEKKyAgICAKKyAgICBUQVJHRVQuQ0FQQUJJTElUWSAqPSBSZWFkVXNlckRhdGEgCisg
ICAgVEFSR0VULkNBUEFCSUxJVFkgKj0gV3JpdGVVc2VyRGF0YQorICAgIFRBUkdFVC5DQVBBQklM
SVRZICo9IE5ldHdvcmtTZXJ2aWNlcyAgIyBRdE5ldHdvcmsgYW5kIEJlYXJlcgorICAgIFRBUkdF
VC5DQVBBQklMSVRZICo9IFBvd2VyTWdtdCAgICAgICAgIyBraWxsaW5nIHdlYiBwcm9jZXNzIGZy
b20gVUkgcHJvY2VzcworICAgIAorICAgICMgU2VlIFF0TW9iaWxpdHkgZG9jcyBvbiBTeW1iaWFu
IGNhcGFiaWxpdGllczogCisgICAgIyBodHRwOi8vZG9jLnF0Lm5va2lhLmNvbS9xdG1vYmlsaXR5
L3F1aWNrc3RhcnQuaHRtbAorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9IExvY2F0aW9uICAgICAg
ICAgIyBnZW9sb2NhdGlvbgorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9IFJlYWREZXZpY2VEYXRh
ICAgIyBnZW9sb2NhdGlvbiwgc2Vuc29ycworICAgIFRBUkdFVC5DQVBBQklMSVRZICo9IFdyaXRl
RGV2aWNlRGF0YSAgIyBnZW9sb2NhdGlvbgorICAgIFRBUkdFVC5DQVBBQklMSVRZICo9IExvY2Fs
U2VydmljZXMgICAgIyBnZW9sb2NhdGlvbiwgc3lzaW5mbworICAgIAorICAgICMgV2UgbWF5IGxh
dGVyIG5lZWQgVXNlckVudmlyb25tZW50IGZvciBtaWMvY2FtZXJhIGlucHV0CiB9CiAKIGNvbnRh
aW5zKFFUX0NPTkZJRywgb3BlbmdsKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93812</attachid>
            <date>2011-05-17 13:48:30 -0700</date>
            <delta_ts>2011-05-20 11:56:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55877-20110517164829.patch</filename>
            <type>text/plain</type>
            <size>42029</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2Njg5KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDUtMTcgIFNpZGRoYXJ0
aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdW1dLMl1bU3ltYmlhbl0gQ29yZUlQ
QyBpbXBsZW1lbnRhdGlvbiBmb3IgU3ltYmlhbiBPUworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4NzcKKworICAgICAgICBVc2UgbmF0aXZlIFN5bWJp
YW4gT1MgQVBJcyBmb3IgcGxhdGZvcm0gc3BlY2lmaWMgcGx1bWJpbmcgbGlrZSBwcm9jZXNzIGxh
dW5jaGluZyBhbmQgSVBDLgorICAgICAgICBUaGUgY2hhbmdlIG1heGltaXplcyB1c2Ugb2YgdGhl
IGV4aXN0aW5nIFF0IHBvcnQgb2YgV2ViS2l0Miwgd2hpbGUgaW1wbGVtZW50aW5nIG9ubHkgdGhl
IGFib3ZlLW1lbnRpb25lZAorICAgICAgICBwb3J0aW9ucyB1c2luZyBuYXRpdmUgY29uc3RydWN0
cy4KKworICAgICAgICBGb3IgSVBDLCB0d28gaGFsZi1kdXBsZXggcGlwZXMgKFJQaXBlKSBhcmUg
dXNlZC4gRm9yIHByb2Nlc3MgbGF1bmNoaW5nLCB0aGUgUlByb2Nlc3MgY2xhc3MKKyAgICAgICAg
d2hpY2ggYWxsb3dzIG93bmVyc2hpcCB0cmFuc2ZlciBvZiBJUEMgaGFuZGxlcyB0byBhIGNoaWxk
IHByb2Nlc3MgaXMgdXNlZC4KKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVu
dC5oOiBkZWNvdXBsZSBTeW1iaWFuIGZyb20gVU5JWF9ET01BSU5fU09DS0VUUyBjb2RlLgorICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOiBuZXcgU3ltYmlhbi1zcGVjaWZp
YyB0eXBlZGVmcyBhbmQgbWVtYmVyIHZhcmlhYmxlcy4KKworICAgICAgICAqIFBsYXRmb3JtL0Nv
cmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKENvcmVJUEM6
OnJvdW5kVXBUb0FsaWdubWVudCk6IFBvaW50ZXIgYWxpZ25tZW50IHV0aWxpdHkuCisgICAgICAg
IChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUpOiBTZXRzIHVwIFJQaXBl
IGNvbm5lY3Rpb24uCisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFs
aWRhdGUpOiBEZXN0cm95cyBSUGlwZSBhbmQgd2F0Y2hlcnMuCisgICAgICAgIChDb3JlSVBDOjpp
c01lc3NhZ2VUcmFpbGVyKTogQ2hlY2tzIGlmIGJ1ZmZlciBjb250YWlucyBhIG1hcmtlci4KKyAg
ICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpOk1haW4gd29ya2Vy
IG1ldGhvZCBmb3IgcmVhZGluZyBkYXRhIGFuZCBtZXNzYWdlIHBhcnNpbmcrZGlzcGF0Y2hpbmcu
CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpvcGVuKTogSW5pdGlhbGl6YXRpb24gY29k
ZS4KKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5n
TWVzc2FnZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVz
c2FnZSk6IFNlcmlhbGl6ZXMgbWVzc2FnZXMgd2l0aCBPUy1zcGVjaWZpYyBtZXRhZGF0YQorICAg
ICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9j
ZXNzVGVybWluYXRpb24pOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5Q
aXBlTm90aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgUXQtc3R5bGUgc2lnbmFsIGVtaXR0aW5n
IHdyYXBwZXIgYXJvdW5kIGFzeW5jIFN5bWJpYW4gSU8uIERlc2lnbmVkIHRvIGJlIFFPYmplY3Qt
Pm1vdmVUb1RocmVhZCgpCisgICAgICAgIGNvbXBhdGlibGUuICJIYXMtYSIgcmVsYXRpb25zaGlw
IHdpdGggYSB0aHJlYWQtbG9jYWwgU3ltYmlhbiBBY3RpdmUgT2JqZWN0LgorICAgICAgICAoUVN5
bWJpYW5QaXBlTm90aWZpZXI6OlFTeW1iaWFuUGlwZU5vdGlmaWVyKToKKyAgICAgICAgKFFTeW1i
aWFuUGlwZU5vdGlmaWVyOjp+UVN5bWJpYW5QaXBlTm90aWZpZXIpOgorICAgICAgICAoUVN5bWJp
YW5QaXBlTm90aWZpZXI6OnNldEVuYWJsZWQpOgorICAgICAgICAoUVN5bWJpYW5QaXBlTm90aWZp
ZXI6OmV2ZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5v
dGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBp
cGVBY3RpdmVPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgVGhlIFN5bWJpYW4gQWN0aXZlIE9i
amVjdCB0aGF0IHJlZ2lzdGVycy9oYW5kbGVzIGRhdGEgYXZhaWxhYmxlIHJlcXVlc3RzL25vdGlm
aWNhdGlvbnMgb24gYW4gUlBpcGUuCisgICAgICAgIChTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6
U3ltYmlhblBpcGVBY3RpdmVPYmplY3QpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmpl
Y3Q6On5TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCk6CisgICAgICAgIChTeW1iaWFuUGlwZUFjdGl2
ZU9iamVjdDo6c2V0RW5hYmxlZCk6IEEgUVNvY2tldE5vdGlmaWVyOjpzZXRFbmFibGVkKCkgc3R5
bGUgaW50ZXJmYWNlLgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlJ1bkwpOgor
ICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRvQ2FuY2VsKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0Lmg6IEFkZGVkLgorICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHA6IGd1YXJkIHdp
dGggVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy91
bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDogRGl0dG8uCisgICAgICAgICogUGxhdGZvcm0vUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllci5oOiBVc2UgUlByb2Nlc3MqIGZvciB3ZWIgcHJvY2VzcyBoYW5k
bGUuCisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6IGRlY291cGxlIFN5bWJpYW4g
ZnJvbSBVTklYX0RPTUFJTl9TT0NLRVRTIGNvZGUuCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1
ZXVlLmg6IE5ldyByZWdpc3RlclBpcGVFdmVudEhhbmRsZXIoKSBtZXRob2Qgc2ltaWxhciB0byBR
dC1Vbml4IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9y
eVN5bWJpYW4uY3BwOiBSZW1vdmVkIHVudXNlZCBtZXRob2RzLgorICAgICAgICAqIFBsYXRmb3Jt
L3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAgICAgICAgTmV3IHJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxl
cigpIG1ldGhvZCBzaW1pbGFyIHRvIFF0LVVuaXggaW1wbGVtZW50YXRpb24uCisgICAgICAgIChX
b3JrUXVldWU6OnJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6
OnNjaGVkdWxlV29ya09uVGVybWluYXRpb24pOiBXYXRjaGluZyBmb3Igd2ViIHByb2Nlc3MnIGRl
YXRoIGlzIGN1cnJlbnRseSBUT0RPLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Q
cm9jZXNzTGF1bmNoZXJRdC5jcHA6IEV4Y2x1ZGUgZmlsZSB3aGVuIFFfT1NfU1lNQklBTiBpcyB1
c2VkLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJTeW1i
aWFuLmNwcDogQWRkZWQuCisgICAgICAgIE5hdGl2ZSBTeW1iaWFuIE9TIGltcGxlbWVudGF0aW9u
IHRoYXQgdXNlcyBSUHJvY2VzcyB0byBzcGF3biB3ZWIgcHJvY2VzcyBhbmQgc2V0cyB1cCBwaXBl
cyBmb3IgSVBDLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwOiBN
aW5vciBjbGVhbnVwIHRvIHVuZGVybGluZSB0aGF0IFF0IHBvcnQgZG9lc24ndCBzdXBwb3J0IHRo
aXMuCisgICAgICAgIChXZWJLaXQ6OmludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVu
Y2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAgICAgKiBXZWJLaXQyLnByaTogTGluayB3aXRo
IHJwaXBlIGxpYnJhcnkuCisgICAgICAgICogV2ViS2l0Mi5wcm86IEFkZCBuZXcgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0
LmNwcDogU2V0IHByb2Nlc3MgcHJpb3JpdHkgdG8gbG93LiBEb24ndCB1c2UgaWRlbnRpZmllciBm
cm9tIGNvbW1hbmQtbGluZSBhcmdzIGZvciBTeW1iaWFuLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzTWFpblF0KToKKwogMjAxMS0wNS0xNyAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnByaQkocmV2aXNpb24gODY1OTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBy
aQkod29ya2luZyBjb3B5KQpAQCAtNzAsNiArNzAsOCBAQCBzeW1iaWFuIHsKICAgICBJTkNMVURF
UEFUSCA9ICQkV0VCS0lUMl9JTkNMVURFUEFUSCAkJFdFQktJVDJfR0VORVJBVEVEX1NPVVJDRVNf
RElSICQkSU5DTFVERVBBVEgKIH0KIAorc3ltYmlhbjogTElCUyArPSAtbHJwaXBlCisKIGRlZmlu
ZVRlc3QocHJlcGVuZFdlYktpdDJMaWIpIHsKICAgICBwYXRoVG9XZWJLaXQyT3V0cHV0ID0gJCRB
UkdTLyQkV0VCS0lUMl9ERVNURElSCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJv
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCShyZXZpc2lvbiA4NjU5
OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NiArMTAyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9IYW5kbGVNZXNz
YWdlLmggXAogICAgIFBsYXRmb3JtL0NvcmVJUEMvTWVzc2FnZUlELmggXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvTWVzc2FnZVNlbmRlci5oIFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1i
aWFuUGlwZU5vdGlmaWVyLmggXAogICAgIFBsYXRmb3JtL0xvZ2dpbmcuaCBcCiAgICAgUGxhdGZv
cm0vTW9kdWxlLmggXAogICAgIFBsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCBc
CkBAIC0zMTMsNiArMzE0LDkgQEAgU09VUkNFUyArPSBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy9E
YXRhUmVmZXJlbmNlLmNwcCBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRV
bml4LmNwcCBcCiAgICAgUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcCBc
CisgICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAgXAorICAgIFBs
YXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuY3BwIFwKKyAgICBQbGF0Zm9y
bS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmNwcCBcCiAgICAgUGxhdGZvcm0v
TG9nZ2luZy5jcHAgXAogICAgIFBsYXRmb3JtL01vZHVsZS5jcHAgXAogICAgIFBsYXRmb3JtL1Jl
Z2lvbi5jcHAgXApAQCAtNDAwLDYgKzQwNCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIFVJUHJvY2Vz
cy9MYXVuY2hlci9Qcm9jZXNzTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIv
VGhyZWFkTGF1bmNoZXIuY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xh
dW5jaGVyUXQuY3BwIFwKKyAgICBVSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVy
U3ltYmlhbi5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0
LmNwcCBcCiAgICAgVUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luSW5mb1N0b3JlLmNwcCBcCiAgICAg
VUlQcm9jZXNzL1BsdWdpbnMvUGx1Z2luUHJvY2Vzc1Byb3h5LmNwcCBcCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oCShy
ZXZpc2lvbiA4NjU5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vz
c0lkZW50aWZpZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgsMTEgQEAgdHlwZWRlZiBw
aWRfdCBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oV0lOKQogdHlw
ZWRlZiBIQU5ETEUgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKICNlbGlmIFBMQVRGT1JNKFFU
KQorI2lmIE9TKFNZTUJJQU4pCit0eXBlZGVmIFJQcm9jZXNzKiBQbGF0Zm9ybVByb2Nlc3NJZGVu
dGlmaWVyOworI2Vsc2UKIHR5cGVkZWYgUVByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZp
ZXI7CisjZW5kaWYKICNlbGlmIFBMQVRGT1JNKEdUSykKICNpZmRlZiBHX09TX1dJTjMyCiB0eXBl
ZGVmIHZvaWQqIEdQaWQ7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1v
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1vcnku
aAkocmV2aXNpb24gODY1OTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9TaGFyZWRNZW1v
cnkuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZv
aWQgZW5jb2RlKENvcmVJUEM6OkFyZ3VtZW50RW5jb2RlciopIGNvbnN0OwogICAgICAgICBzdGF0
aWMgYm9vbCBkZWNvZGUoQ29yZUlQQzo6QXJndW1lbnREZWNvZGVyKiwgSGFuZGxlJik7CiAKLSNp
ZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoU1lNQklBTikKKyNpZiBVU0UoVU5JWF9E
T01BSU5fU09DS0VUUykKICAgICAgICAgQ29yZUlQQzo6QXR0YWNobWVudCByZWxlYXNlVG9BdHRh
Y2htZW50KCkgY29uc3Q7CiAgICAgICAgIHZvaWQgYWRvcHRGcm9tQXR0YWNobWVudChpbnQgZmls
ZURlc2NyaXB0b3IsIHNpemVfdCk7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL1dvcmtRdWV1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dv
cmtRdWV1ZS5oCShyZXZpc2lvbiA4NjU5OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1dv
cmtRdWV1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSw5IEBACiAjaW5jbHVkZSAiUGxh
dGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIgogY2xhc3MgUU9iamVjdDsKIGNsYXNzIFFUaHJlYWQ7
CisjaWYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJxdC9RU3ltYmlhblBpcGVOb3RpZmllci5oIgor
I2VuZGlmCiAjZWxpZiBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiUGxhdGZvcm1Qcm9jZXNzSWRl
bnRpZmllci5oIgogdHlwZWRlZiBzdHJ1Y3QgX0dNYWluQ29udGV4dCBHTWFpbkNvbnRleHQ7CkBA
IC04NCw3ICs4NywxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZWdpc3RlckhhbmRsZShIQU5ETEUs
IFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKICAgICB2b2lkIHVucmVnaXN0ZXJBbmRDbG9zZUhhbmRs
ZShIQU5ETEUpOwogI2VsaWYgUExBVEZPUk0oUVQpCisjaWYgT1MoU1lNQklBTikKKyAgICBRU3lt
YmlhblBpcGVOb3RpZmllciogcmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKFJQaXBlLCBRU3ltYmlh
blBpcGVOb3RpZmllcjo6RXZlbnRUeXBlLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CisjZWxzZQog
ICAgIFFTb2NrZXROb3RpZmllciogcmVnaXN0ZXJTb2NrZXRFdmVudEhhbmRsZXIoaW50LCBRU29j
a2V0Tm90aWZpZXI6OlR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKKyNlbmRpZgogICAgIHZv
aWQgc2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbihXZWJLaXQ6OlBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXIsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKICNlbGlmIFBMQVRGT1JNKEdUSykKICAgICB2
b2lkIHJlZ2lzdGVyRXZlbnRTb3VyY2VIYW5kbGVyKGludCwgaW50LCBQYXNzT3duUHRyPFdvcmtJ
dGVtPik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0F0dGFjaG1l
bnQuaAkocmV2aXNpb24gODY1OTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L0F0dGFjaG1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAj
aWYgUExBVEZPUk0oTUFDKQogICAgICAgICBNYWNoUG9ydFR5cGUsCiAgICAgICAgIE1hY2hPT0xN
ZW1vcnlUeXBlLAotI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8IE9TKFNZTUJJQU4p
CisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKICAgICAgICAgTWFwcGVkTWVtb3J5CiAj
ZW5kaWYKICAgICB9OwpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIEF0dGFjaG1lbnQobWFjaF9wb3J0X25hbWVfdCBwb3J0LCBtYWNoX21zZ190eXBlX25h
bWVfdCBkaXNwb3NpdGlvbik7CiAgICAgQXR0YWNobWVudCh2b2lkKiBhZGRyZXNzLCBtYWNoX21z
Z19zaXplX3Qgc2l6ZSwgbWFjaF9tc2dfY29weV9vcHRpb25zX3QgY29weU9wdGlvbnMsIGJvb2wg
ZGVhbGxvY2F0ZSk7Ci0jZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoU1lNQklB
TikKKyNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIEF0dGFjaG1lbnQoaW50IGZp
bGVEZXNjcmlwdG9yLCBzaXplX3QpOwogI2VuZGlmCiAKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGlj
OgogICAgIG1hY2hfbXNnX3NpemVfdCBzaXplKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1h
Y2hPT0xNZW1vcnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LnNpemU7IH0KICAgICBtYWNoX21z
Z19jb3B5X29wdGlvbnNfdCBjb3B5T3B0aW9ucygpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBN
YWNoT09MTWVtb3J5VHlwZSk7IHJldHVybiBtX29vbE1lbW9yeS5jb3B5T3B0aW9uczsgfQogICAg
IGJvb2wgZGVhbGxvY2F0ZSgpIGNvbnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBNYWNoT09MTWVtb3J5
VHlwZSk7IHJldHVybiBtX29vbE1lbW9yeS5kZWFsbG9jYXRlOyB9Ci0jZWxpZiBVU0UoVU5JWF9E
T01BSU5fU09DS0VUUykgfHwgT1MoU1lNQklBTikKKyNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NL
RVRTKQogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKICAgICBp
bnQgcmVsZWFzZUZpbGVEZXNjcmlwdG9yKCkgeyBpbnQgdGVtcCA9IG1fZmlsZURlc2NyaXB0b3I7
IG1fZmlsZURlc2NyaXB0b3IgPSAtMTsgcmV0dXJuIHRlbXA7IH0KQEAgLTk0LDcgKzk0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIGJvb2wgZGVhbGxvY2F0ZTsKICAgICAgICAgfSBtX29vbE1l
bW9yeTsKICAgICB9OwotI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8IE9TKFNZTUJJ
QU4pCisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKICAgICBpbnQgbV9maWxlRGVzY3Jp
cHRvcjsKICAgICBzaXplX3QgbV9zaXplOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAkocmV2aXNpb24gODY1OTgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL0Nvbm5lY3Rpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtNDMsOCArNDMsMTIgQEAKICNlbGlmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDxzdHJpbmc+
CiAjZWxpZiBQTEFURk9STShRVCkKKyNpZiBPUyhTWU1CSUFOKQorI2luY2x1ZGUgPHBsYXRmb3Jt
L3JwaXBlLmg+CisjZWxzZQogY2xhc3MgUVNvY2tldE5vdGlmaWVyOwogI2VuZGlmCisjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAjaW5jbHVkZSAiUGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllci5oIgpAQCAtMTEzLDggKzExNywxMCBAQCBwdWJsaWM6CiAjZWxpZiBQ
TEFURk9STShXSU4pCiAgICAgdHlwZWRlZiBIQU5ETEUgSWRlbnRpZmllcjsKICAgICBzdGF0aWMg
Ym9vbCBjcmVhdGVTZXJ2ZXJBbmRDbGllbnRJZGVudGlmaWVycyhJZGVudGlmaWVyJiBzZXJ2ZXJJ
ZGVudGlmaWVyLCBJZGVudGlmaWVyJiBjbGllbnRJZGVudGlmaWVyKTsKLSNlbGlmIFVTRShVTklY
X0RPTUFJTl9TT0NLRVRTKSB8fCBPUyhTWU1CSUFOKQorI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NP
Q0tFVFMpCiAgICAgdHlwZWRlZiBpbnQgSWRlbnRpZmllcjsKKyNlbGlmIE9TKFNZTUJJQU4pCisg
ICAgdHlwZWRlZiBSUGlwZSogSWRlbnRpZmllcjsKICNlbmRpZgogCiAgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q29ubmVjdGlvbj4gY3JlYXRlU2VydmVyQ29ubmVjdGlvbihJZGVudGlmaWVyLCBDbGll
bnQqLCBSdW5Mb29wKiBjbGllbnRSdW5Mb29wKTsKQEAgLTE1MSw2ICsxNTcsOSBAQCBwdWJsaWM6
CiAKICAgICBzdGF0aWMgY29uc3QgaW50IERlZmF1bHRUaW1lb3V0ID0gMDsKICAgICBzdGF0aWMg
Y29uc3QgaW50IE5vVGltZW91dCA9IC0xOworI2lmIE9TKFNZTUJJQU4pCisgICAgc3RhdGljIGNv
bnN0IGludCBNYXhQaXBlQ2FwYWNpdHkgPSA0MDk2OyAKKyNlbmRpZgogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4gYm9vbCBzZW5kKGNvbnN0IFQmIG1lc3NhZ2UsIHVpbnQ2NF90IGRlc3RpbmF0
aW9uSUQsIHVuc2lnbmVkIG1lc3NhZ2VTZW5kRmxhZ3MgPSAwKTsKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBib29sIHNlbmRTeW5jKGNvbnN0IFQmIG1lc3NhZ2UsIGNvbnN0IHR5cGVuYW1lIFQ6
OlJlcGx5JiByZXBseSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwgZG91YmxlIHRpbWVvdXQgPSBE
ZWZhdWx0VGltZW91dCk7CkBAIC0zMzksNyArMzQ4LDcgQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
QXJndW1lbnRFbmNvZGVyPiBtX3BlbmRpbmdXcml0ZUFyZ3VtZW50czsKICAgICBPVkVSTEFQUEVE
IG1fd3JpdGVTdGF0ZTsKICAgICBIQU5ETEUgbV9jb25uZWN0aW9uUGlwZTsKLSNlbGlmIFVTRShV
TklYX0RPTUFJTl9TT0NLRVRTKSB8fCBPUyhTWU1CSUFOKQorI2VsaWYgVVNFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpCiAgICAgLy8gQ2FsbGVkIG9uIHRoZSBjb25uZWN0aW9uIHF1ZXVlLgogICAgIHZv
aWQgcmVhZHlSZWFkSGFuZGxlcigpOwogCkBAIC0zNTAsNiArMzU5LDEyIEBAIHByaXZhdGU6CiAj
aWYgUExBVEZPUk0oUVQpCiAgICAgUVNvY2tldE5vdGlmaWVyKiBtX3NvY2tldE5vdGlmaWVyOwog
I2VuZGlmCisjZWxpZiBQTEFURk9STShRVCkgJiYgT1MoU1lNQklBTikKKyAgICB2b2lkIHJlYWR5
UmVhZEhhbmRsZXIoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gbV9yZWFkQnVmZmVyOworICAgIFJQ
aXBlIG1fcmVhZFBpcGU7CisgICAgUlBpcGUgbV93cml0ZVBpcGU7CisgICAgUVN5bWJpYW5QaXBl
Tm90aWZpZXIqIG1fcGlwZVJlYWROb3RpZmllcjsKICNlbmRpZgogfTsKIApJbmRleDogU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3lt
Ymlhbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTAgQEAK
Ky8qCisgICAgQ29weXJpZ2h0IChDKSAyMDExIE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STShR
VCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisKKyNpbmNsdWRlICJB
cmd1bWVudEVuY29kZXIuaCIKKyNpbmNsdWRlICJXb3JrSXRlbS5oIgorI2luY2x1ZGUgPFFWZWN0
b3I+CisjaW5jbHVkZSA8cXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaD4KKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIENvcmVJ
UEMgeworCitzdGF0aWMgY29uc3QgdWludDMyX3Qga1RyYWlsZXJQYXR0ZXJuID0gMHhERUFEQ0FG
RTsKKworc3RydWN0IFBhcnNlZE1lc3NhZ2UgeworICAgICAgICB1aW50OF90KiBzdGFydDsgLy8g
YmFzZSBhZGRyZXNzIG9mIG1lc3NhZ2UKKyAgICAgICAgdWludDMyX3Qgc2l6ZTsgLy8gc2l6ZSBp
biBieXRlcworICAgICAgICB1aW50MzJfdCBtZXNzYWdlSUQ7Cit9OworCitzdGF0aWMgaW5saW5l
IHNpemVfdCByb3VuZFVwVG9BbGlnbm1lbnQoc2l6ZV90IHZhbHVlLCB1bnNpZ25lZCBhbGlnbm1l
bnQpCit7CisgICAgcmV0dXJuICgodmFsdWUgKyBhbGlnbm1lbnQgLSAxKSAvIGFsaWdubWVudCkg
KiBhbGlnbm1lbnQ7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6cGxhdGZvcm1Jbml0aWFsaXplKElk
ZW50aWZpZXIgaWRlbnRpZmllcikKK3sKKyAgICBpZiAobV9pc1NlcnZlcikgeworICAgICAgICBt
X3JlYWRQaXBlID0gc3RhdGljX2Nhc3Q8UlBpcGUqPihpZGVudGlmaWVyKVswXTsKKyAgICAgICAg
bV93cml0ZVBpcGUgPSBzdGF0aWNfY2FzdDxSUGlwZSo+KGlkZW50aWZpZXIpWzFdOworICAgIH0g
ZWxzZSB7CisgICAgICAgIFRJbnQgZXJyb3I7CisgICAgICAgIC8vIE9wZW4gcGlwZXMgdmlhIFJQ
cm9jZXNzJyAiZW52aXJvbm1lbnQgZGF0YSBzbG90cyIgbnVtYmVyIDMgJiA0LgorICAgICAgICAv
LyBUaGUgY2hvaWNlIG9mIDMgJiA0IGlzIGFyYml0cmFyeSBhbmQgbWF0Y2hlcyB0aGUgY29kZSBp
biBQcm9jZXNzTGF1bmNoZXJTeW1iaWFuLmNwcC4KKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgU3lt
YmlhbiBPUyB3YXkgb2YgcGFzc2luZyBvd25lcnNoaXAgb2YgcmVzb3VyY2VzIGZyb20gcGFyZW50
IHRvIGNoaWxkLgorICAgICAgICBlcnJvciA9IG1fcmVhZFBpcGUuT3BlbigzKTsgCisgICAgICAg
IGVycm9yfD0gbV93cml0ZVBpcGUuT3Blbig0KTsKKyAgICAgICAgaWYgKGVycm9yKSB7IAorICAg
ICAgICAgICAgbV9pc0Nvbm5lY3RlZCA9IGZhbHNlOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgbV9waXBlUmVhZE5vdGlmaWVyID0gMDsKKyAgICBtX3JlYWRC
dWZmZXIucmVzaXplKENvcmVJUEM6OkNvbm5lY3Rpb246Ok1heFBpcGVDYXBhY2l0eSk7CisgICAg
bV9pc0Nvbm5lY3RlZCA9IHRydWU7ICAgICAgICAKK30KKwordm9pZCBDb25uZWN0aW9uOjpwbGF0
Zm9ybUludmFsaWRhdGUoKQoreworICAgIG1fcmVhZEJ1ZmZlci5zaHJpbmsoMCk7CisgICAgCisg
ICAgZGVsZXRlIG1fcGlwZVJlYWROb3RpZmllcjsKKyAgICBtX3BpcGVSZWFkTm90aWZpZXIgPSAw
OworCisgICAgbV9yZWFkUGlwZS5DbG9zZSgpOworICAgIG1fd3JpdGVQaXBlLkNsb3NlKCk7Cisg
ICAgLy8gVE9ETzogRGVsZXRlIHRoZSBtZW1vcnkgZm9yIHRoZSBSUGlwZVsyXSBhcnJheS4KKwor
ICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzTWVz
c2FnZVRyYWlsZXIodWludDhfdCAqZGF0YSkgCit7ICAKKyAgICByZXR1cm4gKCBrVHJhaWxlclBh
dHRlcm4gPT0gKihyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGF0YSkpICk7Cit9CisKK3Zv
aWQgQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcigpCit7ICAgCisgICAgbV9waXBlUmVhZE5v
dGlmaWVyLT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBUUHRyOCByZWFkUHRyKG1fcmVhZEJ1ZmZl
ci5kYXRhKCksIDAsIG1fcmVhZEJ1ZmZlci5zaXplKCkpOworCisgICAgLy8gTm90ZSB0aGF0IGEg
cmVhZCBvcGVyYXRpb24gbWF5IHJldHVybiBtdWx0aXBsZSBtZXNzYWdlcyBkdWUgdG8gaXRzIHN0
cmVhbS1vcmllbnRlZCBuYXR1cmUuCisgICAgVEludCBieXRlc1JlYWQgPSBtX3JlYWRQaXBlLlJl
YWQocmVhZFB0ciwgcmVhZFB0ci5NYXhTaXplKCkpOworICAgIAorICAgIGlmIChieXRlc1JlYWQg
PiAwKSB7ICAgICAgICAgICAgCisgICAgICAgIF9fQVNTRVJUX0FMV0FZUyhieXRlc1JlYWQgPT0g
cmVhZFB0ci5TaXplKCksIFVzZXI6OkludmFyaWFudCgpKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFN0YXJ0IHBhcnNpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXIsIHdoZXJlIHdlIGV4cGVj
dCB0byBzZWUgYSB0cmFpbGVyIGFuZCB0aGUgc2l6ZSBvZiB0aGlzIG1lc3NhZ2UuCisgICAgICAg
IHVpbnQ4X3QqIG1lc3NhZ2VTdGFydCA9IG1fcmVhZEJ1ZmZlci5kYXRhKCkgKyBieXRlc1JlYWQ7
CisgICAgICAgIAorICAgICAgICAvLyBUZW1wb3JhcnkgcGxhY2UgdG8ga2VlcCB0cmFjayBvZiBw
YXJzZWQgbWVzc2FnZXMuCisgICAgICAgIFZlY3RvcjxQYXJzZWRNZXNzYWdlLCAxMCAqIHNpemVv
ZihQYXJzZWRNZXNzYWdlKT4gbWVzc3NhZ2VQb2ludGVyczsKKyAgICAgICAgCisgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gc2l6ZW9mKHVpbnQzMl90
KTsgLy8gUHJlcGFyZSB0byByZWFkIDQtYnl0ZSB0cmFpbGVyLgorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIWlzTWVzc2FnZVRyYWlsZXIobWVzc2FnZVN0YXJ0KSkKKyAgICAgICAgICAg
ICAgICBicmVhazsgCisKKyAgICAgICAgICAgIG1lc3NhZ2VTdGFydCAtPSBzaXplb2YodWludDMy
X3QpOworICAgICAgICAgICAgdWludDMyX3QgbWVzc2FnZUlEID0gKnJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihtZXNzYWdlU3RhcnQpOyAKKworICAgICAgICAgICAgbWVzc2FnZVN0YXJ0IC09
IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICB1aW50MzJfdCBwYWRkaW5nTGVuZ3RoID0g
KnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtZXNzYWdlU3RhcnQpOworCisgICAgICAgICAg
ICBtZXNzYWdlU3RhcnQgLT0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAgICAgICAgIHVpbnQzMl90
IHJhd1NpemUgPSAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KG1lc3NhZ2VTdGFydCk7CisK
KyAgICAgICAgICAgIG1lc3NhZ2VTdGFydCAtPSAocGFkZGluZ0xlbmd0aCArIHJhd1NpemUpOwor
CisgICAgICAgICAgICAvLyBTYXZlIG1lc3NhZ2UgYm91bmRhcnkuCisgICAgICAgICAgICBjb25z
dCBQYXJzZWRNZXNzYWdlIGFNZXNzYWdlID0ge21lc3NhZ2VTdGFydCwgcmF3U2l6ZSwgbWVzc2Fn
ZUlEfTsKKyAgICAgICAgICAgIG1lc3NzYWdlUG9pbnRlcnMuYXBwZW5kKGFNZXNzYWdlKTsgCisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIF9fQVNTRVJUX0FMV0FZUyhtZXNzYWdlU3RhcnQgPj0g
IG1fcmVhZEJ1ZmZlci5kYXRhKCksIFVzZXI6OkludmFyaWFudCgpKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKG1lc3NhZ2VTdGFydCA9PSBtX3JlYWRCdWZmZXIuZGF0YSgpKSAKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgCisgICAgICAgIC8vIE5vdyBk
aXNwYXRjaCBwYXJzZWQgbWVzc2FnZXMgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSB3cml0dGVuIGJ5
IHRoZSBzZW5kZXIuCisgICAgICAgIGZvciAoaW50IGkgPSBtZXNzc2FnZVBvaW50ZXJzLnNpemUo
KS0xOyBpID49IDAgOyBpLS0pIHsKKyAgICAgICAgICAgIGNvbnN0IFBhcnNlZE1lc3NhZ2UgYU1l
c3NhZ2UgPSBtZXNzc2FnZVBvaW50ZXJzLmF0KGkpOworICAgICAgICAgICAgTWVzc2FnZUlEIG1J
RCA9IE1lc3NhZ2VJRDo6ZnJvbUludChhTWVzc2FnZS5tZXNzYWdlSUQpOworICAgICAgICAgICAg
cHJvY2Vzc0luY29taW5nTWVzc2FnZShtSUQsIGFkb3B0UHRyKG5ldyBBcmd1bWVudERlY29kZXIo
YU1lc3NhZ2Uuc3RhcnQsIGFNZXNzYWdlLnNpemUpKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgbV9waXBlUmVhZE5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOworfQorCisKK2Jvb2wg
Q29ubmVjdGlvbjo6b3BlbigpCit7CisgICAgaWYgKCFtX2lzQ29ubmVjdGVkKSAKKyAgICAgICAg
cmV0dXJuIGZhbHNlOyAKKyAgICAKKyAgICAvLyBTdGFydCBsaXN0ZW5pbmcgZm9yIHJlYWQuCisg
ICAgbV9waXBlUmVhZE5vdGlmaWVyID0gbV9jb25uZWN0aW9uUXVldWUucmVnaXN0ZXJQaXBlRXZl
bnRIYW5kbGVyKG1fcmVhZFBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFB
dmFpbGFibGUsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVhZEhh
bmRsZXIpKTsKKyAgICAgICAgCisgICAgLy8gU2NoZWR1bGUgYSByZWFkLgorICAgIG1fY29ubmVj
dGlvblF1ZXVlLnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9u
OjpyZWFkeVJlYWRIYW5kbGVyKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
Q29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdlcygpIGNvbnN0Cit7Cisg
ICAgLy8gQWx3YXlzIHRydWUsIHNpbmNlIHRoZSBwaXBlIGlzIGxhcmdlIGVub3VnaCB0byBob2xk
IG11bHRpcGxlIG1lc3NhZ2VzLgorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENvbm5lY3Rp
b246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJRCwgUGFzc093blB0cjxB
cmd1bWVudEVuY29kZXI+IGFyZ3VtZW50cykKK3sKKyAgICB1aW50MzJfdCByYXdTaXplID0gYXJn
dW1lbnRzLT5idWZmZXJTaXplKCk7CisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIocmF3U2l6
ZSk7CisKKyAgICAvLyBTaXplIG9mIHBhZGRpbmcuCisgICAgdWludDMyX3QgcGFkZGluZyA9IGFy
Z3VtZW50cy0+YnVmZmVyU2l6ZSgpIC0gcmF3U2l6ZSAtIHNpemVvZihyYXdTaXplKTsKKyAgICBh
cmd1bWVudHMtPmVuY29kZVVJbnQzMihwYWRkaW5nKTsKKworICAgIGFyZ3VtZW50cy0+ZW5jb2Rl
VUludDMyKG1lc3NhZ2VJRC50b0ludCgpKTsKKworICAgIC8vIEEgbWFya2VyIChtYWdpYyBudW1i
ZXIpIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzcG90IG1lc3NhZ2UgYm91bmRhcnkgYXQgdGhl
IHJlY2VpdmVyLgorICAgIGFyZ3VtZW50cy0+ZW5jb2RlVUludDMyKGtUcmFpbGVyUGF0dGVybik7
CisgICAgCisgICAgVFB0cjggd3JpdGVCdWZmZXIoYXJndW1lbnRzLT5idWZmZXIoKSwgYXJndW1l
bnRzLT5idWZmZXJTaXplKCksIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpICk7CisgICAgVEludCBi
eXRlc1dyaXR0ZW4gPSBtX3dyaXRlUGlwZS5Xcml0ZSh3cml0ZUJ1ZmZlciwgd3JpdGVCdWZmZXIu
U2l6ZSgpICk7ICAgICAKKyAgICAKKyAgICByZXR1cm4gKGJ5dGVzV3JpdHRlbiA9PSB3cml0ZUJ1
ZmZlci5TaXplKCkpOworfQorCit2b2lkIENvbm5lY3Rpb246OnNldFNob3VsZENsb3NlQ29ubmVj
dGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmll
ciBwcm9jZXNzKQoreworICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29ya09uVGVybWlu
YXRpb24ocHJvY2VzcywgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6Y29ubmVj
dGlvbkRpZENsb3NlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIENvcmVJUEMKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmll
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9R
U3ltYmlhblBpcGVOb3RpZmllci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAg
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK
KyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2lmIFBMQVRGT1JNIChRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNsdWRlICJRU3ltYmlhblBp
cGVOb3RpZmllci5oIgorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgorI2luY2x1ZGUgIlFDb3Jl
QXBwbGljYXRpb24iCisjaW5jbHVkZSAiUUV2ZW50IgorI2luY2x1ZGUgIlFPYmplY3QiCisjaW5j
bHVkZSAiU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaCIKKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlw
ZS5oPgorCisvLyBXcmFwcGVyIFFPYmplY3QgYXJvdW5kIGEgU3ltYmlhbiBBY3RpdmUgT2JqZWN0
IChBTykuCitRU3ltYmlhblBpcGVOb3RpZmllcjo6UVN5bWJpYW5QaXBlTm90aWZpZXIoUlBpcGUm
IHBpcGUsIEV2ZW50VHlwZSB0eXBlLCBpbnQgYnl0ZXMsIFFPYmplY3QgKnBhcmVudCkgCisgICAg
OiBRT2JqZWN0KHBhcmVudCkKKyAgICAsIG1fcGlwZShwaXBlKQorICAgICwgbV90eXBlKHR5cGUp
CisgICAgLCBtX2J5dGVzKGJ5dGVzKQorICAgICwgbV9ub3RpZmllckFPKG5ldyBTeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdChwaXBlLCB0eXBlLCBieXRlcywgdGhpcykpCit7Cit9CisKK1FTeW1iaWFu
UGlwZU5vdGlmaWVyOjp+UVN5bWJpYW5QaXBlTm90aWZpZXIoKSAKK3sKKyAgICBkZWxldGUgbV9u
b3RpZmllckFPOworfQorCisvLyBUaGlzIGludGVyZmFjZSBpcyBtb2RlbGVkIGFmdGVyIFFTb2Nr
ZXROb3RpZmllcidzIHNldEVuYWJsZWQoKS4KK3ZvaWQgUVN5bWJpYW5QaXBlTm90aWZpZXI6OnNl
dEVuYWJsZWQoYm9vbCBlbmFibGVkKSAKK3sgCisgICAgaWYgKCFtX25vdGlmaWVyQU8pIHsKKyAg
ICAgICAgLy8gV2UgZGVsZXRlZCB0aGUgQU8gcHJldmlvdXNseSwgc28gZmlyZSBhIGRlZmVycmVk
IGluaXRpYWxpemF0aW9uIHJlcXVlc3QgdmlhIHBvc3RFdmVudCgpLgorICAgICAgICAvLyBUaGlz
IGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgUU9iamVjdC0+bW92ZVRvVGhyZWFkKCkuCisgICAgICAg
IC8vIE5PVEU6IFdlIGRpc2NhcmQgdGhlIHNwZWNpZmllZCBib29sZWFuIGFyZ3VtZW50LCBhbmQg
YmxhbmtldCBlbmFibGUgbGF0ZXIgb24uCisgICAgICAgIFFFdmVudCogcG9zdFRocmVhZENoYW5n
ZUV2ZW50ID0gbmV3IFFFdmVudChQb3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlKTsKKyAgICAgICAg
UUNvcmVBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KHRoaXMsIHBvc3RUaHJlYWRDaGFuZ2VFdmVudCk7
CisgICAgICAgIHJldHVybjsgCisgICAgfQorCisgICAgbV9ub3RpZmllckFPLT5zZXRFbmFibGVk
KGVuYWJsZWQpOworfQorCisvLyBUaGlzIGV2ZW50IGhhbmRsZXIgZXhpc3RzIHB1cmVseSB0byBz
dXBwb3J0IFFPYmplY3QtPm1vdmVUb1RocmVhZC4KKy8vIFN5bWJpYW4gYWN0aXZlIG9iamVjdHMg
KEFPcykgYXJlIGJvdW5kIHRvIGFuIEFjdGl2ZSBTY2hlZHVsZXIgKEFTKSB3aGljaCBpcyB0aHJl
YWQtbG9jYWwuCisvLyBUaGVyZWZvcmUsIHRoZSBBTyBtdXN0IGJlIHJlLWNyZWF0ZWQgb24gdGhl
IG5ldyB0aHJlYWQgb25jZSB0aGUgcGFyZW50IFFPYmplY3QgaGFzIG1vdmVkCisvLyB0byB0aGUg
bmV3IHRocmVhZC4KK2Jvb2wgUVN5bWJpYW5QaXBlTm90aWZpZXI6OmV2ZW50KFFFdmVudCogZXYp
Cit7ICAgICAgICAKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSBRRXZlbnQ6OlRocmVhZENoYW5nZSkg
eyAvLyBwcmUtbWlncmF0aW9uIGV2ZW50CisgICAgICAgIGlmIChtX25vdGlmaWVyQU8pIHsKKyAg
ICAgICAgICAgIGlmIChtX25vdGlmaWVyQU8tPklzQWRkZWQoKSkgeworICAgICAgICAgICAgICAg
IGJvb2wgb2xkU3RhdGUgPSBtX25vdGlmaWVyQU8tPklzQWN0aXZlKCk7CisgICAgICAgICAgICAg
ICAgbV9ub3RpZmllckFPLT5EZXF1ZSgpOworICAgICAgICAgICAgfSAgICAgCisgICAgICAgICAg
ICBkZWxldGUgbV9ub3RpZmllckFPOworICAgICAgICAgICAgbV9ub3RpZmllckFPID0gMDsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGaXJlIGEgZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24gcmVxdWVz
dC4KKyAgICAgICAgUUV2ZW50KiBwb3N0VGhyZWFkQ2hhbmdlRXZlbnQgPSBuZXcgUUV2ZW50KFBv
c3RUaHJlYWRDaGFuZ2VFdmVudFR5cGUpOworICAgICAgICBRQ29yZUFwcGxpY2F0aW9uOjpwb3N0
RXZlbnQodGhpcywgcG9zdFRocmVhZENoYW5nZUV2ZW50KTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSAKKyAgICAKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSBQb3N0VGhyZWFkQ2hhbmdlRXZl
bnRUeXBlKSB7IC8vIGN1c3RvbSwgcG9zdC1taWdyYXRpb24gZXZlbnQKKyAgICAgICAgaWYgKCFt
X25vdGlmaWVyQU8pIHsKKyAgICAgICAgICAgIG1fbm90aWZpZXJBTyA9IG5ldyBTeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdChtX3BpcGUsIG1fdHlwZSwgbV9ieXRlcywgdGhpcyk7CisgICAgICAgICAg
ICAvLyBOT1RFOiBXZSBwcmVzdW1wdGl2ZWx5IGVuYWJsZSB3YXRjaCwgZXZlbiB0aG91Z2ggb2xk
U3RhdGUgbWF5IGJlIGZhbHNlIGFib3ZlLgorICAgICAgICAgICAgbV9ub3RpZmllckFPLT5zZXRF
bmFibGVkKHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOyAKKyAgICB9CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJp
YW5QaXBlTm90aWZpZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAgICBD
b3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorKi8KKworI2lmbmRlZiBRU3ltYmlhblBpcGVOb3RpZmllcl9oCisjZGVmaW5lIFFTeW1i
aWFuUGlwZU5vdGlmaWVyX2gKKworI2luY2x1ZGUgPHFnbG9iYWwuaD4KKyNpZmRlZiBRX09TX1NZ
TUJJQU4KKyNpbmNsdWRlIDxRRXZlbnQ+CisjaW5jbHVkZSA8UU9iamVjdD4KKyNpbmNsdWRlIDxw
bGF0Zm9ybS9ycGlwZS5oPgorCitjbGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDsKKworY2xh
c3MgUVN5bWJpYW5QaXBlTm90aWZpZXIgOiBwdWJsaWMgUU9iamVjdCB7CisgICAgUV9PQkpFQ1QK
K3B1YmxpYzogCisgICAgZW51bSBFdmVudFR5cGUgeworICAgICAgICBQaXBlUmVhZERhdGFBdmFp
bGFibGUsCisgICAgICAgIFBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlCisgICAgfTsKKyAgICBRU3lt
YmlhblBpcGVOb3RpZmllcihSUGlwZSYsIEV2ZW50VHlwZSwgaW50LCBRT2JqZWN0KiBwYXJlbnQg
PSAwKTsKKyAgICB+UVN5bWJpYW5QaXBlTm90aWZpZXIoKTsKKyAgICBib29sIGV2ZW50KFFFdmVu
dCopOworICAgIAorcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKwor
c2lnbmFsczoKKyAgICAvLyBFbWl0dGVkIHdoZW4gUGlwZVJlYWREYXRhQXZhaWxhYmxlIG9jY3Vy
cy4KKyAgICB2b2lkIHJlYWR5VG9SZWFkKGludCk7CisgICAgLy8gRW1pdHRlZCB3aGVuIFBpcGVX
cml0ZVNwYWNlQXZhaWxhYmxlIG9jY3Vycy4KKyAgICB2b2lkIHJlYWR5VG9Xcml0ZShpbnQpOwor
ICAgIHZvaWQgZXJyb3JPY2N1cmVkKGludCk7CisgICAgCitwcml2YXRlOiAKKyAgICBSUGlwZSBt
X3BpcGU7IAorICAgIEV2ZW50VHlwZSBtX3R5cGU7CisgICAgaW50IG1fYnl0ZXM7ICAgCisgICAg
U3ltYmlhblBpcGVBY3RpdmVPYmplY3QqIG1fbm90aWZpZXJBTzsKKworICAgIHN0YXRpYyBjb25z
dCBRRXZlbnQ6OlR5cGUgUG9zdFRocmVhZENoYW5nZUV2ZW50VHlwZSA9IChRRXZlbnQ6OlR5cGUp
KFFFdmVudDo6VXNlciArIDEwMCk7CisgICAgICAgIAorICAgIGZyaWVuZCBjbGFzcyBTeW1iaWFu
UGlwZUFjdGl2ZU9iamVjdDsKKyAgICBRX0RJU0FCTEVfQ09QWShRU3ltYmlhblBpcGVOb3RpZmll
cikKK307CisKKyNlbmRpZgorCisjZW5kaWYgLy8gUVN5bWJpYW5QaXBlTm90aWZpZXJfaAorCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZl
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBD
L3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEg
Tm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRGT1JNKFFUKSAmJiBPUyhTWU1CSUFOKQorI2luY2x1ZGUg
IlN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmgiCisKKyNpbmNsdWRlICJRU3ltYmlhblBpcGVOb3Rp
Zmllci5oIgorI2luY2x1ZGUgPHBsYXRmb3JtL3JwaXBlLmg+CisKK1N5bWJpYW5QaXBlQWN0aXZl
T2JqZWN0OjpTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChSUGlwZSBwaXBlLCBRU3ltYmlhblBpcGVO
b3RpZmllcjo6RXZlbnRUeXBlIHR5cGUsIGludCBzcGFjZUluQnl0ZXMsIFFTeW1iaWFuUGlwZU5v
dGlmaWVyKiBxcSkKKyAgICA6IENBY3RpdmUoQ0FjdGl2ZTo6RVByaW9yaXR5U3RhbmRhcmQpCisg
ICAgLCBtX3BpcGUocGlwZSkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAgICwgbV9ieXRlcyhzcGFj
ZUluQnl0ZXMpCisgICAgLCBtX3BhcmVudChxcSkKK3sgCisgICAgQ0FjdGl2ZVNjaGVkdWxlcjo6
QWRkKHRoaXMpOworfQorICAgIAorU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6On5TeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdCgpIAoreyAKKyAgICBDYW5jZWwoKTsKK30KKwordm9pZCBTeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdDo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpIAoreworICAgIGlmIChlbmFi
bGVkICYmICFJc0FjdGl2ZSgpKSB7ICAKKyAgICAgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBp
cGVOb3RpZmllcjo6UGlwZVJlYWREYXRhQXZhaWxhYmxlKSB7IAorICAgICAgICAgICAgbV9waXBl
Lk5vdGlmeURhdGFBdmFpbGFibGUoaVN0YXR1cyk7CisgICAgICAgICAgICBTZXRBY3RpdmUoKTsg
Ly8gYmFzZSBjbGFzcyBtZXRob2QgdG8gZGVjbGFyZSB0aGUgYWJvdmUgcmVxdWVzdCBhcyAicGVu
ZGluZyIgY29tcGxldGlvbgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobV90eXBl
ID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlV3JpdGVTcGFjZUF2YWlsYWJsZSkgeworICAg
ICAgICAgICAgaW50IGZyZWVTcGFjZU5lZWRlZCA9IG1fYnl0ZXMgPCAwID8gMSA6IG1fYnl0ZXM7
IAorICAgICAgICAgICAgbV9waXBlLk5vdGlmeVNwYWNlQXZhaWxhYmxlKGZyZWVTcGFjZU5lZWRl
ZCwgaVN0YXR1cyk7CisgICAgICAgICAgICBTZXRBY3RpdmUoKTsgLy8gYmFzZSBjbGFzcyBtZXRo
b2QgdG8gZGVjbGFyZSB0aGUgYWJvdmUgcmVxdWVzdCBhcyAicGVuZGluZyIgY29tcGxldGlvbgor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlm
ICghZW5hYmxlZCkgeworICAgICAgICBDYW5jZWwoKTsgLy8gQXV0b21hdGljYWxseSBjYWxscyBE
b0NhbmNlbCgpCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy8vIFRoaXMgbWV0aG9kIGdl
dHMgcnVuIGJ5IHRoZSBTeW1iaWFuIE9TIEFjdGl2ZSBTY2hlZHVsZXIgd2hlbiB0aGUKKy8vIHJl
cXVlc3QgaW5pdGlhdGVkIGJ5IE5vdGlmeURhdGFBdmFpbGFibGUgYWJvdmUgaXMgbWFya2VkIGFz
IGNvbXBsZXRlZC4KK3ZvaWQgU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlJ1bkwoKSAKK3sKKyAg
ICBpZiAoaVN0YXR1cyAhPSBLRXJyTm9uZSkgeworICAgICAgICBlbWl0IG1fcGFyZW50LT5lcnJv
ck9jY3VyZWQoaVN0YXR1cy5JbnQoKSk7CisgICAgICAgIHJldHVybjsgCisgICAgfQorCisgICAg
aWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVJlYWREYXRhQXZhaWxhYmxl
KSB7CisgICAgICAgIGNvbnN0IGludCBieXRlc0F2YWlsYWJsZSA9ICBtX3BpcGUuU2l6ZSgpOwor
ICAgICAgICBpZiAoYnl0ZXNBdmFpbGFibGUgPiAwKQorICAgICAgICAgICAgZW1pdCBtX3BhcmVu
dC0+cmVhZHlUb1JlYWQoYnl0ZXNBdmFpbGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmIChtX3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVXcml0ZVNw
YWNlQXZhaWxhYmxlKSB7IAorICAgICAgICBlbWl0IG1fcGFyZW50LT5yZWFkeVRvV3JpdGUoMCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKK30KKyAgCit2b2lkIFN5bWJpYW5QaXBlQWN0aXZl
T2JqZWN0OjpEb0NhbmNlbCgpIAoreyAKKyAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5v
dGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsgCisgICAgICAgIG1fcGlwZS5DYW5jZWxE
YXRhQXZhaWxhYmxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgICAgICAgICAgICAK
KyAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlV3JpdGVTcGFjZUF2
YWlsYWJsZSkgeyAKKyAgICAgICAgbV9waXBlLkNhbmNlbFNwYWNlQXZhaWxhYmxlKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3Rp
dmVPYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBTeW1iaWFuUGlwZUFjdGl2ZU9iamVj
dF9oCisjZGVmaW5lIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKworI2luY2x1ZGUgIlFTeW1i
aWFuUGlwZU5vdGlmaWVyLmgiCisjaW5jbHVkZSAicWdsb2JhbC5oIgorI2luY2x1ZGUgPGUzMmJh
c2UuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCitjbGFzcyBTeW1iaWFuUGlwZUFj
dGl2ZU9iamVjdCA6IHB1YmxpYyBDQWN0aXZlIHsKK3B1YmxpYzoKKyAgICBTeW1iaWFuUGlwZUFj
dGl2ZU9iamVjdChSUGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSwgaW50LCBR
U3ltYmlhblBpcGVOb3RpZmllciopOworICAgIH5TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCgpOwor
ICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7CisgICAgCisgICAgdm9p
ZCBSdW5MKCk7CisgICAgdm9pZCBEb0NhbmNlbCgpOyAKKworICAgIFJQaXBlIG1fcGlwZTsKKyAg
ICBRU3ltYmlhblBpcGVOb3RpZmllcjo6RXZlbnRUeXBlIG1fdHlwZTsKKyAgICBpbnQgbV9ieXRl
czsgLy8gb25seSB1c2VkIGZvciB3cml0ZSBwaXBlOyAtMSBtZWFucyB1bnVzZWQKKyAgICAKKyAg
ICBRU3ltYmlhblBpcGVOb3RpZmllciAqIG1fcGFyZW50OworICAgIGZyaWVuZCBjbGFzcyBRU3lt
YmlhblBpcGVOb3RpZmllcjsKK307CisKKyNlbmRpZiAvLyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVj
dF9oCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9BdHRhY2ht
ZW50VW5peC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQ
Qy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAkocmV2aXNpb24gODY1OTgpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yNSw2ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFVT
RShVTklYX0RPTUFJTl9TT0NLRVRTKQogI2luY2x1ZGUgIkF0dGFjaG1lbnQuaCIKIAogI2luY2x1
ZGUgPHVuaXN0ZC5oPgpAQCAtNDgsMyArNDksNCBAQCB2b2lkIEF0dGFjaG1lbnQ6OmRpc3Bvc2Uo
KQogfQogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNw
cAkocmV2aXNpb24gODY1OTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3Vu
aXgvQ29ubmVjdGlvblVuaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAg
Ki8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQog
I2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKIAogI2luY2x1ZGUgIkFyZ3VtZW50RW5jb2Rlci5oIgpA
QCAtMzk5LDMgKzQwMCw0IEBAIHZvaWQgQ29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0
aW8KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisjZW5kaWYgCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcAko
cmV2aXNpb24gODY1OTgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1v
cnlTeW1iaWFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTcgKzY5LDYgQEAgYm9vbCBTaGFy
ZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUAogICAgIHJldHVybiB0cnVlOwogfQogCi0v
LyBGSVhNRTogVG8gYmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIEJ1ZyA1NTg3NwotQ29yZUlQQzo6QXR0
YWNobWVudCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6cmVsZWFzZVRvQXR0YWNobWVudCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIENvcmVJUEM6OkF0dGFjaG1lbnQoLTEsIDApOwotfQotCi0vLyBGSVhN
RTogVG8gYmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIEJ1ZyA1NTg3Nwotdm9pZCBTaGFyZWRNZW1vcnk6
OkhhbmRsZTo6YWRvcHRGcm9tQXR0YWNobWVudChpbnQsIHNpemVfdCkKLXsKLX0KLQogUGFzc1Jl
ZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNpemVfdCBzaXplKQogewog
ICAgIC8vIE9uIFN5bWJpYW4sIGdsb2JhbCBjaHVua3MgKHNoYXJlZCBtZW1vcnkgc2VnbWVudHMp
IGhhdmUgc3lzdGVtLXVuaXF1ZSBuYW1lcywgc28gd2UgcGljayBhIHJhbmRvbQpJbmRleDogU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAkocmV2aXNpb24gODY1OTgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDYgKzc3LDIzIEBAIHB1YmxpYzoKICAgICBXb3JrSXRlbSogbV93b3JrSXRl
bTsKIH07CiAKKyNpZiBPUyhTWU1CSUFOKQorUVN5bWJpYW5QaXBlTm90aWZpZXIqIFdvcmtRdWV1
ZTo6cmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKFJQaXBlIHBpcGUsIFFTeW1iaWFuUGlwZU5vdGlm
aWVyOjpFdmVudFR5cGUgdHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0pIAorewor
ICAgIFFTeW1iaWFuUGlwZU5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBRU3ltYmlhblBpcGVOb3Rp
ZmllcihwaXBlLCB0eXBlLCAtMSk7CisgICAgIAorICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKGZh
bHNlKTsKKyAgICBub3RpZmllci0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7CisgICAgCisg
ICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29ya1F1ZXVlOjpXb3JrSXRl
bVF0KHRoaXMsIG5vdGlmaWVyLCBTSUdOQUwocmVhZHlUb1JlYWQoaW50KSksIHdvcmtJdGVtLmxl
YWtQdHIoKSk7CisgICAgCisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsg
ICAgCisgICAgCisgICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CisgICAgCisgICAgcmV0
dXJuIG5vdGlmaWVyOworfQorI2Vsc2UKIFFTb2NrZXROb3RpZmllciogV29ya1F1ZXVlOjpyZWdp
c3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29ja2V0RGVzY3JpcHRvciwgUVNvY2tldE5vdGlm
aWVyOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJdGVtKQogewogICAgIEFT
U0VSVChtX3dvcmtUaHJlYWQpOwpAQCAtODksNiArMTA2LDcgQEAgUVNvY2tldE5vdGlmaWVyKiBX
b3JrUXVldWU6OnJlZ2lzdGVyU29jawogICAgIG5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUpOwog
ICAgIHJldHVybiBub3RpZmllcjsKIH0KKyNlbmRpZgogCiB2b2lkIFdvcmtRdWV1ZTo6cGxhdGZv
cm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqKQogewpAQCAtMTIwLDggKzEzOCwxMyBAQCB2b2lkIFdv
cmtRdWV1ZTo6c2NoZWR1bGVXb3JrQWZ0ZXJEZWxheShQCiAKIHZvaWQgV29ya1F1ZXVlOjpzY2hl
ZHVsZVdvcmtPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciBw
cm9jZXNzLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSkKIHsKKyNpZiBPUyhTWU1CSUFO
KQorICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBhIHByb2Nlc3Mgd2F0Y2hlciB1c2lu
ZyBTeW1iaWFuIFJQcm9jZXNzLgorICAgIG5vdEltcGxlbWVudGVkKCk7IAorI2Vsc2UKICAgICBX
b3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQo
dGhpcywgcHJvY2VzcywgU0lHTkFMKGZpbmlzaGVkKGludCwgUVByb2Nlc3M6OkV4aXRTdGF0dXMp
KSwgd29ya0l0ZW0ubGVha1B0cigpKTsKICAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtU
aHJlYWQpOworI2VuZGlmCiB9CiAKICNpbmNsdWRlICJXb3JrUXVldWVRdC5tb2MiCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9j
ZXNzTGF1bmNoZXJRdC5jcHAJKHJldmlzaW9uIDg2NTk4KQorKysgU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDxR
dENvcmUvcWdsb2JhbC5oPgorI2lmbmRlZiBRX09TX1NZTUJJQU4KICNpbmNsdWRlICJQcm9jZXNz
TGF1bmNoZXIuaCIKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKQEAgLTM3LDcgKzM5LDYgQEAK
ICNpbmNsdWRlIDxRTWV0YVR5cGU+CiAjaW5jbHVkZSA8UVByb2Nlc3M+CiAjaW5jbHVkZSA8UVN0
cmluZz4KLSNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvTm90
SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CkBA
IC04MywxNiArODQsNiBAQCB2b2lkIFF0V2ViUHJvY2Vzczo6c2V0dXBDaGlsZFByb2Nlc3MoKQog
I2VuZGlmCiB9CiAKLSNpZiBPUyhTWU1CSUFOKQotLy8gRklYTUU6IFN5bWJpYW4ncyBQT1NJWCBs
YXllciBkb2Vzbid0IGhhdmUgYSBzb2NrZXRwYWlyKCksIHNvCi0vLyB0aGUgZm9sbG93aW5nIGlz
IGp1c3QgdG8gZml4IHRoZSBidWlsZCB1bnRpbCBhIHB1cmUgU3ltYmlhbgotLy8gSVBDIGltcGxl
bWVudGF0aW9uIGxhbmRzIG9uIHRydW5rCi1zdGF0aWMgaW50IHNvY2tldHBhaXIoaW50LCBpbnQs
IGludCAsIGludFsyXSkKLXsKLSAgICByZXR1cm4gLTE7Ci19Ci0jZW5kaWYKLQogdm9pZCBQcm9j
ZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogewogICAgIFFTdHJpbmcgYXBwbGljYXRpb25Q
YXRoID0gUUxhdGluMVN0cmluZygiJTEgJTIiKTsKQEAgLTE2NCwzICsxNTUsNSBAQCB2b2lkIFBy
b2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
IAogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlclF0Lm1vYyIKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1By
b2Nlc3NMYXVuY2hlclN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclN5bWJpYW4uY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDg1IEBACisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExBVEZPUk0o
UVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiUHJvY2Vzc0xhdW5jaGVyLmgiCisKKyNpbmNs
dWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3MuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9ycGlwZS5oIgorI2luY2x1ZGUgPFFEZWJ1Zz4K
KyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisKK19MSVQoS1dvcmtlclByb2Nlc3NOYW1lLCAiUXRXZWJQ
cm9jZXNzLmV4ZSIpOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9jZXNzKCkKK3sKKyAgICAv
LyBNYWtlIGEgcGFpciBvZiBoYWxmLWR1cGxleCBwaXBlcy4KKyAgICBSUGlwZSogbG9jYWxQaXBl
cyA9IG5ldyBSUGlwZVsyXTsgCisgICAgUlBpcGUqIHJlbW90ZVBpcGVzID0gbmV3IFJQaXBlWzJd
OyAKKyAgICAgCisgICAgUlBpcGU6OkluaXQoKTsKKyAgICAvLyBDcmVhdGUgYSBwaXBlLiBGaXJz
dCBhcmcgaXMgdGhlIHJlYWQtZW5kIFJQaXBlIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSB3cml0ZS1l
bmQuIAorICAgIFJQaXBlOjpDcmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlvbjo6TWF4UGlwZUNhcGFj
aXR5LCByZW1vdGVQaXBlc1swXSwgbG9jYWxQaXBlc1sxXSk7CisgICAgUlBpcGU6OkNyZWF0ZShD
b3JlSVBDOjpDb25uZWN0aW9uOjpNYXhQaXBlQ2FwYWNpdHksIGxvY2FsUGlwZXNbMF0sIHJlbW90
ZVBpcGVzWzFdKTsKKyAgICAKKyAgICAvLyBQcmVwYXJlIHRvIGxhdW5jaCB3b3JrZXIgcHJvY2Vz
cy4KKyAgICBSUHJvY2Vzcyogd29ya2VyUHJvY2VzcyA9IG5ldyBSUHJvY2VzcygpOworICAgIFRJ
bnQgZXJyb3IgPSB3b3JrZXJQcm9jZXNzLT5DcmVhdGUoS1dvcmtlclByb2Nlc3NOYW1lKCksIEtO
dWxsRGVzQyk7CisgICAgaWYgKGVycm9yKQorICAgICAgICBxQ3JpdGljYWwoKSA8PCAiIEVycm9y
IGluaXRpYWxpemluZyBXZWJLaXQyIHdlYiBwcm9jZXNzICIgPDwgZXJyb3I7CisKKyAgICAvLyBQ
YXNzIG93bmVyc2hpcCBvZiBwaXBlcyB2aWEgUlByb2Nlc3MnICJlbnZpcm9ubWVudCBkYXRhIHNs
b3RzIi4gCisgICAgLy8gVGhlIGNob2ljZSBvZiAzICYgNCBpcyBhcmJpdHJhcnkgYW5kIHNob3Vs
ZCBtYXRjaCB0aGUgdXNlIG9uIHRoZSByZWNlaXZpbmcgc2lkZSAoQ29ubmVjdGlvbi5jcHApLgor
ICAgIHdvcmtlclByb2Nlc3MtPlNldFBhcmFtZXRlcigzLCByZW1vdGVQaXBlc1swXSk7IC8vIHJl
YWRlcgorICAgIHdvcmtlclByb2Nlc3MtPlNldFBhcmFtZXRlcig0LCByZW1vdGVQaXBlc1sxXSk7
IC8vIHdyaXRlcgorICAgICAgICAgICAgICAgIAorICAgIC8vIEJsb2NrIHVudGlsIHRoZSByZW1v
dGUgcHJvY2VzcyBpcyB1cC4KKyAgICB3b3JrZXJQcm9jZXNzLT5SZXN1bWUoKTsKKyAgICBUUmVx
dWVzdFN0YXR1cyBsYXVuY2hTdGF0dXM7IAorICAgIHdvcmtlclByb2Nlc3MtPlJlbmRlenZvdXMo
bGF1bmNoU3RhdHVzKTsgCisgICAgVXNlcjo6V2FpdEZvclJlcXVlc3QobGF1bmNoU3RhdHVzKTsK
KyAgICAKKyAgICBpZiAobGF1bmNoU3RhdHVzLkludCgpICE9IEtFcnJOb25lKSAKKyAgICAgICAg
cUNyaXRpY2FsKCkgPDwgIiBXb3JrZXIgcHJvY2VzcyBmYWlsZWQgdG8gbGF1bmNoICIgPDwgbGF1
bmNoU3RhdHVzLkludCgpOworICAgIAorICAgIC8vIENsb3NlIHRoZSBwaXBlIGVuZHMgd2UganVz
dCBwYXNzZWQgdG8gdGhlIHJlbW90ZS4KKyAgICByZW1vdGVQaXBlc1swXS5DbG9zZSgpOyAKKyAg
ICByZW1vdGVQaXBlc1sxXS5DbG9zZSgpOworICAgIGRlbGV0ZVtdIHJlbW90ZVBpcGVzOworICAg
IAorICAgIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaWRlbnRpZmllciA9IGxvY2Fs
UGlwZXM7ICAKKyAgICAKKyAgICAvLyBEZWNsYXJlIGxhdW5jaCBwcm9jZXNzIGFzIGRvbmUuIE5v
dGUgdGhhdCB0aGlzIGNsYXNzIG93bnMgJ3dvcmtlclByb2Nlc3MnLCBidXQgQ29ubmVjdGlvbiBv
d25zICdpZGVudGlmaWVyJy4KKyAgICBSdW5Mb29wOjptYWluKCktPnNjaGVkdWxlV29yayhXb3Jr
SXRlbTo6Y3JlYXRlKHRoaXMsICZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hlcjo6ZGlkRmluaXNoTGF1
bmNoaW5nUHJvY2Vzcywgd29ya2VyUHJvY2VzcywgaWRlbnRpZmllcikpOworfQorCit2b2lkIFBy
b2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCit7CisgICAgaWYgKCFtX3Byb2Nlc3NJ
ZGVudGlmaWVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbXBvcnRhbnQ6IEtpbGxpbmcg
YW5vdGhlciBwcm9jZXNzIChldmVuIGlmIHdlIHNwYXduZWQgaXQpIHJlcXVpcmVzIFBvd2VyTWFu
YWdlbWVudCBjYXBhYmlsaXR5LAorICAgIC8vIHdoaWNoIGlzIGEgaGlnaCBiYXIgdG8ganVtcCBv
dmVyIGZvciBhbnkgdXNlciBhcHBsaWNhdGlvbi4gSXQncyBhbHNvIGEgc2VjdXJpdHkgcmlzay4K
KyAgICBSUHJvY2VzcyBtZTsKKyAgICBpZiAobWUuSGFzQ2FwYWJpbGl0eShFQ2FwYWJpbGl0eVBv
d2VyTWdtdCkpCisgICAgICAgIG1fcHJvY2Vzc0lkZW50aWZpZXItPlRlcm1pbmF0ZShLRXJyTm9u
ZSk7Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUludmFsaWRhdGUoKQorewor
ICAgIGlmICghbV9wcm9jZXNzSWRlbnRpZmllcikKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9w
cm9jZXNzSWRlbnRpZmllci0+Q2xvc2UoKTsKKyAgICBkZWxldGUgbV9wcm9jZXNzSWRlbnRpZmll
cjsKKyAgICBtX3Byb2Nlc3NJZGVudGlmaWVyID0gMDsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
S2l0CisKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIv
cXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCShyZXZpc2lvbiA4NjU5OCkK
KysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRMYXVuY2hlclF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMzEgKzQ3LDQxIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIENvcmVJUEM6OkNvbm5lY3Rp
b246OklkZW50aWZpZXIgaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVyKCkKK3sgCisgICAgQ29y
ZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyOyAKKyNpZiBPUyhTWU1CSUFO
KQorICAgIGlkZW50aWZpZXIgPSAwOyAvLyBpbnZhbGlkIFJQcm9jZXNzKgorI2Vsc2UKKyAgICBp
ZGVudGlmaWVyID0gLTE7IC8vIGludmFsaWQgc29ja2V0IGRlc2NyaXB0b3IKKyNlbmRpZgorICAg
IHJldHVybiBpZGVudGlmaWVyOworfQorCiBzdGF0aWMgdm9pZCogd2ViVGhyZWFkQm9keSh2b2lk
KiAvKiBjb250ZXh0ICovKQogewogICAgIC8vIEluaXRpYWxpemF0aW9uCiAgICAgSlNDOjppbml0
aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogCi0g
ICAgLy8gRklYTUU6IFdlIGRvIG5vdCBzdXBwb3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KKyAg
ICAvLyBGSVhNRTogVGhlIFF0IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0aHJlYWRlZCBtb2RlIGZv
ciBub3cuCiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFsaXplKC0xLCBSdW5Mb29w
OjpjdXJyZW50KCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaW52YWxp
ZENvbm5lY3Rpb25JZGVudGlmaWVyKCksIFJ1bkxvb3A6OmN1cnJlbnQoKSk7CiAgICAgUnVuTG9v
cDo6cnVuKCk7CiAKICAgICByZXR1cm4gMDsKIH0KIAogQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRl
bnRpZmllciBUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkKLXsKLSAgICBzcmFuZG9t
KHRpbWUoMCkpOwotICAgIGludCBjb25uZWN0aW9uSWRlbnRpZmllciA9IHJhbmRvbSgpOwotCi0g
ICAgaWYgKCFjcmVhdGVUaHJlYWQod2ViVGhyZWFkQm9keSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oY29ubmVjdGlvbklkZW50aWZpZXIpLCAiV2ViS2l0MjogV2ViVGhyZWFkIikpIHsKK3sgIAor
ICAgIC8vIEZJWE1FOiBUaGUgUXQgcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHRocmVhZGVkIG1vZGUg
Zm9yIG5vdy4KKyAgICAKKyAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCAwLCAi
V2ViS2l0MjogV2ViVGhyZWFkIikpIHsKICAgICAgICAgcVdhcm5pbmcoKSA8PCAiZmFpbGVkIHN0
YXJ0aW5nIHRocmVhZCI7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gaW52YWxp
ZENvbm5lY3Rpb25JZGVudGlmaWVyKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbm5lY3Rpb25J
ZGVudGlmaWVyOworICAgIHJldHVybiBpbnZhbGlkQ29ubmVjdGlvbklkZW50aWZpZXIoKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAJKHJldmlzaW9uIDg2NTk4KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTMyLDYgKzEzMiwxMSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplUHJveHkoKQog
CiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0KGludCBhcmdjLCBjaGFyKiogYXJn
dikKIHsKKyNpZiBkZWZpbmVkKFFfT1NfU1lNQklBTikKKyAgICBSUHJvY2VzcyBwcm9jZXNzOyAK
KyAgICBwcm9jZXNzLlNldFByaW9yaXR5KEVQcmlvcml0eUJhY2tncm91bmQpOworI2VuZGlmCisg
ICAgCiAgICAgUUFwcGxpY2F0aW9uOjpzZXRHcmFwaGljc1N5c3RlbShRTGF0aW4xU3RyaW5nKCJy
YXN0ZXIiKSk7CiAgICAgUUFwcGxpY2F0aW9uKiBhcHAgPSBuZXcgUUFwcGxpY2F0aW9uKGFyZ2Ms
IGFyZ3YpOwogI2lmbmRlZiBOREVCVUcKQEAgLTE1Myw2ICsxNTgsMTEgQEAgUV9ERUNMX0VYUE9S
VCBpbnQgV2ViUHJvY2Vzc01haW5RdChpbnQgYQogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJl
YWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3AoKTsKIAorICAgIENvcmVJ
UEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaWRlbnRpZmllcjsgCisjaWYgT1MoU1lNQklBTikK
KyAgICAvLyBXZSBvYnRhaW4gdGhlIGhhbmRsZXMgZGlyZWN0bHkgZnJvbSB0aGUgImVudmlyb25t
ZW50IGRhdGEgc2xvdHMiIG9mIHRoZSBSUHJvY2VzcworICAgIGlkZW50aWZpZXIgPSAwOyAKKyNl
bHNlCiAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLgogICAgIGlmIChhcHAtPmFyZ3VtZW50
cygpLnNpemUoKSA8PSAxKSB7CiAgICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvcjogd3JvbmcgbnVt
YmVyIG9mIGFyZ3VtZW50cy4iOwpAQCAtMTYwLDEyICsxNzAsMTMgQEAgUV9ERUNMX0VYUE9SVCBp
bnQgV2ViUHJvY2Vzc01haW5RdChpbnQgYQogICAgIH0KIAogICAgIGJvb2wgd2FzTnVtYmVyID0g
ZmFsc2U7Ci0gICAgaW50IGlkZW50aWZpZXIgPSBhcHAtPmFyZ3VtZW50cygpLmF0KDEpLnRvSW50
KCZ3YXNOdW1iZXIsIDEwKTsKKyAgICBpZGVudGlmaWVyID0gYXBwLT5hcmd1bWVudHMoKS5hdCgx
KS50b0ludCgmd2FzTnVtYmVyLCAxMCk7CiAgICAgaWYgKCF3YXNOdW1iZXIpIHsKICAgICAgICAg
cURlYnVnKCkgPDwgIkVycm9yOiBjb25uZWN0aW9uIGlkZW50aWZpZXIgd3JvbmcuIjsKICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgfQotCisjZW5kaWYKKyAgICAKICAgICBXZWJLaXQ6OldlYlByb2Nl
c3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaWRlbnRpZmllciwgUnVuTG9vcDo6bWFpbigpKTsKIAog
ICAgIFJ1bkxvb3A6OnJ1bigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94254</attachid>
            <date>2011-05-20 11:57:02 -0700</date>
            <delta_ts>2011-05-24 08:15:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-55877-20110520145625.patch</filename>
            <type>text/plain</type>
            <size>56664</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTY4KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDUtMjAgIFNpZGRoYXJ0
aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdW1dLMl1bU3ltYmlhbl0gQ29yZUlQ
QyBpbXBsZW1lbnRhdGlvbiBmb3IgU3ltYmlhbiBPUworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4NzcKKworICAgICAgICBVc2UgbmF0aXZlIFN5bWJp
YW4gT1MgQVBJcyBmb3IgcGxhdGZvcm0gc3BlY2lmaWMgcGx1bWJpbmcgbGlrZSBwcm9jZXNzIGxh
dW5jaGluZyBhbmQgSVBDLgorICAgICAgICBUaGUgY2hhbmdlIG1heGltaXplcyB1c2Ugb2YgdGhl
IGV4aXN0aW5nIFF0IHBvcnQgb2YgV2ViS2l0Miwgd2hpbGUgaW1wbGVtZW50aW5nIG9ubHkgdGhl
IGFib3ZlLW1lbnRpb25lZAorICAgICAgICBwb3J0aW9ucyB1c2luZyBuYXRpdmUgY29uc3RydWN0
cy4KKworICAgICAgICBGb3IgSVBDLCB0d28gaGFsZi1kdXBsZXggcGlwZXMgKFJQaXBlKSBhcmUg
dXNlZC4gRm9yIHByb2Nlc3MgbGF1bmNoaW5nLCB0aGUgUlByb2Nlc3MgY2xhc3MKKyAgICAgICAg
d2hpY2ggYWxsb3dzIG93bmVyc2hpcCB0cmFuc2ZlciBvZiBJUEMgaGFuZGxlcyB0byBhIGNoaWxk
IHByb2Nlc3MgaXMgdXNlZC4KKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVu
dC5oOiBkZWNvdXBsZSBTeW1iaWFuIGZyb20gVU5JWF9ET01BSU5fU09DS0VUUyBjb2RlLgorICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOiBuZXcgU3ltYmlhbi1zcGVjaWZp
YyB0eXBlZGVmcyBhbmQgbWVtYmVyIHZhcmlhYmxlcy4KKworICAgICAgICAqIFBsYXRmb3JtL0Nv
cmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKENvcmVJUEM6
OnJvdW5kVXBUb0FsaWdubWVudCk6IFBvaW50ZXIgYWxpZ25tZW50IHV0aWxpdHkuCisgICAgICAg
IChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUpOiBTZXRzIHVwIFJQaXBl
IGNvbm5lY3Rpb24uCisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFs
aWRhdGUpOiBEZXN0cm95cyBSUGlwZSBhbmQgd2F0Y2hlcnMuCisgICAgICAgIChDb3JlSVBDOjpp
c01lc3NhZ2VUcmFpbGVyKTogQ2hlY2tzIGlmIGJ1ZmZlciBjb250YWlucyBhIG1hcmtlci4KKyAg
ICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpOk1haW4gd29ya2Vy
IG1ldGhvZCBmb3IgcmVhZGluZyBkYXRhIGFuZCBtZXNzYWdlIHBhcnNpbmcrZGlzcGF0Y2hpbmcu
CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpvcGVuKTogSW5pdGlhbGl6YXRpb24gY29k
ZS4KKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5n
TWVzc2FnZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVz
c2FnZSk6IFNlcmlhbGl6ZXMgbWVzc2FnZXMgd2l0aCBPUy1zcGVjaWZpYyBtZXRhZGF0YQorICAg
ICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9j
ZXNzVGVybWluYXRpb24pOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5Q
aXBlTm90aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgUXQtc3R5bGUgc2lnbmFsIGVtaXR0aW5n
IHdyYXBwZXIgYXJvdW5kIGFzeW5jIFN5bWJpYW4gSU8uIERlc2lnbmVkIHRvIGJlIFFPYmplY3Qt
Pm1vdmVUb1RocmVhZCgpCisgICAgICAgIGNvbXBhdGlibGUuICJIYXMtYSIgcmVsYXRpb25zaGlw
IHdpdGggYSB0aHJlYWQtbG9jYWwgU3ltYmlhbiBBY3RpdmUgT2JqZWN0LgorICAgICAgICAoUVN5
bWJpYW5QaXBlTm90aWZpZXI6OlFTeW1iaWFuUGlwZU5vdGlmaWVyKToKKyAgICAgICAgKFFTeW1i
aWFuUGlwZU5vdGlmaWVyOjp+UVN5bWJpYW5QaXBlTm90aWZpZXIpOgorICAgICAgICAoUVN5bWJp
YW5QaXBlTm90aWZpZXI6OnNldEVuYWJsZWQpOgorICAgICAgICAoUVN5bWJpYW5QaXBlTm90aWZp
ZXI6OmV2ZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5v
dGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBp
cGVBY3RpdmVPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgVGhlIFN5bWJpYW4gQWN0aXZlIE9i
amVjdCB0aGF0IHJlZ2lzdGVycy9oYW5kbGVzIGRhdGEgYXZhaWxhYmxlIHJlcXVlc3RzL25vdGlm
aWNhdGlvbnMgb24gYW4gUlBpcGUuCisgICAgICAgIChTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6
U3ltYmlhblBpcGVBY3RpdmVPYmplY3QpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmpl
Y3Q6On5TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCk6CisgICAgICAgIChTeW1iaWFuUGlwZUFjdGl2
ZU9iamVjdDo6c2V0RW5hYmxlZCk6IEEgUVNvY2tldE5vdGlmaWVyOjpzZXRFbmFibGVkKCkgc3R5
bGUgaW50ZXJmYWNlLgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlJ1bkwpOgor
ICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRvQ2FuY2VsKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0Lmg6IEFkZGVkLgorICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHA6IGd1YXJkIHdp
dGggVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy91
bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDogRGl0dG8uCisgICAgICAgICogUGxhdGZvcm0vUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllci5oOiBVc2UgUlByb2Nlc3MqIGZvciB3ZWIgcHJvY2VzcyBoYW5k
bGUuCisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6IGRlY291cGxlIFN5bWJpYW4g
ZnJvbSBVTklYX0RPTUFJTl9TT0NLRVRTIGNvZGUuCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1
ZXVlLmg6IE5ldyByZWdpc3RlclBpcGVFdmVudEhhbmRsZXIoKSBtZXRob2Qgc2ltaWxhciB0byBR
dC1Vbml4IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9y
eVN5bWJpYW4uY3BwOiBSZW1vdmVkIHVudXNlZCBtZXRob2RzLgorICAgICAgICAqIFBsYXRmb3Jt
L3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAgICAgICAgTmV3IHJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxl
cigpIG1ldGhvZCBzaW1pbGFyIHRvIFF0LVVuaXggaW1wbGVtZW50YXRpb24uCisgICAgICAgIChX
b3JrUXVldWU6OnJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6
OnNjaGVkdWxlV29ya09uVGVybWluYXRpb24pOiBXYXRjaGluZyBmb3Igd2ViIHByb2Nlc3MnIGRl
YXRoIGlzIGN1cnJlbnRseSBUT0RPLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Q
cm9jZXNzTGF1bmNoZXJRdC5jcHA6IEV4Y2x1ZGUgZmlsZSB3aGVuIFFfT1NfU1lNQklBTiBpcyB1
c2VkLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJTeW1i
aWFuLmNwcDogQWRkZWQuCisgICAgICAgIE5hdGl2ZSBTeW1iaWFuIE9TIGltcGxlbWVudGF0aW9u
IHRoYXQgdXNlcyBSUHJvY2VzcyB0byBzcGF3biB3ZWIgcHJvY2VzcyBhbmQgc2V0cyB1cCBwaXBl
cyBmb3IgSVBDLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwOiBN
aW5vciBjbGVhbnVwIHRvIHVuZGVybGluZSB0aGF0IFF0IHBvcnQgZG9lc24ndCBzdXBwb3J0IHRo
aXMuCisgICAgICAgIChXZWJLaXQ6OmludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVu
Y2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAgICAgKiBXZWJLaXQyLnByaTogTGluayB3aXRo
IHJwaXBlIGxpYnJhcnkuCisgICAgICAgICogV2ViS2l0Mi5wcm86IEFkZCBuZXcgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0
LmNwcDogU2V0IHByb2Nlc3MgcHJpb3JpdHkgdG8gbG93LiBEb24ndCB1c2UgaWRlbnRpZmllciBm
cm9tIGNvbW1hbmQtbGluZSBhcmdzIGZvciBTeW1iaWFuLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzTWFpblF0KToKKwogMjAxMS0wNS0yMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYktpdDIucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIu
cHJpCShyZXZpc2lvbiA4Njk2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIucHJpCSh3b3Jr
aW5nIGNvcHkpCkBAIC03MCw2ICs3MCw4IEBAIHN5bWJpYW4gewogICAgIElOQ0xVREVQQVRIID0g
JCRXRUJLSVQyX0lOQ0xVREVQQVRIICQkV0VCS0lUMl9HRU5FUkFURURfU09VUkNFU19ESVIgJCRJ
TkNMVURFUEFUSAogfQogCitzeW1iaWFuOiBMSUJTICs9IC1scnBpcGUKKwogZGVmaW5lVGVzdChw
cmVwZW5kV2ViS2l0MkxpYikgewogICAgIHBhdGhUb1dlYktpdDJPdXRwdXQgPSAkJEFSR1MvJCRX
RUJLSVQyX0RFU1RESVIKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8JKHJldmlzaW9uIDg2OTY4KQorKysg
U291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIs
NyBAQCBIRUFERVJTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0hhbmRsZU1lc3NhZ2UuaCBc
CiAgICAgUGxhdGZvcm0vQ29yZUlQQy9NZXNzYWdlSUQuaCBcCiAgICAgUGxhdGZvcm0vQ29yZUlQ
Qy9NZXNzYWdlU2VuZGVyLmggXAorICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5QaXBl
Tm90aWZpZXIuaCBcCiAgICAgUGxhdGZvcm0vTG9nZ2luZy5oIFwKICAgICBQbGF0Zm9ybS9Nb2R1
bGUuaCBcCiAgICAgUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllci5oIFwKQEAgLTMx
Myw2ICszMTQsOSBAQCBTT1VSQ0VTICs9IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL0RhdGFSZWZl
cmVuY2UuY3BwIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXguY3Bw
IFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwIFwKKyAgICBQ
bGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcCBcCisgICAgUGxhdGZvcm0v
Q29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHAgXAorICAgIFBsYXRmb3JtL0NvcmVJ
UEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3BwIFwKICAgICBQbGF0Zm9ybS9Mb2dnaW5n
LmNwcCBcCiAgICAgUGxhdGZvcm0vTW9kdWxlLmNwcCBcCiAgICAgUGxhdGZvcm0vUmVnaW9uLmNw
cCBcCkBAIC00MDAsNiArNDA0LDcgQEAgU09VUkNFUyArPSBcCiAgICAgVUlQcm9jZXNzL0xhdW5j
aGVyL1Byb2Nlc3NMYXVuY2hlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9UaHJlYWRM
YXVuY2hlci5jcHAgXAogICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJR
dC5jcHAgXAorICAgIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJTeW1iaWFu
LmNwcCBcCiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwIFwK
ICAgICBVSVByb2Nlc3MvUGx1Z2lucy9QbHVnaW5JbmZvU3RvcmUuY3BwIFwKICAgICBVSVByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5Qcm9jZXNzUHJveHkuY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL1BsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgJKHJldmlzaW9u
IDg2OTY4KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNzSWRlbnRp
Zmllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCwxMSBAQCB0eXBlZGVmIHBpZF90IFBs
YXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7CiAjZWxpZiBQTEFURk9STShXSU4pCiB0eXBlZGVmIEhB
TkRMRSBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOwogI2VsaWYgUExBVEZPUk0oUVQpCisjaWYg
T1MoU1lNQklBTikKK3R5cGVkZWYgUlByb2Nlc3MqIFBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXI7
CisjZWxzZQogdHlwZWRlZiBRUHJvY2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNl
bmRpZgogI2VsaWYgUExBVEZPUk0oR1RLKQogI2lmZGVmIEdfT1NfV0lOMzIKIHR5cGVkZWYgdm9p
ZCogR1BpZDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCShyZXZp
c2lvbiA4Njk2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1NoYXJlZE1lbW9yeS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBlbmNv
ZGUoQ29yZUlQQzo6QXJndW1lbnRFbmNvZGVyKikgY29uc3Q7CiAgICAgICAgIHN0YXRpYyBib29s
IGRlY29kZShDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqLCBIYW5kbGUmKTsKIAotI2lmIFVTRShV
TklYX0RPTUFJTl9TT0NLRVRTKSB8fCBPUyhTWU1CSUFOKQorI2lmIFVTRShVTklYX0RPTUFJTl9T
T0NLRVRTKQogICAgICAgICBDb3JlSVBDOjpBdHRhY2htZW50IHJlbGVhc2VUb0F0dGFjaG1lbnQo
KSBjb25zdDsKICAgICAgICAgdm9pZCBhZG9wdEZyb21BdHRhY2htZW50KGludCBmaWxlRGVzY3Jp
cHRvciwgc2l6ZV90KTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29y
a1F1ZXVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVl
LmgJKHJldmlzaW9uIDg2OTY4KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vV29ya1F1ZXVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDkgQEAKICNpbmNsdWRlICJQbGF0Zm9ybVBy
b2Nlc3NJZGVudGlmaWVyLmgiCiBjbGFzcyBRT2JqZWN0OwogY2xhc3MgUVRocmVhZDsKKyNpZiBP
UyhTWU1CSUFOKQorI2luY2x1ZGUgInF0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgiCisjZW5kaWYK
ICNlbGlmIFBMQVRGT1JNKEdUSykKICNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVy
LmgiCiB0eXBlZGVmIHN0cnVjdCBfR01haW5Db250ZXh0IEdNYWluQ29udGV4dDsKQEAgLTg0LDcg
Kzg3LDExIEBAIHB1YmxpYzoKICAgICB2b2lkIHJlZ2lzdGVySGFuZGxlKEhBTkRMRSwgUGFzc093
blB0cjxXb3JrSXRlbT4pOwogICAgIHZvaWQgdW5yZWdpc3RlckFuZENsb3NlSGFuZGxlKEhBTkRM
RSk7CiAjZWxpZiBQTEFURk9STShRVCkKKyNpZiBPUyhTWU1CSUFOKQorICAgIFFTeW1iaWFuUGlw
ZU5vdGlmaWVyKiByZWdpc3RlclBpcGVFdmVudEhhbmRsZXIoUlBpcGUsIFFTeW1iaWFuUGlwZU5v
dGlmaWVyOjpFdmVudFR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsKKyNlbHNlCiAgICAgUVNv
Y2tldE5vdGlmaWVyKiByZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQsIFFTb2NrZXROb3Rp
Zmllcjo6VHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4pOworI2VuZGlmCiAgICAgdm9pZCBzY2hl
ZHVsZVdvcmtPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllciwg
UGFzc093blB0cjxXb3JrSXRlbT4pOwogI2VsaWYgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgcmVn
aXN0ZXJFdmVudFNvdXJjZUhhbmRsZXIoaW50LCBpbnQsIFBhc3NPd25QdHI8V29ya0l0ZW0+KTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVudC5oCShy
ZXZpc2lvbiA4Njk2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvQXR0YWNo
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICNpZiBQTEFU
Rk9STShNQUMpCiAgICAgICAgIE1hY2hQb3J0VHlwZSwKICAgICAgICAgTWFjaE9PTE1lbW9yeVR5
cGUsCi0jZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoU1lNQklBTikKKyNlbGlm
IFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgICAgICBNYXBwZWRNZW1vcnkKICNlbmRpZgog
ICAgIH07CkBAIC00OCw3ICs0OCw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShNQUMpCiAgICAg
QXR0YWNobWVudChtYWNoX3BvcnRfbmFtZV90IHBvcnQsIG1hY2hfbXNnX3R5cGVfbmFtZV90IGRp
c3Bvc2l0aW9uKTsKICAgICBBdHRhY2htZW50KHZvaWQqIGFkZHJlc3MsIG1hY2hfbXNnX3NpemVf
dCBzaXplLCBtYWNoX21zZ19jb3B5X29wdGlvbnNfdCBjb3B5T3B0aW9ucywgYm9vbCBkZWFsbG9j
YXRlKTsKLSNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKSB8fCBPUyhTWU1CSUFOKQorI2Vs
aWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCiAgICAgQXR0YWNobWVudChpbnQgZmlsZURlc2Ny
aXB0b3IsIHNpemVfdCk7CiAjZW5kaWYKIApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAg
bWFjaF9tc2dfc2l6ZV90IHNpemUoKSBjb25zdCB7IEFTU0VSVChtX3R5cGUgPT0gTWFjaE9PTE1l
bW9yeVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuc2l6ZTsgfQogICAgIG1hY2hfbXNnX2NvcHlf
b3B0aW9uc190IGNvcHlPcHRpb25zKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xN
ZW1vcnlUeXBlKTsgcmV0dXJuIG1fb29sTWVtb3J5LmNvcHlPcHRpb25zOyB9CiAgICAgYm9vbCBk
ZWFsbG9jYXRlKCkgY29uc3QgeyBBU1NFUlQobV90eXBlID09IE1hY2hPT0xNZW1vcnlUeXBlKTsg
cmV0dXJuIG1fb29sTWVtb3J5LmRlYWxsb2NhdGU7IH0KLSNlbGlmIFVTRShVTklYX0RPTUFJTl9T
T0NLRVRTKSB8fCBPUyhTWU1CSUFOKQorI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCiAg
ICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KIAogICAgIGludCByZWxl
YXNlRmlsZURlc2NyaXB0b3IoKSB7IGludCB0ZW1wID0gbV9maWxlRGVzY3JpcHRvcjsgbV9maWxl
RGVzY3JpcHRvciA9IC0xOyByZXR1cm4gdGVtcDsgfQpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgYm9vbCBkZWFsbG9jYXRlOwogICAgICAgICB9IG1fb29sTWVtb3J5Owog
ICAgIH07Ci0jZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoU1lNQklBTikKKyNl
bGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIGludCBtX2ZpbGVEZXNjcmlwdG9yOwog
ICAgIHNpemVfdCBtX3NpemU7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvQ29ubmVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCShyZXZpc2lvbiA4Njk2OCkKKysrIFNvdXJjZS9XZWJL
aXQyL1BsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw4
ICs0MywxMiBAQAogI2VsaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPHN0cmluZz4KICNlbGlm
IFBMQVRGT1JNKFFUKQorI2lmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSA8cGxhdGZvcm0vcnBpcGUu
aD4KKyNlbHNlCiBjbGFzcyBRU29ja2V0Tm90aWZpZXI7CiAjZW5kaWYKKyNlbmRpZgogCiAjaWYg
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICNpbmNsdWRlICJQbGF0Zm9ybVByb2Nlc3NJ
ZGVudGlmaWVyLmgiCkBAIC0xMDgsOCArMTEyLDEwIEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JN
KFdJTikKICAgICB0eXBlZGVmIEhBTkRMRSBJZGVudGlmaWVyOwogICAgIHN0YXRpYyBib29sIGNy
ZWF0ZVNlcnZlckFuZENsaWVudElkZW50aWZpZXJzKElkZW50aWZpZXImIHNlcnZlcklkZW50aWZp
ZXIsIElkZW50aWZpZXImIGNsaWVudElkZW50aWZpZXIpOwotI2VsaWYgVVNFKFVOSVhfRE9NQUlO
X1NPQ0tFVFMpIHx8IE9TKFNZTUJJQU4pCisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykK
ICAgICB0eXBlZGVmIGludCBJZGVudGlmaWVyOworI2VsaWYgT1MoU1lNQklBTikKKyAgICB0eXBl
ZGVmIFJQaXBlKiBJZGVudGlmaWVyOwogI2VuZGlmCiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxD
b25uZWN0aW9uPiBjcmVhdGVTZXJ2ZXJDb25uZWN0aW9uKElkZW50aWZpZXIsIENsaWVudCosIFJ1
bkxvb3AqIGNsaWVudFJ1bkxvb3ApOwpAQCAtMTQ2LDYgKzE1Miw5IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBjb25zdCBpbnQgRGVmYXVsdFRpbWVvdXQgPSAwOwogICAgIHN0YXRpYyBjb25zdCBp
bnQgTm9UaW1lb3V0ID0gLTE7CisjaWYgT1MoU1lNQklBTikKKyAgICBzdGF0aWMgY29uc3QgaW50
IE1heFBpcGVDYXBhY2l0eSA9IDQwOTY7IAorI2VuZGlmCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBib29sIHNlbmQoY29uc3QgVCYgbWVzc2FnZSwgdWludDY0X3QgZGVzdGluYXRpb25JRCwg
dW5zaWduZWQgbWVzc2FnZVNlbmRGbGFncyA9IDApOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGJvb2wgc2VuZFN5bmMoY29uc3QgVCYgbWVzc2FnZSwgY29uc3QgdHlwZW5hbWUgVDo6UmVwbHkm
IHJlcGx5LCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCBkb3VibGUgdGltZW91dCA9IERlZmF1bHRU
aW1lb3V0KTsKQEAgLTMzNCw3ICszNDMsNyBAQCBwcml2YXRlOgogICAgIE93blB0cjxBcmd1bWVu
dEVuY29kZXI+IG1fcGVuZGluZ1dyaXRlQXJndW1lbnRzOwogICAgIE9WRVJMQVBQRUQgbV93cml0
ZVN0YXRlOwogICAgIEhBTkRMRSBtX2Nvbm5lY3Rpb25QaXBlOwotI2VsaWYgVVNFKFVOSVhfRE9N
QUlOX1NPQ0tFVFMpIHx8IE9TKFNZTUJJQU4pCisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VU
UykKICAgICAvLyBDYWxsZWQgb24gdGhlIGNvbm5lY3Rpb24gcXVldWUuCiAgICAgdm9pZCByZWFk
eVJlYWRIYW5kbGVyKCk7CiAKQEAgLTM0NSw2ICszNTQsMTIgQEAgcHJpdmF0ZToKICNpZiBQTEFU
Rk9STShRVCkKICAgICBRU29ja2V0Tm90aWZpZXIqIG1fc29ja2V0Tm90aWZpZXI7CiAjZW5kaWYK
KyNlbGlmIFBMQVRGT1JNKFFUKSAmJiBPUyhTWU1CSUFOKQorICAgIHZvaWQgcmVhZHlSZWFkSGFu
ZGxlcigpOworICAgIFZlY3Rvcjx1aW50OF90PiBtX3JlYWRCdWZmZXI7CisgICAgUlBpcGUgbV9y
ZWFkUGlwZTsKKyAgICBSUGlwZSBtX3dyaXRlUGlwZTsKKyAgICBRU3ltYmlhblBpcGVOb3RpZmll
ciogbV9waXBlUmVhZE5vdGlmaWVyOwogI2VuZGlmCiB9OwogCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L0Nvbm5lY3Rpb25TeW1iaWFuLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29u
bmVjdGlvblN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAg
ICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRp
YXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRGT1JNKFFUKSAmJiBP
UyhTWU1CSUFOKQorI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50
RW5jb2Rlci5oIgorI2luY2x1ZGUgIldvcmtJdGVtLmgiCisjaW5jbHVkZSA8UVZlY3Rvcj4KKyNp
bmNsdWRlIDxxdC9RU3ltYmlhblBpcGVOb3RpZmllci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgQ29yZUlQQyB7CisK
K3N0YXRpYyBjb25zdCB1aW50MzJfdCBrVHJhaWxlclBhdHRlcm4gPSAweERFQURDQUZFOworCitz
dHJ1Y3QgUGFyc2VkTWVzc2FnZSB7CisgICAgdWludDhfdCogc3RhcnQ7IC8vIGJhc2UgYWRkcmVz
cyBvZiBtZXNzYWdlCisgICAgdWludDMyX3Qgc2l6ZTsgLy8gc2l6ZSBpbiBieXRlcworICAgIHVp
bnQzMl90IG1lc3NhZ2VJRDsKK307CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHJvdW5kVXBUb0Fs
aWdubWVudChzaXplX3QgdmFsdWUsIHVuc2lnbmVkIGFsaWdubWVudCkKK3sKKyAgICByZXR1cm4g
KCh2YWx1ZSArIGFsaWdubWVudCAtIDEpIC8gYWxpZ25tZW50KSAqIGFsaWdubWVudDsKK30KKwor
dm9pZCBDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUoSWRlbnRpZmllciBpZGVudGlmaWVy
KQoreworICAgIGlmIChtX2lzU2VydmVyKSB7CisgICAgICAgIG1fcmVhZFBpcGUgPSBzdGF0aWNf
Y2FzdDxSUGlwZSo+KGlkZW50aWZpZXIpWzBdOworICAgICAgICBtX3dyaXRlUGlwZSA9IHN0YXRp
Y19jYXN0PFJQaXBlKj4oaWRlbnRpZmllcilbMV07CisgICAgfSBlbHNlIHsKKyAgICAgICAgVElu
dCBlcnJvcjsKKyAgICAgICAgLy8gT3BlbiBwaXBlcyB2aWEgUlByb2Nlc3MnICJlbnZpcm9ubWVu
dCBkYXRhIHNsb3RzIiBudW1iZXIgMyAmIDQuCisgICAgICAgIC8vIFRoZSBjaG9pY2Ugb2YgMyAm
IDQgaXMgYXJiaXRyYXJ5IGFuZCBtYXRjaGVzIHRoZSBjb2RlIGluIFByb2Nlc3NMYXVuY2hlclN5
bWJpYW4uY3BwLgorICAgICAgICAvLyBUaGlzIGlzIHRoZSBTeW1iaWFuIE9TIHdheSBvZiBwYXNz
aW5nIG93bmVyc2hpcCBvZiByZXNvdXJjZXMgZnJvbSBwYXJlbnQgdG8gY2hpbGQuCisgICAgICAg
IGVycm9yID0gbV9yZWFkUGlwZS5PcGVuKDMpOyAKKyAgICAgICAgZXJyb3J8PSBtX3dyaXRlUGlw
ZS5PcGVuKDQpOworICAgICAgICBpZiAoZXJyb3IpIHsgCisgICAgICAgICAgICBtX2lzQ29ubmVj
dGVkID0gZmFsc2U7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBtX3BpcGVSZWFkTm90aWZpZXIgPSAwOworICAgIG1fcmVhZEJ1ZmZlci5yZXNpemUoQ29yZUlQ
Qzo6Q29ubmVjdGlvbjo6TWF4UGlwZUNhcGFjaXR5KTsKKyAgICBtX2lzQ29ubmVjdGVkID0gdHJ1
ZTsgICAgICAgIAorfQorCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7
CisgICAgbV9yZWFkQnVmZmVyLnNocmluaygwKTsKKyAgICAKKyAgICBkZWxldGUgbV9waXBlUmVh
ZE5vdGlmaWVyOworICAgIG1fcGlwZVJlYWROb3RpZmllciA9IDA7CisKKyAgICBtX3JlYWRQaXBl
LkNsb3NlKCk7CisgICAgbV93cml0ZVBpcGUuQ2xvc2UoKTsKKyAgICAvLyBUT0RPOiBEZWxldGUg
dGhlIG1lbW9yeSBmb3IgdGhlIFJQaXBlWzJdIGFycmF5LgorCisgICAgbV9pc0Nvbm5lY3RlZCA9
IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNNZXNzYWdlVHJhaWxlcih1aW50OF90
ICpkYXRhKSAKK3sgIAorICAgIHJldHVybiAoIGtUcmFpbGVyUGF0dGVybiA9PSAqKHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkYXRhKSkgKTsKK30KKwordm9pZCBDb25uZWN0aW9uOjpyZWFk
eVJlYWRIYW5kbGVyKCkKK3sgICAKKyAgICBtX3BpcGVSZWFkTm90aWZpZXItPnNldEVuYWJsZWQo
ZmFsc2UpOworICAgIFRQdHI4IHJlYWRQdHIobV9yZWFkQnVmZmVyLmRhdGEoKSwgMCwgbV9yZWFk
QnVmZmVyLnNpemUoKSk7CisKKyAgICAvLyBOb3RlIHRoYXQgYSByZWFkIG9wZXJhdGlvbiBtYXkg
cmV0dXJuIG11bHRpcGxlIG1lc3NhZ2VzIGR1ZSB0byBpdHMgc3RyZWFtLW9yaWVudGVkIG5hdHVy
ZS4KKyAgICBUSW50IGJ5dGVzUmVhZCA9IG1fcmVhZFBpcGUuUmVhZChyZWFkUHRyLCByZWFkUHRy
Lk1heFNpemUoKSk7CisgICAgCisgICAgaWYgKGJ5dGVzUmVhZCA+IDApIHsgICAgICAgICAgICAK
KyAgICAgICAgX19BU1NFUlRfQUxXQVlTKGJ5dGVzUmVhZCA9PSByZWFkUHRyLlNpemUoKSwgVXNl
cjo6SW52YXJpYW50KCkpOworICAgICAgICAKKyAgICAgICAgLy8gU3RhcnQgcGFyc2luZyBmcm9t
IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciwgd2hlcmUgd2UgZXhwZWN0IHRvIHNlZSBhIHRyYWlsZXIg
YW5kIHRoZSBzaXplIG9mIHRoaXMgbWVzc2FnZS4KKyAgICAgICAgdWludDhfdCogbWVzc2FnZVN0
YXJ0ID0gbV9yZWFkQnVmZmVyLmRhdGEoKSArIGJ5dGVzUmVhZDsKKyAgICAgICAgCisgICAgICAg
IC8vIFRlbXBvcmFyeSBwbGFjZSB0byBrZWVwIHRyYWNrIG9mIHBhcnNlZCBtZXNzYWdlcy4KKyAg
ICAgICAgVmVjdG9yPFBhcnNlZE1lc3NhZ2UsIDEwPiBtZXNzc2FnZVBvaW50ZXJzOworICAgICAg
ICAKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIG1lc3NhZ2VTdGFydCAtPSBz
aXplb2YodWludDMyX3QpOyAvLyBQcmVwYXJlIHRvIHJlYWQgNC1ieXRlIHRyYWlsZXIuCisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghaXNNZXNzYWdlVHJhaWxlcihtZXNzYWdlU3RhcnQp
KSB7IAorICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25EaWRDbG9zZSgpOworICAgICAgICAgICAg
ICAgIHJldHVybjsgCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1lc3NhZ2VTdGFydCAt
PSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgdWludDMyX3QgbWVzc2FnZUlEID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtZXNzYWdlU3RhcnQpOyAKKworICAgICAgICAgICAg
bWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7CisgICAgICAgICAgICB1aW50MzJfdCBw
YWRkaW5nTGVuZ3RoID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihtZXNzYWdlU3RhcnQp
OworCisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICAg
ICAgICAgIHVpbnQzMl90IHJhd1NpemUgPSAqcmVpbnRlcnByZXRfY2FzdDx1aW50NjRfdCo+KG1l
c3NhZ2VTdGFydCk7CisKKyAgICAgICAgICAgIG1lc3NhZ2VTdGFydCAtPSAocGFkZGluZ0xlbmd0
aCArIHJhd1NpemUpOworCisgICAgICAgICAgICAvLyBTYXZlIG1lc3NhZ2UgYm91bmRhcnkuCisg
ICAgICAgICAgICBjb25zdCBQYXJzZWRNZXNzYWdlIGFNZXNzYWdlID0ge21lc3NhZ2VTdGFydCwg
cmF3U2l6ZSwgbWVzc2FnZUlEfTsKKyAgICAgICAgICAgIG1lc3NzYWdlUG9pbnRlcnMuYXBwZW5k
KGFNZXNzYWdlKTsgCisgICAgICAgICAgICAKKyAgICAgICAgICAgIF9fQVNTRVJUX0FMV0FZUyht
ZXNzYWdlU3RhcnQgPj0gIG1fcmVhZEJ1ZmZlci5kYXRhKCksIFVzZXI6OkludmFyaWFudCgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1lc3NhZ2VTdGFydCA9PSBtX3JlYWRCdWZm
ZXIuZGF0YSgpKSAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgCisg
ICAgICAgIC8vIE5vdyBkaXNwYXRjaCBwYXJzZWQgbWVzc2FnZXMgaW4gdGhlIG9yZGVyIHRoZXkg
d2VyZSB3cml0dGVuIGJ5IHRoZSBzZW5kZXIuCisgICAgICAgIGZvciAoaW50IGkgPSBtZXNzc2Fn
ZVBvaW50ZXJzLnNpemUoKS0xOyBpID49IDAgOyBpLS0pIHsKKyAgICAgICAgICAgIGNvbnN0IFBh
cnNlZE1lc3NhZ2UgYU1lc3NhZ2UgPSBtZXNzc2FnZVBvaW50ZXJzLmF0KGkpOworICAgICAgICAg
ICAgTWVzc2FnZUlEIG1JRCA9IE1lc3NhZ2VJRDo6ZnJvbUludChhTWVzc2FnZS5tZXNzYWdlSUQp
OworICAgICAgICAgICAgcHJvY2Vzc0luY29taW5nTWVzc2FnZShtSUQsIGFkb3B0UHRyKG5ldyBB
cmd1bWVudERlY29kZXIoYU1lc3NhZ2Uuc3RhcnQsIGFNZXNzYWdlLnNpemUpKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgbV9waXBlUmVhZE5vdGlmaWVyLT5zZXRFbmFibGVkKHRydWUp
OworfQorCisKK2Jvb2wgQ29ubmVjdGlvbjo6b3BlbigpCit7CisgICAgaWYgKCFtX2lzQ29ubmVj
dGVkKSAKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAKKyAgICAKKyAgICAvLyBTdGFydCBsaXN0ZW5p
bmcgZm9yIHJlYWQuCisgICAgbV9waXBlUmVhZE5vdGlmaWVyID0gbV9jb25uZWN0aW9uUXVldWUu
cmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKG1fcmVhZFBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVy
OjpQaXBlUmVhZERhdGFBdmFpbGFibGUsIFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rp
b246OnJlYWR5UmVhZEhhbmRsZXIpKTsKKyAgICAgICAgCisgICAgLy8gU2NoZWR1bGUgYSByZWFk
LgorICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRo
aXMsICZDb25uZWN0aW9uOjpyZWFkeVJlYWRIYW5kbGVyKSk7CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6cGxhdGZvcm1DYW5TZW5kT3V0Z29pbmdNZXNzYWdl
cygpIGNvbnN0Cit7CisgICAgLy8gQWx3YXlzIHRydWUsIHNpbmNlIHRoZSBwaXBlIGlzIGxhcmdl
IGVub3VnaCB0byBob2xkIG11bHRpcGxlIG1lc3NhZ2VzLgorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENvbm5lY3Rpb246OnNlbmRPdXRnb2luZ01lc3NhZ2UoTWVzc2FnZUlEIG1lc3NhZ2VJ
RCwgUGFzc093blB0cjxBcmd1bWVudEVuY29kZXI+IGFyZ3VtZW50cykKK3sKKyAgICB1aW50MzJf
dCByYXdTaXplID0gYXJndW1lbnRzLT5idWZmZXJTaXplKCk7CisgICAgYXJndW1lbnRzLT5lbmNv
ZGVVSW50MzIocmF3U2l6ZSk7CisKKyAgICAvLyBTaXplIG9mIHBhZGRpbmcuCisgICAgdWludDMy
X3QgcGFkZGluZyA9IGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgpIC0gcmF3U2l6ZSAtIHNpemVvZihy
YXdTaXplKTsKKyAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMihwYWRkaW5nKTsKKworICAgIGFy
Z3VtZW50cy0+ZW5jb2RlVUludDMyKG1lc3NhZ2VJRC50b0ludCgpKTsKKworICAgIC8vIEEgbWFy
a2VyIChtYWdpYyBudW1iZXIpIHdoaWNoIG1ha2VzIGl0IGVhc2llciB0byBzcG90IG1lc3NhZ2Ug
Ym91bmRhcnkgYXQgdGhlIHJlY2VpdmVyLgorICAgIGFyZ3VtZW50cy0+ZW5jb2RlVUludDMyKGtU
cmFpbGVyUGF0dGVybik7CisgICAgCisgICAgVFB0cjggd3JpdGVCdWZmZXIoYXJndW1lbnRzLT5i
dWZmZXIoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCksIGFyZ3VtZW50cy0+YnVmZmVyU2l6ZSgp
ICk7CisgICAgVEludCBieXRlc1dyaXR0ZW4gPSBtX3dyaXRlUGlwZS5Xcml0ZSh3cml0ZUJ1ZmZl
ciwgd3JpdGVCdWZmZXIuU2l6ZSgpICk7ICAgICAKKyAgICAKKyAgICByZXR1cm4gKGJ5dGVzV3Jp
dHRlbiA9PSB3cml0ZUJ1ZmZlci5TaXplKCkpOworfQorCit2b2lkIENvbm5lY3Rpb246OnNldFNo
b3VsZENsb3NlQ29ubmVjdGlvbk9uUHJvY2Vzc1Rlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Q
cm9jZXNzSWRlbnRpZmllciBwcm9jZXNzKQoreworICAgIG1fY29ubmVjdGlvblF1ZXVlLnNjaGVk
dWxlV29ya09uVGVybWluYXRpb24ocHJvY2VzcywgV29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29u
bmVjdGlvbjo6Y29ubmVjdGlvbkRpZENsb3NlKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIENvcmVJ
UEMKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3lt
YmlhblBpcGVOb3RpZmllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIw
MTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRGT1JNIChRVCkgJiYgT1MoU1lNQklBTikKKyNpbmNs
dWRlICJRU3ltYmlhblBpcGVOb3RpZmllci5oIgorCisjaW5jbHVkZSAiQXNzZXJ0aW9ucy5oIgor
I2luY2x1ZGUgIlFDb3JlQXBwbGljYXRpb24iCisjaW5jbHVkZSAiUUV2ZW50IgorI2luY2x1ZGUg
IlFPYmplY3QiCisjaW5jbHVkZSAiU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaCIKKyNpbmNsdWRl
IDxwbGF0Zm9ybS9ycGlwZS5oPgorCisvLyBXcmFwcGVyIFFPYmplY3QgYXJvdW5kIGEgU3ltYmlh
biBBY3RpdmUgT2JqZWN0IChBTykuCitRU3ltYmlhblBpcGVOb3RpZmllcjo6UVN5bWJpYW5QaXBl
Tm90aWZpZXIoUlBpcGUmIHBpcGUsIEV2ZW50VHlwZSB0eXBlLCBpbnQgYnl0ZXMsIFFPYmplY3Qg
KnBhcmVudCkgCisgICAgOiBRT2JqZWN0KHBhcmVudCkKKyAgICAsIG1fcGlwZShwaXBlKQorICAg
ICwgbV90eXBlKHR5cGUpCisgICAgLCBtX2J5dGVzKGJ5dGVzKQorICAgICwgbV9ub3RpZmllckFP
KG5ldyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChwaXBlLCB0eXBlLCBieXRlcywgdGhpcykpCit7
Cit9CisKK1FTeW1iaWFuUGlwZU5vdGlmaWVyOjp+UVN5bWJpYW5QaXBlTm90aWZpZXIoKSAKK3sK
KyAgICBkZWxldGUgbV9ub3RpZmllckFPOworfQorCisvLyBUaGlzIGludGVyZmFjZSBpcyBtb2Rl
bGVkIGFmdGVyIFFTb2NrZXROb3RpZmllcidzIHNldEVuYWJsZWQoKS4KK3ZvaWQgUVN5bWJpYW5Q
aXBlTm90aWZpZXI6OnNldEVuYWJsZWQoYm9vbCBlbmFibGVkKSAKK3sgCisgICAgaWYgKCFtX25v
dGlmaWVyQU8pIHsKKyAgICAgICAgLy8gV2UgZGVsZXRlZCB0aGUgQU8gcHJldmlvdXNseSwgc28g
ZmlyZSBhIGRlZmVycmVkIGluaXRpYWxpemF0aW9uIHJlcXVlc3QgdmlhIHBvc3RFdmVudCgpLgor
ICAgICAgICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgUU9iamVjdC0+bW92ZVRvVGhy
ZWFkKCkuCisgICAgICAgIC8vIE5PVEU6IFdlIGRpc2NhcmQgdGhlIHNwZWNpZmllZCBib29sZWFu
IGFyZ3VtZW50LCBhbmQgYmxhbmtldCBlbmFibGUgbGF0ZXIgb24uCisgICAgICAgIFFFdmVudCog
cG9zdFRocmVhZENoYW5nZUV2ZW50ID0gbmV3IFFFdmVudChQb3N0VGhyZWFkQ2hhbmdlRXZlbnRU
eXBlKTsKKyAgICAgICAgUUNvcmVBcHBsaWNhdGlvbjo6cG9zdEV2ZW50KHRoaXMsIHBvc3RUaHJl
YWRDaGFuZ2VFdmVudCk7CisgICAgICAgIHJldHVybjsgCisgICAgfQorCisgICAgbV9ub3RpZmll
ckFPLT5zZXRFbmFibGVkKGVuYWJsZWQpOworfQorCisvLyBUaGlzIGV2ZW50IGhhbmRsZXIgZXhp
c3RzIHB1cmVseSB0byBzdXBwb3J0IFFPYmplY3QtPm1vdmVUb1RocmVhZC4KKy8vIFN5bWJpYW4g
YWN0aXZlIG9iamVjdHMgKEFPcykgYXJlIGJvdW5kIHRvIGFuIEFjdGl2ZSBTY2hlZHVsZXIgKEFT
KSB3aGljaCBpcyB0aHJlYWQtbG9jYWwuCisvLyBUaGVyZWZvcmUsIHRoZSBBTyBtdXN0IGJlIHJl
LWNyZWF0ZWQgb24gdGhlIG5ldyB0aHJlYWQgb25jZSB0aGUgcGFyZW50IFFPYmplY3QgaGFzIG1v
dmVkCisvLyB0byB0aGUgbmV3IHRocmVhZC4KK2Jvb2wgUVN5bWJpYW5QaXBlTm90aWZpZXI6OmV2
ZW50KFFFdmVudCogZXYpCit7ICAgICAgICAKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSBRRXZlbnQ6
OlRocmVhZENoYW5nZSkgeyAvLyBwcmUtbWlncmF0aW9uIGV2ZW50CisgICAgICAgIGlmIChtX25v
dGlmaWVyQU8pIHsKKyAgICAgICAgICAgIGlmIChtX25vdGlmaWVyQU8tPklzQWRkZWQoKSkgewor
ICAgICAgICAgICAgICAgIGJvb2wgb2xkU3RhdGUgPSBtX25vdGlmaWVyQU8tPklzQWN0aXZlKCk7
CisgICAgICAgICAgICAgICAgbV9ub3RpZmllckFPLT5EZXF1ZSgpOworICAgICAgICAgICAgfSAg
ICAgCisgICAgICAgICAgICBkZWxldGUgbV9ub3RpZmllckFPOworICAgICAgICAgICAgbV9ub3Rp
ZmllckFPID0gMDsKKyAgICAgICAgfQorICAgICAgICAvLyBGaXJlIGEgZGVmZXJyZWQgaW5pdGlh
bGl6YXRpb24gcmVxdWVzdC4KKyAgICAgICAgUUV2ZW50KiBwb3N0VGhyZWFkQ2hhbmdlRXZlbnQg
PSBuZXcgUUV2ZW50KFBvc3RUaHJlYWRDaGFuZ2VFdmVudFR5cGUpOworICAgICAgICBRQ29yZUFw
cGxpY2F0aW9uOjpwb3N0RXZlbnQodGhpcywgcG9zdFRocmVhZENoYW5nZUV2ZW50KTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfSAKKyAgICAKKyAgICBpZiAoZXYtPnR5cGUoKSA9PSBQb3N0
VGhyZWFkQ2hhbmdlRXZlbnRUeXBlKSB7IC8vIGN1c3RvbSwgcG9zdC1taWdyYXRpb24gZXZlbnQK
KyAgICAgICAgaWYgKCFtX25vdGlmaWVyQU8pIHsKKyAgICAgICAgICAgIG1fbm90aWZpZXJBTyA9
IG5ldyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChtX3BpcGUsIG1fdHlwZSwgbV9ieXRlcywgdGhp
cyk7CisgICAgICAgICAgICAvLyBOT1RFOiBXZSBwcmVzdW1wdGl2ZWx5IGVuYWJsZSB3YXRjaCwg
ZXZlbiB0aG91Z2ggb2xkU3RhdGUgbWF5IGJlIGZhbHNlIGFib3ZlLgorICAgICAgICAgICAgbV9u
b3RpZmllckFPLT5zZXRFbmFibGVkKHRydWUpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0
cnVlOyAKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5Q
aXBlTm90aWZpZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
NyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBRU3ltYmlhblBpcGVOb3RpZmllcl9o
CisjZGVmaW5lIFFTeW1iaWFuUGlwZU5vdGlmaWVyX2gKKworI2luY2x1ZGUgPHFnbG9iYWwuaD4K
KyNpZmRlZiBRX09TX1NZTUJJQU4KKyNpbmNsdWRlIDxRRXZlbnQ+CisjaW5jbHVkZSA8UU9iamVj
dD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCitjbGFzcyBTeW1iaWFuUGlwZUFjdGl2
ZU9iamVjdDsKKworY2xhc3MgUVN5bWJpYW5QaXBlTm90aWZpZXIgOiBwdWJsaWMgUU9iamVjdCB7
CisgICAgUV9PQkpFQ1QKK3B1YmxpYzogCisgICAgZW51bSBFdmVudFR5cGUgeworICAgICAgICBQ
aXBlUmVhZERhdGFBdmFpbGFibGUsCisgICAgICAgIFBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlCisg
ICAgfTsKKyAgICBRU3ltYmlhblBpcGVOb3RpZmllcihSUGlwZSYsIEV2ZW50VHlwZSwgaW50LCBR
T2JqZWN0KiBwYXJlbnQgPSAwKTsKKyAgICB+UVN5bWJpYW5QaXBlTm90aWZpZXIoKTsKKyAgICBi
b29sIGV2ZW50KFFFdmVudCopOworICAgIAorcHVibGljIHNsb3RzOgorICAgIHZvaWQgc2V0RW5h
YmxlZChib29sKTsKKworc2lnbmFsczoKKyAgICAvLyBFbWl0dGVkIHdoZW4gUGlwZVJlYWREYXRh
QXZhaWxhYmxlIG9jY3Vycy4KKyAgICB2b2lkIHJlYWR5VG9SZWFkKGludCk7CisgICAgLy8gRW1p
dHRlZCB3aGVuIFBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlIG9jY3Vycy4KKyAgICB2b2lkIHJlYWR5
VG9Xcml0ZShpbnQpOworICAgIHZvaWQgZXJyb3JPY2N1cmVkKGludCk7CisgICAgCitwcml2YXRl
OiAKKyAgICBSUGlwZSBtX3BpcGU7IAorICAgIEV2ZW50VHlwZSBtX3R5cGU7CisgICAgaW50IG1f
Ynl0ZXM7ICAgCisgICAgU3ltYmlhblBpcGVBY3RpdmVPYmplY3QqIG1fbm90aWZpZXJBTzsKKwor
ICAgIHN0YXRpYyBjb25zdCBRRXZlbnQ6OlR5cGUgUG9zdFRocmVhZENoYW5nZUV2ZW50VHlwZSA9
IChRRXZlbnQ6OlR5cGUpKFFFdmVudDo6VXNlciArIDEwMCk7CisgICAgICAgIAorICAgIGZyaWVu
ZCBjbGFzcyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDsKKyAgICBRX0RJU0FCTEVfQ09QWShRU3lt
YmlhblBpcGVOb3RpZmllcikKK307CisKKyNlbmRpZgorCisjZW5kaWYgLy8gUVN5bWJpYW5QaXBl
Tm90aWZpZXJfaAorCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1N5
bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9Q
bGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3Rp
dmVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAgICBDb3B5
cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFBMQVRGT1JNKFFUKSAmJiBPUyhTWU1C
SUFOKQorI2luY2x1ZGUgIlN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmgiCisKKyNpbmNsdWRlICJR
U3ltYmlhblBpcGVOb3RpZmllci5oIgorI2luY2x1ZGUgPHBsYXRmb3JtL3JwaXBlLmg+CisKK1N5
bWJpYW5QaXBlQWN0aXZlT2JqZWN0OjpTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChSUGlwZSBwaXBl
LCBRU3ltYmlhblBpcGVOb3RpZmllcjo6RXZlbnRUeXBlIHR5cGUsIGludCBzcGFjZUluQnl0ZXMs
IFFTeW1iaWFuUGlwZU5vdGlmaWVyKiBxcSkKKyAgICA6IENBY3RpdmUoQ0FjdGl2ZTo6RVByaW9y
aXR5U3RhbmRhcmQpCisgICAgLCBtX3BpcGUocGlwZSkKKyAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICwgbV9ieXRlcyhzcGFjZUluQnl0ZXMpCisgICAgLCBtX3BhcmVudChxcSkKK3sgCisgICAgQ0Fj
dGl2ZVNjaGVkdWxlcjo6QWRkKHRoaXMpOworfQorICAgIAorU3ltYmlhblBpcGVBY3RpdmVPYmpl
Y3Q6On5TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCgpIAoreyAKKyAgICBDYW5jZWwoKTsKK30KKwor
dm9pZCBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6c2V0RW5hYmxlZChib29sIGVuYWJsZWQpIAor
eworICAgIGlmIChlbmFibGVkICYmICFJc0FjdGl2ZSgpKSB7ICAKKyAgICAgICAgaWYgKG1fdHlw
ZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVJlYWREYXRhQXZhaWxhYmxlKSB7IAorICAg
ICAgICAgICAgbV9waXBlLk5vdGlmeURhdGFBdmFpbGFibGUoaVN0YXR1cyk7CisgICAgICAgICAg
ICBTZXRBY3RpdmUoKTsgLy8gYmFzZSBjbGFzcyBtZXRob2QgdG8gZGVjbGFyZSB0aGUgYWJvdmUg
cmVxdWVzdCBhcyAicGVuZGluZyIgY29tcGxldGlvbgorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlV3JpdGVTcGFjZUF2
YWlsYWJsZSkgeworICAgICAgICAgICAgaW50IGZyZWVTcGFjZU5lZWRlZCA9IG1fYnl0ZXMgPCAw
ID8gMSA6IG1fYnl0ZXM7IAorICAgICAgICAgICAgbV9waXBlLk5vdGlmeVNwYWNlQXZhaWxhYmxl
KGZyZWVTcGFjZU5lZWRlZCwgaVN0YXR1cyk7CisgICAgICAgICAgICBTZXRBY3RpdmUoKTsgLy8g
YmFzZSBjbGFzcyBtZXRob2QgdG8gZGVjbGFyZSB0aGUgYWJvdmUgcmVxdWVzdCBhcyAicGVuZGlu
ZyIgY29tcGxldGlvbgorICAgICAgICB9CisgICAgICAgIAorICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGlmICghZW5hYmxlZCkgeworICAgICAgICBDYW5jZWwoKTsgLy8gQXV0b21h
dGljYWxseSBjYWxscyBEb0NhbmNlbCgpCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy8v
IFRoaXMgbWV0aG9kIGdldHMgcnVuIGJ5IHRoZSBTeW1iaWFuIE9TIEFjdGl2ZSBTY2hlZHVsZXIg
d2hlbiB0aGUKKy8vIHJlcXVlc3QgaW5pdGlhdGVkIGJ5IE5vdGlmeURhdGFBdmFpbGFibGUgYWJv
dmUgaXMgbWFya2VkIGFzIGNvbXBsZXRlZC4KK3ZvaWQgU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6
OlJ1bkwoKSAKK3sKKyAgICBpZiAoaVN0YXR1cyAhPSBLRXJyTm9uZSkgeworICAgICAgICBlbWl0
IG1fcGFyZW50LT5lcnJvck9jY3VyZWQoaVN0YXR1cy5JbnQoKSk7CisgICAgICAgIHJldHVybjsg
CisgICAgfQorCisgICAgaWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVJl
YWREYXRhQXZhaWxhYmxlKSB7CisgICAgICAgIGNvbnN0IGludCBieXRlc0F2YWlsYWJsZSA9ICBt
X3BpcGUuU2l6ZSgpOworICAgICAgICBpZiAoYnl0ZXNBdmFpbGFibGUgPiAwKQorICAgICAgICAg
ICAgZW1pdCBtX3BhcmVudC0+cmVhZHlUb1JlYWQoYnl0ZXNBdmFpbGFibGUpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChtX3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90aWZp
ZXI6OlBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlKSB7IAorICAgICAgICBlbWl0IG1fcGFyZW50LT5y
ZWFkeVRvV3JpdGUoMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKK30KKyAgCit2b2lkIFN5
bWJpYW5QaXBlQWN0aXZlT2JqZWN0OjpEb0NhbmNlbCgpIAoreyAKKyAgICBpZiAobV90eXBlID09
IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsgCisgICAgICAg
IG1fcGlwZS5DYW5jZWxEYXRhQXZhaWxhYmxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgICAgICAgICAgICAKKyAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQ
aXBlV3JpdGVTcGFjZUF2YWlsYWJsZSkgeyAKKyAgICAgICAgbV9waXBlLkNhbmNlbFNwYWNlQXZh
aWxhYmxlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCit9CisKKyNlbmRpZgpJbmRl
eDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9i
amVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQv
U3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMTEgTm9raWEgQ29y
cG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisKKyAgICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBTeW1iaWFu
UGlwZUFjdGl2ZU9iamVjdF9oCisjZGVmaW5lIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKwor
I2luY2x1ZGUgIlFTeW1iaWFuUGlwZU5vdGlmaWVyLmgiCisjaW5jbHVkZSAicWdsb2JhbC5oIgor
I2luY2x1ZGUgPGUzMmJhc2UuaD4KKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorCitjbGFz
cyBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCA6IHB1YmxpYyBDQWN0aXZlIHsKK3B1YmxpYzoKKyAg
ICBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdChSUGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2
ZW50VHlwZSwgaW50LCBRU3ltYmlhblBpcGVOb3RpZmllciopOworICAgIH5TeW1iaWFuUGlwZUFj
dGl2ZU9iamVjdCgpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHNldEVuYWJsZWQoYm9vbCk7
CisgICAgCisgICAgdm9pZCBSdW5MKCk7CisgICAgdm9pZCBEb0NhbmNlbCgpOyAKKworICAgIFJQ
aXBlIG1fcGlwZTsKKyAgICBRU3ltYmlhblBpcGVOb3RpZmllcjo6RXZlbnRUeXBlIG1fdHlwZTsK
KyAgICBpbnQgbV9ieXRlczsgLy8gb25seSB1c2VkIGZvciB3cml0ZSBwaXBlOyAtMSBtZWFucyB1
bnVzZWQKKyAgICAKKyAgICBRU3ltYmlhblBpcGVOb3RpZmllciAqIG1fcGFyZW50OworICAgIGZy
aWVuZCBjbGFzcyBRU3ltYmlhblBpcGVOb3RpZmllcjsKK307CisKKyNlbmRpZiAvLyBTeW1iaWFu
UGlwZUFjdGl2ZU9iamVjdF9oCisKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJ
UEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNwcAkocmV2aXNpb24gODY5Njgp
CisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0YWNobWVudFVuaXgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgorI2lmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogI2luY2x1ZGUgIkF0dGFjaG1l
bnQuaCIKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNDgsMyArNDksNCBAQCB2b2lkIEF0dGFj
aG1lbnQ6OmRpc3Bvc2UoKQogfQogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisjZW5kaWYKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0aW9uVW5peC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0Nv
bm5lY3Rpb25Vbml4LmNwcAkocmV2aXNpb24gODY5NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0
Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NSw2ICsyNSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2lmIFVTRShVTklYX0RP
TUFJTl9TT0NLRVRTKQogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKIAogI2luY2x1ZGUgIkFyZ3Vt
ZW50RW5jb2Rlci5oIgpAQCAtMzk5LDMgKzQwMCw0IEBAIHZvaWQgQ29ubmVjdGlvbjo6c2V0U2hv
dWxkQ2xvc2VDb25uZWN0aW8KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisjZW5k
aWYgCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9TaGFyZWRNZW1v
cnlTeW1iaWFuLmNwcAkocmV2aXNpb24gODY5NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9xdC9TaGFyZWRNZW1vcnlTeW1iaWFuLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksMTcgKzY5
LDYgQEAgYm9vbCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6ZGVjb2RlKENvcmVJUAogICAgIHJldHVy
biB0cnVlOwogfQogCi0vLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIEJ1ZyA1NTg3
NwotQ29yZUlQQzo6QXR0YWNobWVudCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6cmVsZWFzZVRvQXR0
YWNobWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENvcmVJUEM6OkF0dGFjaG1lbnQoLTEsIDAp
OwotfQotCi0vLyBGSVhNRTogVG8gYmUgcmVtb3ZlZCBhcyBwYXJ0IG9mIEJ1ZyA1NTg3Nwotdm9p
ZCBTaGFyZWRNZW1vcnk6OkhhbmRsZTo6YWRvcHRGcm9tQXR0YWNobWVudChpbnQsIHNpemVfdCkK
LXsKLX0KLQogUGFzc1JlZlB0cjxTaGFyZWRNZW1vcnk+IFNoYXJlZE1lbW9yeTo6Y3JlYXRlKHNp
emVfdCBzaXplKQogewogICAgIC8vIE9uIFN5bWJpYW4sIGdsb2JhbCBjaHVua3MgKHNoYXJlZCBt
ZW1vcnkgc2VnbWVudHMpIGhhdmUgc3lzdGVtLXVuaXF1ZSBuYW1lcywgc28gd2UgcGljayBhIHJh
bmRvbQpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAko
cmV2aXNpb24gODY5NjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVR
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDIzIEBAIHB1YmxpYzoKICAgICBXb3Jr
SXRlbSogbV93b3JrSXRlbTsKIH07CiAKKyNpZiBPUyhTWU1CSUFOKQorUVN5bWJpYW5QaXBlTm90
aWZpZXIqIFdvcmtRdWV1ZTo6cmVnaXN0ZXJQaXBlRXZlbnRIYW5kbGVyKFJQaXBlIHBpcGUsIFFT
eW1iaWFuUGlwZU5vdGlmaWVyOjpFdmVudFR5cGUgdHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4g
d29ya0l0ZW0pIAoreworICAgIFFTeW1iaWFuUGlwZU5vdGlmaWVyKiBub3RpZmllciA9IG5ldyBR
U3ltYmlhblBpcGVOb3RpZmllcihwaXBlLCB0eXBlLCAtMSk7CisgICAgIAorICAgIG5vdGlmaWVy
LT5zZXRFbmFibGVkKGZhbHNlKTsKKyAgICBub3RpZmllci0+bW92ZVRvVGhyZWFkKG1fd29ya1Ro
cmVhZCk7CisgICAgCisgICAgV29ya1F1ZXVlOjpXb3JrSXRlbVF0KiBpdGVtUXQgPSBuZXcgV29y
a1F1ZXVlOjpXb3JrSXRlbVF0KHRoaXMsIG5vdGlmaWVyLCBTSUdOQUwocmVhZHlUb1JlYWQoaW50
KSksIHdvcmtJdGVtLmxlYWtQdHIoKSk7CisgICAgCisgICAgaXRlbVF0LT5tb3ZlVG9UaHJlYWQo
bV93b3JrVGhyZWFkKTsgICAgCisgICAgCisgICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7
CisgICAgCisgICAgcmV0dXJuIG5vdGlmaWVyOworfQorI2Vsc2UKIFFTb2NrZXROb3RpZmllciog
V29ya1F1ZXVlOjpyZWdpc3RlclNvY2tldEV2ZW50SGFuZGxlcihpbnQgc29ja2V0RGVzY3JpcHRv
ciwgUVNvY2tldE5vdGlmaWVyOjpUeXBlIHR5cGUsIFBhc3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJ
dGVtKQogewogICAgIEFTU0VSVChtX3dvcmtUaHJlYWQpOwpAQCAtODksNiArMTA2LDcgQEAgUVNv
Y2tldE5vdGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lzdGVyU29jawogICAgIG5vdGlmaWVyLT5zZXRF
bmFibGVkKHRydWUpOwogICAgIHJldHVybiBub3RpZmllcjsKIH0KKyNlbmRpZgogCiB2b2lkIFdv
cmtRdWV1ZTo6cGxhdGZvcm1Jbml0aWFsaXplKGNvbnN0IGNoYXIqKQogewpAQCAtMTIwLDggKzEz
OCwxMyBAQCB2b2lkIFdvcmtRdWV1ZTo6c2NoZWR1bGVXb3JrQWZ0ZXJEZWxheShQCiAKIHZvaWQg
V29ya1F1ZXVlOjpzY2hlZHVsZVdvcmtPblRlcm1pbmF0aW9uKFdlYktpdDo6UGxhdGZvcm1Qcm9j
ZXNzSWRlbnRpZmllciBwcm9jZXNzLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSkKIHsK
KyNpZiBPUyhTWU1CSUFOKQorICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBhIHByb2Nl
c3Mgd2F0Y2hlciB1c2luZyBTeW1iaWFuIFJQcm9jZXNzLgorICAgIG5vdEltcGxlbWVudGVkKCk7
IAorI2Vsc2UKICAgICBXb3JrUXVldWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVl
dWU6OldvcmtJdGVtUXQodGhpcywgcHJvY2VzcywgU0lHTkFMKGZpbmlzaGVkKGludCwgUVByb2Nl
c3M6OkV4aXRTdGF0dXMpKSwgd29ya0l0ZW0ubGVha1B0cigpKTsKICAgICBpdGVtUXQtPm1vdmVU
b1RocmVhZChtX3dvcmtUaHJlYWQpOworI2VuZGlmCiB9CiAKICNpbmNsdWRlICJXb3JrUXVldWVR
dC5tb2MiCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vz
c0xhdW5jaGVyUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9M
YXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAJKHJldmlzaW9uIDg2OTY4KQorKysgU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgorI2lmbmRlZiBRX09TX1NZTUJJQU4KICNp
bmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKIAogI2luY2x1ZGUgIkNvbm5lY3Rpb24uaCIKQEAg
LTM3LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxRTWV0YVR5cGU+CiAjaW5jbHVkZSA8UVByb2Nlc3M+
CiAjaW5jbHVkZSA8UVN0cmluZz4KLSNpbmNsdWRlIDxRdENvcmUvcWdsb2JhbC5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvTm90SW1wbGVtZW50ZWQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1
ZGUgPGZjbnRsLmg+CkBAIC04MywxNiArODQsNiBAQCB2b2lkIFF0V2ViUHJvY2Vzczo6c2V0dXBD
aGlsZFByb2Nlc3MoKQogI2VuZGlmCiB9CiAKLSNpZiBPUyhTWU1CSUFOKQotLy8gRklYTUU6IFN5
bWJpYW4ncyBQT1NJWCBsYXllciBkb2Vzbid0IGhhdmUgYSBzb2NrZXRwYWlyKCksIHNvCi0vLyB0
aGUgZm9sbG93aW5nIGlzIGp1c3QgdG8gZml4IHRoZSBidWlsZCB1bnRpbCBhIHB1cmUgU3ltYmlh
bgotLy8gSVBDIGltcGxlbWVudGF0aW9uIGxhbmRzIG9uIHRydW5rCi1zdGF0aWMgaW50IHNvY2tl
dHBhaXIoaW50LCBpbnQsIGludCAsIGludFsyXSkKLXsKLSAgICByZXR1cm4gLTE7Ci19Ci0jZW5k
aWYKLQogdm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQogewogICAgIFFTdHJp
bmcgYXBwbGljYXRpb25QYXRoID0gUUxhdGluMVN0cmluZygiJTEgJTIiKTsKQEAgLTE2NCwzICsx
NTUsNSBAQCB2b2lkIFByb2Nlc3NMYXVuY2hlcjo6cGxhdGZvcm1JbnZhbGlkYXRlCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKIAogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlclF0Lm1vYyIKKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xh
dW5jaGVyU3ltYmlhbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclN5bWJp
YW4uY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiUHJvY2Vzc0xhdW5j
aGVyLmgiCisKKyNpbmNsdWRlICJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUnVuTG9vcC5oIgor
I2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9ycGlwZS5oIgorI2lu
Y2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlIDxxZ2xvYmFsLmg+CisKK19MSVQoS1dvcmtlclByb2Nl
c3NOYW1lLCAiUXRXZWJQcm9jZXNzLmV4ZSIpOworCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpsYXVuY2hQcm9j
ZXNzKCkKK3sKKyAgICAvLyBNYWtlIGEgcGFpciBvZiBoYWxmLWR1cGxleCBwaXBlcy4KKyAgICBS
UGlwZSogbG9jYWxQaXBlcyA9IG5ldyBSUGlwZVsyXTsgCisgICAgUlBpcGUqIHJlbW90ZVBpcGVz
ID0gbmV3IFJQaXBlWzJdOyAKKyAgICAgCisgICAgUlBpcGU6OkluaXQoKTsKKyAgICAvLyBDcmVh
dGUgYSBwaXBlLiBGaXJzdCBhcmcgaXMgdGhlIHJlYWQtZW5kIFJQaXBlIGFuZCB0aGUgc2Vjb25k
IGlzIHRoZSB3cml0ZS1lbmQuIAorICAgIFJQaXBlOjpDcmVhdGUoQ29yZUlQQzo6Q29ubmVjdGlv
bjo6TWF4UGlwZUNhcGFjaXR5LCByZW1vdGVQaXBlc1swXSwgbG9jYWxQaXBlc1sxXSk7CisgICAg
UlBpcGU6OkNyZWF0ZShDb3JlSVBDOjpDb25uZWN0aW9uOjpNYXhQaXBlQ2FwYWNpdHksIGxvY2Fs
UGlwZXNbMF0sIHJlbW90ZVBpcGVzWzFdKTsKKyAgICAKKyAgICAvLyBQcmVwYXJlIHRvIGxhdW5j
aCB3b3JrZXIgcHJvY2Vzcy4KKyAgICBSUHJvY2Vzcyogd29ya2VyUHJvY2VzcyA9IG5ldyBSUHJv
Y2VzcygpOworICAgIFRJbnQgZXJyb3IgPSB3b3JrZXJQcm9jZXNzLT5DcmVhdGUoS1dvcmtlclBy
b2Nlc3NOYW1lKCksIEtOdWxsRGVzQyk7CisgICAgaWYgKGVycm9yKQorICAgICAgICBxQ3JpdGlj
YWwoKSA8PCAiIEVycm9yIGluaXRpYWxpemluZyBXZWJLaXQyIHdlYiBwcm9jZXNzICIgPDwgZXJy
b3I7CisKKyAgICAvLyBQYXNzIG93bmVyc2hpcCBvZiBwaXBlcyB2aWEgUlByb2Nlc3MnICJlbnZp
cm9ubWVudCBkYXRhIHNsb3RzIi4gCisgICAgLy8gVGhlIGNob2ljZSBvZiAzICYgNCBpcyBhcmJp
dHJhcnkgYW5kIHNob3VsZCBtYXRjaCB0aGUgdXNlIG9uIHRoZSByZWNlaXZpbmcgc2lkZSAoQ29u
bmVjdGlvbi5jcHApLgorICAgIHdvcmtlclByb2Nlc3MtPlNldFBhcmFtZXRlcigzLCByZW1vdGVQ
aXBlc1swXSk7IC8vIHJlYWRlcgorICAgIHdvcmtlclByb2Nlc3MtPlNldFBhcmFtZXRlcig0LCBy
ZW1vdGVQaXBlc1sxXSk7IC8vIHdyaXRlcgorICAgICAgICAgICAgICAgIAorICAgIC8vIEJsb2Nr
IHVudGlsIHRoZSByZW1vdGUgcHJvY2VzcyBpcyB1cC4KKyAgICB3b3JrZXJQcm9jZXNzLT5SZXN1
bWUoKTsKKyAgICBUUmVxdWVzdFN0YXR1cyBsYXVuY2hTdGF0dXM7IAorICAgIHdvcmtlclByb2Nl
c3MtPlJlbmRlenZvdXMobGF1bmNoU3RhdHVzKTsgCisgICAgVXNlcjo6V2FpdEZvclJlcXVlc3Qo
bGF1bmNoU3RhdHVzKTsKKyAgICAKKyAgICBpZiAobGF1bmNoU3RhdHVzLkludCgpICE9IEtFcnJO
b25lKSAKKyAgICAgICAgcUNyaXRpY2FsKCkgPDwgIiBXb3JrZXIgcHJvY2VzcyBmYWlsZWQgdG8g
bGF1bmNoICIgPDwgbGF1bmNoU3RhdHVzLkludCgpOworICAgIAorICAgIC8vIENsb3NlIHRoZSBw
aXBlIGVuZHMgd2UganVzdCBwYXNzZWQgdG8gdGhlIHJlbW90ZS4KKyAgICByZW1vdGVQaXBlc1sw
XS5DbG9zZSgpOyAKKyAgICByZW1vdGVQaXBlc1sxXS5DbG9zZSgpOworICAgIGRlbGV0ZVtdIHJl
bW90ZVBpcGVzOworICAgIAorICAgIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaWRl
bnRpZmllciA9IGxvY2FsUGlwZXM7ICAKKyAgICAKKyAgICAvLyBEZWNsYXJlIGxhdW5jaCBwcm9j
ZXNzIGFzIGRvbmUuIE5vdGUgdGhhdCB0aGlzIGNsYXNzIG93bnMgJ3dvcmtlclByb2Nlc3MnLCBi
dXQgQ29ubmVjdGlvbiBvd25zICdpZGVudGlmaWVyJy4KKyAgICBSdW5Mb29wOjptYWluKCktPnNj
aGVkdWxlV29yayhXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZXZWJLaXQ6OlByb2Nlc3NMYXVuY2hl
cjo6ZGlkRmluaXNoTGF1bmNoaW5nUHJvY2Vzcywgd29ya2VyUHJvY2VzcywgaWRlbnRpZmllcikp
OworfQorCit2b2lkIFByb2Nlc3NMYXVuY2hlcjo6dGVybWluYXRlUHJvY2VzcygpCit7CisgICAg
aWYgKCFtX3Byb2Nlc3NJZGVudGlmaWVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJbXBv
cnRhbnQ6IEtpbGxpbmcgYW5vdGhlciBwcm9jZXNzIChldmVuIGlmIHdlIHNwYXduZWQgaXQpIHJl
cXVpcmVzIFBvd2VyTWFuYWdlbWVudCBjYXBhYmlsaXR5LAorICAgIC8vIHdoaWNoIGlzIGEgaGln
aCBiYXIgdG8ganVtcCBvdmVyIGZvciBhbnkgdXNlciBhcHBsaWNhdGlvbi4gSXQncyBhbHNvIGEg
c2VjdXJpdHkgcmlzay4KKyAgICBSUHJvY2VzcyBtZTsKKyAgICBpZiAobWUuSGFzQ2FwYWJpbGl0
eShFQ2FwYWJpbGl0eVBvd2VyTWdtdCkpCisgICAgICAgIG1fcHJvY2Vzc0lkZW50aWZpZXItPlRl
cm1pbmF0ZShLRXJyTm9uZSk7Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5jaGVyOjpwbGF0Zm9ybUlu
dmFsaWRhdGUoKQoreworICAgIGlmICghbV9wcm9jZXNzSWRlbnRpZmllcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgbV9wcm9jZXNzSWRlbnRpZmllci0+Q2xvc2UoKTsKKyAgICBkZWxldGUgbV9w
cm9jZXNzSWRlbnRpZmllcjsKKyAgICBtX3Byb2Nlc3NJZGVudGlmaWVyID0gMDsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CisKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvTGF1bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCShy
ZXZpc2lvbiA4Njk2OCkKKysrIFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9U
aHJlYWRMYXVuY2hlclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMzEgKzQ3LDQxIEBAIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RhdGljIENv
cmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVy
KCkKK3sgCisgICAgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyOyAK
KyNpZiBPUyhTWU1CSUFOKQorICAgIGlkZW50aWZpZXIgPSAwOyAvLyBpbnZhbGlkIFJQcm9jZXNz
KgorI2Vsc2UKKyAgICBpZGVudGlmaWVyID0gLTE7IC8vIGludmFsaWQgc29ja2V0IGRlc2NyaXB0
b3IKKyNlbmRpZgorICAgIHJldHVybiBpZGVudGlmaWVyOworfQorCiBzdGF0aWMgdm9pZCogd2Vi
VGhyZWFkQm9keSh2b2lkKiAvKiBjb250ZXh0ICovKQogewogICAgIC8vIEluaXRpYWxpemF0aW9u
CiAgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CiAgICAgV1RGOjppbml0aWFsaXplTWFp
blRocmVhZCgpOwogCi0gICAgLy8gRklYTUU6IFdlIGRvIG5vdCBzdXBwb3J0IHRocmVhZGVkIG1v
ZGUgZm9yIG5vdy4KKyAgICAvLyBGSVhNRTogVGhlIFF0IHBvcnQgZG9lcyBub3Qgc3VwcG9ydCB0
aHJlYWRlZCBtb2RlIGZvciBub3cuCiAKLSAgICBXZWJQcm9jZXNzOjpzaGFyZWQoKS5pbml0aWFs
aXplKC0xLCBSdW5Mb29wOjpjdXJyZW50KCkpOworICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmlu
aXRpYWxpemUoaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVyKCksIFJ1bkxvb3A6OmN1cnJlbnQo
KSk7CiAgICAgUnVuTG9vcDo6cnVuKCk7CiAKICAgICByZXR1cm4gMDsKIH0KIAogQ29yZUlQQzo6
Q29ubmVjdGlvbjo6SWRlbnRpZmllciBUaHJlYWRMYXVuY2hlcjo6Y3JlYXRlV2ViVGhyZWFkKCkK
LXsKLSAgICBzcmFuZG9tKHRpbWUoMCkpOwotICAgIGludCBjb25uZWN0aW9uSWRlbnRpZmllciA9
IHJhbmRvbSgpOwotCi0gICAgaWYgKCFjcmVhdGVUaHJlYWQod2ViVGhyZWFkQm9keSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oY29ubmVjdGlvbklkZW50aWZpZXIpLCAiV2ViS2l0MjogV2ViVGhy
ZWFkIikpIHsKK3sgIAorICAgIC8vIEZJWE1FOiBUaGUgUXQgcG9ydCBkb2VzIG5vdCBzdXBwb3J0
IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KKyAgICAKKyAgICBpZiAoIWNyZWF0ZVRocmVhZCh3ZWJU
aHJlYWRCb2R5LCAwLCAiV2ViS2l0MjogV2ViVGhyZWFkIikpIHsKICAgICAgICAgcVdhcm5pbmco
KSA8PCAiZmFpbGVkIHN0YXJ0aW5nIHRocmVhZCI7Ci0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gaW52YWxpZENvbm5lY3Rpb25JZGVudGlmaWVyKCk7CiAgICAgfQogCi0gICAgcmV0
dXJuIGNvbm5lY3Rpb25JZGVudGlmaWVyOworICAgIHJldHVybiBpbnZhbGlkQ29ubmVjdGlvbklk
ZW50aWZpZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJvY2Vzc01haW5RdC5jcHAJKHJldmlzaW9u
IDg2OTY4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiwxMSBAQCBzdGF0aWMgdm9pZCBpbml0
aWFsaXplUHJveHkoKQogCiBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9jZXNzTWFpblF0KGludCBh
cmdjLCBjaGFyKiogYXJndikKIHsKKyNpZiBkZWZpbmVkKFFfT1NfU1lNQklBTikKKyAgICBSUHJv
Y2VzcyBwcm9jZXNzOyAKKyAgICBwcm9jZXNzLlNldFByaW9yaXR5KEVQcmlvcml0eUJhY2tncm91
bmQpOworI2VuZGlmCisgICAgCiAgICAgUUFwcGxpY2F0aW9uOjpzZXRHcmFwaGljc1N5c3RlbShR
TGF0aW4xU3RyaW5nKCJyYXN0ZXIiKSk7CiAgICAgUUFwcGxpY2F0aW9uKiBhcHAgPSBuZXcgUUFw
cGxpY2F0aW9uKGFyZ2MsIGFyZ3YpOwogI2lmbmRlZiBOREVCVUcKQEAgLTE1Myw2ICsxNTgsMTEg
QEAgUV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChpbnQgYQogICAgIFdURjo6aW5p
dGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBSdW5Mb29wOjppbml0aWFsaXplTWFpblJ1bkxvb3Ao
KTsKIAorICAgIENvcmVJUEM6OkNvbm5lY3Rpb246OklkZW50aWZpZXIgaWRlbnRpZmllcjsgCisj
aWYgT1MoU1lNQklBTikKKyAgICAvLyBXZSBvYnRhaW4gdGhlIGhhbmRsZXMgZGlyZWN0bHkgZnJv
bSB0aGUgImVudmlyb25tZW50IGRhdGEgc2xvdHMiIG9mIHRoZSBSUHJvY2VzcworICAgIGlkZW50
aWZpZXIgPSAwOyAKKyNlbHNlCiAgICAgLy8gQ3JlYXRlIHRoZSBjb25uZWN0aW9uLgogICAgIGlm
IChhcHAtPmFyZ3VtZW50cygpLnNpemUoKSA8PSAxKSB7CiAgICAgICAgIHFEZWJ1ZygpIDw8ICJF
cnJvcjogd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4iOwpAQCAtMTYwLDEyICsxNzAsMTMgQEAg
UV9ERUNMX0VYUE9SVCBpbnQgV2ViUHJvY2Vzc01haW5RdChpbnQgYQogICAgIH0KIAogICAgIGJv
b2wgd2FzTnVtYmVyID0gZmFsc2U7Ci0gICAgaW50IGlkZW50aWZpZXIgPSBhcHAtPmFyZ3VtZW50
cygpLmF0KDEpLnRvSW50KCZ3YXNOdW1iZXIsIDEwKTsKKyAgICBpZGVudGlmaWVyID0gYXBwLT5h
cmd1bWVudHMoKS5hdCgxKS50b0ludCgmd2FzTnVtYmVyLCAxMCk7CiAgICAgaWYgKCF3YXNOdW1i
ZXIpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkVycm9yOiBjb25uZWN0aW9uIGlkZW50aWZpZXIg
d3JvbmcuIjsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotCisjZW5kaWYKKyAgICAKICAgICBX
ZWJLaXQ6OldlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoaWRlbnRpZmllciwgUnVuTG9v
cDo6bWFpbigpKTsKIAogICAgIFJ1bkxvb3A6OnJ1bigpOwpJbmRleDogVG9vbHMvTWFrZWZpbGUK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvTWFrZWZpbGUJKHJldmlzaW9uIDg2OTY4KQorKysgVG9vbHMv
TWFrZWZpbGUJKHdvcmtpbmcgY29weSkKQEAgLTEsMTcgKzEsMjE4IEBACi1NT0RVTEVTID0gRHVt
cFJlbmRlclRyZWUgV2ViS2l0VGVzdFJ1bm5lciBNaW5pQnJvd3NlciAuLi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9ndGVzdC94Y29kZSBUZXN0V2ViS2l0QVBJCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBN
YWtlZmlsZSBmb3IgYnVpbGRpbmc6IFRvb2xzCisjIEdlbmVyYXRlZCBieSBxbWFrZSAoMi4wMWEp
IChRdCA0LjcuMikgb246IFdlZCBNYXkgMTggMTI6MDA6NTIgMjAxMQorIyBQcm9qZWN0OiAgVG9v
bHMucHJvCisjIFRlbXBsYXRlOiBzdWJkaXJzCisjIENvbW1hbmQ6IC9ob21lL3NpbWF0aHVyL3Rl
c3RRdFNESy9TeW1iaWFuL1NES3MvU3ltYmlhbjNRdDQ3Mi9iaW4vcW1ha2UgQ09ORklHKz13ZWJr
aXQyIERFRklORVMrPUVOQUJMRV9TVkc9MCBPVVRQVVRfRElSPS9ob21lL3NpbWF0aHVyL1dlYktp
dC9Tb3VyY2UgQ09ORklHKz1yZWxlYXNlIENPTkZJRy09ZGVidWcgLW8gYmxkLmluZiBUb29scy5w
cm8KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK01BS0VGSUxFICAgICAgICAgID0gTWFrZWZpbGUK
K1FNQUtFICAgICAgICAgICAgID0gL2hvbWUvc2ltYXRodXIvdGVzdFF0U0RLL1N5bWJpYW4vU0RL
cy9TeW1iaWFuM1F0NDcyL2Jpbi9xbWFrZQorREVMX0ZJTEUgICAgICAgICAgPSBybSAtZgorREVM
X0RJUiAgICAgICAgICAgPSBybWRpcgorQ0hLX0RJUl9FWElTVFMgICAgPSB0ZXN0IC1kCitNS0RJ
UiAgICAgICAgICAgICA9IG1rZGlyIC1wCitNT1ZFICAgICAgICAgICAgICA9IG12CitERUJVR19Q
TEFURk9STVMgICA9IHdpbnNjdyBnY2NlIGFybXY1IGFybXY2CitSRUxFQVNFX1BMQVRGT1JNUyA9
IGdjY2UgYXJtdjUgYXJtdjYKK01BS0UgICAgICAgICAgICAgID0gbWFrZQorU0JTICAgICAgICAg
ICAgICAgPSBzYnMKKworREVGSU5FUwkgPSAtRFNZTUJJQU4gLURVTklDT0RFIC1EUVRfS0VZUEFE
X05BVklHQVRJT04gLURRVF9TT0ZUS0VZU19FTkFCTEVEIC1EUVRfVVNFX01BVEhfSF9GTE9BVFMg
LURFTkFCTEVfU1ZHPTAgLURFTkFCTEVfSkFWQVNDUklQVF9ERUJVR0dFUj0xIC1ERU5BQkxFX0RB
VEFCQVNFPTEgLURFTkFCTEVfRVZFTlRTT1VSQ0U9MSAtREVOQUJMRV9PRkZMSU5FX1dFQl9BUFBM
SUNBVElPTlM9MSAtREVOQUJMRV9ET01fU1RPUkFHRT0xIC1ERU5BQkxFX0lDT05EQVRBQkFTRT0x
IC1ERU5BQkxFX0NIQU5ORUxfTUVTU0FHSU5HPTEgLURFTkFCTEVfRElSRUNUT1JZX1VQTE9BRD0w
IC1ERU5BQkxFX0ZJTEVfU1lTVEVNPTAgLURFTkFCTEVfUVVPVEE9MCAtREVOQUJMRV9TUUxJVEU9
MSAtREVOQUJMRV9EQVNIQk9BUkRfU1VQUE9SVD0wIC1ERU5BQkxFX0ZJTFRFUlM9MSAtREVOQUJM
RV9YUEFUSD0xIC1ERU5BQkxFX1dDU1M9MCAtREVOQUJMRV9TSEFSRURfV09SS0VSUz0xIC1ERU5B
QkxFX1dPUktFUlM9MSAtREVOQUJMRV9YSFRNTE1QPTAgLURFTkFCTEVfREVUQUlMUz0xIC1ERU5B
QkxFX01FVEVSX1RBRz0xIC1ERU5BQkxFX1BST0dSRVNTX1RBRz0xIC1ERU5BQkxFX0JMT0I9MSAt
REVOQUJMRV9OT1RJRklDQVRJT05TPTEgLURFTkFCTEVfSU5QVVRfU1BFRUNIPTAgLURFTkFCTEVf
SU5TUEVDVE9SPTEgLURFTkFCTEVfM0RfUkVOREVSSU5HPTEgLURFTkFCTEVfV0VCX0FVRElPPTAg
LURFTkFCTEVfV0VCR0w9MCAtREVOQUJMRV9NRURJQV9TVEFUSVNUSUNTPTAgLURFTkFCTEVfVklE
RU9fVFJBQ0s9MCAtREVOQUJMRV9UT1VDSF9JQ09OX0xPQURJTkc9MCAtREVOQUJMRV9BTklNQVRJ
T05fQVBJPTAgLURFTkFCTEVfU1ZHX0ZPTlRTPTAgLURFTkFCTEVfU1ZHX0ZPUkVJR05fT0JKRUNU
PTAgLURFTkFCTEVfU1ZHX0FOSU1BVElPTj0wIC1ERU5BQkxFX1NWR19BU19JTUFHRT0wIC1ERU5B
QkxFX1NWR19VU0U9MCAtREVOQUJMRV9EQVRBTElTVD0xIC1ERU5BQkxFX1RJTEVEX0JBQ0tJTkdf
U1RPUkU9MSAtREVOQUJMRV9ORVRTQ0FQRV9QTFVHSU5fQVBJPTEgLURFTkFCTEVfV0VCX1NPQ0tF
VFM9MSAtREVOQUJMRV9XRUJfVElNSU5HPTEgLURFTkFCTEVfWFNMVD0xIC1ERU5BQkxFX0dFT0xP
Q0FUSU9OPTEgLURFTkFCTEVfQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OPTEgLURFTkFCTEVfT1JJ
RU5UQVRJT05fRVZFTlRTPTEgLURFTkFCTEVfREVWSUNFX09SSUVOVEFUSU9OPTEgLURXVEZfVVNF
X1FUX01PQklMSVRZX1NZU1RFTUlORk89MSAtRFdURl9VU0VfUVRfQkVBUkVSPTEgLURFTkFCTEVf
VE9VQ0hfRVZFTlRTPTEgLURFTkFCTEVfVklERU89MSAtRFdURl9VU0VfUVRfTVVMVElNRURJQT0x
IC1EUVRfTk9fREVCVUcgLURRVF9HVUlfTElCIC1EUVRfQ09SRV9MSUIKK0lOQ1BBVEgJID0gIC1J
Ii9ob21lL3NpbWF0aHVyL3Rlc3RRdFNESy9TeW1iaWFuL1NES3MvU3ltYmlhbjNRdDQ3Mi9pbmNs
dWRlL1F0Q29yZSIgIC1JIi9ob21lL3NpbWF0aHVyL3Rlc3RRdFNESy9TeW1iaWFuL1NES3MvU3lt
YmlhbjNRdDQ3Mi9pbmNsdWRlL1F0R3VpIiAgLUkiL2hvbWUvc2ltYXRodXIvdGVzdFF0U0RLL1N5
bWJpYW4vU0RLcy9TeW1iaWFuM1F0NDcyL2luY2x1ZGUiICAtSSIvaG9tZS9zaW1hdGh1ci90ZXN0
UXRTREsvU3ltYmlhbi9TREtzL1N5bWJpYW4zUXQ0NzIvaW5jbHVkZS9RdFNlbnNvcnMiICAtSSIv
aG9tZS9zaW1hdGh1ci90ZXN0UXRTREsvU3ltYmlhbi9TREtzL1N5bWJpYW4zUXQ0NzIvbWtzcGVj
cy9jb21tb24vc3ltYmlhbiIgIC1JIi9ob21lL3NpbWF0aHVyL3Rlc3RRdFNESy9TeW1iaWFuL1NE
S3MvU3ltYmlhbjNRdDQ3Mi9lcG9jMzIvaW5jbHVkZSIgIC1JIi9ob21lL3NpbWF0aHVyL3Rlc3RR
dFNESy9TeW1iaWFuL1NES3MvU3ltYmlhbjNRdDQ3Mi9lcG9jMzIvaW5jbHVkZS9zdGRhcGlzIiAg
LUkiL2hvbWUvc2ltYXRodXIvdGVzdFF0U0RLL1N5bWJpYW4vU0RLcy9TeW1iaWFuM1F0NDcyL2Vw
b2MzMi9pbmNsdWRlL3N0ZGFwaXMvc3lzIiAgLUkiL2hvbWUvc2ltYXRodXIvdGVzdFF0U0RLL1N5
bWJpYW4vU0RLcy9TeW1iaWFuM1F0NDcyL2Vwb2MzMi9pbmNsdWRlL213IiAgLUkiL2hvbWUvc2lt
YXRodXIvdGVzdFF0U0RLL1N5bWJpYW4vU0RLcy9TeW1iaWFuM1F0NDcyL2Vwb2MzMi9pbmNsdWRl
L3BsYXRmb3JtL213IiAgLUkiL2hvbWUvc2ltYXRodXIvdGVzdFF0U0RLL1N5bWJpYW4vU0RLcy9T
eW1iaWFuM1F0NDcyL2Vwb2MzMi9pbmNsdWRlL3BsYXRmb3JtIiAgLUkiL2hvbWUvc2ltYXRodXIv
dGVzdFF0U0RLL1N5bWJpYW4vU0RLcy9TeW1iaWFuM1F0NDcyL2Vwb2MzMi9pbmNsdWRlL3BsYXRm
b3JtL2xvYyIgIC1JIi9ob21lL3NpbWF0aHVyL3Rlc3RRdFNESy9TeW1iaWFuL1NES3MvU3ltYmlh
bjNRdDQ3Mi9lcG9jMzIvaW5jbHVkZS9wbGF0Zm9ybS9tdy9sb2MiICAtSSIvaG9tZS9zaW1hdGh1
ci90ZXN0UXRTREsvU3ltYmlhbi9TREtzL1N5bWJpYW4zUXQ0NzIvZXBvYzMyL2luY2x1ZGUvcGxh
dGZvcm0vbG9jL3NjIiAgLUkiL2hvbWUvc2ltYXRodXIvdGVzdFF0U0RLL1N5bWJpYW4vU0RLcy9T
eW1iaWFuM1F0NDcyL2Vwb2MzMi9pbmNsdWRlL3BsYXRmb3JtL213L2xvYy9zYyIgIC1JIi9RdE1v
YmlsaXR5IiAgLUkiL1F0U2Vuc29ycyIgIC1JIi9ob21lL3NpbWF0aHVyL3Rlc3RRdFNESy9TeW1i
aWFuL1NES3MvU3ltYmlhbjNRdDQ3Mi9lcG9jMzIvaW5jbHVkZS9zdGRhcGlzL3N0bHBvcnR2NSIg
IC1JIi9ob21lL3NpbWF0aHVyL1dlYktpdC9Ub29scyIgCitmaXJzdDogZGVmYXVsdAorCithbGw6
IGRlYnVnIHJlbGVhc2UKKworZGVmYXVsdDogZGVidWctd2luc2N3CitxbWFrZToKKwkkKFFNQUtF
KSAiL2hvbWUvc2ltYXRodXIvV2ViS2l0L1Rvb2xzL1Rvb2xzLnBybyIgIENPTkZJRys9d2Via2l0
MiBERUZJTkVTKz1FTkFCTEVfU1ZHPTAgT1VUUFVUX0RJUj0vaG9tZS9zaW1hdGh1ci9XZWJLaXQv
U291cmNlIENPTkZJRys9cmVsZWFzZSBDT05GSUctPWRlYnVnCisKK2JsZC5pbmY6IC9ob21lL3Np
bWF0aHVyL1dlYktpdC9Ub29scy9Ub29scy5wcm8KKwkkKFFNQUtFKSAiL2hvbWUvc2ltYXRodXIv
V2ViS2l0L1Rvb2xzL1Rvb2xzLnBybyIgIENPTkZJRys9d2Via2l0MiBERUZJTkVTKz1FTkFCTEVf
U1ZHPTAgT1VUUFVUX0RJUj0vaG9tZS9zaW1hdGh1ci9XZWJLaXQvU291cmNlIENPTkZJRys9cmVs
ZWFzZSBDT05GSUctPWRlYnVnCisKK2RlYnVnOiBibGQuaW5mCisJJChTQlMpIC1jIHdpbnNjd191
ZGViLm13Y2NpbmMgLWMgYXJtdjVfdWRlYiAtYyBhcm12Nl91ZGViCitjbGVhbi1kZWJ1ZzogYmxk
LmluZgorCSQoU0JTKSByZWFsbHljbGVhbiAtLXRvb2xjaGVjaz1vZmYgLWMgd2luc2N3X3VkZWIu
bXdjY2luYyAtYyBhcm12NV91ZGViIC1jIGFybXY2X3VkZWIKK2ZyZWV6ZS1kZWJ1ZzogYmxkLmlu
ZgorCSQoU0JTKSBmcmVlemUgLWMgd2luc2N3X3VkZWIubXdjY2luYyAtYyBhcm12NV91ZGViIC1j
IGFybXY2X3VkZWIKK3JlbGVhc2U6IGJsZC5pbmYKKwkkKFNCUykgLWMgYXJtdjVfdXJlbCAtYyBh
cm12Nl91cmVsCitjbGVhbi1yZWxlYXNlOiBibGQuaW5mCisJJChTQlMpIHJlYWxseWNsZWFuIC0t
dG9vbGNoZWNrPW9mZiAtYyBhcm12NV91cmVsIC1jIGFybXY2X3VyZWwKK2ZyZWV6ZS1yZWxlYXNl
OiBibGQuaW5mCisJJChTQlMpIGZyZWV6ZSAtYyBhcm12NV91cmVsIC1jIGFybXY2X3VyZWwKKwor
ZGVidWctd2luc2N3OiBibGQuaW5mCisJJChTQlMpIC1jIHdpbnNjd191ZGViLm13Y2NpbmMKK2Ns
ZWFuLWRlYnVnLXdpbnNjdzogYmxkLmluZgorCSQoU0JTKSByZWFsbHljbGVhbiAtYyB3aW5zY3df
dWRlYi5td2NjaW5jCitmcmVlemUtZGVidWctd2luc2N3OiBibGQuaW5mCisJJChTQlMpIGZyZWV6
ZSAtYyB3aW5zY3dfdWRlYi5td2NjaW5jCitkZWJ1Zy1nY2NlOiBibGQuaW5mCisJJChTQlMpIC1j
IGFybS52NS51ZGViLmdjY2U0XzRfMQorY2xlYW4tZGVidWctZ2NjZTogYmxkLmluZgorCSQoU0JT
KSByZWFsbHljbGVhbiAtYyBhcm0udjUudWRlYi5nY2NlNF80XzEKK2ZyZWV6ZS1kZWJ1Zy1nY2Nl
OiBibGQuaW5mCisJJChTQlMpIGZyZWV6ZSAtYyBhcm0udjUudWRlYi5nY2NlNF80XzEKK2RlYnVn
LWFybXY1OiBibGQuaW5mCisJJChTQlMpIC1jIGFybXY1X3VkZWIKK2NsZWFuLWRlYnVnLWFybXY1
OiBibGQuaW5mCisJJChTQlMpIHJlYWxseWNsZWFuIC1jIGFybXY1X3VkZWIKK2ZyZWV6ZS1kZWJ1
Zy1hcm12NTogYmxkLmluZgorCSQoU0JTKSBmcmVlemUgLWMgYXJtdjVfdWRlYgorZGVidWctYXJt
djY6IGJsZC5pbmYKKwkkKFNCUykgLWMgYXJtdjZfdWRlYgorY2xlYW4tZGVidWctYXJtdjY6IGJs
ZC5pbmYKKwkkKFNCUykgcmVhbGx5Y2xlYW4gLWMgYXJtdjZfdWRlYgorZnJlZXplLWRlYnVnLWFy
bXY2OiBibGQuaW5mCisJJChTQlMpIGZyZWV6ZSAtYyBhcm12Nl91ZGViCityZWxlYXNlLWdjY2U6
IGJsZC5pbmYKKwkkKFNCUykgLWMgYXJtLnY1LnVyZWwuZ2NjZTRfNF8xCitjbGVhbi1yZWxlYXNl
LWdjY2U6IGJsZC5pbmYKKwkkKFNCUykgcmVhbGx5Y2xlYW4gLWMgYXJtLnY1LnVyZWwuZ2NjZTRf
NF8xCitmcmVlemUtcmVsZWFzZS1nY2NlOiBibGQuaW5mCisJJChTQlMpIGZyZWV6ZSAtYyBhcm0u
djUudXJlbC5nY2NlNF80XzEKK3JlbGVhc2UtYXJtdjU6IGJsZC5pbmYKKwkkKFNCUykgLWMgYXJt
djVfdXJlbAorY2xlYW4tcmVsZWFzZS1hcm12NTogYmxkLmluZgorCSQoU0JTKSByZWFsbHljbGVh
biAtYyBhcm12NV91cmVsCitmcmVlemUtcmVsZWFzZS1hcm12NTogYmxkLmluZgorCSQoU0JTKSBm
cmVlemUgLWMgYXJtdjVfdXJlbAorcmVsZWFzZS1hcm12NjogYmxkLmluZgorCSQoU0JTKSAtYyBh
cm12Nl91cmVsCitjbGVhbi1yZWxlYXNlLWFybXY2OiBibGQuaW5mCisJJChTQlMpIHJlYWxseWNs
ZWFuIC1jIGFybXY2X3VyZWwKK2ZyZWV6ZS1yZWxlYXNlLWFybXY2OiBibGQuaW5mCisJJChTQlMp
IGZyZWV6ZSAtYyBhcm12Nl91cmVsCitkZWJ1Zy1hcm12NS1ydmN0NC4wOiBibGQuaW5mCisJJChT
QlMpIC1jIGFybS52NS51ZGViLnJ2Y3Q0XzAKK2NsZWFuLWRlYnVnLWFybXY1LXJ2Y3Q0LjA6IGJs
ZC5pbmYKKwkkKFNCUykgcmVhbGx5Y2xlYW4gLWMgYXJtLnY1LnVkZWIucnZjdDRfMAorZnJlZXpl
LWRlYnVnLWFybXY1LXJ2Y3Q0LjA6IGJsZC5pbmYKKwkkKFNCUykgZnJlZXplIC1jIGFybS52NS51
ZGViLnJ2Y3Q0XzAKK3JlbGVhc2UtYXJtdjUtcnZjdDQuMDogYmxkLmluZgorCSQoU0JTKSAtYyBh
cm0udjUudXJlbC5ydmN0NF8wCitjbGVhbi1yZWxlYXNlLWFybXY1LXJ2Y3Q0LjA6IGJsZC5pbmYK
KwkkKFNCUykgcmVhbGx5Y2xlYW4gLWMgYXJtLnY1LnVyZWwucnZjdDRfMAorZnJlZXplLXJlbGVh
c2UtYXJtdjUtcnZjdDQuMDogYmxkLmluZgorCSQoU0JTKSBmcmVlemUgLWMgYXJtLnY1LnVyZWwu
cnZjdDRfMAorZGVidWctYXJtdjUtZ2NjZTQuNC4xOiBibGQuaW5mCisJJChTQlMpIC1jIGFybS52
NS51ZGViLmdjY2U0XzRfMQorY2xlYW4tZGVidWctYXJtdjUtZ2NjZTQuNC4xOiBibGQuaW5mCisJ
JChTQlMpIHJlYWxseWNsZWFuIC1jIGFybS52NS51ZGViLmdjY2U0XzRfMQorZnJlZXplLWRlYnVn
LWFybXY1LWdjY2U0LjQuMTogYmxkLmluZgorCSQoU0JTKSBmcmVlemUgLWMgYXJtLnY1LnVkZWIu
Z2NjZTRfNF8xCityZWxlYXNlLWFybXY1LWdjY2U0LjQuMTogYmxkLmluZgorCSQoU0JTKSAtYyBh
cm0udjUudXJlbC5nY2NlNF80XzEKK2NsZWFuLXJlbGVhc2UtYXJtdjUtZ2NjZTQuNC4xOiBibGQu
aW5mCisJJChTQlMpIHJlYWxseWNsZWFuIC1jIGFybS52NS51cmVsLmdjY2U0XzRfMQorZnJlZXpl
LXJlbGVhc2UtYXJtdjUtZ2NjZTQuNC4xOiBibGQuaW5mCisJJChTQlMpIGZyZWV6ZSAtYyBhcm0u
djUudXJlbC5nY2NlNF80XzEKK2RlYnVnLWFybXY2LXJ2Y3Q0LjA6IGJsZC5pbmYKKwkkKFNCUykg
LWMgYXJtLnY2LnVkZWIucnZjdDRfMAorY2xlYW4tZGVidWctYXJtdjYtcnZjdDQuMDogYmxkLmlu
ZgorCSQoU0JTKSByZWFsbHljbGVhbiAtYyBhcm0udjYudWRlYi5ydmN0NF8wCitmcmVlemUtZGVi
dWctYXJtdjYtcnZjdDQuMDogYmxkLmluZgorCSQoU0JTKSBmcmVlemUgLWMgYXJtLnY2LnVkZWIu
cnZjdDRfMAorcmVsZWFzZS1hcm12Ni1ydmN0NC4wOiBibGQuaW5mCisJJChTQlMpIC1jIGFybS52
Ni51cmVsLnJ2Y3Q0XzAKK2NsZWFuLXJlbGVhc2UtYXJtdjYtcnZjdDQuMDogYmxkLmluZgorCSQo
U0JTKSByZWFsbHljbGVhbiAtYyBhcm0udjYudXJlbC5ydmN0NF8wCitmcmVlemUtcmVsZWFzZS1h
cm12Ni1ydmN0NC4wOiBibGQuaW5mCisJJChTQlMpIGZyZWV6ZSAtYyBhcm0udjYudXJlbC5ydmN0
NF8wCitkZWJ1Zy1hcm12Ni1nY2NlNC40LjE6IGJsZC5pbmYKKwkkKFNCUykgLWMgYXJtLnY2LnVk
ZWIuZ2NjZTRfNF8xCitjbGVhbi1kZWJ1Zy1hcm12Ni1nY2NlNC40LjE6IGJsZC5pbmYKKwkkKFNC
UykgcmVhbGx5Y2xlYW4gLWMgYXJtLnY2LnVkZWIuZ2NjZTRfNF8xCitmcmVlemUtZGVidWctYXJt
djYtZ2NjZTQuNC4xOiBibGQuaW5mCisJJChTQlMpIGZyZWV6ZSAtYyBhcm0udjYudWRlYi5nY2Nl
NF80XzEKK3JlbGVhc2UtYXJtdjYtZ2NjZTQuNC4xOiBibGQuaW5mCisJJChTQlMpIC1jIGFybS52
Ni51cmVsLmdjY2U0XzRfMQorY2xlYW4tcmVsZWFzZS1hcm12Ni1nY2NlNC40LjE6IGJsZC5pbmYK
KwkkKFNCUykgcmVhbGx5Y2xlYW4gLWMgYXJtLnY2LnVyZWwuZ2NjZTRfNF8xCitmcmVlemUtcmVs
ZWFzZS1hcm12Ni1nY2NlNC40LjE6IGJsZC5pbmYKKwkkKFNCUykgZnJlZXplIC1jIGFybS52Ni51
cmVsLmdjY2U0XzRfMQorCitleHBvcnQ6IGJsZC5pbmYKKwkkKFNCUykgZXhwb3J0IC1jIHdpbnNj
d191ZGViLm13Y2NpbmMgLWMgYXJtdjVfdWRlYiAtYyBhcm12Nl91ZGViIC1jIGFybXY1X3VyZWwg
LWMgYXJtdjZfdXJlbAorCitjbGVhbmV4cG9ydDogYmxkLmluZgorCSQoU0JTKSBjbGVhbmV4cG9y
dCAtYyB3aW5zY3dfdWRlYi5td2NjaW5jIC1jIGFybXY1X3VkZWIgLWMgYXJtdjZfdWRlYiAtYyBh
cm12NV91cmVsIC1jIGFybXY2X3VyZWwKKworZnJlZXplOiBmcmVlemUtcmVsZWFzZQorCitRdFRl
c3RCcm93c2VyLyQoTUFLRUZJTEUpOiAKKwlAJChDSEtfRElSX0VYSVNUUykgUXRUZXN0QnJvd3Nl
ci8gfHwgJChNS0RJUikgUXRUZXN0QnJvd3Nlci8gCisJY2QgUXRUZXN0QnJvd3Nlci8gJiYgJChR
TUFLRSkgL2hvbWUvc2ltYXRodXIvV2ViS2l0L1Rvb2xzL1F0VGVzdEJyb3dzZXIvUXRUZXN0QnJv
d3Nlci5wcm8gQ09ORklHKz13ZWJraXQyIERFRklORVMrPUVOQUJMRV9TVkc9MCBPVVRQVVRfRElS
PS9ob21lL3NpbWF0aHVyL1dlYktpdC9Tb3VyY2UgQ09ORklHKz1yZWxlYXNlIENPTkZJRy09ZGVi
dWcgLW8gJChNQUtFRklMRSkKK3N1Yi1RdFRlc3RCcm93c2VyLVF0VGVzdEJyb3dzZXItcHJvLXFt
YWtlX2FsbDogIEZPUkNFCisJQCQoQ0hLX0RJUl9FWElTVFMpIFF0VGVzdEJyb3dzZXIvIHx8ICQo
TUtESVIpIFF0VGVzdEJyb3dzZXIvIAorCWNkIFF0VGVzdEJyb3dzZXIvICYmICQoUU1BS0UpIC9o
b21lL3NpbWF0aHVyL1dlYktpdC9Ub29scy9RdFRlc3RCcm93c2VyL1F0VGVzdEJyb3dzZXIucHJv
IENPTkZJRys9d2Via2l0MiBERUZJTkVTKz1FTkFCTEVfU1ZHPTAgT1VUUFVUX0RJUj0vaG9tZS9z
aW1hdGh1ci9XZWJLaXQvU291cmNlIENPTkZJRys9cmVsZWFzZSBDT05GSUctPWRlYnVnIC1vICQo
TUFLRUZJTEUpCitzdWItUXRUZXN0QnJvd3Nlci1RdFRlc3RCcm93c2VyLXBybzogUXRUZXN0QnJv
d3Nlci8kKE1BS0VGSUxFKSBGT1JDRQorCWNkIFF0VGVzdEJyb3dzZXIvICYmICQoTUFLRSkgLWYg
JChNQUtFRklMRSkKK0R1bXBSZW5kZXJUcmVlL3F0LyQoTUFLRUZJTEUpLkR1bXBSZW5kZXJUcmVl
OiAKKwlAJChDSEtfRElSX0VYSVNUUykgRHVtcFJlbmRlclRyZWUvcXQvIHx8ICQoTUtESVIpIER1
bXBSZW5kZXJUcmVlL3F0LyAKKwljZCBEdW1wUmVuZGVyVHJlZS9xdC8gJiYgJChRTUFLRSkgL2hv
bWUvc2ltYXRodXIvV2ViS2l0L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3F0L0R1bXBSZW5kZXJUcmVl
LnBybyBDT05GSUcrPXdlYmtpdDIgREVGSU5FUys9RU5BQkxFX1NWRz0wIE9VVFBVVF9ESVI9L2hv
bWUvc2ltYXRodXIvV2ViS2l0L1NvdXJjZSBDT05GSUcrPXJlbGVhc2UgQ09ORklHLT1kZWJ1ZyAt
byAkKE1BS0VGSUxFKS5EdW1wUmVuZGVyVHJlZQorc3ViLUR1bXBSZW5kZXJUcmVlLXF0LUR1bXBS
ZW5kZXJUcmVlLXByby1xbWFrZV9hbGw6ICBGT1JDRQorCUAkKENIS19ESVJfRVhJU1RTKSBEdW1w
UmVuZGVyVHJlZS9xdC8gfHwgJChNS0RJUikgRHVtcFJlbmRlclRyZWUvcXQvIAorCWNkIER1bXBS
ZW5kZXJUcmVlL3F0LyAmJiAkKFFNQUtFKSAvaG9tZS9zaW1hdGh1ci9XZWJLaXQvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvRHVtcFJlbmRlclRyZWUucHJvIENPTkZJRys9d2Via2l0MiBERUZJTkVT
Kz1FTkFCTEVfU1ZHPTAgT1VUUFVUX0RJUj0vaG9tZS9zaW1hdGh1ci9XZWJLaXQvU291cmNlIENP
TkZJRys9cmVsZWFzZSBDT05GSUctPWRlYnVnIC1vICQoTUFLRUZJTEUpLkR1bXBSZW5kZXJUcmVl
CitzdWItRHVtcFJlbmRlclRyZWUtcXQtRHVtcFJlbmRlclRyZWUtcHJvOiBEdW1wUmVuZGVyVHJl
ZS9xdC8kKE1BS0VGSUxFKS5EdW1wUmVuZGVyVHJlZSBGT1JDRQorCWNkIER1bXBSZW5kZXJUcmVl
L3F0LyAmJiAkKE1BS0UpIC1mICQoTUFLRUZJTEUpLkR1bXBSZW5kZXJUcmVlCitEdW1wUmVuZGVy
VHJlZS9xdC8kKE1BS0VGSUxFKS5JbWFnZURpZmY6IAorCUAkKENIS19ESVJfRVhJU1RTKSBEdW1w
UmVuZGVyVHJlZS9xdC8gfHwgJChNS0RJUikgRHVtcFJlbmRlclRyZWUvcXQvIAorCWNkIER1bXBS
ZW5kZXJUcmVlL3F0LyAmJiAkKFFNQUtFKSAvaG9tZS9zaW1hdGh1ci9XZWJLaXQvVG9vbHMvRHVt
cFJlbmRlclRyZWUvcXQvSW1hZ2VEaWZmLnBybyBDT05GSUcrPXdlYmtpdDIgREVGSU5FUys9RU5B
QkxFX1NWRz0wIE9VVFBVVF9ESVI9L2hvbWUvc2ltYXRodXIvV2ViS2l0L1NvdXJjZSBDT05GSUcr
PXJlbGVhc2UgQ09ORklHLT1kZWJ1ZyAtbyAkKE1BS0VGSUxFKS5JbWFnZURpZmYKK3N1Yi1EdW1w
UmVuZGVyVHJlZS1xdC1JbWFnZURpZmYtcHJvLXFtYWtlX2FsbDogIEZPUkNFCisJQCQoQ0hLX0RJ
Ul9FWElTVFMpIER1bXBSZW5kZXJUcmVlL3F0LyB8fCAkKE1LRElSKSBEdW1wUmVuZGVyVHJlZS9x
dC8gCisJY2QgRHVtcFJlbmRlclRyZWUvcXQvICYmICQoUU1BS0UpIC9ob21lL3NpbWF0aHVyL1dl
YktpdC9Ub29scy9EdW1wUmVuZGVyVHJlZS9xdC9JbWFnZURpZmYucHJvIENPTkZJRys9d2Via2l0
MiBERUZJTkVTKz1FTkFCTEVfU1ZHPTAgT1VUUFVUX0RJUj0vaG9tZS9zaW1hdGh1ci9XZWJLaXQv
U291cmNlIENPTkZJRys9cmVsZWFzZSBDT05GSUctPWRlYnVnIC1vICQoTUFLRUZJTEUpLkltYWdl
RGlmZgorc3ViLUR1bXBSZW5kZXJUcmVlLXF0LUltYWdlRGlmZi1wcm86IER1bXBSZW5kZXJUcmVl
L3F0LyQoTUFLRUZJTEUpLkltYWdlRGlmZiBGT1JDRQorCWNkIER1bXBSZW5kZXJUcmVlL3F0LyAm
JiAkKE1BS0UpIC1mICQoTUFLRUZJTEUpLkltYWdlRGlmZgorTWluaUJyb3dzZXIvcXQvJChNQUtF
RklMRSkuTWluaUJyb3dzZXI6IAorCUAkKENIS19ESVJfRVhJU1RTKSBNaW5pQnJvd3Nlci9xdC8g
fHwgJChNS0RJUikgTWluaUJyb3dzZXIvcXQvIAorCWNkIE1pbmlCcm93c2VyL3F0LyAmJiAkKFFN
QUtFKSAvaG9tZS9zaW1hdGh1ci9XZWJLaXQvVG9vbHMvTWluaUJyb3dzZXIvcXQvTWluaUJyb3dz
ZXIucHJvIENPTkZJRys9d2Via2l0MiBERUZJTkVTKz1FTkFCTEVfU1ZHPTAgT1VUUFVUX0RJUj0v
aG9tZS9zaW1hdGh1ci9XZWJLaXQvU291cmNlIENPTkZJRys9cmVsZWFzZSBDT05GSUctPWRlYnVn
IC1vICQoTUFLRUZJTEUpLk1pbmlCcm93c2VyCitzdWItTWluaUJyb3dzZXItcXQtTWluaUJyb3dz
ZXItcHJvLXFtYWtlX2FsbDogIEZPUkNFCisJQCQoQ0hLX0RJUl9FWElTVFMpIE1pbmlCcm93c2Vy
L3F0LyB8fCAkKE1LRElSKSBNaW5pQnJvd3Nlci9xdC8gCisJY2QgTWluaUJyb3dzZXIvcXQvICYm
ICQoUU1BS0UpIC9ob21lL3NpbWF0aHVyL1dlYktpdC9Ub29scy9NaW5pQnJvd3Nlci9xdC9NaW5p
QnJvd3Nlci5wcm8gQ09ORklHKz13ZWJraXQyIERFRklORVMrPUVOQUJMRV9TVkc9MCBPVVRQVVRf
RElSPS9ob21lL3NpbWF0aHVyL1dlYktpdC9Tb3VyY2UgQ09ORklHKz1yZWxlYXNlIENPTkZJRy09
ZGVidWcgLW8gJChNQUtFRklMRSkuTWluaUJyb3dzZXIKK3N1Yi1NaW5pQnJvd3Nlci1xdC1NaW5p
QnJvd3Nlci1wcm86IE1pbmlCcm93c2VyL3F0LyQoTUFLRUZJTEUpLk1pbmlCcm93c2VyIEZPUkNF
CisJY2QgTWluaUJyb3dzZXIvcXQvICYmICQoTUFLRSkgLWYgJChNQUtFRklMRSkuTWluaUJyb3dz
ZXIKKworCitzdWItUXRUZXN0QnJvd3Nlci1RdFRlc3RCcm93c2VyLXByby1jaGVjazogUXRUZXN0
QnJvd3Nlci8kKE1BS0VGSUxFKQorCWNkIFF0VGVzdEJyb3dzZXIvICYmICQoTUFLRSkgY2hlY2sK
K3N1Yi1EdW1wUmVuZGVyVHJlZS1xdC1EdW1wUmVuZGVyVHJlZS1wcm8tY2hlY2s6IER1bXBSZW5k
ZXJUcmVlL3F0LyQoTUFLRUZJTEUpLkR1bXBSZW5kZXJUcmVlCisJY2QgRHVtcFJlbmRlclRyZWUv
cXQvICYmICQoTUFLRSkgLWYgJChNQUtFRklMRSkuRHVtcFJlbmRlclRyZWUgY2hlY2sKK3N1Yi1E
dW1wUmVuZGVyVHJlZS1xdC1JbWFnZURpZmYtcHJvLWNoZWNrOiBEdW1wUmVuZGVyVHJlZS9xdC8k
KE1BS0VGSUxFKS5JbWFnZURpZmYKKwljZCBEdW1wUmVuZGVyVHJlZS9xdC8gJiYgJChNQUtFKSAt
ZiAkKE1BS0VGSUxFKS5JbWFnZURpZmYgY2hlY2sKK3N1Yi1NaW5pQnJvd3Nlci1xdC1NaW5pQnJv
d3Nlci1wcm8tY2hlY2s6IE1pbmlCcm93c2VyL3F0LyQoTUFLRUZJTEUpLk1pbmlCcm93c2VyCisJ
Y2QgTWluaUJyb3dzZXIvcXQvICYmICQoTUFLRSkgLWYgJChNQUtFRklMRSkuTWluaUJyb3dzZXIg
Y2hlY2sKK2NoZWNrOiBzdWItUXRUZXN0QnJvd3Nlci1RdFRlc3RCcm93c2VyLXByby1jaGVjayBz
dWItRHVtcFJlbmRlclRyZWUtcXQtRHVtcFJlbmRlclRyZWUtcHJvLWNoZWNrIHN1Yi1EdW1wUmVu
ZGVyVHJlZS1xdC1JbWFnZURpZmYtcHJvLWNoZWNrIHN1Yi1NaW5pQnJvd3Nlci1xdC1NaW5pQnJv
d3Nlci1wcm8tY2hlY2sKKworc3ViLVF0VGVzdEJyb3dzZXItUXRUZXN0QnJvd3Nlci1wcm8tc2lz
X3RhcmdldDogUXRUZXN0QnJvd3Nlci8kKE1BS0VGSUxFKQorCWNkIFF0VGVzdEJyb3dzZXIvICYm
ICQoTUFLRSkgc2lzCitzdWItRHVtcFJlbmRlclRyZWUtcXQtRHVtcFJlbmRlclRyZWUtcHJvLXNp
c190YXJnZXQ6IER1bXBSZW5kZXJUcmVlL3F0LyQoTUFLRUZJTEUpLkR1bXBSZW5kZXJUcmVlCisJ
Y2QgRHVtcFJlbmRlclRyZWUvcXQvICYmICQoTUFLRSkgLWYgJChNQUtFRklMRSkuRHVtcFJlbmRl
clRyZWUgc2lzCitzdWItRHVtcFJlbmRlclRyZWUtcXQtSW1hZ2VEaWZmLXByby1zaXNfdGFyZ2V0
OiBEdW1wUmVuZGVyVHJlZS9xdC8kKE1BS0VGSUxFKS5JbWFnZURpZmYKKwljZCBEdW1wUmVuZGVy
VHJlZS9xdC8gJiYgJChNQUtFKSAtZiAkKE1BS0VGSUxFKS5JbWFnZURpZmYgc2lzCitzdWItTWlu
aUJyb3dzZXItcXQtTWluaUJyb3dzZXItcHJvLXNpc190YXJnZXQ6IE1pbmlCcm93c2VyL3F0LyQo
TUFLRUZJTEUpLk1pbmlCcm93c2VyCisJY2QgTWluaUJyb3dzZXIvcXQvICYmICQoTUFLRSkgLWYg
JChNQUtFRklMRSkuTWluaUJyb3dzZXIgc2lzCitzaXM6IHN1Yi1RdFRlc3RCcm93c2VyLVF0VGVz
dEJyb3dzZXItcHJvLXNpc190YXJnZXQgc3ViLUR1bXBSZW5kZXJUcmVlLXF0LUR1bXBSZW5kZXJU
cmVlLXByby1zaXNfdGFyZ2V0IHN1Yi1EdW1wUmVuZGVyVHJlZS1xdC1JbWFnZURpZmYtcHJvLXNp
c190YXJnZXQgc3ViLU1pbmlCcm93c2VyLXF0LU1pbmlCcm93c2VyLXByby1zaXNfdGFyZ2V0CisK
K21vY2NsZWFuOiBjb21waWxlcl9tb2NfaGVhZGVyX2NsZWFuIGNvbXBpbGVyX21vY19zb3VyY2Vf
Y2xlYW4KKworbW9jYWJsZXM6IGNvbXBpbGVyX21vY19oZWFkZXJfbWFrZV9hbGwgY29tcGlsZXJf
bW9jX3NvdXJjZV9tYWtlX2FsbAorRk9SQ0U6CisKK2RvZGlzdGNsZWFuOgorCS0kKE1BS0UpIC1m
ICIvaG9tZS9zaW1hdGh1ci9XZWJLaXQvVG9vbHMvUXRUZXN0QnJvd3Nlci9NYWtlZmlsZS5RdFRl
c3RCcm93c2VyIiBkb2Rpc3RjbGVhbgorCS0kKE1BS0UpIC1mICIvaG9tZS9zaW1hdGh1ci9XZWJL
aXQvVG9vbHMvRHVtcFJlbmRlclRyZWUvcXQvTWFrZWZpbGUuRHVtcFJlbmRlclRyZWUiIGRvZGlz
dGNsZWFuCisJLSQoTUFLRSkgLWYgIi9ob21lL3NpbWF0aHVyL1dlYktpdC9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9xdC9NYWtlZmlsZS5JbWFnZURpZmYiIGRvZGlzdGNsZWFuCisJLSQoTUFLRSkgLWYg
Ii9ob21lL3NpbWF0aHVyL1dlYktpdC9Ub29scy9NaW5pQnJvd3Nlci9xdC9NYWtlZmlsZS5NaW5p
QnJvd3NlciIgZG9kaXN0Y2xlYW4KKwktaWYgdGVzdCAtZSAvaG9tZS9zaW1hdGh1ci9XZWJLaXQv
VG9vbHMvTWFrZWZpbGU7IHRoZW4gJChERUxfRklMRSkgIC9ob21lL3NpbWF0aHVyL1dlYktpdC9U
b29scy9NYWtlZmlsZTsgZmkKKwktaWYgdGVzdCAtZSAvaG9tZS9zaW1hdGh1ci9XZWJLaXQvVG9v
bHMvYmxkLmluZjsgdGhlbiAkKERFTF9GSUxFKSAgL2hvbWUvc2ltYXRodXIvV2ViS2l0L1Rvb2xz
L2JsZC5pbmY7IGZpCisKK2Rpc3RjbGVhbjogY2xlYW4gZG9kaXN0Y2xlYW4KKworY2xlYW46IGJs
ZC5pbmYKKwktJChTQlMpIHJlYWxseWNsZWFuIC0tdG9vbGNoZWNrPW9mZiAtYyB3aW5zY3dfdWRl
Yi5td2NjaW5jIC1jIGFybXY1X3VkZWIgLWMgYXJtdjZfdWRlYiAtYyBhcm12NV91cmVsIC1jIGFy
bXY2X3VyZWwKKwogCi1hbGw6Ci0JQGZvciBkaXIgaW4gJChNT0RVTEVTKTsgZG8gJHtNQUtFfSAk
QCAtQyAkJGRpcjsgZXhpdF9zdGF0dXM9JCQ/OyBcCi0JaWYgWyAkJGV4aXRfc3RhdHVzIC1uZSAw
IF07IHRoZW4gZXhpdCAkJGV4aXRfc3RhdHVzOyBmaTsgZG9uZQotCi1kZWJ1ZyBkIGRldmVsb3Bt
ZW50IGRldiBkZXZlbG9wOgotCUBmb3IgZGlyIGluICQoTU9EVUxFUyk7IGRvICR7TUFLRX0gJEAg
LUMgJCRkaXI7IGV4aXRfc3RhdHVzPSQkPzsgXAotCWlmIFsgJCRleGl0X3N0YXR1cyAtbmUgMCBd
OyB0aGVuIGV4aXQgJCRleGl0X3N0YXR1czsgZmk7IGRvbmUKLQotcmVsZWFzZSByIGRlcGxveW1l
bnQgZGVwIGRlcGxveToKLQlAZm9yIGRpciBpbiAkKE1PRFVMRVMpOyBkbyAke01BS0V9ICRAIC1D
ICQkZGlyOyBleGl0X3N0YXR1cz0kJD87IFwKLQlpZiBbICQkZXhpdF9zdGF0dXMgLW5lIDAgXTsg
dGhlbiBleGl0ICQkZXhpdF9zdGF0dXM7IGZpOyBkb25lCi0KLWNsZWFuOgotCUBmb3IgZGlyIGlu
ICQoTU9EVUxFUyk7IGRvICR7TUFLRX0gJEAgLUMgJCRkaXI7IGV4aXRfc3RhdHVzPSQkPzsgXAot
CWlmIFsgJCRleGl0X3N0YXR1cyAtbmUgMCBdOyB0aGVuIGV4aXQgJCRleGl0X3N0YXR1czsgZmk7
IGRvbmUK
</data>
<flag name="review"
          id="87538"
          type_id="1"
          status="-"
          setter="menard"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94613</attachid>
            <date>2011-05-24 08:15:31 -0700</date>
            <delta_ts>2011-05-26 07:25:03 -0700</delta_ts>
            <desc>Correctly generated patch </desc>
            <filename>55875_v14.patch</filename>
            <type>text/plain</type>
            <size>41962</size>
            <attacher name="Siddharth Mathur">s.mathur</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTQ2KQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTEtMDUtMjQgIFNpZGRoYXJ0
aCBNYXRodXIgIDxzaWRkaGFydGgubWF0aHVyQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdW1dLMl1bU3ltYmlhbl0gQ29yZUlQ
QyBpbXBsZW1lbnRhdGlvbiBmb3IgU3ltYmlhbiBPUworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU4NzcKKworICAgICAgICBVc2UgbmF0aXZlIFN5bWJp
YW4gT1MgQVBJcyBmb3IgcGxhdGZvcm0gc3BlY2lmaWMgcGx1bWJpbmcgbGlrZSBwcm9jZXNzIGxh
dW5jaGluZyBhbmQgSVBDLgorICAgICAgICBUaGUgY2hhbmdlIG1heGltaXplcyB1c2Ugb2YgdGhl
IGV4aXN0aW5nIFF0IHBvcnQgb2YgV2ViS2l0Miwgd2hpbGUgaW1wbGVtZW50aW5nIG9ubHkgdGhl
IGFib3ZlLW1lbnRpb25lZAorICAgICAgICBwb3J0aW9ucyB1c2luZyBuYXRpdmUgY29uc3RydWN0
cy4KKworICAgICAgICBGb3IgSVBDLCB0d28gaGFsZi1kdXBsZXggcGlwZXMgKFJQaXBlKSBhcmUg
dXNlZC4gRm9yIHByb2Nlc3MgbGF1bmNoaW5nLCB0aGUgUlByb2Nlc3MgY2xhc3MKKyAgICAgICAg
d2hpY2ggYWxsb3dzIG93bmVyc2hpcCB0cmFuc2ZlciBvZiBJUEMgaGFuZGxlcyB0byBhIGNoaWxk
IHByb2Nlc3MgaXMgdXNlZC4KKworICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQXR0YWNobWVu
dC5oOiBkZWNvdXBsZSBTeW1iaWFuIGZyb20gVU5JWF9ET01BSU5fU09DS0VUUyBjb2RlLgorICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvQ29ubmVjdGlvbi5oOiBuZXcgU3ltYmlhbi1zcGVjaWZp
YyB0eXBlZGVmcyBhbmQgbWVtYmVyIHZhcmlhYmxlcy4KKworICAgICAgICAqIFBsYXRmb3JtL0Nv
cmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3BwOiBBZGRlZC4KKyAgICAgICAgKENvcmVJUEM6
OnJvdW5kVXBUb0FsaWdubWVudCk6IFBvaW50ZXIgYWxpZ25tZW50IHV0aWxpdHkuCisgICAgICAg
IChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUluaXRpYWxpemUpOiBTZXRzIHVwIFJQaXBl
IGNvbm5lY3Rpb24uCisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpwbGF0Zm9ybUludmFs
aWRhdGUpOiBEZXN0cm95cyBSUGlwZSBhbmQgd2F0Y2hlcnMuCisgICAgICAgIChDb3JlSVBDOjpp
c01lc3NhZ2VUcmFpbGVyKTogQ2hlY2tzIGlmIGJ1ZmZlciBjb250YWlucyBhIG1hcmtlci4KKyAg
ICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIpOk1haW4gd29ya2Vy
IG1ldGhvZCBmb3IgcmVhZGluZyBkYXRhIGFuZCBtZXNzYWdlIHBhcnNpbmcrZGlzcGF0Y2hpbmcu
CisgICAgICAgIChDb3JlSVBDOjpDb25uZWN0aW9uOjpvcGVuKTogSW5pdGlhbGl6YXRpb24gY29k
ZS4KKyAgICAgICAgKENvcmVJUEM6OkNvbm5lY3Rpb246OnBsYXRmb3JtQ2FuU2VuZE91dGdvaW5n
TWVzc2FnZXMpOgorICAgICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2VuZE91dGdvaW5nTWVz
c2FnZSk6IFNlcmlhbGl6ZXMgbWVzc2FnZXMgd2l0aCBPUy1zcGVjaWZpYyBtZXRhZGF0YQorICAg
ICAgICAoQ29yZUlQQzo6Q29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9j
ZXNzVGVybWluYXRpb24pOgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvUVN5bWJpYW5Q
aXBlTm90aWZpZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgUXQtc3R5bGUgc2lnbmFsIGVtaXR0aW5n
IHdyYXBwZXIgYXJvdW5kIGFzeW5jIFN5bWJpYW4gSU8uIERlc2lnbmVkIHRvIGJlIFFPYmplY3Qt
Pm1vdmVUb1RocmVhZCgpCisgICAgICAgIGNvbXBhdGlibGUuICJIYXMtYSIgcmVsYXRpb25zaGlw
IHdpdGggYSB0aHJlYWQtbG9jYWwgU3ltYmlhbiBBY3RpdmUgT2JqZWN0LgorICAgICAgICAoUVN5
bWJpYW5QaXBlTm90aWZpZXI6OlFTeW1iaWFuUGlwZU5vdGlmaWVyKToKKyAgICAgICAgKFFTeW1i
aWFuUGlwZU5vdGlmaWVyOjp+UVN5bWJpYW5QaXBlTm90aWZpZXIpOgorICAgICAgICAoUVN5bWJp
YW5QaXBlTm90aWZpZXI6OnNldEVuYWJsZWQpOgorICAgICAgICAoUVN5bWJpYW5QaXBlTm90aWZp
ZXI6OmV2ZW50KToKKyAgICAgICAgKiBQbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5v
dGlmaWVyLmg6IEFkZGVkLgorICAgICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBp
cGVBY3RpdmVPYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgVGhlIFN5bWJpYW4gQWN0aXZlIE9i
amVjdCB0aGF0IHJlZ2lzdGVycy9oYW5kbGVzIGRhdGEgYXZhaWxhYmxlIHJlcXVlc3RzL25vdGlm
aWNhdGlvbnMgb24gYW4gUlBpcGUuCisgICAgICAgIChTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6
U3ltYmlhblBpcGVBY3RpdmVPYmplY3QpOgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmpl
Y3Q6On5TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdCk6CisgICAgICAgIChTeW1iaWFuUGlwZUFjdGl2
ZU9iamVjdDo6c2V0RW5hYmxlZCk6IEEgUVNvY2tldE5vdGlmaWVyOjpzZXRFbmFibGVkKCkgc3R5
bGUgaW50ZXJmYWNlLgorICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlJ1bkwpOgor
ICAgICAgICAoU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRvQ2FuY2VsKToKKyAgICAgICAgKiBQ
bGF0Zm9ybS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0Lmg6IEFkZGVkLgorICAg
ICAgICAqIFBsYXRmb3JtL0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHA6IGd1YXJkIHdp
dGggVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCisgICAgICAgICogUGxhdGZvcm0vQ29yZUlQQy91
bml4L0Nvbm5lY3Rpb25Vbml4LmNwcDogRGl0dG8uCisgICAgICAgICogUGxhdGZvcm0vUGxhdGZv
cm1Qcm9jZXNzSWRlbnRpZmllci5oOiBVc2UgUlByb2Nlc3MqIGZvciB3ZWIgcHJvY2VzcyBoYW5k
bGUuCisgICAgICAgICogUGxhdGZvcm0vU2hhcmVkTWVtb3J5Lmg6IGRlY291cGxlIFN5bWJpYW4g
ZnJvbSBVTklYX0RPTUFJTl9TT0NLRVRTIGNvZGUuCisgICAgICAgICogUGxhdGZvcm0vV29ya1F1
ZXVlLmg6IE5ldyByZWdpc3RlclBpcGVFdmVudEhhbmRsZXIoKSBtZXRob2Qgc2ltaWxhciB0byBR
dC1Vbml4IGltcGxlbWVudGF0aW9uLgorICAgICAgICAqIFBsYXRmb3JtL3F0L1NoYXJlZE1lbW9y
eVN5bWJpYW4uY3BwOiBSZW1vdmVkIHVudXNlZCBtZXRob2RzLgorICAgICAgICAqIFBsYXRmb3Jt
L3F0L1dvcmtRdWV1ZVF0LmNwcDoKKyAgICAgICAgTmV3IHJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxl
cigpIG1ldGhvZCBzaW1pbGFyIHRvIFF0LVVuaXggaW1wbGVtZW50YXRpb24uCisgICAgICAgIChX
b3JrUXVldWU6OnJlZ2lzdGVyUGlwZUV2ZW50SGFuZGxlcik6CisgICAgICAgIChXb3JrUXVldWU6
OnNjaGVkdWxlV29ya09uVGVybWluYXRpb24pOiBXYXRjaGluZyBmb3Igd2ViIHByb2Nlc3MnIGRl
YXRoIGlzIGN1cnJlbnRseSBUT0RPLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Q
cm9jZXNzTGF1bmNoZXJRdC5jcHA6IEV4Y2x1ZGUgZmlsZSB3aGVuIFFfT1NfU1lNQklBTiBpcyB1
c2VkLgorICAgICAgICAqIFVJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJTeW1i
aWFuLmNwcDogQWRkZWQuCisgICAgICAgIE5hdGl2ZSBTeW1iaWFuIE9TIGltcGxlbWVudGF0aW9u
IHRoYXQgdXNlcyBSUHJvY2VzcyB0byBzcGF3biB3ZWIgcHJvY2VzcyBhbmQgc2V0cyB1cCBwaXBl
cyBmb3IgSVBDLgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nl
c3MpOgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnRlcm1pbmF0ZVByb2Nlc3Mp
OgorICAgICAgICAoV2ViS2l0OjpQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSk6
CisgICAgICAgICogVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwOiBN
aW5vciBjbGVhbnVwIHRvIHVuZGVybGluZSB0aGF0IFF0IHBvcnQgZG9lc24ndCBzdXBwb3J0IHRo
aXMuCisgICAgICAgIChXZWJLaXQ6OmludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcik6CisgICAg
ICAgIChXZWJLaXQ6OndlYlRocmVhZEJvZHkpOgorICAgICAgICAoV2ViS2l0OjpUaHJlYWRMYXVu
Y2hlcjo6Y3JlYXRlV2ViVGhyZWFkKToKKyAgICAgICAgKiBXZWJLaXQyLnByaTogTGluayB3aXRo
IHJwaXBlIGxpYnJhcnkuCisgICAgICAgICogV2ViS2l0Mi5wcm86IEFkZCBuZXcgc291cmNlIGFu
ZCBoZWFkZXIgZmlsZXMuCisgICAgICAgICogV2ViUHJvY2Vzcy9xdC9XZWJQcm9jZXNzTWFpblF0
LmNwcDogU2V0IHByb2Nlc3MgcHJpb3JpdHkgdG8gbG93LiBEb24ndCB1c2UgaWRlbnRpZmllciBm
cm9tIGNvbW1hbmQtbGluZSBhcmdzIGZvciBTeW1iaWFuLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
cm9jZXNzTWFpblF0KToKKwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkJKHJldmlzaW9uIDg3MTQ2KQorKysg
U291cmNlL1dlYktpdDIvV2ViS2l0Mi5wcmkJKHdvcmtpbmcgY29weSkKQEAgLTcwLDYgKzcwLDgg
QEAgc3ltYmlhbiB7CiAgICAgSU5DTFVERVBBVEggPSAkJFdFQktJVDJfSU5DTFVERVBBVEggJCRX
RUJLSVQyX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUiAkJElOQ0xVREVQQVRICiB9CiAKK3N5bWJpYW46
IExJQlMgKz0gLWxycGlwZQorCiBkZWZpbmVUZXN0KHByZXBlbmRXZWJLaXQyTGliKSB7CiAgICAg
cGF0aFRvV2ViS2l0Mk91dHB1dCA9ICQkQVJHUy8kJFdFQktJVDJfREVTVERJUgogCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJLaXQyLnBybwkocmV2aXNpb24gODcxNDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnBy
bwkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBAIEhFQURFUlMgKz0gXAogICAgIFBs
YXRmb3JtL0NvcmVJUEMvSGFuZGxlTWVzc2FnZS5oIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL01l
c3NhZ2VJRC5oIFwKICAgICBQbGF0Zm9ybS9Db3JlSVBDL01lc3NhZ2VTZW5kZXIuaCBcCisgICAg
UGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oIFwKICAgICBQbGF0Zm9y
bS9Mb2dnaW5nLmggXAogICAgIFBsYXRmb3JtL01vZHVsZS5oIFwKICAgICBQbGF0Zm9ybS9QbGF0
Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmggXApAQCAtMzExLDYgKzMxMiw5IEBAIFNPVVJDRVMgKz0g
XAogICAgIFBsYXRmb3JtL0NvcmVJUEMvRGF0YVJlZmVyZW5jZS5jcHAgXAogICAgIFBsYXRmb3Jt
L0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAgXAogICAgIFBsYXRmb3JtL0NvcmVJUEMv
dW5peC9Db25uZWN0aW9uVW5peC5jcHAgXAorICAgIFBsYXRmb3JtL0NvcmVJUEMvcXQvQ29ubmVj
dGlvblN5bWJpYW4uY3BwIFwKKyAgICBQbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5v
dGlmaWVyLmNwcCBcCisgICAgUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9i
amVjdC5jcHAgXAogICAgIFBsYXRmb3JtL0xvZ2dpbmcuY3BwIFwKICAgICBQbGF0Zm9ybS9Nb2R1
bGUuY3BwIFwKICAgICBQbGF0Zm9ybS9SZWdpb24uY3BwIFwKQEAgLTM5Nyw2ICs0MDEsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBVSVByb2Nlc3MvTGF1bmNoZXIvUHJvY2Vzc0xhdW5jaGVyLmNwcCBc
CiAgICAgVUlQcm9jZXNzL0xhdW5jaGVyL1RocmVhZExhdW5jaGVyLmNwcCBcCiAgICAgVUlQcm9j
ZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclF0LmNwcCBcCisgICAgVUlQcm9jZXNzL0xh
dW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hlclN5bWJpYW4uY3BwIFwKICAgICBVSVByb2Nlc3MvTGF1
bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAgXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL1Bs
dWdpbkluZm9TdG9yZS5jcHAgXAogICAgIFVJUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblByb2Nlc3NQ
cm94eS5jcHAgXApJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vUGxhdGZvcm1Qcm9jZXNz
SWRlbnRpZmllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL1BsYXRm
b3JtUHJvY2Vzc0lkZW50aWZpZXIuaAkocmV2aXNpb24gODcxNDYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9QbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDExIEBAIHR5cGVkZWYgcGlkX3QgUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsK
ICNlbGlmIFBMQVRGT1JNKFdJTikKIHR5cGVkZWYgSEFORExFIFBsYXRmb3JtUHJvY2Vzc0lkZW50
aWZpZXI7CiAjZWxpZiBQTEFURk9STShRVCkKKyNpZiBPUyhTWU1CSUFOKQordHlwZWRlZiBSUHJv
Y2VzcyogUGxhdGZvcm1Qcm9jZXNzSWRlbnRpZmllcjsKKyNlbHNlCiB0eXBlZGVmIFFQcm9jZXNz
KiBQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyOworI2VuZGlmCiAjZWxpZiBQTEFURk9STShHVEsp
CiAjaWZkZWYgR19PU19XSU4zMgogdHlwZWRlZiB2b2lkKiBHUGlkOwpJbmRleDogU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHJldmlzaW9uIDg3MTQ2KQorKysgU291cmNlL1dl
YktpdDIvUGxhdGZvcm0vU2hhcmVkTWVtb3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYw
LDcgQEAgcHVibGljOgogICAgICAgICB2b2lkIGVuY29kZShDb3JlSVBDOjpBcmd1bWVudEVuY29k
ZXIqKSBjb25zdDsKICAgICAgICAgc3RhdGljIGJvb2wgZGVjb2RlKENvcmVJUEM6OkFyZ3VtZW50
RGVjb2RlciosIEhhbmRsZSYpOwogCi0jaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8IE9T
KFNZTUJJQU4pCisjaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCiAgICAgICAgIENvcmVJUEM6
OkF0dGFjaG1lbnQgcmVsZWFzZVRvQXR0YWNobWVudCgpIGNvbnN0OwogICAgICAgICB2b2lkIGFk
b3B0RnJvbUF0dGFjaG1lbnQoaW50IGZpbGVEZXNjcmlwdG9yLCBzaXplX3QpOwogI2VuZGlmCklu
ZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAkocmV2aXNpb24gODcxNDYpCisrKyBT
b3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Xb3JrUXVldWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUs
NiArNDUsOSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKIGNsYXNz
IFFPYmplY3Q7CiBjbGFzcyBRVGhyZWFkOworI2lmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAicXQv
UVN5bWJpYW5QaXBlTm90aWZpZXIuaCIKKyNlbmRpZgogI2VsaWYgUExBVEZPUk0oR1RLKQogI2lu
Y2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKIHR5cGVkZWYgc3RydWN0IF9HTWFp
bkNvbnRleHQgR01haW5Db250ZXh0OwpAQCAtODQsNyArODcsMTEgQEAgcHVibGljOgogICAgIHZv
aWQgcmVnaXN0ZXJIYW5kbGUoSEFORExFLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CiAgICAgdm9p
ZCB1bnJlZ2lzdGVyQW5kQ2xvc2VIYW5kbGUoSEFORExFKTsKICNlbGlmIFBMQVRGT1JNKFFUKQor
I2lmIE9TKFNZTUJJQU4pCisgICAgUVN5bWJpYW5QaXBlTm90aWZpZXIqIHJlZ2lzdGVyUGlwZUV2
ZW50SGFuZGxlcihSUGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50VHlwZSwgUGFzc093
blB0cjxXb3JrSXRlbT4pOworI2Vsc2UKICAgICBRU29ja2V0Tm90aWZpZXIqIHJlZ2lzdGVyU29j
a2V0RXZlbnRIYW5kbGVyKGludCwgUVNvY2tldE5vdGlmaWVyOjpUeXBlLCBQYXNzT3duUHRyPFdv
cmtJdGVtPik7CisjZW5kaWYKICAgICB2b2lkIHNjaGVkdWxlV29ya09uVGVybWluYXRpb24oV2Vi
S2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyLCBQYXNzT3duUHRyPFdvcmtJdGVtPik7CiAj
ZWxpZiBQTEFURk9STShHVEspCiAgICAgdm9pZCByZWdpc3RlckV2ZW50U291cmNlSGFuZGxlcihp
bnQsIGludCwgUGFzc093blB0cjxXb3JrSXRlbT4pOwpJbmRleDogU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
UGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmgJKHJldmlzaW9uIDg3MTQ2KQorKysgU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9BdHRhY2htZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICAgICAgTWFjaFBv
cnRUeXBlLAogICAgICAgICBNYWNoT09MTWVtb3J5VHlwZSwKLSNlbGlmIFVTRShVTklYX0RPTUFJ
Tl9TT0NLRVRTKSB8fCBPUyhTWU1CSUFOKQorI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMp
CiAgICAgICAgIE1hcHBlZE1lbW9yeQogI2VuZGlmCiAgICAgfTsKQEAgLTQ4LDcgKzQ4LDcgQEAg
cHVibGljOgogI2lmIFBMQVRGT1JNKE1BQykKICAgICBBdHRhY2htZW50KG1hY2hfcG9ydF9uYW1l
X3QgcG9ydCwgbWFjaF9tc2dfdHlwZV9uYW1lX3QgZGlzcG9zaXRpb24pOwogICAgIEF0dGFjaG1l
bnQodm9pZCogYWRkcmVzcywgbWFjaF9tc2dfc2l6ZV90IHNpemUsIG1hY2hfbXNnX2NvcHlfb3B0
aW9uc190IGNvcHlPcHRpb25zLCBib29sIGRlYWxsb2NhdGUpOwotI2VsaWYgVVNFKFVOSVhfRE9N
QUlOX1NPQ0tFVFMpIHx8IE9TKFNZTUJJQU4pCisjZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VU
UykKICAgICBBdHRhY2htZW50KGludCBmaWxlRGVzY3JpcHRvciwgc2l6ZV90KTsKICNlbmRpZgog
CkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKICAgICBtYWNoX21zZ19zaXplX3Qgc2l6ZSgpIGNv
bnN0IHsgQVNTRVJUKG1fdHlwZSA9PSBNYWNoT09MTWVtb3J5VHlwZSk7IHJldHVybiBtX29vbE1l
bW9yeS5zaXplOyB9CiAgICAgbWFjaF9tc2dfY29weV9vcHRpb25zX3QgY29weU9wdGlvbnMoKSBj
b25zdCB7IEFTU0VSVChtX3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9vb2xN
ZW1vcnkuY29weU9wdGlvbnM7IH0KICAgICBib29sIGRlYWxsb2NhdGUoKSBjb25zdCB7IEFTU0VS
VChtX3R5cGUgPT0gTWFjaE9PTE1lbW9yeVR5cGUpOyByZXR1cm4gbV9vb2xNZW1vcnkuZGVhbGxv
Y2F0ZTsgfQotI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpIHx8IE9TKFNZTUJJQU4pCisj
ZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2l6ZTsgfQogCiAgICAgaW50IHJlbGVhc2VGaWxlRGVzY3JpcHRvcigpIHsgaW50
IHRlbXAgPSBtX2ZpbGVEZXNjcmlwdG9yOyBtX2ZpbGVEZXNjcmlwdG9yID0gLTE7IHJldHVybiB0
ZW1wOyB9CkBAIC05NCw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBib29sIGRlYWxs
b2NhdGU7CiAgICAgICAgIH0gbV9vb2xNZW1vcnk7CiAgICAgfTsKLSNlbGlmIFVTRShVTklYX0RP
TUFJTl9TT0NLRVRTKSB8fCBPUyhTWU1CSUFOKQorI2VsaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tF
VFMpCiAgICAgaW50IG1fZmlsZURlc2NyaXB0b3I7CiAgICAgc2l6ZV90IG1fc2l6ZTsKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25uZWN0aW9uLmgJ
KHJldmlzaW9uIDg3MTQ2KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9Db25u
ZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDggKzQzLDEyIEBACiAjZWxpZiBQTEFURk9S
TShXSU4pCiAjaW5jbHVkZSA8c3RyaW5nPgogI2VsaWYgUExBVEZPUk0oUVQpCisjaWYgT1MoU1lN
QklBTikKKyNpbmNsdWRlIDxwbGF0Zm9ybS9ycGlwZS5oPgorI2Vsc2UKIGNsYXNzIFFTb2NrZXRO
b3RpZmllcjsKICNlbmRpZgorI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
R1RLKQogI2luY2x1ZGUgIlBsYXRmb3JtUHJvY2Vzc0lkZW50aWZpZXIuaCIKQEAgLTEwOCw4ICsx
MTIsMTAgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHR5cGVkZWYgSEFORExF
IElkZW50aWZpZXI7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlU2VydmVyQW5kQ2xpZW50SWRlbnRp
ZmllcnMoSWRlbnRpZmllciYgc2VydmVySWRlbnRpZmllciwgSWRlbnRpZmllciYgY2xpZW50SWRl
bnRpZmllcik7Ci0jZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoU1lNQklBTikK
KyNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIHR5cGVkZWYgaW50IElkZW50aWZp
ZXI7CisjZWxpZiBPUyhTWU1CSUFOKQorICAgIHR5cGVkZWYgUlBpcGUqIElkZW50aWZpZXI7CiAj
ZW5kaWYKIAogICAgIHN0YXRpYyBQYXNzUmVmUHRyPENvbm5lY3Rpb24+IGNyZWF0ZVNlcnZlckNv
bm5lY3Rpb24oSWRlbnRpZmllciwgQ2xpZW50KiwgUnVuTG9vcCogY2xpZW50UnVuTG9vcCk7CkBA
IC0xNDYsNiArMTUyLDkgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0IGludCBEZWZhdWx0
VGltZW91dCA9IDA7CiAgICAgc3RhdGljIGNvbnN0IGludCBOb1RpbWVvdXQgPSAtMTsKKyNpZiBP
UyhTWU1CSUFOKQorICAgIHN0YXRpYyBjb25zdCBpbnQgTWF4UGlwZUNhcGFjaXR5ID0gNDA5Njsg
CisjZW5kaWYKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgc2VuZChjb25zdCBUJiBt
ZXNzYWdlLCB1aW50NjRfdCBkZXN0aW5hdGlvbklELCB1bnNpZ25lZCBtZXNzYWdlU2VuZEZsYWdz
ID0gMCk7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gYm9vbCBzZW5kU3luYyhjb25zdCBUJiBt
ZXNzYWdlLCBjb25zdCB0eXBlbmFtZSBUOjpSZXBseSYgcmVwbHksIHVpbnQ2NF90IGRlc3RpbmF0
aW9uSUQsIGRvdWJsZSB0aW1lb3V0ID0gRGVmYXVsdFRpbWVvdXQpOwpAQCAtMzM0LDcgKzM0Myw3
IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEFyZ3VtZW50RW5jb2Rlcj4gbV9wZW5kaW5nV3JpdGVB
cmd1bWVudHM7CiAgICAgT1ZFUkxBUFBFRCBtX3dyaXRlU3RhdGU7CiAgICAgSEFORExFIG1fY29u
bmVjdGlvblBpcGU7Ci0jZWxpZiBVU0UoVU5JWF9ET01BSU5fU09DS0VUUykgfHwgT1MoU1lNQklB
TikKKyNlbGlmIFVTRShVTklYX0RPTUFJTl9TT0NLRVRTKQogICAgIC8vIENhbGxlZCBvbiB0aGUg
Y29ubmVjdGlvbiBxdWV1ZS4KICAgICB2b2lkIHJlYWR5UmVhZEhhbmRsZXIoKTsKIApAQCAtMzQ1
LDYgKzM1NCwxMiBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKFFUKQogICAgIFFTb2NrZXROb3Rp
ZmllciogbV9zb2NrZXROb3RpZmllcjsKICNlbmRpZgorI2VsaWYgUExBVEZPUk0oUVQpICYmIE9T
KFNZTUJJQU4pCisgICAgdm9pZCByZWFkeVJlYWRIYW5kbGVyKCk7CisgICAgVmVjdG9yPHVpbnQ4
X3Q+IG1fcmVhZEJ1ZmZlcjsKKyAgICBSUGlwZSBtX3JlYWRQaXBlOworICAgIFJQaXBlIG1fd3Jp
dGVQaXBlOworICAgIFFTeW1iaWFuUGlwZU5vdGlmaWVyKiBtX3BpcGVSZWFkTm90aWZpZXI7CiAj
ZW5kaWYKIH07CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvQ29u
bmVjdGlvblN5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
L0NvcmVJUEMvcXQvQ29ubmVjdGlvblN5bWJpYW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9Db25uZWN0aW9uU3ltYmlhbi5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tp
YSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiQ29u
bmVjdGlvbi5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCisjaW5jbHVkZSAiV29y
a0l0ZW0uaCIKKyNpbmNsdWRlIDxRVmVjdG9yPgorI2luY2x1ZGUgPHF0L1FTeW1iaWFuUGlwZU5v
dGlmaWVyLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IGtU
cmFpbGVyUGF0dGVybiA9IDB4REVBRENBRkU7CisKK3N0cnVjdCBQYXJzZWRNZXNzYWdlIHsKKyAg
ICB1aW50OF90KiBzdGFydDsgLy8gYmFzZSBhZGRyZXNzIG9mIG1lc3NhZ2UKKyAgICB1aW50MzJf
dCBzaXplOyAvLyBzaXplIGluIGJ5dGVzCisgICAgdWludDMyX3QgbWVzc2FnZUlEOworfTsKKwor
c3RhdGljIGlubGluZSBzaXplX3Qgcm91bmRVcFRvQWxpZ25tZW50KHNpemVfdCB2YWx1ZSwgdW5z
aWduZWQgYWxpZ25tZW50KQoreworICAgIHJldHVybiAoKHZhbHVlICsgYWxpZ25tZW50IC0gMSkg
LyBhbGlnbm1lbnQpICogYWxpZ25tZW50OworfQorCit2b2lkIENvbm5lY3Rpb246OnBsYXRmb3Jt
SW5pdGlhbGl6ZShJZGVudGlmaWVyIGlkZW50aWZpZXIpCit7CisgICAgaWYgKG1faXNTZXJ2ZXIp
IHsKKyAgICAgICAgbV9yZWFkUGlwZSA9IHN0YXRpY19jYXN0PFJQaXBlKj4oaWRlbnRpZmllcilb
MF07CisgICAgICAgIG1fd3JpdGVQaXBlID0gc3RhdGljX2Nhc3Q8UlBpcGUqPihpZGVudGlmaWVy
KVsxXTsKKyAgICB9IGVsc2UgeworICAgICAgICBUSW50IGVycm9yOworICAgICAgICAvLyBPcGVu
IHBpcGVzIHZpYSBSUHJvY2VzcycgImVudmlyb25tZW50IGRhdGEgc2xvdHMiIG51bWJlciAzICYg
NC4KKyAgICAgICAgLy8gVGhlIGNob2ljZSBvZiAzICYgNCBpcyBhcmJpdHJhcnkgYW5kIG1hdGNo
ZXMgdGhlIGNvZGUgaW4gUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAuCisgICAgICAgIC8vIFRo
aXMgaXMgdGhlIFN5bWJpYW4gT1Mgd2F5IG9mIHBhc3Npbmcgb3duZXJzaGlwIG9mIHJlc291cmNl
cyBmcm9tIHBhcmVudCB0byBjaGlsZC4KKyAgICAgICAgZXJyb3IgPSBtX3JlYWRQaXBlLk9wZW4o
Myk7IAorICAgICAgICBlcnJvcnw9IG1fd3JpdGVQaXBlLk9wZW4oNCk7CisgICAgICAgIGlmIChl
cnJvcikgeyAKKyAgICAgICAgICAgIG1faXNDb25uZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fcGlwZVJlYWROb3RpZmllciA9IDA7
CisgICAgbV9yZWFkQnVmZmVyLnJlc2l6ZShDb3JlSVBDOjpDb25uZWN0aW9uOjpNYXhQaXBlQ2Fw
YWNpdHkpOworICAgIG1faXNDb25uZWN0ZWQgPSB0cnVlOyAgICAgICAgCit9CisKK3ZvaWQgQ29u
bmVjdGlvbjo6cGxhdGZvcm1JbnZhbGlkYXRlKCkKK3sKKyAgICBtX3JlYWRCdWZmZXIuc2hyaW5r
KDApOworICAgIAorICAgIGRlbGV0ZSBtX3BpcGVSZWFkTm90aWZpZXI7CisgICAgbV9waXBlUmVh
ZE5vdGlmaWVyID0gMDsKKworICAgIG1fcmVhZFBpcGUuQ2xvc2UoKTsKKyAgICBtX3dyaXRlUGlw
ZS5DbG9zZSgpOworICAgIC8vIFRPRE86IERlbGV0ZSB0aGUgbWVtb3J5IGZvciB0aGUgUlBpcGVb
Ml0gYXJyYXkuCisKKyAgICBtX2lzQ29ubmVjdGVkID0gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc01lc3NhZ2VUcmFpbGVyKHVpbnQ4X3QgKmRhdGEpIAoreyAgCisgICAgcmV0dXJu
ICgga1RyYWlsZXJQYXR0ZXJuID09ICoocmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRhdGEp
KSApOworfQorCit2b2lkIENvbm5lY3Rpb246OnJlYWR5UmVhZEhhbmRsZXIoKQoreyAgIAorICAg
IG1fcGlwZVJlYWROb3RpZmllci0+c2V0RW5hYmxlZChmYWxzZSk7CisgICAgVFB0cjggcmVhZFB0
cihtX3JlYWRCdWZmZXIuZGF0YSgpLCAwLCBtX3JlYWRCdWZmZXIuc2l6ZSgpKTsKKworICAgIC8v
IE5vdGUgdGhhdCBhIHJlYWQgb3BlcmF0aW9uIG1heSByZXR1cm4gbXVsdGlwbGUgbWVzc2FnZXMg
ZHVlIHRvIGl0cyBzdHJlYW0tb3JpZW50ZWQgbmF0dXJlLgorICAgIFRJbnQgYnl0ZXNSZWFkID0g
bV9yZWFkUGlwZS5SZWFkKHJlYWRQdHIsIHJlYWRQdHIuTWF4U2l6ZSgpKTsKKyAgICAKKyAgICBp
ZiAoYnl0ZXNSZWFkID4gMCkgeyAgICAgICAgICAgIAorICAgICAgICBfX0FTU0VSVF9BTFdBWVMo
Ynl0ZXNSZWFkID09IHJlYWRQdHIuU2l6ZSgpLCBVc2VyOjpJbnZhcmlhbnQoKSk7CisgICAgICAg
IAorICAgICAgICAvLyBTdGFydCBwYXJzaW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyLCB3
aGVyZSB3ZSBleHBlY3QgdG8gc2VlIGEgdHJhaWxlciBhbmQgdGhlIHNpemUgb2YgdGhpcyBtZXNz
YWdlLgorICAgICAgICB1aW50OF90KiBtZXNzYWdlU3RhcnQgPSBtX3JlYWRCdWZmZXIuZGF0YSgp
ICsgYnl0ZXNSZWFkOworICAgICAgICAKKyAgICAgICAgLy8gVGVtcG9yYXJ5IHBsYWNlIHRvIGtl
ZXAgdHJhY2sgb2YgcGFyc2VkIG1lc3NhZ2VzLgorICAgICAgICBWZWN0b3I8UGFyc2VkTWVzc2Fn
ZSwgMTA+IG1lc3NzYWdlUG9pbnRlcnM7CisgICAgICAgIAorICAgICAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICAgICAgbWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7IC8vIFByZXBh
cmUgdG8gcmVhZCA0LWJ5dGUgdHJhaWxlci4KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFpc01lc3NhZ2VUcmFpbGVyKG1lc3NhZ2VTdGFydCkpIHsgCisgICAgICAgICAgICAgICAgY29u
bmVjdGlvbkRpZENsb3NlKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOyAKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgbWVzc2FnZVN0YXJ0IC09IHNpemVvZih1aW50MzJfdCk7CisgICAg
ICAgICAgICB1aW50MzJfdCBtZXNzYWdlSUQgPSAqcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KG1lc3NhZ2VTdGFydCk7IAorCisgICAgICAgICAgICBtZXNzYWdlU3RhcnQgLT0gc2l6ZW9mKHVp
bnQzMl90KTsKKyAgICAgICAgICAgIHVpbnQzMl90IHBhZGRpbmdMZW5ndGggPSAqcmVpbnRlcnBy
ZXRfY2FzdDx1aW50MzJfdCo+KG1lc3NhZ2VTdGFydCk7CisKKyAgICAgICAgICAgIG1lc3NhZ2VT
dGFydCAtPSBzaXplb2YodWludDMyX3QpOworICAgICAgICAgICAgdWludDMyX3QgcmF3U2l6ZSA9
ICpyZWludGVycHJldF9jYXN0PHVpbnQ2NF90Kj4obWVzc2FnZVN0YXJ0KTsKKworICAgICAgICAg
ICAgbWVzc2FnZVN0YXJ0IC09IChwYWRkaW5nTGVuZ3RoICsgcmF3U2l6ZSk7CisKKyAgICAgICAg
ICAgIC8vIFNhdmUgbWVzc2FnZSBib3VuZGFyeS4KKyAgICAgICAgICAgIGNvbnN0IFBhcnNlZE1l
c3NhZ2UgYU1lc3NhZ2UgPSB7bWVzc2FnZVN0YXJ0LCByYXdTaXplLCBtZXNzYWdlSUR9OworICAg
ICAgICAgICAgbWVzc3NhZ2VQb2ludGVycy5hcHBlbmQoYU1lc3NhZ2UpOyAKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgX19BU1NFUlRfQUxXQVlTKG1lc3NhZ2VTdGFydCA+PSAgbV9yZWFkQnVm
ZmVyLmRhdGEoKSwgVXNlcjo6SW52YXJpYW50KCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAobWVzc2FnZVN0YXJ0ID09IG1fcmVhZEJ1ZmZlci5kYXRhKCkpIAorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAKKyAgICAgICAgLy8gTm93IGRpc3BhdGNoIHBh
cnNlZCBtZXNzYWdlcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHdyaXR0ZW4gYnkgdGhlIHNlbmRl
ci4KKyAgICAgICAgZm9yIChpbnQgaSA9IG1lc3NzYWdlUG9pbnRlcnMuc2l6ZSgpLTE7IGkgPj0g
MCA7IGktLSkgeworICAgICAgICAgICAgY29uc3QgUGFyc2VkTWVzc2FnZSBhTWVzc2FnZSA9IG1l
c3NzYWdlUG9pbnRlcnMuYXQoaSk7CisgICAgICAgICAgICBNZXNzYWdlSUQgbUlEID0gTWVzc2Fn
ZUlEOjpmcm9tSW50KGFNZXNzYWdlLm1lc3NhZ2VJRCk7CisgICAgICAgICAgICBwcm9jZXNzSW5j
b21pbmdNZXNzYWdlKG1JRCwgYWRvcHRQdHIobmV3IEFyZ3VtZW50RGVjb2RlcihhTWVzc2FnZS5z
dGFydCwgYU1lc3NhZ2Uuc2l6ZSkpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX3Bp
cGVSZWFkTm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7Cit9CisKKworYm9vbCBDb25uZWN0aW9u
OjpvcGVuKCkKK3sKKyAgICBpZiAoIW1faXNDb25uZWN0ZWQpIAorICAgICAgICByZXR1cm4gZmFs
c2U7IAorICAgIAorICAgIC8vIFN0YXJ0IGxpc3RlbmluZyBmb3IgcmVhZC4KKyAgICBtX3BpcGVS
ZWFkTm90aWZpZXIgPSBtX2Nvbm5lY3Rpb25RdWV1ZS5yZWdpc3RlclBpcGVFdmVudEhhbmRsZXIo
bV9yZWFkUGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVSZWFkRGF0YUF2YWlsYWJsZSwg
V29ya0l0ZW06OmNyZWF0ZSh0aGlzLCAmQ29ubmVjdGlvbjo6cmVhZHlSZWFkSGFuZGxlcikpOwor
ICAgICAgICAKKyAgICAvLyBTY2hlZHVsZSBhIHJlYWQuCisgICAgbV9jb25uZWN0aW9uUXVldWUu
c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVhdGUodGhpcywgJkNvbm5lY3Rpb246OnJlYWR5UmVh
ZEhhbmRsZXIpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb25uZWN0aW9u
OjpwbGF0Zm9ybUNhblNlbmRPdXRnb2luZ01lc3NhZ2VzKCkgY29uc3QKK3sKKyAgICAvLyBBbHdh
eXMgdHJ1ZSwgc2luY2UgdGhlIHBpcGUgaXMgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgbXVsdGlwbGUg
bWVzc2FnZXMuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ29ubmVjdGlvbjo6c2VuZE91
dGdvaW5nTWVzc2FnZShNZXNzYWdlSUQgbWVzc2FnZUlELCBQYXNzT3duUHRyPEFyZ3VtZW50RW5j
b2Rlcj4gYXJndW1lbnRzKQoreworICAgIHVpbnQzMl90IHJhd1NpemUgPSBhcmd1bWVudHMtPmJ1
ZmZlclNpemUoKTsKKyAgICBhcmd1bWVudHMtPmVuY29kZVVJbnQzMihyYXdTaXplKTsKKworICAg
IC8vIFNpemUgb2YgcGFkZGluZy4KKyAgICB1aW50MzJfdCBwYWRkaW5nID0gYXJndW1lbnRzLT5i
dWZmZXJTaXplKCkgLSByYXdTaXplIC0gc2l6ZW9mKHJhd1NpemUpOworICAgIGFyZ3VtZW50cy0+
ZW5jb2RlVUludDMyKHBhZGRpbmcpOworCisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIobWVz
c2FnZUlELnRvSW50KCkpOworCisgICAgLy8gQSBtYXJrZXIgKG1hZ2ljIG51bWJlcikgd2hpY2gg
bWFrZXMgaXQgZWFzaWVyIHRvIHNwb3QgbWVzc2FnZSBib3VuZGFyeSBhdCB0aGUgcmVjZWl2ZXIu
CisgICAgYXJndW1lbnRzLT5lbmNvZGVVSW50MzIoa1RyYWlsZXJQYXR0ZXJuKTsKKyAgICAKKyAg
ICBUUHRyOCB3cml0ZUJ1ZmZlcihhcmd1bWVudHMtPmJ1ZmZlcigpLCBhcmd1bWVudHMtPmJ1ZmZl
clNpemUoKSwgYXJndW1lbnRzLT5idWZmZXJTaXplKCkgKTsKKyAgICBUSW50IGJ5dGVzV3JpdHRl
biA9IG1fd3JpdGVQaXBlLldyaXRlKHdyaXRlQnVmZmVyLCB3cml0ZUJ1ZmZlci5TaXplKCkgKTsg
ICAgIAorICAgIAorICAgIHJldHVybiAoYnl0ZXNXcml0dGVuID09IHdyaXRlQnVmZmVyLlNpemUo
KSk7Cit9CisKK3ZvaWQgQ29ubmVjdGlvbjo6c2V0U2hvdWxkQ2xvc2VDb25uZWN0aW9uT25Qcm9j
ZXNzVGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3Mp
Cit7CisgICAgbV9jb25uZWN0aW9uUXVldWUuc2NoZWR1bGVXb3JrT25UZXJtaW5hdGlvbihwcm9j
ZXNzLCBXb3JrSXRlbTo6Y3JlYXRlKHRoaXMsICZDb25uZWN0aW9uOjpjb25uZWN0aW9uRGlkQ2xv
c2UpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgQ29yZUlQQworI2VuZGlmCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3F0L1FTeW1iaWFuUGlw
ZU5vdGlmaWVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0Nv
cmVJUEMvcXQvUVN5bWJpYW5QaXBlTm90aWZpZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDk0IEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQv
b3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAg
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgUExB
VEZPUk0gKFFUKSAmJiBPUyhTWU1CSUFOKQorI2luY2x1ZGUgIlFTeW1iaWFuUGlwZU5vdGlmaWVy
LmgiCisKKyNpbmNsdWRlICJBc3NlcnRpb25zLmgiCisjaW5jbHVkZSAiUUNvcmVBcHBsaWNhdGlv
biIKKyNpbmNsdWRlICJRRXZlbnQiCisjaW5jbHVkZSAiUU9iamVjdCIKKyNpbmNsdWRlICJTeW1i
aWFuUGlwZUFjdGl2ZU9iamVjdC5oIgorI2luY2x1ZGUgPHBsYXRmb3JtL3JwaXBlLmg+CisKKy8v
IFdyYXBwZXIgUU9iamVjdCBhcm91bmQgYSBTeW1iaWFuIEFjdGl2ZSBPYmplY3QgKEFPKS4KK1FT
eW1iaWFuUGlwZU5vdGlmaWVyOjpRU3ltYmlhblBpcGVOb3RpZmllcihSUGlwZSYgcGlwZSwgRXZl
bnRUeXBlIHR5cGUsIGludCBieXRlcywgUU9iamVjdCAqcGFyZW50KSAKKyAgICA6IFFPYmplY3Qo
cGFyZW50KQorICAgICwgbV9waXBlKHBpcGUpCisgICAgLCBtX3R5cGUodHlwZSkKKyAgICAsIG1f
Ynl0ZXMoYnl0ZXMpCisgICAgLCBtX25vdGlmaWVyQU8obmV3IFN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0KHBpcGUsIHR5cGUsIGJ5dGVzLCB0aGlzKSkKK3sKK30KKworUVN5bWJpYW5QaXBlTm90aWZp
ZXI6On5RU3ltYmlhblBpcGVOb3RpZmllcigpIAoreworICAgIGRlbGV0ZSBtX25vdGlmaWVyQU87
Cit9CisKKy8vIFRoaXMgaW50ZXJmYWNlIGlzIG1vZGVsZWQgYWZ0ZXIgUVNvY2tldE5vdGlmaWVy
J3Mgc2V0RW5hYmxlZCgpLgordm9pZCBRU3ltYmlhblBpcGVOb3RpZmllcjo6c2V0RW5hYmxlZChi
b29sIGVuYWJsZWQpIAoreyAKKyAgICBpZiAoIW1fbm90aWZpZXJBTykgeworICAgICAgICAvLyBX
ZSBkZWxldGVkIHRoZSBBTyBwcmV2aW91c2x5LCBzbyBmaXJlIGEgZGVmZXJyZWQgaW5pdGlhbGl6
YXRpb24gcmVxdWVzdCB2aWEgcG9zdEV2ZW50KCkuCisgICAgICAgIC8vIFRoaXMgaXMgcmVxdWly
ZWQgdG8gc3VwcG9ydCBRT2JqZWN0LT5tb3ZlVG9UaHJlYWQoKS4KKyAgICAgICAgLy8gTk9URTog
V2UgZGlzY2FyZCB0aGUgc3BlY2lmaWVkIGJvb2xlYW4gYXJndW1lbnQsIGFuZCBibGFua2V0IGVu
YWJsZSBsYXRlciBvbi4KKyAgICAgICAgUUV2ZW50KiBwb3N0VGhyZWFkQ2hhbmdlRXZlbnQgPSBu
ZXcgUUV2ZW50KFBvc3RUaHJlYWRDaGFuZ2VFdmVudFR5cGUpOworICAgICAgICBRQ29yZUFwcGxp
Y2F0aW9uOjpwb3N0RXZlbnQodGhpcywgcG9zdFRocmVhZENoYW5nZUV2ZW50KTsKKyAgICAgICAg
cmV0dXJuOyAKKyAgICB9CisKKyAgICBtX25vdGlmaWVyQU8tPnNldEVuYWJsZWQoZW5hYmxlZCk7
Cit9CisKKy8vIFRoaXMgZXZlbnQgaGFuZGxlciBleGlzdHMgcHVyZWx5IHRvIHN1cHBvcnQgUU9i
amVjdC0+bW92ZVRvVGhyZWFkLgorLy8gU3ltYmlhbiBhY3RpdmUgb2JqZWN0cyAoQU9zKSBhcmUg
Ym91bmQgdG8gYW4gQWN0aXZlIFNjaGVkdWxlciAoQVMpIHdoaWNoIGlzIHRocmVhZC1sb2NhbC4K
Ky8vIFRoZXJlZm9yZSwgdGhlIEFPIG11c3QgYmUgcmUtY3JlYXRlZCBvbiB0aGUgbmV3IHRocmVh
ZCBvbmNlIHRoZSBwYXJlbnQgUU9iamVjdCBoYXMgbW92ZWQKKy8vIHRvIHRoZSBuZXcgdGhyZWFk
LgorYm9vbCBRU3ltYmlhblBpcGVOb3RpZmllcjo6ZXZlbnQoUUV2ZW50KiBldikKK3sgICAgICAg
IAorICAgIGlmIChldi0+dHlwZSgpID09IFFFdmVudDo6VGhyZWFkQ2hhbmdlKSB7IC8vIHByZS1t
aWdyYXRpb24gZXZlbnQKKyAgICAgICAgaWYgKG1fbm90aWZpZXJBTykgeworICAgICAgICAgICAg
aWYgKG1fbm90aWZpZXJBTy0+SXNBZGRlZCgpKSB7CisgICAgICAgICAgICAgICAgYm9vbCBvbGRT
dGF0ZSA9IG1fbm90aWZpZXJBTy0+SXNBY3RpdmUoKTsKKyAgICAgICAgICAgICAgICBtX25vdGlm
aWVyQU8tPkRlcXVlKCk7CisgICAgICAgICAgICB9ICAgICAKKyAgICAgICAgICAgIGRlbGV0ZSBt
X25vdGlmaWVyQU87CisgICAgICAgICAgICBtX25vdGlmaWVyQU8gPSAwOworICAgICAgICB9Cisg
ICAgICAgIC8vIEZpcmUgYSBkZWZlcnJlZCBpbml0aWFsaXphdGlvbiByZXF1ZXN0LgorICAgICAg
ICBRRXZlbnQqIHBvc3RUaHJlYWRDaGFuZ2VFdmVudCA9IG5ldyBRRXZlbnQoUG9zdFRocmVhZENo
YW5nZUV2ZW50VHlwZSk7CisgICAgICAgIFFDb3JlQXBwbGljYXRpb246OnBvc3RFdmVudCh0aGlz
LCBwb3N0VGhyZWFkQ2hhbmdlRXZlbnQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IAor
ICAgIAorICAgIGlmIChldi0+dHlwZSgpID09IFBvc3RUaHJlYWRDaGFuZ2VFdmVudFR5cGUpIHsg
Ly8gY3VzdG9tLCBwb3N0LW1pZ3JhdGlvbiBldmVudAorICAgICAgICBpZiAoIW1fbm90aWZpZXJB
TykgeworICAgICAgICAgICAgbV9ub3RpZmllckFPID0gbmV3IFN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0KG1fcGlwZSwgbV90eXBlLCBtX2J5dGVzLCB0aGlzKTsKKyAgICAgICAgICAgIC8vIE5PVEU6
IFdlIHByZXN1bXB0aXZlbHkgZW5hYmxlIHdhdGNoLCBldmVuIHRob3VnaCBvbGRTdGF0ZSBtYXkg
YmUgZmFsc2UgYWJvdmUuCisgICAgICAgICAgICBtX25vdGlmaWVyQU8tPnNldEVuYWJsZWQodHJ1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7IAorICAgIH0KKworICAgIHJldHVy
biBmYWxzZTsKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3Jl
SVBDL3F0L1FTeW1iaWFuUGlwZU5vdGlmaWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3RpZmllci5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9RU3ltYmlhblBpcGVOb3Rp
Zmllci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY3IEBACisvKgorICAgIENvcHlyaWdodCAo
QykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLwor
CisjaWZuZGVmIFFTeW1iaWFuUGlwZU5vdGlmaWVyX2gKKyNkZWZpbmUgUVN5bWJpYW5QaXBlTm90
aWZpZXJfaAorCisjaW5jbHVkZSA8cWdsb2JhbC5oPgorI2lmZGVmIFFfT1NfU1lNQklBTgorI2lu
Y2x1ZGUgPFFFdmVudD4KKyNpbmNsdWRlIDxRT2JqZWN0PgorI2luY2x1ZGUgPHBsYXRmb3JtL3Jw
aXBlLmg+CisKK2NsYXNzIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0OworCitjbGFzcyBRU3ltYmlh
blBpcGVOb3RpZmllciA6IHB1YmxpYyBRT2JqZWN0IHsKKyAgICBRX09CSkVDVAorcHVibGljOiAK
KyAgICBlbnVtIEV2ZW50VHlwZSB7CisgICAgICAgIFBpcGVSZWFkRGF0YUF2YWlsYWJsZSwKKyAg
ICAgICAgUGlwZVdyaXRlU3BhY2VBdmFpbGFibGUKKyAgICB9OworICAgIFFTeW1iaWFuUGlwZU5v
dGlmaWVyKFJQaXBlJiwgRXZlbnRUeXBlLCBpbnQsIFFPYmplY3QqIHBhcmVudCA9IDApOworICAg
IH5RU3ltYmlhblBpcGVOb3RpZmllcigpOworICAgIGJvb2wgZXZlbnQoUUV2ZW50Kik7CisgICAg
CitwdWJsaWMgc2xvdHM6CisgICAgdm9pZCBzZXRFbmFibGVkKGJvb2wpOworCitzaWduYWxzOgor
ICAgIC8vIEVtaXR0ZWQgd2hlbiBQaXBlUmVhZERhdGFBdmFpbGFibGUgb2NjdXJzLgorICAgIHZv
aWQgcmVhZHlUb1JlYWQoaW50KTsKKyAgICAvLyBFbWl0dGVkIHdoZW4gUGlwZVdyaXRlU3BhY2VB
dmFpbGFibGUgb2NjdXJzLgorICAgIHZvaWQgcmVhZHlUb1dyaXRlKGludCk7CisgICAgdm9pZCBl
cnJvck9jY3VyZWQoaW50KTsKKyAgICAKK3ByaXZhdGU6IAorICAgIFJQaXBlIG1fcGlwZTsgCisg
ICAgRXZlbnRUeXBlIG1fdHlwZTsKKyAgICBpbnQgbV9ieXRlczsgICAKKyAgICBTeW1iaWFuUGlw
ZUFjdGl2ZU9iamVjdCogbV9ub3RpZmllckFPOworCisgICAgc3RhdGljIGNvbnN0IFFFdmVudDo6
VHlwZSBQb3N0VGhyZWFkQ2hhbmdlRXZlbnRUeXBlID0gKFFFdmVudDo6VHlwZSkoUUV2ZW50OjpV
c2VyICsgMTAwKTsKKyAgICAgICAgCisgICAgZnJpZW5kIGNsYXNzIFN5bWJpYW5QaXBlQWN0aXZl
T2JqZWN0OworICAgIFFfRElTQUJMRV9DT1BZKFFTeW1iaWFuUGlwZU5vdGlmaWVyKQorfTsKKwor
I2VuZGlmCisKKyNlbmRpZiAvLyBRU3ltYmlhblBpcGVOb3RpZmllcl9oCisKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlhblBpcGVBY3RpdmVPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvcXQvU3ltYmlh
blBpcGVBY3RpdmVPYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvUGxh
dGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAyIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaWYgUExBVEZPUk0oUVQpICYmIE9TKFNZTUJJQU4pCisjaW5jbHVkZSAiU3ltYmlhblBp
cGVBY3RpdmVPYmplY3QuaCIKKworI2luY2x1ZGUgIlFTeW1iaWFuUGlwZU5vdGlmaWVyLmgiCisj
aW5jbHVkZSA8cGxhdGZvcm0vcnBpcGUuaD4KKworU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OlN5
bWJpYW5QaXBlQWN0aXZlT2JqZWN0KFJQaXBlIHBpcGUsIFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpF
dmVudFR5cGUgdHlwZSwgaW50IHNwYWNlSW5CeXRlcywgUVN5bWJpYW5QaXBlTm90aWZpZXIqIHFx
KQorICAgIDogQ0FjdGl2ZShDQWN0aXZlOjpFUHJpb3JpdHlTdGFuZGFyZCkKKyAgICAsIG1fcGlw
ZShwaXBlKQorICAgICwgbV90eXBlKHR5cGUpCisgICAgLCBtX2J5dGVzKHNwYWNlSW5CeXRlcykK
KyAgICAsIG1fcGFyZW50KHFxKQoreyAKKyAgICBDQWN0aXZlU2NoZWR1bGVyOjpBZGQodGhpcyk7
Cit9CisgICAgCitTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6flN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0KCkgCit7IAorICAgIENhbmNlbCgpOworfQorCit2b2lkIFN5bWJpYW5QaXBlQWN0aXZlT2Jq
ZWN0OjpzZXRFbmFibGVkKGJvb2wgZW5hYmxlZCkgCit7CisgICAgaWYgKGVuYWJsZWQgJiYgIUlz
QWN0aXZlKCkpIHsgIAorICAgICAgICBpZiAobV90eXBlID09IFFTeW1iaWFuUGlwZU5vdGlmaWVy
OjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsgCisgICAgICAgICAgICBtX3BpcGUuTm90aWZ5RGF0
YUF2YWlsYWJsZShpU3RhdHVzKTsKKyAgICAgICAgICAgIFNldEFjdGl2ZSgpOyAvLyBiYXNlIGNs
YXNzIG1ldGhvZCB0byBkZWNsYXJlIHRoZSBhYm92ZSByZXF1ZXN0IGFzICJwZW5kaW5nIiBjb21w
bGV0aW9uCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChtX3R5cGUgPT0gUVN5bWJp
YW5QaXBlTm90aWZpZXI6OlBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlKSB7CisgICAgICAgICAgICBp
bnQgZnJlZVNwYWNlTmVlZGVkID0gbV9ieXRlcyA8IDAgPyAxIDogbV9ieXRlczsgCisgICAgICAg
ICAgICBtX3BpcGUuTm90aWZ5U3BhY2VBdmFpbGFibGUoZnJlZVNwYWNlTmVlZGVkLCBpU3RhdHVz
KTsKKyAgICAgICAgICAgIFNldEFjdGl2ZSgpOyAvLyBiYXNlIGNsYXNzIG1ldGhvZCB0byBkZWNs
YXJlIHRoZSBhYm92ZSByZXF1ZXN0IGFzICJwZW5kaW5nIiBjb21wbGV0aW9uCisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFlbmFibGVk
KSB7CisgICAgICAgIENhbmNlbCgpOyAvLyBBdXRvbWF0aWNhbGx5IGNhbGxzIERvQ2FuY2VsKCkK
KyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworLy8gVGhpcyBtZXRob2QgZ2V0cyBydW4gYnkg
dGhlIFN5bWJpYW4gT1MgQWN0aXZlIFNjaGVkdWxlciB3aGVuIHRoZQorLy8gcmVxdWVzdCBpbml0
aWF0ZWQgYnkgTm90aWZ5RGF0YUF2YWlsYWJsZSBhYm92ZSBpcyBtYXJrZWQgYXMgY29tcGxldGVk
Lgordm9pZCBTeW1iaWFuUGlwZUFjdGl2ZU9iamVjdDo6UnVuTCgpIAoreworICAgIGlmIChpU3Rh
dHVzICE9IEtFcnJOb25lKSB7CisgICAgICAgIGVtaXQgbV9wYXJlbnQtPmVycm9yT2NjdXJlZChp
U3RhdHVzLkludCgpKTsKKyAgICAgICAgcmV0dXJuOyAKKyAgICB9CisKKyAgICBpZiAobV90eXBl
ID09IFFTeW1iaWFuUGlwZU5vdGlmaWVyOjpQaXBlUmVhZERhdGFBdmFpbGFibGUpIHsKKyAgICAg
ICAgY29uc3QgaW50IGJ5dGVzQXZhaWxhYmxlID0gIG1fcGlwZS5TaXplKCk7CisgICAgICAgIGlm
IChieXRlc0F2YWlsYWJsZSA+IDApCisgICAgICAgICAgICBlbWl0IG1fcGFyZW50LT5yZWFkeVRv
UmVhZChieXRlc0F2YWlsYWJsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
aWYgKG1fdHlwZSA9PSBRU3ltYmlhblBpcGVOb3RpZmllcjo6UGlwZVdyaXRlU3BhY2VBdmFpbGFi
bGUpIHsgCisgICAgICAgIGVtaXQgbV9wYXJlbnQtPnJlYWR5VG9Xcml0ZSgwKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworfQorICAKK3ZvaWQgU3ltYmlhblBpcGVBY3RpdmVPYmplY3Q6OkRv
Q2FuY2VsKCkgCit7IAorICAgIGlmIChtX3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBp
cGVSZWFkRGF0YUF2YWlsYWJsZSkgeyAKKyAgICAgICAgbV9waXBlLkNhbmNlbERhdGFBdmFpbGFi
bGUoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgICAgICAgIAorICAgIGlmICht
X3R5cGUgPT0gUVN5bWJpYW5QaXBlTm90aWZpZXI6OlBpcGVXcml0ZVNwYWNlQXZhaWxhYmxlKSB7
IAorICAgICAgICBtX3BpcGUuQ2FuY2VsU3BhY2VBdmFpbGFibGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKK30KKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9y
bS9Db3JlSVBDL3F0L1N5bWJpYW5QaXBlQWN0aXZlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1iaWFuUGlwZUFjdGl2ZU9iamVjdC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy9xdC9TeW1i
aWFuUGlwZUFjdGl2ZU9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgor
ICAgIENvcHlyaWdodCAoQykgMjAxMSBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKwor
ICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisqLworCisjaWZuZGVmIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKyNkZWZp
bmUgU3ltYmlhblBpcGVBY3RpdmVPYmplY3RfaAorCisjaW5jbHVkZSAiUVN5bWJpYW5QaXBlTm90
aWZpZXIuaCIKKyNpbmNsdWRlICJxZ2xvYmFsLmgiCisjaW5jbHVkZSA8ZTMyYmFzZS5oPgorI2lu
Y2x1ZGUgPHBsYXRmb3JtL3JwaXBlLmg+CisKK2NsYXNzIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0
IDogcHVibGljIENBY3RpdmUgeworcHVibGljOgorICAgIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0
KFJQaXBlLCBRU3ltYmlhblBpcGVOb3RpZmllcjo6RXZlbnRUeXBlLCBpbnQsIFFTeW1iaWFuUGlw
ZU5vdGlmaWVyKik7CisgICAgflN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0KCk7CisgICAgCitwcml2
YXRlOgorICAgIHZvaWQgc2V0RW5hYmxlZChib29sKTsKKyAgICAKKyAgICB2b2lkIFJ1bkwoKTsK
KyAgICB2b2lkIERvQ2FuY2VsKCk7IAorCisgICAgUlBpcGUgbV9waXBlOworICAgIFFTeW1iaWFu
UGlwZU5vdGlmaWVyOjpFdmVudFR5cGUgbV90eXBlOworICAgIGludCBtX2J5dGVzOyAvLyBvbmx5
IHVzZWQgZm9yIHdyaXRlIHBpcGU7IC0xIG1lYW5zIHVudXNlZAorICAgIAorICAgIFFTeW1iaWFu
UGlwZU5vdGlmaWVyICogbV9wYXJlbnQ7CisgICAgZnJpZW5kIGNsYXNzIFFTeW1iaWFuUGlwZU5v
dGlmaWVyOworfTsKKworI2VuZGlmIC8vIFN5bWJpYW5QaXBlQWN0aXZlT2JqZWN0X2gKKwpJbmRl
eDogU291cmNlL1dlYktpdDIvUGxhdGZvcm0vQ29yZUlQQy91bml4L0F0dGFjaG1lbnRVbml4LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQXR0
YWNobWVudFVuaXguY3BwCShyZXZpc2lvbiA4NzE0NikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRm
b3JtL0NvcmVJUEMvdW5peC9BdHRhY2htZW50VW5peC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKFVOSVhfRE9N
QUlOX1NPQ0tFVFMpCiAjaW5jbHVkZSAiQXR0YWNobWVudC5oIgogCiAjaW5jbHVkZSA8dW5pc3Rk
Lmg+CkBAIC00OCwzICs0OSw0IEBAIHZvaWQgQXR0YWNobWVudDo6ZGlzcG9zZSgpCiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIENvcmVJUEMKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdDIvUGxhdGZv
cm0vQ29yZUlQQy91bml4L0Nvbm5lY3Rpb25Vbml4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9QbGF0Zm9ybS9Db3JlSVBDL3VuaXgvQ29ubmVjdGlvblVuaXguY3BwCShyZXZpc2lv
biA4NzE0NikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL0NvcmVJUEMvdW5peC9Db25uZWN0
aW9uVW5peC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCisjaWYgVVNFKFVOSVhfRE9NQUlOX1NPQ0tFVFMpCiAjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgogCiAjaW5jbHVkZSAiQXJndW1lbnRFbmNvZGVyLmgiCkBAIC0zOTksMyAr
NDAwLDQgQEAgdm9pZCBDb25uZWN0aW9uOjpzZXRTaG91bGRDbG9zZUNvbm5lY3RpbwogI2VuZGlm
CiAKIH0gLy8gbmFtZXNwYWNlIENvcmVJUEMKKyNlbmRpZiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4uY3BwCShyZXZpc2lvbiA4
NzE0NikKKysrIFNvdXJjZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1NoYXJlZE1lbW9yeVN5bWJpYW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNyArNjksNiBAQCBib29sIFNoYXJlZE1lbW9yeTo6
SGFuZGxlOjpkZWNvZGUoQ29yZUlQCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLS8vIEZJWE1FOiBU
byBiZSByZW1vdmVkIGFzIHBhcnQgb2YgQnVnIDU1ODc3Ci1Db3JlSVBDOjpBdHRhY2htZW50IFNo
YXJlZE1lbW9yeTo6SGFuZGxlOjpyZWxlYXNlVG9BdHRhY2htZW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gQ29yZUlQQzo6QXR0YWNobWVudCgtMSwgMCk7Ci19Ci0KLS8vIEZJWE1FOiBUbyBiZSBy
ZW1vdmVkIGFzIHBhcnQgb2YgQnVnIDU1ODc3Ci12b2lkIFNoYXJlZE1lbW9yeTo6SGFuZGxlOjph
ZG9wdEZyb21BdHRhY2htZW50KGludCwgc2l6ZV90KQotewotfQotCiBQYXNzUmVmUHRyPFNoYXJl
ZE1lbW9yeT4gU2hhcmVkTWVtb3J5OjpjcmVhdGUoc2l6ZV90IHNpemUpCiB7CiAgICAgLy8gT24g
U3ltYmlhbiwgZ2xvYmFsIGNodW5rcyAoc2hhcmVkIG1lbW9yeSBzZWdtZW50cykgaGF2ZSBzeXN0
ZW0tdW5pcXVlIG5hbWVzLCBzbyB3ZSBwaWNrIGEgcmFuZG9tCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9QbGF0Zm9ybS9xdC9Xb3JrUXVldWVRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dDIvUGxhdGZvcm0vcXQvV29ya1F1ZXVlUXQuY3BwCShyZXZpc2lvbiA4NzE0NikKKysrIFNvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtL3F0L1dvcmtRdWV1ZVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNiArNzcsMjMgQEAgcHVibGljOgogICAgIFdvcmtJdGVtKiBtX3dvcmtJdGVtOwogfTsKIAor
I2lmIE9TKFNZTUJJQU4pCitRU3ltYmlhblBpcGVOb3RpZmllciogV29ya1F1ZXVlOjpyZWdpc3Rl
clBpcGVFdmVudEhhbmRsZXIoUlBpcGUgcGlwZSwgUVN5bWJpYW5QaXBlTm90aWZpZXI6OkV2ZW50
VHlwZSB0eXBlLCBQYXNzT3duUHRyPFdvcmtJdGVtPiB3b3JrSXRlbSkgCit7CisgICAgUVN5bWJp
YW5QaXBlTm90aWZpZXIqIG5vdGlmaWVyID0gbmV3IFFTeW1iaWFuUGlwZU5vdGlmaWVyKHBpcGUs
IHR5cGUsIC0xKTsKKyAgICAgCisgICAgbm90aWZpZXItPnNldEVuYWJsZWQoZmFsc2UpOworICAg
IG5vdGlmaWVyLT5tb3ZlVG9UaHJlYWQobV93b3JrVGhyZWFkKTsKKyAgICAKKyAgICBXb3JrUXVl
dWU6OldvcmtJdGVtUXQqIGl0ZW1RdCA9IG5ldyBXb3JrUXVldWU6OldvcmtJdGVtUXQodGhpcywg
bm90aWZpZXIsIFNJR05BTChyZWFkeVRvUmVhZChpbnQpKSwgd29ya0l0ZW0ubGVha1B0cigpKTsK
KyAgICAKKyAgICBpdGVtUXQtPm1vdmVUb1RocmVhZChtX3dvcmtUaHJlYWQpOyAgICAKKyAgICAK
KyAgICBub3RpZmllci0+c2V0RW5hYmxlZCh0cnVlKTsKKyAgICAKKyAgICByZXR1cm4gbm90aWZp
ZXI7Cit9CisjZWxzZQogUVNvY2tldE5vdGlmaWVyKiBXb3JrUXVldWU6OnJlZ2lzdGVyU29ja2V0
RXZlbnRIYW5kbGVyKGludCBzb2NrZXREZXNjcmlwdG9yLCBRU29ja2V0Tm90aWZpZXI6OlR5cGUg
dHlwZSwgUGFzc093blB0cjxXb3JrSXRlbT4gd29ya0l0ZW0pCiB7CiAgICAgQVNTRVJUKG1fd29y
a1RocmVhZCk7CkBAIC04OSw2ICsxMDYsNyBAQCBRU29ja2V0Tm90aWZpZXIqIFdvcmtRdWV1ZTo6
cmVnaXN0ZXJTb2NrCiAgICAgbm90aWZpZXItPnNldEVuYWJsZWQodHJ1ZSk7CiAgICAgcmV0dXJu
IG5vdGlmaWVyOwogfQorI2VuZGlmCiAKIHZvaWQgV29ya1F1ZXVlOjpwbGF0Zm9ybUluaXRpYWxp
emUoY29uc3QgY2hhciopCiB7CkBAIC0xMjAsOCArMTM4LDEzIEBAIHZvaWQgV29ya1F1ZXVlOjpz
Y2hlZHVsZVdvcmtBZnRlckRlbGF5KFAKIAogdm9pZCBXb3JrUXVldWU6OnNjaGVkdWxlV29ya09u
VGVybWluYXRpb24oV2ViS2l0OjpQbGF0Zm9ybVByb2Nlc3NJZGVudGlmaWVyIHByb2Nlc3MsIFBh
c3NPd25QdHI8V29ya0l0ZW0+IHdvcmtJdGVtKQogeworI2lmIE9TKFNZTUJJQU4pCisgICAgLy8g
RklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IGEgcHJvY2VzcyB3YXRjaGVyIHVzaW5nIFN5bWJpYW4g
UlByb2Nlc3MuCisgICAgbm90SW1wbGVtZW50ZWQoKTsgCisjZWxzZQogICAgIFdvcmtRdWV1ZTo6
V29ya0l0ZW1RdCogaXRlbVF0ID0gbmV3IFdvcmtRdWV1ZTo6V29ya0l0ZW1RdCh0aGlzLCBwcm9j
ZXNzLCBTSUdOQUwoZmluaXNoZWQoaW50LCBRUHJvY2Vzczo6RXhpdFN0YXR1cykpLCB3b3JrSXRl
bS5sZWFrUHRyKCkpOwogICAgIGl0ZW1RdC0+bW92ZVRvVGhyZWFkKG1fd29ya1RocmVhZCk7Cisj
ZW5kaWYKIH0KIAogI2luY2x1ZGUgIldvcmtRdWV1ZVF0Lm1vYyIKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1Byb2Nlc3NMYXVuY2hl
clF0LmNwcAkocmV2aXNpb24gODcxNDYpCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1
bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsy
NSw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPFF0Q29yZS9xZ2xv
YmFsLmg+CisjaWZuZGVmIFFfT1NfU1lNQklBTgogI2luY2x1ZGUgIlByb2Nlc3NMYXVuY2hlci5o
IgogCiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgpAQCAtMzcsNyArMzksNiBAQAogI2luY2x1ZGUg
PFFNZXRhVHlwZT4KICNpbmNsdWRlIDxRUHJvY2Vzcz4KICNpbmNsdWRlIDxRU3RyaW5nPgotI2lu
Y2x1ZGUgPFF0Q29yZS9xZ2xvYmFsLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Ob3RJbXBsZW1lbnRl
ZC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KQEAgLTgzLDE2ICs4
NCw2IEBAIHZvaWQgUXRXZWJQcm9jZXNzOjpzZXR1cENoaWxkUHJvY2VzcygpCiAjZW5kaWYKIH0K
IAotI2lmIE9TKFNZTUJJQU4pCi0vLyBGSVhNRTogU3ltYmlhbidzIFBPU0lYIGxheWVyIGRvZXNu
J3QgaGF2ZSBhIHNvY2tldHBhaXIoKSwgc28KLS8vIHRoZSBmb2xsb3dpbmcgaXMganVzdCB0byBm
aXggdGhlIGJ1aWxkIHVudGlsIGEgcHVyZSBTeW1iaWFuCi0vLyBJUEMgaW1wbGVtZW50YXRpb24g
bGFuZHMgb24gdHJ1bmsKLXN0YXRpYyBpbnQgc29ja2V0cGFpcihpbnQsIGludCwgaW50ICwgaW50
WzJdKQotewotICAgIHJldHVybiAtMTsKLX0KLSNlbmRpZgotCiB2b2lkIFByb2Nlc3NMYXVuY2hl
cjo6bGF1bmNoUHJvY2VzcygpCiB7CiAgICAgUVN0cmluZyBhcHBsaWNhdGlvblBhdGggPSBRTGF0
aW4xU3RyaW5nKCIlMSAlMiIpOwpAQCAtMTY0LDMgKzE1NSw1IEBAIHZvaWQgUHJvY2Vzc0xhdW5j
aGVyOjpwbGF0Zm9ybUludmFsaWRhdGUKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjaW5jbHVk
ZSAiUHJvY2Vzc0xhdW5jaGVyUXQubW9jIgorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9Qcm9jZXNzTGF1bmNoZXJTeW1iaWFuLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5j
aGVyU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
TGF1bmNoZXIvcXQvUHJvY2Vzc0xhdW5jaGVyU3ltYmlhbi5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODUgQEAKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpZiBQTEFURk9STShRVCkgJiYgT1Mo
U1lNQklBTikKKyNpbmNsdWRlICJQcm9jZXNzTGF1bmNoZXIuaCIKKworI2luY2x1ZGUgIkNvbm5l
Y3Rpb24uaCIKKyNpbmNsdWRlICJSdW5Mb29wLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL3JwaXBlLmgiCisjaW5jbHVkZSA8UURlYnVnPgorI2luY2x1ZGUg
PHFnbG9iYWwuaD4KKworX0xJVChLV29ya2VyUHJvY2Vzc05hbWUsICJRdFdlYlByb2Nlc3MuZXhl
Iik7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwor
dm9pZCBQcm9jZXNzTGF1bmNoZXI6OmxhdW5jaFByb2Nlc3MoKQoreworICAgIC8vIE1ha2UgYSBw
YWlyIG9mIGhhbGYtZHVwbGV4IHBpcGVzLgorICAgIFJQaXBlKiBsb2NhbFBpcGVzID0gbmV3IFJQ
aXBlWzJdOyAKKyAgICBSUGlwZSogcmVtb3RlUGlwZXMgPSBuZXcgUlBpcGVbMl07IAorICAgICAK
KyAgICBSUGlwZTo6SW5pdCgpOworICAgIC8vIENyZWF0ZSBhIHBpcGUuIEZpcnN0IGFyZyBpcyB0
aGUgcmVhZC1lbmQgUlBpcGUgYW5kIHRoZSBzZWNvbmQgaXMgdGhlIHdyaXRlLWVuZC4gCisgICAg
UlBpcGU6OkNyZWF0ZShDb3JlSVBDOjpDb25uZWN0aW9uOjpNYXhQaXBlQ2FwYWNpdHksIHJlbW90
ZVBpcGVzWzBdLCBsb2NhbFBpcGVzWzFdKTsKKyAgICBSUGlwZTo6Q3JlYXRlKENvcmVJUEM6OkNv
bm5lY3Rpb246Ok1heFBpcGVDYXBhY2l0eSwgbG9jYWxQaXBlc1swXSwgcmVtb3RlUGlwZXNbMV0p
OworICAgIAorICAgIC8vIFByZXBhcmUgdG8gbGF1bmNoIHdvcmtlciBwcm9jZXNzLgorICAgIFJQ
cm9jZXNzKiB3b3JrZXJQcm9jZXNzID0gbmV3IFJQcm9jZXNzKCk7CisgICAgVEludCBlcnJvciA9
IHdvcmtlclByb2Nlc3MtPkNyZWF0ZShLV29ya2VyUHJvY2Vzc05hbWUoKSwgS051bGxEZXNDKTsK
KyAgICBpZiAoZXJyb3IpCisgICAgICAgIHFDcml0aWNhbCgpIDw8ICIgRXJyb3IgaW5pdGlhbGl6
aW5nIFdlYktpdDIgd2ViIHByb2Nlc3MgIiA8PCBlcnJvcjsKKworICAgIC8vIFBhc3Mgb3duZXJz
aGlwIG9mIHBpcGVzIHZpYSBSUHJvY2VzcycgImVudmlyb25tZW50IGRhdGEgc2xvdHMiLiAKKyAg
ICAvLyBUaGUgY2hvaWNlIG9mIDMgJiA0IGlzIGFyYml0cmFyeSBhbmQgc2hvdWxkIG1hdGNoIHRo
ZSB1c2Ugb24gdGhlIHJlY2VpdmluZyBzaWRlIChDb25uZWN0aW9uLmNwcCkuCisgICAgd29ya2Vy
UHJvY2Vzcy0+U2V0UGFyYW1ldGVyKDMsIHJlbW90ZVBpcGVzWzBdKTsgLy8gcmVhZGVyCisgICAg
d29ya2VyUHJvY2Vzcy0+U2V0UGFyYW1ldGVyKDQsIHJlbW90ZVBpcGVzWzFdKTsgLy8gd3JpdGVy
CisgICAgICAgICAgICAgICAgCisgICAgLy8gQmxvY2sgdW50aWwgdGhlIHJlbW90ZSBwcm9jZXNz
IGlzIHVwLgorICAgIHdvcmtlclByb2Nlc3MtPlJlc3VtZSgpOworICAgIFRSZXF1ZXN0U3RhdHVz
IGxhdW5jaFN0YXR1czsgCisgICAgd29ya2VyUHJvY2Vzcy0+UmVuZGV6dm91cyhsYXVuY2hTdGF0
dXMpOyAKKyAgICBVc2VyOjpXYWl0Rm9yUmVxdWVzdChsYXVuY2hTdGF0dXMpOworICAgIAorICAg
IGlmIChsYXVuY2hTdGF0dXMuSW50KCkgIT0gS0Vyck5vbmUpIAorICAgICAgICBxQ3JpdGljYWwo
KSA8PCAiIFdvcmtlciBwcm9jZXNzIGZhaWxlZCB0byBsYXVuY2ggIiA8PCBsYXVuY2hTdGF0dXMu
SW50KCk7CisgICAgCisgICAgLy8gQ2xvc2UgdGhlIHBpcGUgZW5kcyB3ZSBqdXN0IHBhc3NlZCB0
byB0aGUgcmVtb3RlLgorICAgIHJlbW90ZVBpcGVzWzBdLkNsb3NlKCk7IAorICAgIHJlbW90ZVBp
cGVzWzFdLkNsb3NlKCk7CisgICAgZGVsZXRlW10gcmVtb3RlUGlwZXM7CisgICAgCisgICAgQ29y
ZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyID0gbG9jYWxQaXBlczsgIAor
ICAgIAorICAgIC8vIERlY2xhcmUgbGF1bmNoIHByb2Nlc3MgYXMgZG9uZS4gTm90ZSB0aGF0IHRo
aXMgY2xhc3Mgb3ducyAnd29ya2VyUHJvY2VzcycsIGJ1dCBDb25uZWN0aW9uIG93bnMgJ2lkZW50
aWZpZXInLgorICAgIFJ1bkxvb3A6Om1haW4oKS0+c2NoZWR1bGVXb3JrKFdvcmtJdGVtOjpjcmVh
dGUodGhpcywgJldlYktpdDo6UHJvY2Vzc0xhdW5jaGVyOjpkaWRGaW5pc2hMYXVuY2hpbmdQcm9j
ZXNzLCB3b3JrZXJQcm9jZXNzLCBpZGVudGlmaWVyKSk7Cit9CisKK3ZvaWQgUHJvY2Vzc0xhdW5j
aGVyOjp0ZXJtaW5hdGVQcm9jZXNzKCkKK3sKKyAgICBpZiAoIW1fcHJvY2Vzc0lkZW50aWZpZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEltcG9ydGFudDogS2lsbGluZyBhbm90aGVyIHBy
b2Nlc3MgKGV2ZW4gaWYgd2Ugc3Bhd25lZCBpdCkgcmVxdWlyZXMgUG93ZXJNYW5hZ2VtZW50IGNh
cGFiaWxpdHksCisgICAgLy8gd2hpY2ggaXMgYSBoaWdoIGJhciB0byBqdW1wIG92ZXIgZm9yIGFu
eSB1c2VyIGFwcGxpY2F0aW9uLiBJdCdzIGFsc28gYSBzZWN1cml0eSByaXNrLgorICAgIFJQcm9j
ZXNzIG1lOworICAgIGlmIChtZS5IYXNDYXBhYmlsaXR5KEVDYXBhYmlsaXR5UG93ZXJNZ210KSkK
KyAgICAgICAgbV9wcm9jZXNzSWRlbnRpZmllci0+VGVybWluYXRlKEtFcnJOb25lKTsKK30KKwor
dm9pZCBQcm9jZXNzTGF1bmNoZXI6OnBsYXRmb3JtSW52YWxpZGF0ZSgpCit7CisgICAgaWYgKCFt
X3Byb2Nlc3NJZGVudGlmaWVyKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Byb2Nlc3NJZGVu
dGlmaWVyLT5DbG9zZSgpOworICAgIGRlbGV0ZSBtX3Byb2Nlc3NJZGVudGlmaWVyOworICAgIG1f
cHJvY2Vzc0lkZW50aWZpZXIgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9MYXVuY2hlci9xdC9UaHJlYWRM
YXVuY2hlclF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvTGF1
bmNoZXIvcXQvVGhyZWFkTGF1bmNoZXJRdC5jcHAJKHJldmlzaW9uIDg3MTQ2KQorKysgU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0xhdW5jaGVyL3F0L1RocmVhZExhdW5jaGVyUXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NywzMSArNDcsNDEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCitzdGF0aWMgQ29yZUlQQzo6Q29ubmVjdGlvbjo6SWRlbnRp
ZmllciBpbnZhbGlkQ29ubmVjdGlvbklkZW50aWZpZXIoKQoreyAKKyAgICBDb3JlSVBDOjpDb25u
ZWN0aW9uOjpJZGVudGlmaWVyIGlkZW50aWZpZXI7IAorI2lmIE9TKFNZTUJJQU4pCisgICAgaWRl
bnRpZmllciA9IDA7IC8vIGludmFsaWQgUlByb2Nlc3MqCisjZWxzZQorICAgIGlkZW50aWZpZXIg
PSAtMTsgLy8gaW52YWxpZCBzb2NrZXQgZGVzY3JpcHRvcgorI2VuZGlmCisgICAgcmV0dXJuIGlk
ZW50aWZpZXI7Cit9CisKIHN0YXRpYyB2b2lkKiB3ZWJUaHJlYWRCb2R5KHZvaWQqIC8qIGNvbnRl
eHQgKi8pCiB7CiAgICAgLy8gSW5pdGlhbGl6YXRpb24KICAgICBKU0M6OmluaXRpYWxpemVUaHJl
YWRpbmcoKTsKICAgICBXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkKCk7CiAKLSAgICAvLyBGSVhN
RTogV2UgZG8gbm90IHN1cHBvcnQgdGhyZWFkZWQgbW9kZSBmb3Igbm93LgorICAgIC8vIEZJWE1F
OiBUaGUgUXQgcG9ydCBkb2VzIG5vdCBzdXBwb3J0IHRocmVhZGVkIG1vZGUgZm9yIG5vdy4KIAot
ICAgIFdlYlByb2Nlc3M6OnNoYXJlZCgpLmluaXRpYWxpemUoLTEsIFJ1bkxvb3A6OmN1cnJlbnQo
KSk7CisgICAgV2ViUHJvY2Vzczo6c2hhcmVkKCkuaW5pdGlhbGl6ZShpbnZhbGlkQ29ubmVjdGlv
bklkZW50aWZpZXIoKSwgUnVuTG9vcDo6Y3VycmVudCgpKTsKICAgICBSdW5Mb29wOjpydW4oKTsK
IAogICAgIHJldHVybiAwOwogfQogCiBDb3JlSVBDOjpDb25uZWN0aW9uOjpJZGVudGlmaWVyIFRo
cmVhZExhdW5jaGVyOjpjcmVhdGVXZWJUaHJlYWQoKQotewotICAgIHNyYW5kb20odGltZSgwKSk7
Ci0gICAgaW50IGNvbm5lY3Rpb25JZGVudGlmaWVyID0gcmFuZG9tKCk7Ci0KLSAgICBpZiAoIWNy
ZWF0ZVRocmVhZCh3ZWJUaHJlYWRCb2R5LCByZWludGVycHJldF9jYXN0PHZvaWQqPihjb25uZWN0
aW9uSWRlbnRpZmllciksICJXZWJLaXQyOiBXZWJUaHJlYWQiKSkgeworeyAgCisgICAgLy8gRklY
TUU6IFRoZSBRdCBwb3J0IGRvZXMgbm90IHN1cHBvcnQgdGhyZWFkZWQgbW9kZSBmb3Igbm93Lgor
ICAgIAorICAgIGlmICghY3JlYXRlVGhyZWFkKHdlYlRocmVhZEJvZHksIDAsICJXZWJLaXQyOiBX
ZWJUaHJlYWQiKSkgewogICAgICAgICBxV2FybmluZygpIDw8ICJmYWlsZWQgc3RhcnRpbmcgdGhy
ZWFkIjsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBpbnZhbGlkQ29ubmVjdGlv
bklkZW50aWZpZXIoKTsKICAgICB9CiAKLSAgICByZXR1cm4gY29ubmVjdGlvbklkZW50aWZpZXI7
CisgICAgcmV0dXJuIGludmFsaWRDb25uZWN0aW9uSWRlbnRpZmllcigpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvcXQvV2ViUHJv
Y2Vzc01haW5RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9x
dC9XZWJQcm9jZXNzTWFpblF0LmNwcAkocmV2aXNpb24gODcxNDYpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL3F0L1dlYlByb2Nlc3NNYWluUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIsNiArMTMyLDExIEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVQcm94eSgpCiAKIFFfREVDTF9F
WFBPUlQgaW50IFdlYlByb2Nlc3NNYWluUXQoaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogeworI2lm
IGRlZmluZWQoUV9PU19TWU1CSUFOKQorICAgIFJQcm9jZXNzIHByb2Nlc3M7IAorICAgIHByb2Nl
c3MuU2V0UHJpb3JpdHkoRVByaW9yaXR5QmFja2dyb3VuZCk7CisjZW5kaWYKKyAgICAKICAgICBR
QXBwbGljYXRpb246OnNldEdyYXBoaWNzU3lzdGVtKFFMYXRpbjFTdHJpbmcoInJhc3RlciIpKTsK
ICAgICBRQXBwbGljYXRpb24qIGFwcCA9IG5ldyBRQXBwbGljYXRpb24oYXJnYywgYXJndik7CiAj
aWZuZGVmIE5ERUJVRwpAQCAtMTUzLDYgKzE1OCwxMSBAQCBRX0RFQ0xfRVhQT1JUIGludCBXZWJQ
cm9jZXNzTWFpblF0KGludCBhCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAg
IFJ1bkxvb3A6OmluaXRpYWxpemVNYWluUnVuTG9vcCgpOwogCisgICAgQ29yZUlQQzo6Q29ubmVj
dGlvbjo6SWRlbnRpZmllciBpZGVudGlmaWVyOyAKKyNpZiBPUyhTWU1CSUFOKQorICAgIC8vIFdl
IG9idGFpbiB0aGUgaGFuZGxlcyBkaXJlY3RseSBmcm9tIHRoZSAiZW52aXJvbm1lbnQgZGF0YSBz
bG90cyIgb2YgdGhlIFJQcm9jZXNzCisgICAgaWRlbnRpZmllciA9IDA7IAorI2Vsc2UKICAgICAv
LyBDcmVhdGUgdGhlIGNvbm5lY3Rpb24uCiAgICAgaWYgKGFwcC0+YXJndW1lbnRzKCkuc2l6ZSgp
IDw9IDEpIHsKICAgICAgICAgcURlYnVnKCkgPDwgIkVycm9yOiB3cm9uZyBudW1iZXIgb2YgYXJn
dW1lbnRzLiI7CkBAIC0xNjAsMTIgKzE3MCwxMyBAQCBRX0RFQ0xfRVhQT1JUIGludCBXZWJQcm9j
ZXNzTWFpblF0KGludCBhCiAgICAgfQogCiAgICAgYm9vbCB3YXNOdW1iZXIgPSBmYWxzZTsKLSAg
ICBpbnQgaWRlbnRpZmllciA9IGFwcC0+YXJndW1lbnRzKCkuYXQoMSkudG9JbnQoJndhc051bWJl
ciwgMTApOworICAgIGlkZW50aWZpZXIgPSBhcHAtPmFyZ3VtZW50cygpLmF0KDEpLnRvSW50KCZ3
YXNOdW1iZXIsIDEwKTsKICAgICBpZiAoIXdhc051bWJlcikgewogICAgICAgICBxRGVidWcoKSA8
PCAiRXJyb3I6IGNvbm5lY3Rpb24gaWRlbnRpZmllciB3cm9uZy4iOwogICAgICAgICByZXR1cm4g
MTsKICAgICB9Ci0KKyNlbmRpZgorICAgIAogICAgIFdlYktpdDo6V2ViUHJvY2Vzczo6c2hhcmVk
KCkuaW5pdGlhbGl6ZShpZGVudGlmaWVyLCBSdW5Mb29wOjptYWluKCkpOwogCiAgICAgUnVuTG9v
cDo6cnVuKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>