<?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>110854</bug_id>
          
          <creation_ts>2013-02-26 00:27:00 -0800</creation_ts>
          <short_desc>Unused Structure property tables waste 14MB on Membuster.</short_desc>
          <delta_ts>2013-03-06 04:59:52 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, Performance</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>110882</dependson>
    
    <dependson>111416</dependson>
    
    <dependson>111447</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>beidson</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>841702</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 00:27:00 -0800</bug_when>
    <thetext>&lt;rdar://problem/13292104&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841703</commentid>
    <comment_count>1</comment_count>
      <attachid>190221</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 00:28:39 -0800</bug_when>
    <thetext>Created attachment 190221
Proposed patch

Lay it on me, fellas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841711</commentid>
    <comment_count>2</comment_count>
      <attachid>190221</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-26 00:35:13 -0800</bug_when>
    <thetext>Comment on attachment 190221
Proposed patch

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

Basically, r=me, but with the slight changes.

&gt; Source/JavaScriptCore/runtime/PropertyMapHashTable.h:280
&gt; +inline PropertyTable* PropertyTable::create(JSGlobalData&amp; globalData, unsigned initialCapacity)
&gt; +{
&gt; +    PropertyTable* table = new (NotNull, allocateCell&lt;PropertyTable&gt;(globalData.heap)) PropertyTable(globalData, initialCapacity);
&gt; +    table-&gt;finishCreation(globalData);
&gt; +    return table;
&gt; +}
&gt; +
&gt; +inline PropertyTable* PropertyTable::clone(JSGlobalData&amp; globalData, JSCell* owner, const PropertyTable&amp; other)
&gt; +{
&gt; +    PropertyTable* table = new (NotNull, allocateCell&lt;PropertyTable&gt;(globalData.heap)) PropertyTable(globalData, owner, other);
&gt; +    table-&gt;finishCreation(globalData);
&gt; +    return table;
&gt; +}
&gt; +
&gt; +inline PropertyTable* PropertyTable::clone(JSGlobalData&amp; globalData, JSCell* owner, unsigned initialCapacity, const PropertyTable&amp; other)
&gt; +{
&gt; +    PropertyTable* table = new (NotNull, allocateCell&lt;PropertyTable&gt;(globalData.heap)) PropertyTable(globalData, owner, initialCapacity, other);
&gt; +    table-&gt;finishCreation(globalData);
&gt; +    return table;
&gt; +}
&gt; +
&gt; +inline PropertyTable::PropertyTable(JSGlobalData&amp; globalData, unsigned initialCapacity)
&gt; +    : JSCell(globalData, globalData.propertyTableStructure.get())
&gt; +    , m_indexSize(sizeForCapacity(initialCapacity))

While you&apos;re creating PropertyMapHashTable.cpp, you could out-of-line these methods.  They do no good being inline.

&gt; Source/JavaScriptCore/runtime/Structure.cpp:78
&gt; +const ClassInfo PropertyTable::s_info = { &quot;PropertyTable&quot;, 0, 0, 0, CREATE_METHOD_TABLE(PropertyTable) };
&gt; +
&gt; +void PropertyTable::visitChildren(JSCell* cell, SlotVisitor&amp; visitor)
&gt; +{
&gt; +    PropertyTable* thisObject = jsCast&lt;PropertyTable*&gt;(cell);
&gt; +    ASSERT_GC_OBJECT_INHERITS(thisObject, &amp;s_info);
&gt; +    ASSERT(thisObject-&gt;structure()-&gt;typeInfo().overridesVisitChildren());
&gt; +
&gt; +    JSCell::visitChildren(thisObject, visitor);
&gt; +
&gt; +    PropertyTable::iterator end = thisObject-&gt;end();
&gt; +    for (PropertyTable::iterator ptr = thisObject-&gt;begin(); ptr != end; ++ptr)
&gt; +        visitor.append(&amp;ptr-&gt;specificValue);
&gt; +}
&gt; +
&gt;  #if DUMP_STRUCTURE_ID_STATISTICS
&gt;  static HashSet&lt;Structure*&gt;&amp; liveStructureSet = *(new HashSet&lt;Structure*&gt;);

These should be in PropertyMapHashTable.cpp.  Or just PropertyTable.cpp.  Your pick of name.  But I wouldn&apos;t pollute Structure.cpp with these things.

(I know, adding .cpp files to WebKit is soooper hard, but at least here you don&apos;t have to do gyp.  So one less build system.)

&gt; Source/JavaScriptCore/runtime/StructureInlines.h:200
&gt; +inline bool Structure::putWillGrowOutOfLineStorage()
&gt; +{
&gt; +    checkOffsetConsistency();
&gt; +
&gt; +    ASSERT(outOfLineCapacity() &gt;= outOfLineSize());
&gt; +
&gt; +    if (!m_propertyTable) {
&gt; +        unsigned currentSize = numberOfOutOfLineSlotsForLastOffset(m_offset);
&gt; +        ASSERT(outOfLineCapacity() &gt;= currentSize);
&gt; +        return currentSize == outOfLineCapacity();
&gt; +    }
&gt; +
&gt; +    ASSERT(totalStorageCapacity() &gt;= m_propertyTable-&gt;propertyStorageSize());
&gt; +    if (m_propertyTable-&gt;hasDeletedOffset())
&gt; +        return false;
&gt; +
&gt; +    ASSERT(totalStorageCapacity() &gt;= m_propertyTable-&gt;size());
&gt; +    return m_propertyTable-&gt;size() == totalStorageCapacity();

Might as well drop this method into Structure.cpp instead of having it be inline.  It meets the basic criteria for not being inline: it&apos;s not called often enough and it has a fair bit of code (multiple loads and branches).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841713</commentid>
    <comment_count>3</comment_count>
      <attachid>190221</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-26 00:36:15 -0800</bug_when>
    <thetext>Comment on attachment 190221
Proposed patch

Attachment 190221 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/16744860</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841720</commentid>
    <comment_count>4</comment_count>
      <attachid>190221</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-26 00:39:33 -0800</bug_when>
    <thetext>Comment on attachment 190221
Proposed patch

Attachment 190221 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/16752800</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841723</commentid>
    <comment_count>5</comment_count>
      <attachid>190221</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-26 00:41:00 -0800</bug_when>
    <thetext>Comment on attachment 190221
Proposed patch

Attachment 190221 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/16747817</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841816</commentid>
    <comment_count>6</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 02:14:23 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; While you&apos;re creating PropertyMapHashTable.cpp, you could out-of-line these methods.  They do no good being inline.

Sure.

&gt; These should be in PropertyMapHashTable.cpp.  Or just PropertyTable.cpp.  Your pick of name.  But I wouldn&apos;t pollute Structure.cpp with these things.
&gt; 
&gt; (I know, adding .cpp files to WebKit is soooper hard, but at least here you don&apos;t have to do gyp.  So one less build system.)

Source/JavaScriptCore/JavaScriptCore.gypi :(
But sure.

&gt; &gt; Source/JavaScriptCore/runtime/StructureInlines.h:200
&gt; &gt; +inline bool Structure::putWillGrowOutOfLineStorage()
&gt; Might as well drop this method into Structure.cpp instead of having it be inline.  It meets the basic criteria for not being inline: it&apos;s not called often enough and it has a fair bit of code (multiple loads and branches).

I&apos;m getting some wonky build failures in &apos;jsc&apos; from out-of-lining that, not sure what&apos;s going on. Let&apos;s do separately.

More importantly, the patch I uploaded was missing a PropertyTable::destroy(JSCell*), I&apos;m adding that and reuploading for EWS to chew etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841818</commentid>
    <comment_count>7</comment_count>
      <attachid>190248</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 02:16:54 -0800</bug_when>
    <thetext>Created attachment 190248
Patch for landing

...if EWS permits.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841828</commentid>
    <comment_count>8</comment_count>
      <attachid>190251</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 02:52:30 -0800</bug_when>
    <thetext>Created attachment 190251
Patch for landing

Not sure why it doesn&apos;t apply on EWS, let&apos;s try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841899</commentid>
    <comment_count>9</comment_count>
      <attachid>190263</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 05:05:37 -0800</bug_when>
    <thetext>Created attachment 190263
ews pls</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841982</commentid>
    <comment_count>10</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 07:35:57 -0800</bug_when>
    <thetext>Committed r144054: &lt;http://trac.webkit.org/changeset/144054&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841988</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 07:42:33 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 110882</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841997</commentid>
    <comment_count>12</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 07:56:37 -0800</bug_when>
    <thetext>Reverted r144054 for reason:

broke builds

Committed r144056: &lt;http://trac.webkit.org/changeset/144056&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842017</commentid>
    <comment_count>13</comment_count>
      <attachid>190287</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 08:13:30 -0800</bug_when>
    <thetext>Created attachment 190287
Come on EWS, not today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842019</commentid>
    <comment_count>14</comment_count>
      <attachid>190288</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 08:15:13 -0800</bug_when>
    <thetext>Created attachment 190288
Same patch tweaked for Windows line endings

In case this is a CRLF problem, I tweaked the diff for JavaScriptCore.vcproj</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842024</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 08:19:33 -0800</bug_when>
    <thetext>Attachment 190288 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.gypi&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.h&apos;, u&apos;Source/JavaScriptCore/runtime/PropertyMapHashTable.h&apos;, u&apos;Source/JavaScriptCore/runtime/PropertyTable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/PropertyTable.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 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>842027</commentid>
    <comment_count>16</comment_count>
      <attachid>190288</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-02-26 08:23:15 -0800</bug_when>
    <thetext>Comment on attachment 190288
Same patch tweaked for Windows line endings

Attachment 190288 did not pass efl-ews (efl):
Output: http://webkit-commit-queue.appspot.com/results/16778169</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842031</commentid>
    <comment_count>17</comment_count>
      <attachid>190288</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-26 08:27:33 -0800</bug_when>
    <thetext>Comment on attachment 190288
Same patch tweaked for Windows line endings

Attachment 190288 did not pass qt-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/16773224</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842033</commentid>
    <comment_count>18</comment_count>
      <attachid>190288</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2013-02-26 08:28:45 -0800</bug_when>
    <thetext>Comment on attachment 190288
Same patch tweaked for Windows line endings

Attachment 190288 did not pass qt-wk2-ews (qt):
Output: http://webkit-commit-queue.appspot.com/results/16769267</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842040</commentid>
    <comment_count>19</comment_count>
      <attachid>190293</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-26 08:32:42 -0800</bug_when>
    <thetext>Created attachment 190293
Add a cpp file, they said. It&apos;s not that hard, they said.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842041</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 08:34:56 -0800</bug_when>
    <thetext>Attachment 190293 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.gypi&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.h&apos;, u&apos;Source/JavaScriptCore/runtime/PropertyMapHashTable.h&apos;, u&apos;Source/JavaScriptCore/runtime/PropertyTable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/PropertyTable.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 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>842166</commentid>
    <comment_count>21</comment_count>
      <attachid>190293</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 10:45:17 -0800</bug_when>
    <thetext>Comment on attachment 190293
Add a cpp file, they said. It&apos;s not that hard, they said.

Clearing flags on attachment: 190293

Committed r144074: &lt;http://trac.webkit.org/changeset/144074&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842167</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 10:45:23 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842241</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-26 11:58:44 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 110897</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842242</commentid>
    <comment_count>24</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2013-02-26 11:58:52 -0800</bug_when>
    <thetext>This is causing 20+ crashes and therefore early exits on Mac bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842770</commentid>
    <comment_count>25</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-27 00:29:46 -0800</bug_when>
    <thetext>Okay, so if I understand correctly, this broke Structure::checkOffsetConsistency() in debug builds, because Structure::m_propertyTable may now get clear()ed out by one marking thread while this code executes in another. That means that the !m_propertyTable check is not enough to avoid dereferencing a null pointer.

I&apos;m not sure what the best course of action is here. I assume we want to keep these sanity checks somehow. Geoff/Phil/Mark?

Example of a crashing thread:
Thread 11 Crashed:: JavaScriptCore::Marking
0   com.apple.JavaScriptCore      	0x0000000108abb814 JSC::WriteBarrierBase&lt;JSC::PropertyTable&gt;::operator-&gt;() const + 84 (WriteBarrier.h:116)
1   com.apple.JavaScriptCore      	0x0000000108abb478 JSC::Structure::checkOffsetConsistency() const + 184 (StructureInlines.h:210)
2   com.apple.JavaScriptCore      	0x0000000108abb5b9 JSC::Structure::outOfLineSize() const + 25 (Structure.h:190)
3   com.apple.JavaScriptCore      	0x0000000108aba80a JSC::Structure::outOfLineCapacity() const + 106 (Structure.h:176)
4   com.apple.JavaScriptCore      	0x0000000108dc33ca JSC::JSObject::visitButterfly(JSC::SlotVisitor&amp;, JSC::Butterfly*, unsigned long) + 138 (JSObject.cpp:172)
5   com.apple.JavaScriptCore      	0x0000000108dba41f JSC::JSFinalObject::visitChildren(JSC::JSCell*, JSC::SlotVisitor&amp;) + 463 (JSObject.cpp:249)
6   com.apple.JavaScriptCore      	0x0000000108ef678e JSC::visitChildren(JSC::SlotVisitor&amp;, JSC::JSCell const*) + 206 (SlotVisitor.cpp:87)
7   com.apple.JavaScriptCore      	0x0000000108ef663f JSC::SlotVisitor::drain() + 255 (SlotVisitor.cpp:136)
8   com.apple.JavaScriptCore      	0x0000000108ef6cc9 JSC::SlotVisitor::drainFromShared(JSC::SlotVisitor::SharedDrainMode) + 1241 (SlotVisitor.cpp:226)
9   com.apple.JavaScriptCore      	0x0000000108ced9b7 JSC::GCThread::gcThreadMain() + 183 (GCThread.cpp:109)
10  com.apple.JavaScriptCore      	0x0000000108cedabd JSC::GCThread::gcThreadStartFunc(void*) + 29 (GCThread.cpp:136)
11  com.apple.JavaScriptCore      	0x0000000108fbd1c0 WTF::threadEntryPoint(void*) + 144 (Threading.cpp:70)
12  com.apple.JavaScriptCore      	0x0000000108fbdbb8 WTF::wtfThreadEntryPoint(void*) + 104 (ThreadingPthreads.cpp:197)
13  libsystem_c.dylib             	0x00007fff8a2b2742 _pthread_start + 327
14  libsystem_c.dylib             	0x00007fff8a29f181 thread_start + 13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843108</commentid>
    <comment_count>26</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-27 08:44:25 -0800</bug_when>
    <thetext>&gt; Okay, so if I understand correctly, this broke Structure::checkOffsetConsistency() in debug builds, because Structure::m_propertyTable may now get clear()ed out by one marking thread while this code executes in another.

My reading is that this bug only effects checkOffsetConsistency(). I think you could fix it by using a local temporary for m_propertyTable, instead of re-reading the data member. That way, you&apos;ll get null or non-null consistently throughout the function, which should be fine.

Perhaps you could beef up my reading by making a propertyTable() helper function, having that function ASSERT that the GC is not running, and then allowing checkOffsetConsistency() to call propertyTableUnsafe(), which does not ASSERT, or something like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>843988</commentid>
    <comment_count>27</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-28 04:35:09 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; &gt; Okay, so if I understand correctly, this broke Structure::checkOffsetConsistency() in debug builds, because Structure::m_propertyTable may now get clear()ed out by one marking thread while this code executes in another.
&gt; 
&gt; My reading is that this bug only effects checkOffsetConsistency(). I think you could fix it by using a local temporary for m_propertyTable, instead of re-reading the data member. That way, you&apos;ll get null or non-null consistently throughout the function, which should be fine.
&gt; 
&gt; Perhaps you could beef up my reading by making a propertyTable() helper function, having that function ASSERT that the GC is not running, and then allowing checkOffsetConsistency() to call propertyTableUnsafe(), which does not ASSERT, or something like that.

Sure, could do something like this for checkOffsetConsistency():

inline const PropertyTable* Structure::propertyTableUnsafe() const
{
    return static_cast&lt;const PropertyTable*&gt;(*const_cast&lt;Structure*&gt;(this)-&gt;m_propertyTable.slot());
}

What can I assert in Structure::propertyTable() to verify that GC isn&apos;t in progress? Heap::isBusy()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844169</commentid>
    <comment_count>28</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-28 10:01:24 -0800</bug_when>
    <thetext>&gt; inline const PropertyTable* Structure::propertyTableUnsafe() const
&gt; {
&gt;     return static_cast&lt;const PropertyTable*&gt;(*const_cast&lt;Structure*&gt;(this)-&gt;m_propertyTable.slot());
&gt; }

Are you trying to get around multiple read problems in WriteBarrier&lt;T&gt;::get()? How about just &quot;return m_propertyTable.get()&quot;, and fix WriteBarrier&lt;T&gt;::get() to put m_cell in a local variable, too, with a comment as to why.

&gt; What can I assert in Structure::propertyTable() to verify that GC isn&apos;t in progress? Heap::isBusy()?

Yup!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>845292</commentid>
    <comment_count>29</comment_count>
      <attachid>190221</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-01 10:39:19 -0800</bug_when>
    <thetext>Comment on attachment 190221
Proposed patch

Cleared Filip Pizlo&apos;s review+ from obsolete attachment 190221 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846070</commentid>
    <comment_count>30</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-03-03 13:56:34 -0800</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; What can I assert in Structure::propertyTable() to verify that GC isn&apos;t in progress? Heap::isBusy()?
&gt; 
&gt; Yup!

Looks like this would necessitate passing a JSGlobalData&amp; to propertyTable() everywhere, which gets pretty ugly. Do we still want to do it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846574</commentid>
    <comment_count>31</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-04 09:41:41 -0800</bug_when>
    <thetext>&gt; Looks like this would necessitate passing a JSGlobalData&amp; to propertyTable() everywhere, which gets pretty ugly. Do we still want to do it?

If that&apos;s too cumbersome, you can do this instead:

ASSERT(!globalObject() || !globalObject()-&gt;globalData()-&gt;heap.isBusy())

Every Structure has a pointer to the global object from which it originated, except for a few special permanent structures that don&apos;t belong to any global object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846765</commentid>
    <comment_count>32</comment_count>
      <attachid>191298</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-03-04 13:09:50 -0800</bug_when>
    <thetext>Created attachment 191298
Patch II: The Repatchening

Yeah okay, let&apos;s try this again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846767</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 13:13:31 -0800</bug_when>
    <thetext>Attachment 191298 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/CMakeLists.txt&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source/JavaScriptCore/GNUmakefile.list.am&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.gypi&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.vcxproj/JavaScriptCore.vcxproj&apos;, u&apos;Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj&apos;, u&apos;Source/JavaScriptCore/Target.pri&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/JSGlobalData.h&apos;, u&apos;Source/JavaScriptCore/runtime/PropertyMapHashTable.h&apos;, u&apos;Source/JavaScriptCore/runtime/PropertyTable.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.cpp&apos;, u&apos;Source/JavaScriptCore/runtime/Structure.h&apos;, u&apos;Source/JavaScriptCore/runtime/StructureInlines.h&apos;, u&apos;Source/JavaScriptCore/runtime/WriteBarrier.h&apos;]&quot; exit_code: 1
Source/JavaScriptCore/runtime/PropertyTable.cpp:28:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 15 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>846801</commentid>
    <comment_count>34</comment_count>
      <attachid>191298</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-03-04 13:39:52 -0800</bug_when>
    <thetext>Comment on attachment 191298
Patch II: The Repatchening

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

r=me

&gt; Source/JavaScriptCore/runtime/Structure.h:457
&gt; +    // Should be accessed through propertyTable().

Would be nice to elaborate in this comment that what makes m_propertyTableUnsafe unsafe is that, during GC, it may be set to 0 by another thread.

&gt; Source/JavaScriptCore/runtime/WriteBarrier.h:102
&gt; +        // Copy cell to a local to avoid multiple-read issues. See &lt;http://webkit.org/b/110854&gt;)

Missing a parenthesis here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846912</commentid>
    <comment_count>35</comment_count>
      <attachid>191323</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-03-04 15:25:42 -0800</bug_when>
    <thetext>Created attachment 191323
Patch for lunar landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846917</commentid>
    <comment_count>36</comment_count>
      <attachid>191323</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 15:29:49 -0800</bug_when>
    <thetext>Comment on attachment 191323
Patch for lunar landing

Rejecting attachment 191323 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=webkit-commit-queue.appspot.com&apos;, &apos;--bot-id=gce-cq-02&apos;, &apos;validate-changelog&apos;, &apos;--non-interactive&apos;, 191323, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Geoff Garen found in /mnt/git/webkit-commit-queue/Source/JavaScriptCore/ChangeLog does not appear to be a valid reviewer according to committers.py.
/mnt/git/webkit-commit-queue/Source/JavaScriptCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://webkit-commit-queue.appspot.com/results/16903145</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846920</commentid>
    <comment_count>37</comment_count>
      <attachid>191324</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-03-04 15:31:34 -0800</bug_when>
    <thetext>Created attachment 191324
Geoffrey not Geoff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847180</commentid>
    <comment_count>38</comment_count>
      <attachid>191324</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 19:07:31 -0800</bug_when>
    <thetext>Comment on attachment 191324
Geoffrey not Geoff.

Clearing flags on attachment: 191324

Committed r144708: &lt;http://trac.webkit.org/changeset/144708&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847181</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-04 19:07:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847729</commentid>
    <comment_count>40</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-03-05 09:04:15 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 111447</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847743</commentid>
    <comment_count>41</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-03-05 09:28:17 -0800</bug_when>
    <thetext>0xbbadbeef
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0   com.apple.JavaScriptCore      	0x0000000101dd797d JSC::PropertyTable::add(JSC::PropertyMapEntry const&amp;, int&amp;, JSC::PropertyTable::EffectOnPropertyOffset) + 509 (PropertyMapHashTable.h:374)
1   com.apple.JavaScriptCore      	0x0000000101dd4fa4 JSC::Structure::materializePropertyMap(JSC::JSGlobalData&amp;) + 660 (Structure.cpp:265)
2   com.apple.JavaScriptCore      	0x0000000101dd55a8 JSC::Structure::addPropertyTransition(JSC::JSGlobalData&amp;, JSC::Structure*, JSC::PropertyName, unsigned int, JSC::JSCell*, int&amp;) + 744 (Structure.cpp:386)
3   com.apple.JavaScriptCore      	0x0000000101b49255 bool JSC::JSObject::putDirectInternal&lt;(JSC::JSObject::PutMode)1&gt;(JSC::JSGlobalData&amp;, JSC::PropertyName, JSC::JSValue, unsigned int, JSC::PutPropertySlot&amp;, JSC::JSCell*) + 901 (JSObject.h:1320)
4   com.apple.JavaScriptCore      	0x0000000101d3ed76 llint_slow_path_put_by_id + 262 (JSObject.h:1375)
5   com.apple.JavaScriptCore      	0x0000000101d46bb0 llint_op_put_by_id + 133
6   com.apple.JavaScriptCore      	0x0000000101c6fded JSC::Interpreter::execute(JSC::ProgramExecutable*, JSC::ExecState*, JSC::JSObject*) + 4253 (JSCJSValueInlines.h:363)
7   com.apple.JavaScriptCore      	0x0000000101b9533b JSC::evaluate(JSC::ExecState*, JSC::SourceCode const&amp;, JSC::JSValue, JSC::JSValue*) + 619 (Completion.cpp:75)
8   com.apple.WebCore             	0x0000000102fb141a WebCore::ScriptController::evaluateInWorld(WebCore::ScriptSourceCode const&amp;, WebCore::DOMWrapperWorld*) + 442 (JSMainThreadExecState.h:77)
9   com.apple.WebCore             	0x0000000102fb15a9 WebCore::ScriptController::evaluate(WebCore::ScriptSourceCode const&amp;) + 41 (ScriptController.cpp:158)
10  com.apple.WebCore             	0x0000000102fba854 WebCore::ScriptElement::executeScript(WebCore::ScriptSourceCode const&amp;) + 500 (ScriptValue.h:52)
11  com.apple.WebCore             	0x00000001028c5164 WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent(WebCore::PendingScript&amp;) + 228 (HTMLScriptRunner.cpp:144)
12  com.apple.WebCore             	0x00000001028c5063 WebCore::HTMLScriptRunner::executeParsingBlockingScript() + 259 (HTMLScriptRunner.cpp:119)
13  com.apple.WebCore             	0x00000001028c5748 WebCore::HTMLScriptRunner::executeParsingBlockingScripts() + 24 (RefPtr.h:58)
14  com.apple.WebCore             	0x00000001028704d4 WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder() + 84 (PassRefPtr.h:68)
15  com.apple.WebCore             	0x0000000102870558 WebCore::HTMLDocumentParser::canTakeNextToken(WebCore::HTMLDocumentParser::SynchronousMode, WebCore::PumpSession&amp;) + 88 (HTMLDocumentParser.cpp:287)
16  com.apple.WebCore             	0x0000000102870236 WebCore::HTMLDocumentParser::pumpTokenizer(WebCore::HTMLDocumentParser::SynchronousMode) + 390 (HTMLDocumentParser.cpp:520)
17  com.apple.WebCore             	0x0000000102870b22 WebCore::HTMLDocumentParser::append(WTF::PassRefPtr&lt;WTF::StringImpl&gt;) + 498 (HTMLDocumentParser.cpp:732)
18  com.apple.WebCore             	0x00000001026189e5 WebCore::DecodedDataDocumentParser::appendBytes(WebCore::DocumentWriter*, char const*, unsigned long) + 117 (PassRefPtr.h:68)
19  com.apple.WebCore             	0x000000010264d29c WebCore::DocumentLoader::commitData(char const*, unsigned long) + 508 (DocumentLoader.cpp:376)
20  com.apple.WebKit              	0x00000001021ab4a4 -[WebHTMLRepresentation receivedData:withDataSource:] + 100 (WebHTMLRepresentation.mm:186)
21  com.apple.WebKit              	0x000000010217e69d -[WebDataSource(WebInternal) _receivedData:] + 77 (WebDataSource.mm:216)
22  com.apple.WebKit              	0x00000001021964f7 WebFrameLoaderClient::committedLoad(WebCore::DocumentLoader*, char const*, int) + 103 (WebFrameLoaderClient.mm:848)
23  com.apple.WebCore             	0x000000010264d340 WebCore::DocumentLoader::commitLoad(char const*, int) + 144 (RefCounted.h:148)
24  com.apple.WebCore             	0x0000000102d66ccb WebCore::MainResourceLoader::dataReceived(WebCore::CachedResource*, char const*, int) + 715 (RefCounted.h:148)
25  com.apple.WebCore             	0x00000001024ec472 WebCore::CachedRawResource::didAddClient(WebCore::CachedResourceClient*) + 802 (HashTable.h:996)
26  com.apple.WebCore             	0x000000010317c78f WebCore::ThreadTimers::sharedTimerFiredInternal() + 175 (ThreadTimers.cpp:132)
27  com.apple.WebCore             	0x0000000103006cf3 _ZN7WebCoreL10timerFiredEP16__CFRunLoopTimerPv + 51 (SharedTimerMac.mm:167)
28  com.apple.CoreFoundation      	0x00007fff8b610934 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
29  com.apple.CoreFoundation      	0x00007fff8b610486 __CFRunLoopDoTimer + 534
30  com.apple.CoreFoundation      	0x00007fff8b5f0e11 __CFRunLoopRun + 1617
31  com.apple.CoreFoundation      	0x00007fff8b5f0486 CFRunLoopRunSpecific + 230
32  com.apple.Foundation          	0x00007fff884baf7b -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 267
33  DumpRenderTree                	0x0000000101a310be _ZL7runTestRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE + 1639 (DumpRenderTree.mm:1375)
34  DumpRenderTree                	0x0000000101a30852 dumpRenderTree(int, char const**) + 1727 (DumpRenderTree.mm:832)
35  DumpRenderTree                	0x0000000101a31427 main + 86 (DumpRenderTree.mm:925)
36  DumpRenderTree                	0x0000000101a25024 start + 52</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>848730</commentid>
    <comment_count>42</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-03-06 04:59:52 -0800</bug_when>
    <thetext>Relanded in &lt;https://trac.webkit.org/r144910&gt;.

The issue was that transition-&gt;m_offset was not always initialized prior to calling transition-&gt;materializePropertyMap(). It was trivial to reproduce before with COLLECT_ON_EVERY_ALLOCATION.

Added a method to share the &quot;take ownership of existing property map or clone it if it&apos;s pinned&quot; logic between addPropertyTransition() and nonPropertyTransition().</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190221</attachid>
            <date>2013-02-26 00:28:39 -0800</date>
            <delta_ts>2013-03-01 10:39:19 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-110854.diff</filename>
            <type>text/plain</type>
            <size>26291</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGVjODA3MmMuLjAzNDU3NGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEzLTAyLTI2ICBBbmRyZWFzIEtsaW5n
ICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAgICAgICBVbnVzZWQgU3RydWN0dXJlIHByb3BlcnR5
IHRhYmxlcyB3YXN0ZSAxNE1CIG9uIE1lbWJ1c3Rlci4KKyAgICAgICAgPGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTEwODU0PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyOTIxMDQ+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVHVybiBQcm9wZXJ0eVRh
YmxlIGludG8gYSBHQyBvYmplY3QgYW5kIGhhdmUgU3RydWN0dXJlIGRyb3AgdW5waW5uZWQgdGFi
bGVzIHdoZW4gbWFya2luZy4KKyAgICAgICAgMTQgTUIgcHJvZ3Jlc3Npb24gb24gTWVtYnVzdGVy
My4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAgICAgIE1vdmVk
IHRoZXNlIHRvIFN0cnVjdHVyZUlubGluZXMuaCB0byBicmVhayBoZWFkZXIgZGVwZW5kZW5jeSBj
eWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxk
cmVuKToKKworICAgICAgICAgICAgTW92ZWQgbWFya2luZyBvZiBwcm9wZXJ0eSB0YWJsZSB2YWx1
ZXMgaGVyZSBmcm9tIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbigpLgorCisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbik6CisKKyAgICAgICAgICAgIE51bGwgb3V0IG1fcHJv
cGVydHlUYWJsZSBpZiB0aGUgdGFibGUgaXMgdW5waW5uZWQuIFRoaXMnbGwgY2F1c2UgdGhlIHRh
YmxlIHRvIGdldCBHQydkLgorCisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9u
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24p
OgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbik6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpw
dXRTcGVjaWZpY1ZhbHVlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0
eU1hcCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKFN0cnVjdHVy
ZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbERh
dGEuaDoKKyAgICAgICAgKEpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5
VGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmNsb25lKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6
OlByb3BlcnR5VGFibGU6OmNvcHkpOgorCiAyMDEzLTAyLTI1ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMTQzNjU0KTogc29tZSBqcXVlcnkg
dGVzdCBhc3NlcnRzIG9uIDMyIGJpdCBkZWJ1ZyBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKaW5kZXggYzA2Y2Y1Yy4uNTA4YTg3NiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCkBAIC0y
MzIsNiArMjMyLDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUg
Z2xvYmFsRGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHVubGlua2VkRXZhbENvZGVC
bG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICAgICBzbWFsbFN0cmluZ3MuaW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoKnRoaXMp
OwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZXhpc3Rp
bmdFbnRyeUlkZW50aWZpZXJUYWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsRGF0YS5oCmluZGV4IGRjOTg4MWYuLjE4OTVhMDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCkBAIC0yNTYsNiArMjU2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkUHJvZ3JhbUNv
ZGVCbG9ja1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRFdmFs
Q29kZUJsb2NrU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9w
ZXJ0eVRhYmxlU3RydWN0dXJlOwogCiAgICAgICAgIElkZW50aWZpZXJUYWJsZSogaWRlbnRpZmll
clRhYmxlOwogICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5o
CmluZGV4IDI0MjJjNWIuLjE4MDcyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaApAQCAtMjIsNiArMjIsNyBAQAogI2Rl
ZmluZSBQcm9wZXJ0eU1hcEhhc2hUYWJsZV9oCiAKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5o
IgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoVGFibGUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAt
ODUsOCArODYsNyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgfQogfTsKIAotY2xh
c3MgUHJvcGVydHlUYWJsZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBQ
cm9wZXJ0eVRhYmxlIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBpbXBs
ZW1lbnRhdGlvbiBmb3IgJ2l0ZXJhdG9yJyBhbmQgJ2NvbnN0X2l0ZXJhdG9yJywKICAgICAvLyB1
c2VkIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgdGFibGUgaW4gaW5zZXJ0aW9uIG9yZGVyLgpAQCAt
MTI5LDYgKzEyOSwxNyBAQCBjbGFzcyBQcm9wZXJ0eVRhYmxlIHsKICAgICB9OwogCiBwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisKKyAgICBzdGF0aWMgU3RydWN0
dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9iYWxPYmplY3QsIHByb3RvdHlw
ZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNpdENoaWxkcmVuKSwgJnNfaW5m
byk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90
VmlzaXRvciYpOworCiAgICAgdHlwZWRlZiBTdHJpbmdJbXBsKiBLZXlUeXBlOwogICAgIHR5cGVk
ZWYgUHJvcGVydHlNYXBFbnRyeSBWYWx1ZVR5cGU7CiAKQEAgLTE0Miw5ICsxNTMsOSBAQCBwdWJs
aWM6CiAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwgdW5zaWduZWQ+IGZpbmRfaXRl
cmF0b3I7CiAKICAgICAvLyBDb25zdHJ1Y3RvciBpcyBwYXNzZWQgYW4gaW5pdGlhbCBjYXBhY2l0
eSwgYSBQcm9wZXJ0eVRhYmxlIHRvIGNvcHksIG9yIGJvdGguCi0gICAgZXhwbGljaXQgUHJvcGVy
dHlUYWJsZSh1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwotICAgIFByb3BlcnR5VGFibGUoSlNH
bG9iYWxEYXRhJiwgSlNDZWxsKiwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwotICAgIFByb3BlcnR5
VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBj
b25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNyZWF0ZShK
U0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOworICAgIHN0YXRpYyBQcm9w
ZXJ0eVRhYmxlKiBjbG9uZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9w
ZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKEpTR2xvYmFsRGF0
YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVy
dHlUYWJsZSYpOwogICAgIH5Qcm9wZXJ0eVRhYmxlKCk7CiAKICAgICAvLyBPcmRlcmVkIGl0ZXJh
dGlvbiBtZXRob2RzLgpAQCAtMTgxLDcgKzE5Miw3IEBAIHB1YmxpYzoKICAgICBQcm9wZXJ0eU9m
ZnNldCBuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFjaXR5KTsKIAogICAgIC8v
IENvcHkgdGhpcyBQcm9wZXJ0eVRhYmxlLCBlbnN1cmluZyB0aGUgY29weSBoYXMgYXQgbGVhc3Qg
dGhlIGNhcGFjaXR5IHByb3ZpZGVkLgotICAgIFBhc3NPd25QdHI8UHJvcGVydHlUYWJsZT4gY29w
eShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7Cisg
ICAgUHJvcGVydHlUYWJsZSogY29weShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNp
Z25lZCBuZXdDYXBhY2l0eSk7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgc2l6ZV90IHNpemVJbk1l
bW9yeSgpOwpAQCAtMTg5LDYgKzIwMCwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToK
KyAgICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0
eSk7CisgICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBjb25zdCBQcm9w
ZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCB1
bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKwogICAgIFBy
b3BlcnR5VGFibGUoY29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIC8vIFVzZWQgdG8gaW5zZXJ0
IGEgdmFsdWUga25vd24gbm90IHRvIGJlIGluIHRoZSB0YWJsZSwgYW5kIHdoZXJlIHdlIGtub3cg
Y2FwYWNpdHkgdG8gYmUgYXZhaWxhYmxlLgogICAgIHZvaWQgcmVpbnNlcnQoY29uc3QgVmFsdWVU
eXBlJiBlbnRyeSk7CkBAIC0yMzksOCArMjU0LDMwIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNv
bnN0IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7CiB9OwogCi1pbmxpbmUgUHJvcGVydHlU
YWJsZTo6UHJvcGVydHlUYWJsZSh1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCi0gICAgOiBtX2lu
ZGV4U2l6ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSkKK2lubGluZSBQcm9wZXJ0
eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1
bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXAp
KSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIGluaXRpYWxDYXBhY2l0eSk7CisgICAgdGFibGUt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworaW5s
aW5lIFByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCit7Cisg
ICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9w
ZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93
bmVyLCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAg
IHJldHVybiB0YWJsZTsKK30KKworaW5saW5lIFByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6
OmNsb25lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK3sKKyAgICBQcm9w
ZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFi
bGU+KGdsb2JhbERhdGEuaGVhcCkpIFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsIGlu
aXRpYWxDYXBhY2l0eSwgb3RoZXIpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxE
YXRhKTsKKyAgICByZXR1cm4gdGFibGU7Cit9CisKK2lubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9w
ZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5KQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0
cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFs
Q2FwYWNpdHkpKQogICAgICwgbV9pbmRleE1hc2sobV9pbmRleFNpemUgLSAxKQogICAgICwgbV9p
bmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkp
KQogICAgICwgbV9rZXlDb3VudCgwKQpAQCAtMjQ5LDggKzI4Niw5IEBAIGlubGluZSBQcm9wZXJ0
eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKICAgICBBU1NF
UlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwogfQogCi1pbmxpbmUgUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0
eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXplKG90aGVyLm1faW5kZXhTaXplKQoraW5s
aW5lIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKKyAgICA6IEpTQ2Vs
bChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCisg
ICAgLCBtX2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6ZSkKICAgICAsIG1faW5kZXhNYXNrKG90
aGVyLm1faW5kZXhNYXNrKQogICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZh
c3RNYWxsb2MoZGF0YVNpemUoKSkpKQogICAgICwgbV9rZXlDb3VudChvdGhlci5tX2tleUNvdW50
KQpAQCAtMjcyLDggKzMxMCw5IEBAIGlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxl
KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5CiAgICAgICAgIG1f
ZGVsZXRlZE9mZnNldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Pigqb3Ro
ZXJEZWxldGVkT2Zmc2V0cykpOwogfQogCi1pbmxpbmUgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlU
YWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNp
dHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQotICAgIDogbV9pbmRleFNpemUoc2l6ZUZv
ckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCitpbmxpbmUgUHJvcGVydHlUYWJsZTo6UHJvcGVy
dHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCisgICAgOiBKU0Nl
bGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQor
ICAgICwgbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCiAgICAg
LCBtX2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCiAgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0
PHVuc2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCiAgICAgLCBtX2tleUNv
dW50KDApCkBAIC01MDIsMTUgKzU0MSwxNSBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgUHJvcGVy
dHlUYWJsZTo6bmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0eSkKICAgICBy
ZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9
CiAKLWlubGluZSBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFByb3BlcnR5VGFibGU6OmNvcHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBh
Y2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCiB7
CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwogCiAgICAgLy8gRmFzdCBj
YXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNpemUgYXMgdGhp
cyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2ZSByZWhhc2hpbmcgYWxsIGtleXMu
CiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRleFNpemUpCi0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25l
ciwgKnRoaXMpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFByb3BlcnR5VGFibGUoZ2xvYmFs
RGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcykpOworICAgICAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICp0aGlzKTsKKyAgICByZXR1cm4gUHJv
cGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcyk7
CiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAppbmRleCBiNzljMTA2Li42NTBmMmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTU5LDYgKzU5LDIxIEBAIGludCBudW1SZW1v
dmVzOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorY29uc3QgQ2xhc3NJbmZvIFByb3BlcnR5VGFibGU6
OnNfaW5mbyA9IHsgIlByb3BlcnR5VGFibGUiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxF
KFByb3BlcnR5VGFibGUpIH07CisKK3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFByb3BlcnR5VGFibGUq
IHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOworICAgIEFTU0VSVF9H
Q19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUKHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7
CisKKyAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAg
ICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5lbmQoKTsKKyAgICBm
b3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPmJlZ2luKCk7IHB0
ciAhPSBlbmQ7ICsrcHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zcGVjaWZpY1Zh
bHVlKTsKK30KKwogI2lmIERVTVBfU1RSVUNUVVJFX0lEX1NUQVRJU1RJQ1MKIHN0YXRpYyBIYXNo
U2V0PFN0cnVjdHVyZSo+JiBsaXZlU3RydWN0dXJlU2V0ID0gKihuZXcgSGFzaFNldDxTdHJ1Y3R1
cmUqPik7CiAjZW5kaWYKQEAgLTI0Nyw3ICsyNjIsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpOwogICAgICAgICAgICAgQVNTRVJUKCFz
dHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CiAKLSAgICAgICAgICAgIG1fcHJvcGVydHlUYWJsZSA9
IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIDAsIG51bWJlck9m
U2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAg
ICAgICBtX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+bV9w
cm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zm
c2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIApAQCAtMjU1LDcgKzI3MCw3IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6
ZVByb3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICB9CiAKICAgICBpZiAo
IW1fcHJvcGVydHlUYWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAobnVtYmVyT2ZTbG90
c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgY3Jl
YXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9v
ZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIAogICAgIGZvciAocHRyZGlmZl90IGkgPSBzdHJ1
Y3R1cmVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0
cnVjdHVyZXNbaV07CkBAIC0zNzYsMTQgKzM5MSwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
YWRkUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KgogICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSkgewogICAgICAgICBzdHJ1Y3R1
cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9p
c1Bpbm5lZFByb3BlcnR5VGFibGUpCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFu
c2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVy
ZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1f
cHJvcGVydHlUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3By
b3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3By
b3BlcnR5VGFibGUtPnNpemUoKSArIDEpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0
cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0
cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+
bV9wcm9wZXJ0eVRhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAoc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpCiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5t
YXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgICAgICAgICAgdHJhbnNp
dGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAgICAgfQogICAgIHRyYW5zaXRp
b24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKIApAQCAtNDE1LDcgKzQzMiw3IEBA
IFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0CiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5cGUuc2V0
KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7CiAKICAgICBzdHJ1Y3R1cmUtPm1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0
aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlu
bmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5
VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9u
LT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7
CiAKQEAgLTQzMSw3ICs0NDgsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVu
Y3Rpb25UcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydQogICAgICsrdHJh
bnNpdGlvbi0+bV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQ7CiAKICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFu
c2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3Bl
cnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0
aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGlu
KCk7CiAKQEAgLTQ1Miw3ICs0NjksNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRl
Q2hhbmdlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdAogICAgICAg
ICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsK
IAogICAgICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShn
bG9iYWxEYXRhKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0
dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7
CisgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJh
bnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0
YSwgdHJhbnNpdGlvbikpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVy
ZS0+bV9vZmZzZXQ7CiAgICAgICAgIHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAKQEAgLTQ3
NSw3ICs0OTIsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZQogICAgIFN0cnVjdHVyZSogdHJh
bnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwogCiAgICAgc3RydWN0dXJl
LT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJh
bnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9w
ZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9w
ZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNp
dGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1f
ZGljdGlvbmFyeUtpbmQgPSBraW5kOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNTM1LDcg
KzU1Miw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRp
b24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1CiAgICAgLy8gRG9uJ3Qgc2V0IG1fb2Zm
c2V0LCBhcyBvbmUgY2FuIG5vdCB0cmFuc2l0aW9uIHRvIHRoaXMuCiAKICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFu
c2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3Bl
cnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0
aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+bV9w
cmV2ZW50RXh0ZW5zaW9ucyA9IHRydWU7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC01NzUs
MTQgKzU5MiwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKgogICAgIGlmIChzdHJ1Y3R1cmUt
Pm1fcHJvcGVydHlUYWJsZSkgewogICAgICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUp
Ci0gICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRy
YW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJl
bGVhc2UoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSAr
IDEpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmNsZWFy
KCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2
aW91c0lEKCkpCiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KGdsb2JhbERhdGEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVh
dGVQcm9wZXJ0eU1hcCgpOworICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlN
YXAoZ2xvYmFsRGF0YSk7CiAgICAgfQogICAgIAogICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9u
VGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOwpAQCAtNzM3LDE0ICs3NTYsMTggQEAg
aW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKIAogI2VuZGlmCiAKLVBh
c3NPd25QdHI8UHJvcGVydHlUYWJsZT4gU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBT
dHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0dXJlKiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8g
bmV3IFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDog
MCk7CisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJl
dHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRhLCBvd25lciwgKm1fcHJvcGVydHlU
YWJsZS5nZXQoKSk7CiB9CiAKLVBhc3NPd25QdHI8UHJvcGVydHlUYWJsZT4gU3RydWN0dXJlOjpj
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1
Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQog
ewotICAgIHJldHVybiBhZG9wdFB0cihtX3Byb3BlcnR5VGFibGUgPyBuZXcgUHJvcGVydHlUYWJs
ZShnbG9iYWxEYXRhLCBvd25lciwgKm1fcHJvcGVydHlUYWJsZSkgOiBuZXcgUHJvcGVydHlUYWJs
ZShudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkp
KTsKKyAgICBpZiAobV9wcm9wZXJ0eVRhYmxlKQorICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJs
ZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUuZ2V0KCkpOworICAg
IHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zv
ckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIH0KIAogUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNW
YWx1ZSkKQEAgLTgwMSw3ICs4MjQsNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNw
ZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbQogICAgIFN0
cmluZ0ltcGwqIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKIAogICAgIGlmICghbV9wcm9wZXJ0
eVRhYmxlKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgICAgICBjcmVhdGVQcm9w
ZXJ0eU1hcChnbG9iYWxEYXRhKTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IG1f
cHJvcGVydHlUYWJsZS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsKIApAQCAtODMzLDEy
ICs4NTYsMTIgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSkKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIFN0cnVjdHVyZTo6
Y3JlYXRlUHJvcGVydHlNYXAodW5zaWduZWQgY2FwYWNpdHkpCit2b2lkIFN0cnVjdHVyZTo6Y3Jl
YXRlUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjYXBhY2l0
eSkKIHsKICAgICBBU1NFUlQoIW1fcHJvcGVydHlUYWJsZSk7CiAKICAgICBjaGVja0NvbnNpc3Rl
bmN5KCk7Ci0gICAgbV9wcm9wZXJ0eVRhYmxlID0gYWRvcHRQdHIobmV3IFByb3BlcnR5VGFibGUo
Y2FwYWNpdHkpKTsKKyAgICBtX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFBy
b3BlcnR5VGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhLCBjYXBhY2l0eSkpOwogfQogCiB2b2lkIFN0
cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2Rl
IG1vZGUpCkBAIC04ODIsMTEgKzkwNSwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIH0KICAgICB2aXNpdG9y
LmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2aW91c09yUmFyZURhdGEpOwogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKLSAgICBpZiAo
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZS0+ZW5kKCk7Ci0gICAgICAg
IGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9wcm9wZXJ0
eVRhYmxlLT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIHZpc2l0b3Iu
YXBwZW5kKCZwdHItPnNwZWNpZmljVmFsdWUpOwotICAgIH0KKworICAgIGlmICh0aGlzT2JqZWN0
LT5tX2lzUGlubmVkUHJvcGVydHlUYWJsZSkgeworICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+
bV9wcm9wZXJ0eVRhYmxlKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZSk7CisgICAgfSBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGUpCisgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZS5jbGVhcigpOwogfQogCiBi
b29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggMjM1OWM2Yy4uNmIxZDA4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTMxLDE2ICszMSwx
NSBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNs
dWRlICJKU1R5cGUuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1
ZGUgIlByb3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5j
bHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJQcm90ZWN0LmgiCiAjaW5jbHVkZSAi
U3RydWN0dXJlUmFyZURhdGEuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUu
aCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2lu
Y2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdJbXBsLmg+CkBAIC01MSw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiBj
bGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGE7CitjbGFzcyBQcm9wZXJ0eVRhYmxlOwogY2xhc3Mg
U3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwpAQCAt
MTA4LDI1ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEm
KTsKICAgICBib29sIGlzRXh0ZW5zaWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtX3ByZXZlbnRFeHRl
bnNpb25zOyB9CiAgICAgYm9vbCBkaWRUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaWRU
cmFuc2l0aW9uOyB9Ci0gICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKQotICAg
IHsKLSAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAgCi0gICAg
ICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQo
bV9vZmZzZXQpOwotICAgICAgICAgICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gY3Vy
cmVudFNpemUpOwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaXplID09IG91dE9mTGluZUNh
cGFjaXR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBBU1NFUlQodG90YWxT
dG9yYWdlQ2FwYWNpdHkoKSA+PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUo
KSk7Ci0gICAgICAgIGlmIChtX3Byb3BlcnR5VGFibGUtPmhhc0RlbGV0ZWRPZmZzZXQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICBBU1NFUlQodG90
YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSk7Ci0gICAgICAg
IHJldHVybiBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgp
OwotICAgIH0KKyAgICBib29sIHB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpOwogICAgIEpT
X0VYUE9SVF9QUklWQVRFIHNpemVfdCBzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNp
dHkoKTsgCiAKICAgICBTdHJ1Y3R1cmUqIGZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYsIEpTT2JqZWN0Kik7CkBAIC0zODIsMTQgKzM2NCwxNCBAQCBwcml2YXRlOgogICAg
IFByb3BlcnR5T2Zmc2V0IHB1dFNwZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOwogICAgIFBy
b3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOwogCi0gICAgdm9pZCBjcmVhdGVQcm9w
ZXJ0eU1hcCh1bnNpZ25lZCBrZXlDb3VudCA9IDApOworICAgIHZvaWQgY3JlYXRlUHJvcGVydHlN
YXAoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNr
Q29uc2lzdGVuY3koKTsKIAogICAgIGJvb2wgZGVzcGVjaWZ5RnVuY3Rpb24oSlNHbG9iYWxEYXRh
JiwgUHJvcGVydHlOYW1lKTsKICAgICB2b2lkIGRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhKU0dsb2Jh
bERhdGEmKTsKIAotICAgIFBhc3NPd25QdHI8UHJvcGVydHlUYWJsZT4gY29weVByb3BlcnR5VGFi
bGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7Ci0gICAgUGFzc093blB0cjxQcm9w
ZXJ0eVRhYmxlPiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiBvd25lcik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2Jh
bERhdGEmKTsKICAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgewpAQCAtNDQ1LDE5ICs0MjcsNyBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZp
b3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAgfQogICAgICAgICAKLSAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAo
IW1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2lzUGlubmVkUHJvcGVy
dHlUYWJsZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAg
ICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1f
b2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSA9PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3Rv
cmFnZVNpemUoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG1fcHJvcGVydHlUYWJs
ZS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCgodG90YWxT
aXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBpbmxpbmVDYXBhY2l0eSgp
KSA9PSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCkpOwotICAg
ICAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBBTFdBWVNfSU5MSU5F
IGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgdm9pZCBhbGxvY2F0
ZVJhcmVEYXRhKEpTR2xvYmFsRGF0YSYpOwogICAgIHZvaWQgY2xvbmVSYXJlRGF0YUZyb20oSlNH
bG9iYWxEYXRhJiwgY29uc3QgU3RydWN0dXJlKik7CkBAIC00ODIsNyArNDUyLDcgQEAgcHJpdmF0
ZToKIAogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAot
ICAgIE93blB0cjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGU7CisgICAgV3JpdGVCYXJy
aWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZTsKIAogICAgIG11dGFibGUgSW5saW5l
V2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggNWJmZDJkNS4u
YWFjODA2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVJbmxpbmVzX2gK
ICNkZWZpbmUgU3RydWN0dXJlSW5saW5lc19oCiAKKyNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE3
OSw2ICsxODAsNDAgQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUMKICAgICByZXR1cm4gaXNWYWxp
ZChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhY2hlZFByb3RvdHlwZUNoYWluKTsKIH0K
IAoraW5saW5lIGJvb2wgU3RydWN0dXJlOjpwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKQor
eworICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKworICAgIEFTU0VSVChvdXRPZkxpbmVD
YXBhY2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7CisKKyAgICBpZiAoIW1fcHJvcGVydHlUYWJs
ZSkgeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2l6ZSA9IG51bWJlck9mT3V0T2ZMaW5lU2xv
dHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG91dE9mTGluZUNhcGFj
aXR5KCkgPj0gY3VycmVudFNpemUpOworICAgICAgICByZXR1cm4gY3VycmVudFNpemUgPT0gb3V0
T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNp
dHkoKSA+PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7CisgICAgaWYg
KG1fcHJvcGVydHlUYWJsZS0+aGFzRGVsZXRlZE9mZnNldCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBtX3Byb3BlcnR5VGFi
bGUtPnNpemUoKSk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpID09IHRvdGFs
U3RvcmFnZUNhcGFjaXR5KCk7Cit9CisKK2lubGluZSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKKyAg
ICAgICAgQVNTRVJUKCFtX2lzUGlubmVkUHJvcGVydHlUYWJsZSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xvdHNGb3JMYXN0T2Zm
c2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSA9PSBtX3Byb3BlcnR5VGFibGUtPnByb3Bl
cnR5U3RvcmFnZVNpemUoKSk7CisgICAgdW5zaWduZWQgdG90YWxTaXplID0gbV9wcm9wZXJ0eVRh
YmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoKHRvdGFsU2l6
ZSA8IGlubGluZUNhcGFjaXR5KCkgPyAwIDogdG90YWxTaXplIC0gaW5saW5lQ2FwYWNpdHkoKSkg
PT0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpKTsKKworICAg
IHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIFN0cnVj
dHVyZUlubGluZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190248</attachid>
            <date>2013-02-26 02:16:54 -0800</date>
            <delta_ts>2013-02-26 02:52:30 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>land-110854.diff</filename>
            <type>text/plain</type>
            <size>38729</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZWM4MDcyYy4uNTg3OWY2NiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTMtMDItMjYgIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAgICAgIFVudXNlZCBTdHJ1Y3R1
cmUgcHJvcGVydHkgdGFibGVzIHdhc3RlIDE0TUIgb24gTWVtYnVzdGVyLgorICAgICAgICA8aHR0
cDovL3dlYmtpdC5vcmcvYi8xMTA4NTQ+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzI5MjEw
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUdXJuIFBy
b3BlcnR5VGFibGUgaW50byBhIEdDIG9iamVjdCBhbmQgaGF2ZSBTdHJ1Y3R1cmUgZHJvcCB1bnBp
bm5lZCB0YWJsZXMgd2hlbiBtYXJraW5nLgorICAgICAgICAxNCBNQiBwcm9ncmVzc2lvbiBvbiBN
ZW1idXN0ZXIzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGFyZ2V0LnByaToKKworICAgICAgICAgICAgQWRkZWQgUHJvcGVydHlUYWJs
ZS5jcHAuCisKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisKKyAgICAgICAgICAgIE1vdmVkIG1hcmtpbmcgb2Yg
cHJvcGVydHkgdGFibGUgdmFsdWVzIGhlcmUgZnJvbSBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
KS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAgICAgIE1vdmVk
IHRoZXNlIHRvIFN0cnVjdHVyZUlubGluZXMuaCB0byBicmVhayBoZWFkZXIgZGVwZW5kZW5jeSBj
eWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4p
OgorCisgICAgICAgICAgICBOdWxsIG91dCBtX3Byb3BlcnR5VGFibGUgaWYgdGhlIHRhYmxlIGlz
IHVucGlubmVkLiBUaGlzJ2xsIGNhdXNlIHRoZSB0YWJsZSB0byBnZXQgR0MnZC4KKworICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXApOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAg
KFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjb3B5KToKKwogMjAxMy0wMi0y
NSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04o
cjE0MzY1NCk6IHNvbWUganF1ZXJ5IHRlc3QgYXNzZXJ0cyBvbiAzMiBiaXQgZGVidWcgYnVpbGQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZThhMWYyYi4u
NTFkNWE0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAg
LTcyMiw2ICs3MjIsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVNsb3QuaCBcCisJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlUYWJsZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Rv
dHlwZU1hcC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3RvdHlwZU1h
cC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaSBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCmluZGV4IDg1ZjY0NDYu
LmM5MDFjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBpCkBA
IC03NTksNiArNzU5LDcgQEAKICAgICAgICAgICAgICdydW50aW1lL1Byb3BlcnR5T2Zmc2V0Lmgn
LAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcCcsCiAgICAgICAgICAgICAn
cnVudGltZS9Qcm9wZXJ0eVNsb3QuaCcsCisgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVRh
YmxlLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVN0b3JhZ2UuaCcsCiAgICAg
ICAgICAgICAncnVudGltZS9Qcm90ZWN0LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvdG90
eXBlTWFwLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvaiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qCmluZGV4IDc1MTdhNGEuLjU2MGZiMjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCkBAIC0x
MTc0LDYgKzExNzQsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0
aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQcm9wZXJ0eVRhYmxlLmNwcCIKKwkJCQk+CisJCQk8L0Zp
bGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQcm90b3R5cGVN
YXAuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCmluZGV4IDMyNWU3MjUuLmYwNTUwNWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvagpAQCAtMzA1LDYgKzMwNSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXFByb3BlcnR5RGVzY3JpcHRvci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWVBcnJheS5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVNsb3QuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlUYWJsZS5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm90b3R5cGVNYXAuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwLmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENhY2hlLmNwcCIgLz4NCkBAIC03NDAsNCAr
NzQxLDQgQEAKICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5D
cHAudGFyZ2V0cyIgLz4NCiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+
DQogICA8L0ltcG9ydEdyb3VwPg0KLTwvUHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCis8L1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiZmUwMGI0
Li5kNzg5NTRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNzA1LDYgKzcwNSw3
IEBACiAJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGQjYwQTMx
MDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgKi87IH07CiAJCUE3RkI2
MTAwMTA0MEMzOEIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RkI2MDRCMTAzRjVFQUIwMDE3QTI4
NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlBOEE0NzQ4RTE1MUE4MzA2MDA0MTIzRkYgLyogbGliV1RGLmEg
aW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEE0NzQ4
RDE1MUE4MzA2MDA0MTIzRkYgLyogbGliV1RGLmEgKi87IH07CisJCUFEMUNGMDZBMTZEQ0FENUIw
MEI5NzEyMyAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQcm9wZXJ0eVRh
YmxlLmNwcCAqLzsgfTsKIAkJQkMwMkU5MEQwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
MDJFOTA1MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggKi87IH07CiAJCUJD
MDJFOTBGMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDcwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yUHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDMDJFOTA5MEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggKi87
IH07CkBAIC0xNjIyLDYgKzE2MjMsNyBAQAogCQlBOEE0NzQ4RDE1MUE4MzA2MDA0MTIzRkYgLyog
bGliV1RGLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBhcmNoaXZlLmFyOyBwYXRoID0gbGliV1RGLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNU
U19ESVI7IH07CiAJCUE4RTg5NDMxMENEMDYwMjQwMDM2NzE3OSAvKiBKU0NhbGxiYWNrT2JqZWN0
RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FsbGJhY2tP
YmplY3RGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThFODk0MzMw
Q0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQcm9wZXJ0eVRhYmxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5VGFibGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4
ZWN1dGFibGUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVG9vbEV4
ZWN1dGFibGUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDJFOTA0
MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9yQ29uc3RydWN0b3IuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzAyRTkwNTBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1
Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFcnJvckNvbnN0cnVjdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTEyLDYgKzI1MTQsNyBAQAogCQkJ
CTY1NjIxRTZCMDg5RTg1OTcwMDc2MEYzNSAvKiBQcm9wZXJ0eVNsb3QuY3BwICovLAogCQkJCTY1
NjIxRTZDMDg5RTg1OTcwMDc2MEYzNSAvKiBQcm9wZXJ0eVNsb3QuaCAqLywKIAkJCQkwRkI3RjM5
MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi8sCisJCQkJQUQxQ0YwNjgx
NkRDQUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovLAogCQkJCTY1QzAyRkJCMDYz
NzQ2MkEwMDNFN0VFNiAvKiBQcm90ZWN0LmggKi8sCiAJCQkJMTREODQ0QTIxNkFBMkM3MDAwQTY1
QUYwIC8qIFByb3RvdHlwZU1hcC5jcHAgKi8sCiAJCQkJMTREODQ0QTMxNkFBMkM3MDAwQTY1QUYw
IC8qIFByb3RvdHlwZU1hcC5oICovLApAQCAtNDAzMSw2ICs0MDM0LDcgQEAKIAkJCQkwRkJFMEY3
NDE2QzFEQjA5MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAv
KiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBRDFDRjA2QTE2RENBRDVC
MDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1RhcmdldC5wcmkKaW5kZXggYmQ5ZjBjMy4uNmVlMmY5NjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJn
ZXQucHJpCkBAIC0yOTgsNiArMjk4LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9Qcm9w
ZXJ0eURlc2NyaXB0b3IuY3BwIFwKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcCBc
CiAgICAgcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwIFwKKyAgICBydW50aW1lL1Byb3BlcnR5VGFi
bGUuY3BwIFwKICAgICBydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAgXAogICAgIHJ1bnRpbWUvUmVn
RXhwQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAg
XApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKaW5k
ZXggYzA2Y2Y1Yy4uNTA4YTg3NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwCkBAIC0yMzIsNiArMjMyLDcgQEAgSlNHbG9iYWxEYXRhOjpKU0ds
b2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFsRGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBl
KQogICAgIHVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlu
a2VkUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkp
OwogICAgIHVubGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2Vk
RXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1
bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7Cisg
ICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICBzbWFsbFN0cmluZ3MuaW5pdGlh
bGl6ZUNvbW1vblN0cmluZ3MoKnRoaXMpOwogCiAgICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJl
bnRJZGVudGlmaWVyVGFibGUoZXhpc3RpbmdFbnRyeUlkZW50aWZpZXJUYWJsZSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCmluZGV4IGRjOTg4MWYuLjE4
OTVhMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5o
CkBAIC0yNTYsNiArMjU2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IHVubGlua2VkUHJvZ3JhbUNvZGVCbG9ja1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25n
PFN0cnVjdHVyZT4gdW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlOwogICAgICAgICBTdHJv
bmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOworICAgICAg
ICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwogCiAgICAgICAgIElk
ZW50aWZpZXJUYWJsZSogaWRlbnRpZmllclRhYmxlOwogICAgICAgICBDb21tb25JZGVudGlmaWVy
cyogcHJvcGVydHlOYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCmluZGV4IDI0MjJjNWIuLjU0ZTI5NzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUu
aApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBQcm9wZXJ0eU1hcEhhc2hUYWJsZV9oCiAKICNp
bmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1
ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoVGFibGUuaD4KICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtODUsOCArODYsNyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBF
bnRyeSB7CiAgICAgfQogfTsKIAotY2xhc3MgUHJvcGVydHlUYWJsZSB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitjbGFzcyBQcm9wZXJ0eVRhYmxlIDogcHVibGljIEpTQ2VsbCB7CiAK
ICAgICAvLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgJ2l0ZXJhdG9yJyBhbmQgJ2Nv
bnN0X2l0ZXJhdG9yJywKICAgICAvLyB1c2VkIGZvciBpdGVyYXRpbmcgb3ZlciB0aGUgdGFibGUg
aW4gaW5zZXJ0aW9uIG9yZGVyLgpAQCAtMTI5LDYgKzEyOSwxOSBAQCBjbGFzcyBQcm9wZXJ0eVRh
YmxlIHsKICAgICB9OwogCiBwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1
cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0
aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOworCisgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCisgICAgeworICAgICAg
ICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90
b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwgT3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZz
X2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKwogICAgIHR5cGVkZWYgU3RyaW5nSW1wbCogS2V5VHlwZTsKICAgICB0
eXBlZGVmIFByb3BlcnR5TWFwRW50cnkgVmFsdWVUeXBlOwogCkBAIC0xNDIsOSArMTU1LDkgQEAg
cHVibGljOgogICAgIHR5cGVkZWYgc3RkOjpwYWlyPFZhbHVlVHlwZSosIHVuc2lnbmVkPiBmaW5k
X2l0ZXJhdG9yOwogCiAgICAgLy8gQ29uc3RydWN0b3IgaXMgcGFzc2VkIGFuIGluaXRpYWwgY2Fw
YWNpdHksIGEgUHJvcGVydHlUYWJsZSB0byBjb3B5LCBvciBib3RoLgotICAgIGV4cGxpY2l0IFBy
b3BlcnR5VGFibGUodW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKLSAgICBQcm9wZXJ0eVRhYmxl
KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKLSAgICBQcm9w
ZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0
eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjcmVh
dGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBzdGF0aWMg
UHJvcGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgY29uc3Qg
UHJvcGVydHlUYWJsZSYpOworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShKU0dsb2Jh
bERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFBy
b3BlcnR5VGFibGUmKTsKICAgICB+UHJvcGVydHlUYWJsZSgpOwogCiAgICAgLy8gT3JkZXJlZCBp
dGVyYXRpb24gbWV0aG9kcy4KQEAgLTE4MSw3ICsxOTQsNyBAQCBwdWJsaWM6CiAgICAgUHJvcGVy
dHlPZmZzZXQgbmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0eSk7CiAKICAg
ICAvLyBDb3B5IHRoaXMgUHJvcGVydHlUYWJsZSwgZW5zdXJpbmcgdGhlIGNvcHkgaGFzIGF0IGxl
YXN0IHRoZSBjYXBhY2l0eSBwcm92aWRlZC4KLSAgICBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+
IGNvcHkoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkp
OworICAgIFByb3BlcnR5VGFibGUqIGNvcHkoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwg
dW5zaWduZWQgbmV3Q2FwYWNpdHkpOwogCiAjaWZuZGVmIE5ERUJVRwogICAgIHNpemVfdCBzaXpl
SW5NZW1vcnkoKTsKQEAgLTE4OSw2ICsyMDIsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZh
dGU6CisgICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsQ2Fw
YWNpdHkpOworICAgIFByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgY29uc3Qg
UHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxs
KiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisKICAg
ICBQcm9wZXJ0eVRhYmxlKGNvbnN0IFByb3BlcnR5VGFibGUmKTsKICAgICAvLyBVc2VkIHRvIGlu
c2VydCBhIHZhbHVlIGtub3duIG5vdCB0byBiZSBpbiB0aGUgdGFibGUsIGFuZCB3aGVyZSB3ZSBr
bm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KICAgICB2b2lkIHJlaW5zZXJ0KGNvbnN0IFZh
bHVlVHlwZSYgZW50cnkpOwpAQCAtMjM5LDcyICsyNTYsNiBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBFbXB0eUVudHJ5SW5kZXggPSAwOwogfTsKIAotaW5saW5lIFByb3Bl
cnR5VGFibGU6OlByb3BlcnR5VGFibGUodW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQotICAgIDog
bV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCi0gICAgLCBtX2lu
ZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCi0gICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2ln
bmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCi0gICAgLCBtX2tleUNvdW50KDAp
Ci0gICAgLCBtX2RlbGV0ZWRDb3VudCgwKQotewotICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5k
ZXhTaXplKSk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKEpTR2xv
YmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQotICAg
IDogbV9pbmRleFNpemUob3RoZXIubV9pbmRleFNpemUpCi0gICAgLCBtX2luZGV4TWFzayhvdGhl
ci5tX2luZGV4TWFzaykKLSAgICAsIG1faW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0
TWFsbG9jKGRhdGFTaXplKCkpKSkKLSAgICAsIG1fa2V5Q291bnQob3RoZXIubV9rZXlDb3VudCkK
LSAgICAsIG1fZGVsZXRlZENvdW50KG90aGVyLm1fZGVsZXRlZENvdW50KQotewotICAgIEFTU0VS
VChpc1Bvd2VyT2YyKG1faW5kZXhTaXplKSk7Ci0KLSAgICBtZW1jcHkobV9pbmRleCwgb3RoZXIu
bV9pbmRleCwgZGF0YVNpemUoKSk7Ci0KLSAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsK
LSAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7
Ci0gICAgICAgIGl0ZXItPmtleS0+cmVmKCk7Ci0gICAgICAgIEhlYXA6OndyaXRlQmFycmllcihv
d25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSk7Ci0gICAgfQotCi0gICAgLy8gQ29weSB0
aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3IuCi0gICAgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Piog
b3RoZXJEZWxldGVkT2Zmc2V0cyA9IG90aGVyLm1fZGVsZXRlZE9mZnNldHMuZ2V0KCk7Ci0gICAg
aWYgKG90aGVyRGVsZXRlZE9mZnNldHMpCi0gICAgICAgIG1fZGVsZXRlZE9mZnNldHMgPSBhZG9w
dFB0cihuZXcgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Pigqb3RoZXJEZWxldGVkT2Zmc2V0cykpOwot
fQotCi1pbmxpbmUgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBK
U0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmIG90aGVyKQotICAgIDogbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBh
Y2l0eSkpCi0gICAgLCBtX2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCi0gICAgLCBtX2luZGV4
KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCi0g
ICAgLCBtX2tleUNvdW50KDApCi0gICAgLCBtX2RlbGV0ZWRDb3VudCgwKQotewotICAgIEFTU0VS
VChpc1Bvd2VyT2YyKG1faW5kZXhTaXplKSk7Ci0gICAgQVNTRVJUKGluaXRpYWxDYXBhY2l0eSA+
PSBvdGhlci5tX2tleUNvdW50KTsKLQotICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmVu
ZCgpOwotICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVyLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNTRVJUKGNhbkluc2VydCgpKTsKLSAgICAgICAg
cmVpbnNlcnQoKml0ZXIpOwotICAgICAgICBpdGVyLT5rZXktPnJlZigpOwotICAgICAgICBIZWFw
Ojp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOwotICAgIH0K
LQotICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgotICAgIFZlY3RvcjxQ
cm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZz
ZXRzLmdldCgpOwotICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQotICAgICAgICBtX2RlbGV0
ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVs
ZXRlZE9mZnNldHMpKTsKLX0KLQotaW5saW5lIFByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxl
KCkKLXsKLSAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9y
IGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICBpdGVyLT5rZXkt
PmRlcmVmKCk7Ci0KLSAgICBmYXN0RnJlZShtX2luZGV4KTsKLX0KLQogaW5saW5lIFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIFByb3BlcnR5VGFibGU6OmJlZ2luKCkKIHsKICAgICByZXR1cm4gaXRl
cmF0b3Ioc2tpcERlbGV0ZWRFbnRyaWVzKHRhYmxlKCkpKTsKQEAgLTUwMiwxNSArNDUzLDE1IEBA
IGlubGluZSBQcm9wZXJ0eU9mZnNldCBQcm9wZXJ0eVRhYmxlOjpuZXh0T2Zmc2V0KFByb3BlcnR5
T2Zmc2V0IGlubGluZUNhcGFjaXR5KQogICAgIHJldHVybiBvZmZzZXRGb3JQcm9wZXJ0eU51bWJl
cihzaXplKCksIGlubGluZUNhcGFjaXR5KTsKIH0KIAotaW5saW5lIFBhc3NPd25QdHI8UHJvcGVy
dHlUYWJsZT4gUHJvcGVydHlUYWJsZTo6Y29weShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KQoraW5saW5lIFByb3BlcnR5VGFibGUq
IFByb3BlcnR5VGFibGU6OmNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93
bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSkKIHsKICAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0g
bV9rZXlDb3VudCk7CiAKICAgICAvLyBGYXN0IGNhc2U7IGlmIHRoZSBuZXcgdGFibGUgd2lsbCBi
ZSB0aGUgc2FtZSBtX2luZGV4U2l6ZSBhcyB0aGlzIG9uZSwgd2UgY2FuIG1lbWNweSBpdCwKICAg
ICAvLyBzYXZlIHJlaGFzaGluZyBhbGwga2V5cy4KICAgICBpZiAoc2l6ZUZvckNhcGFjaXR5KG5l
d0NhcGFjaXR5KSA9PSBtX2luZGV4U2l6ZSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQ
cm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCAqdGhpcykpOwotICAgIHJldHVybiBhZG9w
dFB0cihuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwgbmV3Q2FwYWNpdHksICp0
aGlzKSk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRhLCBv
d25lciwgKnRoaXMpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRh
LCBvd25lciwgbmV3Q2FwYWNpdHksICp0aGlzKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0YzQ4OQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCkBAIC0wLDAgKzEs
MTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5
TWFwSGFzaFRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gUHJvcGVydHlUYWJsZTo6c19pbmZvID0geyAiUHJv
cGVydHlUYWJsZSIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUHJvcGVydHlUYWJsZSkg
fTsKKworUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQoreworICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xv
YmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBpbml0aWFsQ2FwYWNpdHkp
OworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gdGFi
bGU7Cit9CisKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIp
Cit7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2Vs
bDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERh
dGEsIG93bmVyLCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6
Y2xvbmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBp
bml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQoreworICAgIFByb3Bl
cnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJs
ZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwgaW5p
dGlhbENhcGFjaXR5LCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERh
dGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJs
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKKyAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUu
Z2V0KCkpCisgICAgLCBtX2luZGV4U2l6ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5
KSkKKyAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXplIC0gMSkKKyAgICAsIG1faW5kZXgoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVyb2VkTWFsbG9jKGRhdGFTaXplKCkpKSkKKyAgICAs
IG1fa2V5Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCit7CisgICAgQVNTRVJUKGlz
UG93ZXJPZjIobV9pbmRleFNpemUpKTsKK30KKworUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJs
ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5
VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVy
dHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faW5kZXhTaXplKG90aGVyLm1faW5kZXhT
aXplKQorICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCisgICAgLCBtX2luZGV4
KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkpCisgICAgLCBt
X2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisgICAgLCBtX2RlbGV0ZWRDb3VudChvdGhlci5t
X2RlbGV0ZWRDb3VudCkKK3sKKyAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwor
CisgICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkpOworCisgICAg
aXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBpdGVyLT5rZXktPnJlZigpOwor
ICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0
KCkpOworICAgIH0KKworICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgor
ICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5t
X2RlbGV0ZWRPZmZzZXRzLmdldCgpOworICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQorICAg
ICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNl
dD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKK30KKworUHJvcGVydHlUYWJsZTo6UHJvcGVydHlU
YWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGlu
aXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCisgICAgOiBKU0NlbGwo
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQorICAg
ICwgbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCisgICAgLCBt
X2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCisgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVu
c2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCisgICAgLCBtX2tleUNvdW50
KDApCisgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQoreworICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1f
aW5kZXhTaXplKSk7CisgICAgQVNTRVJUKGluaXRpYWxDYXBhY2l0eSA+PSBvdGhlci5tX2tleUNv
dW50KTsKKworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmVuZCgpOworICAgIGZvciAo
Y29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVyLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
IHsKKyAgICAgICAgQVNTRVJUKGNhbkluc2VydCgpKTsKKyAgICAgICAgcmVpbnNlcnQoKml0ZXIp
OworICAgICAgICBpdGVyLT5rZXktPnJlZigpOworICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIo
b3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIC8vIENvcHkg
dGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgorICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4q
IG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOworICAg
IGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQorICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRv
cHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsK
K30KKwordm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBz
dGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0
eVRhYmxlKCk7Cit9CisKK1Byb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCkKK3sKKyAgICBp
dGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5rZXktPmRlcmVmKCk7CisK
KyAgICBmYXN0RnJlZShtX2luZGV4KTsKK30KKwordm9pZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENo
aWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUHJvcGVy
dHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7CisgICAg
QVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAgICBBU1NF
UlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlzaXRDaGls
ZHJlbigpKTsKKworICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9y
KTsKKworICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPmVuZCgp
OworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+YmVn
aW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNw
ZWNpZmljVmFsdWUpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAppbmRleCBiNzljMTA2Li5mYzY5YTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIFN0cnVj
dHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAg
ICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpOwogICAgICAgICAg
ICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7CiAKLSAgICAgICAgICAgIG1fcHJv
cGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEs
IDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5
KSk7CisgICAgICAgICAgICBtX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0
cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIDAsIG51bWJlck9mU2xv
dHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjU1LDcgKzI1NSw3IEBAIHZvaWQgU3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICB9
CiAKICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAo
bnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsK
KyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxh
c3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIAogICAgIGZvciAocHRyZGlm
Zl90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIHN0
cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CkBAIC0zNzYsMTQgKzM3NiwxNiBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKgogICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSkgewogICAg
ICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCi0gICAgICAgICAgICB0cmFuc2l0aW9u
LT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9i
YWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsg
MSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJs
ZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHRy
YW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3Ry
dWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRy
YW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmdldCgpKTsKKyAgICAgICAgICAg
IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpCiAgICAgICAgICAgICB0
cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAgICAgfQog
ICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKIApAQCAtNDE1
LDcgKzQxNyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0CiAgICAgdHJhbnNpdGlvbi0+bV9w
cm90b3R5cGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHByb3RvdHlwZSk7CiAKICAgICBz
dHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsK
LSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0
eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9u
LT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+
Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAg
ICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNp
dGlvbi0+cGluKCk7CiAKQEAgLTQzMSw3ICs0MzMsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dQogICAgICsrdHJhbnNpdGlvbi0+bV9zcGVjaWZpY0Z1bmN0aW9uVGhyYXNoQ291bnQ7CiAKICAg
ICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRh
KTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9w
ZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0
aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsK
ICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJh
bnNpdGlvbi0+cGluKCk7CiAKQEAgLTQ1Miw3ICs0NTQsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdAogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwg
c3RydWN0dXJlKTsKIAogICAgICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJ
Zk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbik7CisgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5p
bmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwogICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNl
dCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgICAgIHRyYW5zaXRpb24tPnBpbigpOwogICAg
ICAgICAKQEAgLTQ3NSw3ICs0NzcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9u
YXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZQogICAgIFN0
cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwogCiAg
ICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0
YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJv
cGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNp
dGlvbi0+bV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1
cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7
CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRy
YW5zaXRpb24tPm1fZGljdGlvbmFyeUtpbmQgPSBraW5kOwogICAgIHRyYW5zaXRpb24tPnBpbigp
OwpAQCAtNTM1LDcgKzUzNyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5z
aW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1CiAgICAgLy8gRG9u
J3Qgc2V0IG1fb2Zmc2V0LCBhcyBvbmUgY2FuIG5vdCB0cmFuc2l0aW9uIHRvIHRoaXMuCiAKICAg
ICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRh
KTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9w
ZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0
aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsK
ICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJh
bnNpdGlvbi0+bV9wcmV2ZW50RXh0ZW5zaW9ucyA9IHRydWU7CiAgICAgdHJhbnNpdGlvbi0+cGlu
KCk7CkBAIC01NzUsMTQgKzU3NywxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVy
dHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKgogICAgIGlm
IChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSkgewogICAgICAgICBzdHJ1Y3R1cmUtPmNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFBy
b3BlcnR5VGFibGUpCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBz
dHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBz
dHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9w
ZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlU
YWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFi
bGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFi
bGUtPnNpemUoKSArIDEpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0cmFuc2l0aW9u
LT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+
bV9wcm9wZXJ0eVRhYmxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+bV9wcm9wZXJ0
eVRhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc3Ry
dWN0dXJlLT5wcmV2aW91c0lEKCkpCiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6
ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFu
c2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3Jl
YXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAgICAgfQogICAgIAogICAgIHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOwpAQCAtNzM3LDE0
ICs3NDEsMTggQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKIAog
I2VuZGlmCiAKLVBhc3NPd25QdHI8UHJvcGVydHlUYWJsZT4gU3RydWN0dXJlOjpjb3B5UHJvcGVy
dHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb3duZXIpCitQcm9w
ZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydWN0dXJlKiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobV9wcm9w
ZXJ0eVRhYmxlID8gbmV3IFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3Byb3Bl
cnR5VGFibGUpIDogMCk7CisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgICAgIHJldHVy
biAwOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRhLCBvd25lciwg
Km1fcHJvcGVydHlUYWJsZS5nZXQoKSk7CiB9CiAKLVBhc3NPd25QdHI8UHJvcGVydHlUYWJsZT4g
U3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5
UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1
cmUqIG93bmVyKQogewotICAgIHJldHVybiBhZG9wdFB0cihtX3Byb3BlcnR5VGFibGUgPyBuZXcg
UHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwgKm1fcHJvcGVydHlUYWJsZSkgOiBuZXcg
UHJvcGVydHlUYWJsZShudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxp
bmVDYXBhY2l0eSkpKTsKKyAgICBpZiAobV9wcm9wZXJ0eVRhYmxlKQorICAgICAgICByZXR1cm4g
UHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUu
Z2V0KCkpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgbnVt
YmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIH0K
IAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxs
KiYgc3BlY2lmaWNWYWx1ZSkKQEAgLTgwMSw3ICs4MDksNyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0
eU5hbQogICAgIFN0cmluZ0ltcGwqIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKIAogICAgIGlm
ICghbV9wcm9wZXJ0eVRhYmxlKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgICAg
ICBjcmVhdGVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKIAogICAgIFByb3BlcnR5T2Zmc2V0IG5l
d09mZnNldCA9IG1fcHJvcGVydHlUYWJsZS0+bmV4dE9mZnNldChtX2lubGluZUNhcGFjaXR5KTsK
IApAQCAtODMzLDEyICs4NDEsMTIgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUo
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi12b2lk
IFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAodW5zaWduZWQgY2FwYWNpdHkpCit2b2lkIFN0
cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNp
Z25lZCBjYXBhY2l0eSkKIHsKICAgICBBU1NFUlQoIW1fcHJvcGVydHlUYWJsZSk7CiAKICAgICBj
aGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgbV9wcm9wZXJ0eVRhYmxlID0gYWRvcHRQdHIobmV3IFBy
b3BlcnR5VGFibGUoY2FwYWNpdHkpKTsKKyAgICBtX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERh
dGEsIHRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhLCBjYXBhY2l0eSkpOwog
fQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51
bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC04ODIsMTEgKzg5MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6
dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIH0K
ICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcmV2aW91c09yUmFyZURhdGEpOwog
ICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3Vz
KTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgIFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZS0+ZW5k
KCk7Ci0gICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVj
dC0+bV9wcm9wZXJ0eVRhYmxlLT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKLSAgICAgICAg
ICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNwZWNpZmljVmFsdWUpOwotICAgIH0KKworICAgIGlm
ICh0aGlzT2JqZWN0LT5tX2lzUGlubmVkUHJvcGVydHlUYWJsZSkgeworICAgICAgICBBU1NFUlQo
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJnRo
aXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZSk7CisgICAgfSBlbHNlIGlmICh0aGlzT2JqZWN0LT5t
X3Byb3BlcnR5VGFibGUpCisgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZS5jbGVh
cigpOwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJvdG90eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9y
ZVRvKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggMjM1OWM2Yy4u
NmIxZDA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAg
LTMxLDE2ICszMSwxNSBAQAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKICNpbmNsdWRlICJKU0Nl
bGwuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJs
ZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZUFy
cmF5LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKICNpbmNsdWRlICJQcm90ZWN0Lmgi
CiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGEuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaCIKICNpbmNsdWRlICJKU1R5cGVJbmZvLmgiCiAjaW5jbHVkZSAiV2F0Y2hw
b2ludC5oIgogI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CkBAIC01MSw2ICs1MCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogY2xhc3MgUHJvcGVydHlO
YW1lQXJyYXk7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheURhdGE7CitjbGFzcyBQcm9wZXJ0eVRh
YmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFzcyBTbG90VmlzaXRvcjsKIGNsYXNzIEpT
U3RyaW5nOwpAQCAtMTA4LDI1ICsxMDgsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0Zyb3plbihK
U0dsb2JhbERhdGEmKTsKICAgICBib29sIGlzRXh0ZW5zaWJsZSgpIGNvbnN0IHsgcmV0dXJuICFt
X3ByZXZlbnRFeHRlbnNpb25zOyB9CiAgICAgYm9vbCBkaWRUcmFuc2l0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9kaWRUcmFuc2l0aW9uOyB9Ci0gICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0
b3JhZ2UoKQotICAgIHsKLSAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAgICAg
ICAgICAgCi0gICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IG91dE9mTGluZVNp
emUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zv
ckxhc3RPZmZzZXQobV9vZmZzZXQpOwotICAgICAgICAgICAgQVNTRVJUKG91dE9mTGluZUNhcGFj
aXR5KCkgPj0gY3VycmVudFNpemUpOwotICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaXplID09
IG91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBB
U1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5
U3RvcmFnZVNpemUoKSk7Ci0gICAgICAgIGlmIChtX3Byb3BlcnR5VGFibGUtPmhhc0RlbGV0ZWRP
ZmZzZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAg
ICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBtX3Byb3BlcnR5VGFibGUtPnNpemUo
KSk7Ci0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSA9PSB0b3RhbFN0b3Jh
Z2VDYXBhY2l0eSgpOwotICAgIH0KKyAgICBib29sIHB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFn
ZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBzdWdnZXN0ZWROZXdPdXRPZkxpbmVT
dG9yYWdlQ2FwYWNpdHkoKTsgCiAKICAgICBTdHJ1Y3R1cmUqIGZsYXR0ZW5EaWN0aW9uYXJ5U3Ry
dWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7CkBAIC0zODIsMTQgKzM2NCwxNCBAQCBw
cml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IHB1dFNwZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRh
JiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFs
dWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOwogCi0gICAgdm9p
ZCBjcmVhdGVQcm9wZXJ0eU1hcCh1bnNpZ25lZCBrZXlDb3VudCA9IDApOworICAgIHZvaWQgY3Jl
YXRlUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQga2V5Q291bnQgPSAwKTsKICAg
ICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAgIGJvb2wgZGVzcGVjaWZ5RnVuY3Rpb24o
SlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lKTsKICAgICB2b2lkIGRlc3BlY2lmeUFsbEZ1bmN0
aW9ucyhKU0dsb2JhbERhdGEmKTsKIAotICAgIFBhc3NPd25QdHI8UHJvcGVydHlUYWJsZT4gY29w
eVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7Ci0gICAgUGFz
c093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9i
YWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3Bl
cnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7CisgICAgUHJvcGVydHlU
YWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVy
ZSogb3duZXIpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcChKU0dsb2JhbERhdGEmKTsKICAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5l
Y2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgewpAQCAtNDQ1LDE5ICs0Mjcs
NyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U3RydWN0dXJlUmFyZURh
dGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAgfQogICAgICAgICAKLSAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0Ci0gICAgewot
ICAgICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICAgICAgQVNTRVJUKCFtX2lz
UGlubmVkUHJvcGVydHlUYWJsZSk7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xvdHNGb3JM
YXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSA9PSBtX3Byb3BlcnR5VGFibGUt
PnByb3BlcnR5U3RvcmFnZVNpemUoKSk7Ci0gICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG1f
cHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwotICAgICAgICBSRUxFQVNFX0FT
U0VSVCgodG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBpbmxp
bmVDYXBhY2l0eSgpKSA9PSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29m
ZnNldCkpOwotICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KKyAgICBB
TFdBWVNfSU5MSU5FIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0OwogCiAgICAg
dm9pZCBhbGxvY2F0ZVJhcmVEYXRhKEpTR2xvYmFsRGF0YSYpOwogICAgIHZvaWQgY2xvbmVSYXJl
RGF0YUZyb20oSlNHbG9iYWxEYXRhJiwgY29uc3QgU3RydWN0dXJlKik7CkBAIC00ODIsNyArNDUy
LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSBtX3RyYW5zaXRp
b25UYWJsZTsKIAotICAgIE93blB0cjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGU7Cisg
ICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZTsKIAogICAgIG11
dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3RyYW5zaXRpb25XYXRjaHBvaW50U2V0OwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5k
ZXggNWJmZDJkNS4uYWFjODA2NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaApAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1
cmVJbmxpbmVzX2gKICNkZWZpbmUgU3RydWN0dXJlSW5saW5lc19oCiAKKyNpbmNsdWRlICJQcm9w
ZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKQEAgLTE3OSw2ICsxODAsNDAgQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlk
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUMKICAgICBy
ZXR1cm4gaXNWYWxpZChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhY2hlZFByb3RvdHlw
ZUNoYWluKTsKIH0KIAoraW5saW5lIGJvb2wgU3RydWN0dXJlOjpwdXRXaWxsR3Jvd091dE9mTGlu
ZVN0b3JhZ2UoKQoreworICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKworICAgIEFTU0VS
VChvdXRPZkxpbmVDYXBhY2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7CisKKyAgICBpZiAoIW1f
cHJvcGVydHlUYWJsZSkgeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2l6ZSA9IG51bWJlck9m
T3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG91
dE9mTGluZUNhcGFjaXR5KCkgPj0gY3VycmVudFNpemUpOworICAgICAgICByZXR1cm4gY3VycmVu
dFNpemUgPT0gb3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBBU1NFUlQodG90YWxT
dG9yYWdlQ2FwYWNpdHkoKSA+PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUo
KSk7CisgICAgaWYgKG1fcHJvcGVydHlUYWJsZS0+aGFzRGVsZXRlZE9mZnNldCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBt
X3Byb3BlcnR5VGFibGUtPnNpemUoKSk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZS0+c2l6
ZSgpID09IHRvdGFsU3RvcmFnZUNhcGFjaXR5KCk7Cit9CisKK2lubGluZSBib29sIFN0cnVjdHVy
ZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0Cit7CisgICAgaWYgKCFtX3Byb3BlcnR5
VGFibGUpIHsKKyAgICAgICAgQVNTRVJUKCFtX2lzUGlubmVkUHJvcGVydHlUYWJsZSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xv
dHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSA9PSBtX3Byb3BlcnR5
VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7CisgICAgdW5zaWduZWQgdG90YWxTaXplID0g
bV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCk7CisgICAgUkVMRUFTRV9BU1NF
UlQoKHRvdGFsU2l6ZSA8IGlubGluZUNhcGFjaXR5KCkgPyAwIDogdG90YWxTaXplIC0gaW5saW5l
Q2FwYWNpdHkoKSkgPT0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZz
ZXQpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2Vu
ZGlmIC8vIFN0cnVjdHVyZUlubGluZXNfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190251</attachid>
            <date>2013-02-26 02:52:30 -0800</date>
            <delta_ts>2013-02-26 05:05:37 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>land-110854-2.diff</filename>
            <type>text/plain</type>
            <size>38709</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZTM0NzVlNy4uMjQyNGJiZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTMtMDItMjYgIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAgICAgIFVudXNlZCBTdHJ1Y3R1
cmUgcHJvcGVydHkgdGFibGVzIHdhc3RlIDE0TUIgb24gTWVtYnVzdGVyLgorICAgICAgICA8aHR0
cDovL3dlYmtpdC5vcmcvYi8xMTA4NTQ+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzI5MjEw
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUdXJuIFBy
b3BlcnR5VGFibGUgaW50byBhIEdDIG9iamVjdCBhbmQgaGF2ZSBTdHJ1Y3R1cmUgZHJvcCB1bnBp
bm5lZCB0YWJsZXMgd2hlbiBtYXJraW5nLgorICAgICAgICAxNCBNQiBwcm9ncmVzc2lvbiBvbiBN
ZW1idXN0ZXIzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGFyZ2V0LnByaToKKworICAgICAgICAgICAgQWRkZWQgUHJvcGVydHlUYWJs
ZS5jcHAuCisKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisKKyAgICAgICAgICAgIE1vdmVkIG1hcmtpbmcgb2Yg
cHJvcGVydHkgdGFibGUgdmFsdWVzIGhlcmUgZnJvbSBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
KS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAgICAgIE1vdmVk
IHRoZXNlIHRvIFN0cnVjdHVyZUlubGluZXMuaCB0byBicmVhayBoZWFkZXIgZGVwZW5kZW5jeSBj
eWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4p
OgorCisgICAgICAgICAgICBOdWxsIG91dCBtX3Byb3BlcnR5VGFibGUgaWYgdGhlIHRhYmxlIGlz
IHVucGlubmVkLiBUaGlzJ2xsIGNhdXNlIHRoZSB0YWJsZSB0byBnZXQgR0MnZC4KKworICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXApOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAg
KFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjb3B5KToKKwogMjAxMy0wMi0y
NiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEtpbGwgYW5vdGhl
ciBhbmFseXplciB3YXJuaW5nIGluIGphdmFzY3JpcHRjb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGU4YTFmMmIuLjUxZDVhNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC03MjIsNiArNzIyLDcgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlPZmZzZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZ3lwaQppbmRleCA4NWY2NDQ2Li5jOTAxY2JjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtNzU5LDYgKzc1OSw3IEBACiAg
ICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oJywKICAgICAgICAgICAgICdydW50
aW1lL1Byb3BlcnR5U2xvdC5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlTbG90
LmgnLAorICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAnLAogICAgICAgICAg
ICAgJ3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJv
dGVjdC5oJywKICAgICAgICAgICAgICdydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpp
bmRleCA3NTE3YTRhLi41NjBmYjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtMTE3NCw2ICsxMTc0LDEwIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRp
bWVcUHJvcGVydHlUYWJsZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUHJvdG90eXBlTWFwLmNwcCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRleCAzMjVlNzI1
Li5mMDU1MDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTMw
NSw2ICszMDUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0
eURlc2NyaXB0b3IuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
UHJvcGVydHlOYW1lQXJyYXkuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcUHJvcGVydHlTbG90LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFByb3BlcnR5VGFibGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcUHJvdG90eXBlTWFwLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFJlZ0V4cC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxSZWdFeHBDYWNoZS5jcHAiIC8+DQpAQCAtNzQwLDQgKzc0MSw0IEBACiAgIDxJbXBvcnQg
UHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQogICA8
SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KICAgPC9JbXBvcnRHcm91cD4N
Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0Pg0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmZlMDBiNC4uZDc4OTU0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcwNSw2ICs3MDUsNyBAQAogCQlBN0ZCNjBBNDEwM0Y3
REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RkI2MEEzMTAzRjdEQzIwMDE3QTI4NiAvKiBQ
cm9wZXJ0eURlc2NyaXB0b3IuY3BwICovOyB9OwogCQlBN0ZCNjEwMDEwNDBDMzhCMDAxN0EyODYg
LyogUHJvcGVydHlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0ZCNjA0QjEwM0Y1RUFCMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlw
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QThBNDc0OEUxNTFBODMwNjAwNDEyM0ZGIC8qIGxpYldURi5hIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDc0OEQxNTFBODMwNjAwNDEyM0ZGIC8q
IGxpYldURi5hICovOyB9OworCQlBRDFDRjA2QTE2RENBRDVCMDBCOTcxMjMgLyogUHJvcGVydHlU
YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
RDFDRjA2ODE2RENBQjJEMDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5jcHAgKi87IH07CiAJCUJD
MDJFOTBEMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwNTBFMTgzOURCMDAwRjky
OTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oICovOyB9OwogCQlCQzAyRTkwRjBFMTgzOURCMDAwRjky
OTcgLyogRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDJF
OTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwOTBFMTgzOURCMDAw
RjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtMTYyMiw2ICsxNjIz
LDcgQEAKIAkJQThBNDc0OEQxNTFBODMwNjAwNDEyM0ZGIC8qIGxpYldURi5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9
IGxpYldURi5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBOEU4OTQz
MTBDRDA2MDI0MDAzNjcxNzkgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RTg5NDMzMENEMDYwM0YwMDM2NzE3OSAvKiBK
U0dsb2JhbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2Jh
bE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDFDRjA2ODE2RENBQjJE
MDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQcm9wZXJ0eVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyRTkwNDBFMTgzOURCMDAwRjkyOTcgLyog
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFcnJvckNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMw
MkU5MDUwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXJyb3JDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjUxMiw2ICsyNTE0LDcgQEAKIAkJCQk2NTYyMUU2QjA4OUU4NTk3MDA3
NjBGMzUgLyogUHJvcGVydHlTbG90LmNwcCAqLywKIAkJCQk2NTYyMUU2QzA4OUU4NTk3MDA3NjBG
MzUgLyogUHJvcGVydHlTbG90LmggKi8sCiAJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8q
IFByb3BlcnR5U3RvcmFnZS5oICovLAorCQkJCUFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCAqLywKIAkJCQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogUHJv
dGVjdC5oICovLAogCQkJCTE0RDg0NEEyMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAu
Y3BwICovLAogCQkJCTE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuaCAq
LywKQEAgLTQwMzEsNiArNDAzNCw3IEBACiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8q
IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJF
MEY3NjE2QzFEQjBGMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQUQxQ0YwNkExNkRDQUQ1QjAwQjk3MTIzIC8qIFByb3BlcnR5
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCmluZGV4IGJk
OWYwYzMuLjZlZTJmOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpAQCAtMjk4LDYgKzI5
OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBc
CiAgICAgcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcCBcCisgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBcCiAgICAgcnVudGlt
ZS9Qcm90b3R5cGVNYXAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcCBc
CiAgICAgcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IGMwNmNmNWMuLjUwOGE4NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApA
QCAtMjMyLDYgKzIzMiw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEV2YWxD
b2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5VGFibGVTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJpbmdzKCp0
aGlzKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4
aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAppbmRleCBkYzk4ODFmLi4xODk1YTA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaApAQCAtMjU2LDYgKzI1Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2Vk
RXZhbENvZGVCbG9ja1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
cHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50
aWZpZXJUYWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaAppbmRleCAyNDIyYzViLi41NGUyOTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKQEAgLTIyLDYgKzIyLDcgQEAK
ICNkZWZpbmUgUHJvcGVydHlNYXBIYXNoVGFibGVfaAogCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZz
ZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
QEAgLTg1LDggKzg2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIH0KIH07CiAK
LWNsYXNzIFByb3BlcnR5VGFibGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xh
c3MgUHJvcGVydHlUYWJsZSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgLy8gVGhpcyBpcyB0aGUg
aW1wbGVtZW50YXRpb24gZm9yICdpdGVyYXRvcicgYW5kICdjb25zdF9pdGVyYXRvcicsCiAgICAg
Ly8gdXNlZCBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlIHRhYmxlIGluIGluc2VydGlvbiBvcmRlci4K
QEAgLTEyOSw2ICsxMjksMTkgQEAgY2xhc3MgUHJvcGVydHlUYWJsZSB7CiAgICAgfTsKIAogcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21w
b3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKICAg
ICB0eXBlZGVmIFN0cmluZ0ltcGwqIEtleVR5cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVu
dHJ5IFZhbHVlVHlwZTsKIApAQCAtMTQyLDkgKzE1NSw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCB1bnNpZ25lZD4gZmluZF9pdGVyYXRvcjsKIAogICAgIC8v
IENvbnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3BlcnR5VGFi
bGUgdG8gY29weSwgb3IgYm90aC4KLSAgICBleHBsaWNpdCBQcm9wZXJ0eVRhYmxlKHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0Nl
bGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERh
dGEmLCBKU0NlbGwqLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHVu
c2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25l
KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAg
ICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25l
ciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAg
flByb3BlcnR5VGFibGUoKTsKIAogICAgIC8vIE9yZGVyZWQgaXRlcmF0aW9uIG1ldGhvZHMuCkBA
IC0xODEsNyArMTk0LDcgQEAgcHVibGljOgogICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQo
UHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAgLy8gQ29weSB0aGlzIFByb3Bl
cnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJv
dmlkZWQuCi0gICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5KEpTR2xvYmFsRGF0YSYs
IEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxl
KiBjb3B5KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5
KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CkBAIC0xODks
NiArMjAyLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgorICAgIFByb3BlcnR5VGFi
bGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBQcm9wZXJ0
eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAg
ICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIHVuc2lnbmVkIGluaXRpYWxD
YXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworCiAgICAgUHJvcGVydHlUYWJsZShjb25z
dCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBu
b3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUgd2Uga25vdyBjYXBhY2l0eSB0byBiZSBh
dmFpbGFibGUuCiAgICAgdm9pZCByZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KTsKQEAg
LTIzOSw3MiArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRW1w
dHlFbnRyeUluZGV4ID0gMDsKIH07CiAKLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKLSAgICA6IG1faW5kZXhTaXplKHNpemVGb3JD
YXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRleE1hc2sobV9pbmRleFNpemUg
LSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJvZWRNYWxs
b2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQotICAgICwgbV9kZWxldGVkQ291
bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwotfQotCi1pbmxp
bmUgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93
bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXplKG90aGVy
Lm1faW5kZXhTaXplKQotICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCi0gICAg
LCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkp
Ci0gICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCi0gICAgLCBtX2RlbGV0ZWRDb3Vu
dChvdGhlci5tX2RlbGV0ZWRDb3VudCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4
U2l6ZSkpOwotCi0gICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkp
OwotCi0gICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBp
dGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpdGVyLT5rZXkt
PnJlZigpOwotICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmlj
VmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMg
dmVjdG9yLgotICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMg
PSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOwotICAgIGlmIChvdGhlckRlbGV0ZWRPZmZz
ZXRzKQotICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9w
ZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKLX0KLQotaW5saW5lIFByb3BlcnR5
VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1f
aW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRl
eE1hc2sobV9pbmRleFNpemUgLSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQot
ICAgICwgbV9kZWxldGVkQ291bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4
U2l6ZSkpOwotICAgIEFTU0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlDb3VudCk7
Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKLSAgICBmb3IgKGNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0g
ICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7Ci0gICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKLSAg
ICAgICAgaXRlci0+a2V5LT5yZWYoKTsKLSAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVy
LCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IHRoZSBt
X2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KLSAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhl
ckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKLSAgICBpZiAo
b3RoZXJEZWxldGVkT2Zmc2V0cykKLSAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7Ci19Ci0K
LWlubGluZSBQcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCi17Ci0gICAgaXRlcmF0b3Ig
ZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOwotCi0gICAgZmFz
dEZyZWUobV9pbmRleCk7Ci19Ci0KIGlubGluZSBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBQcm9w
ZXJ0eVRhYmxlOjpiZWdpbigpCiB7CiAgICAgcmV0dXJuIGl0ZXJhdG9yKHNraXBEZWxldGVkRW50
cmllcyh0YWJsZSgpKSk7CkBAIC01MDIsMTUgKzQ1MywxNSBAQCBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgUHJvcGVydHlUYWJsZTo6bmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0
eSkKICAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBh
Y2l0eSk7CiB9CiAKLWlubGluZSBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFByb3BlcnR5VGFi
bGU6OmNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCBuZXdDYXBhY2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2Fw
YWNpdHkpCiB7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwogCiAgICAg
Ly8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNp
emUgYXMgdGhpcyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2ZSByZWhhc2hpbmcg
YWxsIGtleXMuCiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRl
eFNpemUpCi0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxE
YXRhLCBvd25lciwgKnRoaXMpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFByb3BlcnR5VGFi
bGUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcykpOworICAgICAgICByZXR1
cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICp0aGlzKTsKKyAgICBy
ZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5
LCAqdGhpcyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQyNGM0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgorCisj
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xh
c3NJbmZvIFByb3BlcnR5VGFibGU6OnNfaW5mbyA9IHsgIlByb3BlcnR5VGFibGUiLCAwLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb3BlcnR5VGFibGUpIH07CisKK1Byb3BlcnR5VGFibGUq
IFByb3BlcnR5VGFibGU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSkKK3sKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIFByb3Bl
cnR5VGFibGUoZ2xvYmFsRGF0YSwgaW5pdGlhbENhcGFjaXR5KTsKKyAgICB0YWJsZS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIHRhYmxlOworfQorCitQcm9wZXJ0eVRh
YmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2Vs
bCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQoreworICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xv
YmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwgb3RoZXIpOwor
ICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gdGFibGU7
Cit9CisKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25z
dCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK3sKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERhdGEuaGVhcCkp
IFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsIGluaXRpYWxDYXBhY2l0eSwgb3RoZXIp
OworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gdGFi
bGU7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9pbmRl
eFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCisgICAgLCBtX2luZGV4TWFz
ayhtX2luZGV4U2l6ZSAtIDEpCisgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4o
ZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCisgICAgLCBtX2tleUNvdW50KDApCisgICAg
LCBtX2RlbGV0ZWRDb3VudCgwKQoreworICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5kZXhTaXpl
KSk7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKKyAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0
KCkpCisgICAgLCBtX2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6ZSkKKyAgICAsIG1faW5kZXhN
YXNrKG90aGVyLm1faW5kZXhNYXNrKQorICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCo+KGZhc3RNYWxsb2MoZGF0YVNpemUoKSkpKQorICAgICwgbV9rZXlDb3VudChvdGhlci5tX2tl
eUNvdW50KQorICAgICwgbV9kZWxldGVkQ291bnQob3RoZXIubV9kZWxldGVkQ291bnQpCit7Cisg
ICAgQVNTRVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKKworICAgIG1lbWNweShtX2luZGV4
LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6ZSgpKTsKKworICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXMt
PmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKyAgICAgICAgaXRlci0+a2V5LT5yZWYoKTsKKyAgICAgICAgSGVhcDo6d3JpdGVC
YXJyaWVyKG93bmVyLCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICAv
LyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KKyAgICBWZWN0b3I8UHJvcGVydHlP
ZmZzZXQ+KiBvdGhlckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQo
KTsKKyAgICBpZiAob3RoZXJEZWxldGVkT2Zmc2V0cykKKyAgICAgICAgbV9kZWxldGVkT2Zmc2V0
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZz
ZXRzKSk7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0
IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERh
dGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faW5kZXhTaXplKHNpemVG
b3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQorICAgICwgbV9pbmRleE1hc2sobV9pbmRleFNp
emUgLSAxKQorICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJvZWRN
YWxsb2MoZGF0YVNpemUoKSkpKQorICAgICwgbV9rZXlDb3VudCgwKQorICAgICwgbV9kZWxldGVk
Q291bnQoMCkKK3sKKyAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOworICAgIEFT
U0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlDb3VudCk7CisKKyAgICBjb25zdF9p
dGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKKyAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVChj
YW5JbnNlcnQoKSk7CisgICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKKyAgICAgICAgaXRlci0+a2V5
LT5yZWYoKTsKKyAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5zcGVjaWZp
Y1ZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZzZXRz
IHZlY3Rvci4KKyAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhlckRlbGV0ZWRPZmZzZXRz
ID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKKyAgICBpZiAob3RoZXJEZWxldGVkT2Zm
c2V0cykKKyAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJv
cGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7Cit9CisKK3ZvaWQgUHJvcGVydHlU
YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8UHJvcGVydHlU
YWJsZSo+KGNlbGwpLT5Qcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpOworfQorCitQcm9w
ZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCit7CisgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+
ZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikKKyAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOworCisgICAgZmFzdEZyZWUobV9pbmRl
eCk7Cit9CisKK3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFByb3BlcnR5VGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisKKyAgICBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICBQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5lbmQoKTsKKyAgICBmb3IgKFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsr
cHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zcGVjaWZpY1ZhbHVlKTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggYjc5
YzEwNi4uZmM2OWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJv
cGVydHlNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKTsKICAgICAgICAgICAgIEFTU0VSVCghc3RydWN0dXJl
LT5wcmV2aW91c0lEKCkpOwogCi0gICAgICAgICAgICBtX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1
cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJPZlNsb3RzRm9y
TGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgICAgICAgICAgbV9w
cm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29m
ZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgfQogCiAgICAgaWYgKCFtX3Byb3Bl
cnR5VGFibGUpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKG51bWJlck9mU2xvdHNGb3JMYXN0
T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgIGNyZWF0ZVByb3Bl
cnR5TWFwKGdsb2JhbERhdGEsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBt
X2lubGluZUNhcGFjaXR5KSk7CiAKICAgICBmb3IgKHB0cmRpZmZfdCBpID0gc3RydWN0dXJlcy5z
aXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVz
W2ldOwpAQCAtMzc2LDE0ICszNzYsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSoKICAgICBp
ZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKICAgICAgICAgc3RydWN0dXJlLT5jaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQ
cm9wZXJ0eVRhYmxlKQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0g
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJv
cGVydHlUYWJsZS5yZWxlYXNlKCk7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlLT5jb3B5KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlLT5zaXplKCkgKyAxKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNpdGlv
bi0+bV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
Pm1fcHJvcGVydHlUYWJsZS5nZXQoKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPm1fcHJvcGVy
dHlUYWJsZS5jbGVhcigpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+cHJldmlvdXNJRCgpKQogICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJh
bnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNy
ZWF0ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5tX29m
ZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAKQEAgLTQxNSw3ICs0MTcsNyBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdAogICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldChnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uLCBwcm90b3R5cGUpOwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9w
cm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLnNl
dChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZz
ZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBAIC00
MzEsNyArNDMzLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnUKICAgICArK3RyYW5zaXRpb24t
Pm1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50OwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+
bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxl
LnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBA
IC00NTIsNyArNDU0LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRy
YW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3QKICAgICAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CiAKICAgICAg
ICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0
YSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+Y29w
eVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgICAg
ICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5z
aXRpb24pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zm
c2V0OwogICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAgCkBAIC00NzUsNyArNDc3
LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24g
PSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKIAogICAgIHN0cnVjdHVyZS0+bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJs
ZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwogICAgIHRyYW5zaXRpb24tPm1f
b2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5tX2RpY3Rpb25h
cnlLaW5kID0ga2luZDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKQEAgLTUzNSw3ICs1MzcsNyBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydQogICAgIC8vIERvbid0IHNldCBtX29mZnNldCwgYXMg
b25lIGNhbiBub3QgdHJhbnNpdGlvbiB0byB0aGlzLgogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+
bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxl
LnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1fcHJldmVudEV4
dGVuc2lvbnMgPSB0cnVlOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNTc1LDE0ICs1Nzcs
MTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSoKICAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3Bl
cnR5VGFibGUpIHsKICAgICAgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQotICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5
VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5
VGFibGUtPnNpemUoKSArIDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9u
LT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxlYXNlKCk7
CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgKyAxKSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLnNl
dChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5nZXQo
KSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5jbGVhcigpOworICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KQogICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxE
YXRhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVy
dHlNYXAoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFwKGdsb2Jh
bERhdGEpOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFk
ZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKQEAgLTczNywxNCArNzQxLDE4IEBAIGlubGluZSB2
b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAKICNlbmRpZgogCi1QYXNzT3duUHRy
PFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJl
Ojpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
b3duZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG1fcHJvcGVydHlUYWJsZSA/IG5ldyBQcm9w
ZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCAqbV9wcm9wZXJ0eVRhYmxlKSA6IDApOworICAg
IGlmICghbV9wcm9wZXJ0eVRhYmxlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gUHJv
cGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUuZ2V0
KCkpOwogfQogCi1QYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBv
d25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5u
aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvd25lcikKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8gbmV3IFByb3BlcnR5VGFibGUoZ2xvYmFs
RGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDogbmV3IFByb3BlcnR5VGFibGUobnVtYmVy
T2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKSk7CisgICAg
aWYgKG1fcHJvcGVydHlUYWJsZSkKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25l
KGdsb2JhbERhdGEsIG93bmVyLCAqbV9wcm9wZXJ0eVRhYmxlLmdldCgpKTsKKyAgICByZXR1cm4g
UHJvcGVydHlUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zm
c2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpCkBA
IC04MDEsNyArODA5LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1Zh
bHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW0KICAgICBTdHJpbmdJbXBs
KiByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkK
LSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAo
Z2xvYmFsRGF0YSk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBtX3Byb3BlcnR5
VGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKQEAgLTgzMywxMiArODQxLDEy
IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVBy
b3BlcnR5TWFwKHVuc2lnbmVkIGNhcGFjaXR5KQordm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3Bl
cnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2FwYWNpdHkpCiB7CiAg
ICAgQVNTRVJUKCFtX3Byb3BlcnR5VGFibGUpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwot
ICAgIG1fcHJvcGVydHlUYWJsZSA9IGFkb3B0UHRyKG5ldyBQcm9wZXJ0eVRhYmxlKGNhcGFjaXR5
KSk7CisgICAgbV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBQcm9wZXJ0eVRh
YmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgY2FwYWNpdHkpKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6
OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpA
QCAtODgyLDExICs4OTAsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB9CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgaWYgKHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBl
bmQgPSB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUtPmVuZCgpOwotICAgICAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZS0+
YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
cHRyLT5zcGVjaWZpY1ZhbHVlKTsKLSAgICB9CisKKyAgICBpZiAodGhpc09iamVjdC0+bV9pc1Bp
bm5lZFByb3BlcnR5VGFibGUpIHsKKyAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fcHJvcGVy
dHlUYWJsZSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5
VGFibGUpOworICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlKQorICAg
ICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUuY2xlYXIoKTsKIH0KIAogYm9vbCBTdHJ1
Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCmluZGV4IDIzNTljNmMuLjZiMWQwOGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCkBAIC0zMSwxNiArMzEsMTUgQEAKICNp
bmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNU
eXBlLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiUHJvdGVjdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgiCiAjaW5j
bHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlICJX
ZWFrLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSW1wbC5oPgpAQCAtNTEsNiArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogY2xhc3MgUHJv
cGVydHlOYW1lQXJyYXlEYXRhOworY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVy
ZUNoYWluOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmluZzsKQEAgLTEwOCwyNSAr
MTA4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7CiAgICAg
Ym9vbCBpc0V4dGVuc2libGUoKSBjb25zdCB7IHJldHVybiAhbV9wcmV2ZW50RXh0ZW5zaW9uczsg
fQogICAgIGJvb2wgZGlkVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkVHJhbnNpdGlv
bjsgfQotICAgIGJvb2wgcHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkKLSAgICB7Ci0gICAg
ICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIAotICAgICAgICBBU1NF
UlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXplKCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
dXJyZW50U2l6ZSA9IG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0
KTsKLSAgICAgICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IGN1cnJlbnRTaXpl
KTsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBvdXRPZkxpbmVDYXBhY2l0eSgp
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNh
cGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOwotICAg
ICAgICBpZiAobV9wcm9wZXJ0eVRhYmxlLT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgQVNTRVJUKHRvdGFsU3RvcmFn
ZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkpOwotICAgICAgICByZXR1cm4g
bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgPT0gdG90YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLSAgICB9
CisgICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzaXplX3Qgc3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCk7IAog
CiAgICAgU3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
LCBKU09iamVjdCopOwpAQCAtMzgyLDE0ICszNjQsMTQgQEAgcHJpdmF0ZToKICAgICBQcm9wZXJ0
eU9mZnNldCBwdXRTcGVjaWZpY1ZhbHVlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKICAgICBQcm9wZXJ0eU9m
ZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAo
dW5zaWduZWQga2V5Q291bnQgPSAwKTsKKyAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKEpTR2xv
YmFsRGF0YSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAKICAgICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3Bl
cnR5TmFtZSk7CiAgICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoSlNHbG9iYWxEYXRhJik7
CiAKLSAgICBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IGNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIFBhc3NPd25QdHI8UHJvcGVydHlUYWJs
ZT4gY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSog
b3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRh
YmxlRm9yUGlubmluZyhKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVyKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJik7
CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogICAgIHsKQEAgLTQ0NSwxOSArNDI3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFy
ZURhdGEuZ2V0KCkpOwogICAgIH0KICAgICAgICAgCi0gICAgQUxXQVlTX0lOTElORSBib29sIGNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3Byb3Bl
cnR5VGFibGUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwg
bV9pbmxpbmVDYXBhY2l0eSkgPT0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXpl
KCkpOwotICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBtX3Byb3BlcnR5VGFibGUtPnByb3Bl
cnR5U3RvcmFnZVNpemUoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoKHRvdGFsU2l6ZSA8IGlu
bGluZUNhcGFjaXR5KCkgPyAwIDogdG90YWxTaXplIC0gaW5saW5lQ2FwYWNpdHkoKSkgPT0gbnVt
YmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpKTsKLSAgICAgICAgICAg
IAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdDsKIAogICAgIHZvaWQgYWxsb2NhdGVSYXJlRGF0
YShKU0dsb2JhbERhdGEmKTsKICAgICB2b2lkIGNsb25lUmFyZURhdGFGcm9tKEpTR2xvYmFsRGF0
YSYsIGNvbnN0IFN0cnVjdHVyZSopOwpAQCAtNDgyLDcgKzQ1Miw3IEBAIHByaXZhdGU6CiAKICAg
ICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgbV90cmFuc2l0aW9uVGFibGU7CiAKLSAgICBPd25Q
dHI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlOworICAgIFdyaXRlQmFycmllcjxQcm9w
ZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGU7CiAKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9p
bnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDViZmQyZDUuLmFhYzgwNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlSW5saW5lc19oCiAjZGVmaW5l
IFN0cnVjdHVyZUlubGluZXNfaAogCisjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNzksNiArMTgw
LDQwIEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6aXNWYWxpZChFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDCiAgICAgcmV0dXJuIGlzVmFsaWQoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWNoZWRQcm90b3R5cGVDaGFpbik7CiB9CiAKK2lubGlu
ZSBib29sIFN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkKK3sKKyAgICBj
aGVja09mZnNldENvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHko
KSA+PSBvdXRPZkxpbmVTaXplKCkpOworCisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKKyAg
ICAgICAgdW5zaWduZWQgY3VycmVudFNpemUgPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFz
dE9mZnNldChtX29mZnNldCk7CisgICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49
IGN1cnJlbnRTaXplKTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRTaXplID09IG91dE9mTGluZUNh
cGFjaXR5KCk7CisgICAgfQorCisgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0g
bV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOworICAgIGlmIChtX3Byb3Bl
cnR5VGFibGUtPmhhc0RlbGV0ZWRPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXpl
KCkpOworICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VD
YXBhY2l0eSgpOworfQorCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKSBjb25zdAoreworICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIEFT
U0VSVCghbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29m
ZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkgPT0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3Jh
Z2VTaXplKCkpOworICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG1fcHJvcGVydHlUYWJsZS0+cHJv
cGVydHlTdG9yYWdlU2l6ZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKCh0b3RhbFNpemUgPCBpbmxp
bmVDYXBhY2l0eSgpID8gMCA6IHRvdGFsU2l6ZSAtIGlubGluZUNhcGFjaXR5KCkpID09IG51bWJl
ck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTdHJ1Y3R1cmVJbmxp
bmVzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190263</attachid>
            <date>2013-02-26 05:05:37 -0800</date>
            <delta_ts>2013-02-26 08:13:30 -0800</delta_ts>
            <desc>ews pls</desc>
            <filename>land-110854-2.diff</filename>
            <type>text/plain</type>
            <size>38709</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZTM0NzVlNy4uMjQyNGJiZSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjggQEAKKzIwMTMtMDItMjYgIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgorCisgICAgICAgIFVudXNlZCBTdHJ1Y3R1
cmUgcHJvcGVydHkgdGFibGVzIHdhc3RlIDE0TUIgb24gTWVtYnVzdGVyLgorICAgICAgICA8aHR0
cDovL3dlYmtpdC5vcmcvYi8xMTA4NTQ+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzI5MjEw
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUdXJuIFBy
b3BlcnR5VGFibGUgaW50byBhIEdDIG9iamVjdCBhbmQgaGF2ZSBTdHJ1Y3R1cmUgZHJvcCB1bnBp
bm5lZCB0YWJsZXMgd2hlbiBtYXJraW5nLgorICAgICAgICAxNCBNQiBwcm9ncmVzc2lvbiBvbiBN
ZW1idXN0ZXIzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGFyZ2V0LnByaToKKworICAgICAgICAgICAgQWRkZWQgUHJvcGVydHlUYWJs
ZS5jcHAuCisKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisKKyAgICAgICAgICAgIE1vdmVkIG1hcmtpbmcgb2Yg
cHJvcGVydHkgdGFibGUgdmFsdWVzIGhlcmUgZnJvbSBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
KS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAgICAgIE1vdmVk
IHRoZXNlIHRvIFN0cnVjdHVyZUlubGluZXMuaCB0byBicmVhayBoZWFkZXIgZGVwZW5kZW5jeSBj
eWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4p
OgorCisgICAgICAgICAgICBOdWxsIG91dCBtX3Byb3BlcnR5VGFibGUgaWYgdGhlIHRhYmxlIGlz
IHVucGlubmVkLiBUaGlzJ2xsIGNhdXNlIHRoZSB0YWJsZSB0byBnZXQgR0MnZC4KKworICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXApOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAg
KFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjb3B5KToKKwogMjAxMy0wMi0y
NiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEtpbGwgYW5vdGhl
ciBhbmFseXplciB3YXJuaW5nIGluIGphdmFzY3JpcHRjb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGU4YTFmMmIuLjUxZDVhNDEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC03MjIsNiArNzIyLDcgQEAgamF2
YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlPZmZzZXQuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90
LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwIFwK
IAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuY3BwIFwKIAlTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm90b3R5cGVNYXAuaCBcCiAJU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmggXApkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZ3lwaQppbmRleCA4NWY2NDQ2Li5jOTAxY2JjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpAQCAtNzU5LDYgKzc1OSw3IEBACiAg
ICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oJywKICAgICAgICAgICAgICdydW50
aW1lL1Byb3BlcnR5U2xvdC5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlTbG90
LmgnLAorICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAnLAogICAgICAgICAg
ICAgJ3J1bnRpbWUvUHJvcGVydHlTdG9yYWdlLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJv
dGVjdC5oJywKICAgICAgICAgICAgICdydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpp
bmRleCA3NTE3YTRhLi41NjBmYjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtMTE3NCw2ICsxMTc0LDEwIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRp
bWVcUHJvcGVydHlUYWJsZS5jcHAiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJPEZpbGUKIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcUHJvdG90eXBlTWFwLmNwcCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRleCAzMjVlNzI1
Li5mMDU1MDVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTMw
NSw2ICszMDUsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0
eURlc2NyaXB0b3IuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
UHJvcGVydHlOYW1lQXJyYXkuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcUHJvcGVydHlTbG90LmNwcCIgLz4NCisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXFByb3BlcnR5VGFibGUuY3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcUHJvdG90eXBlTWFwLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFJlZ0V4cC5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxSZWdFeHBDYWNoZS5jcHAiIC8+DQpAQCAtNzQwLDQgKzc0MSw0IEBACiAgIDxJbXBvcnQg
UHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+DQogICA8
SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPg0KICAgPC9JbXBvcnRHcm91cD4N
Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0Pg0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYmZlMDBiNC4uZDc4OTU0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcwNSw2ICs3MDUsNyBAQAogCQlBN0ZCNjBBNDEwM0Y3
REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RkI2MEEzMTAzRjdEQzIwMDE3QTI4NiAvKiBQ
cm9wZXJ0eURlc2NyaXB0b3IuY3BwICovOyB9OwogCQlBN0ZCNjEwMDEwNDBDMzhCMDAxN0EyODYg
LyogUHJvcGVydHlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBN0ZCNjA0QjEwM0Y1RUFCMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlw
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
QThBNDc0OEUxNTFBODMwNjAwNDEyM0ZGIC8qIGxpYldURi5hIGluIEZyYW1ld29ya3MgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDc0OEQxNTFBODMwNjAwNDEyM0ZGIC8q
IGxpYldURi5hICovOyB9OworCQlBRDFDRjA2QTE2RENBRDVCMDBCOTcxMjMgLyogUHJvcGVydHlU
YWJsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBB
RDFDRjA2ODE2RENBQjJEMDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5jcHAgKi87IH07CiAJCUJD
MDJFOTBEMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwNTBFMTgzOURCMDAwRjky
OTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oICovOyB9OwogCQlCQzAyRTkwRjBFMTgzOURCMDAwRjky
OTcgLyogRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDJF
OTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwOTBFMTgzOURCMDAw
RjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtMTYyMiw2ICsxNjIz
LDcgQEAKIAkJQThBNDc0OEQxNTFBODMwNjAwNDEyM0ZGIC8qIGxpYldURi5hICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9
IGxpYldURi5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBOEU4OTQz
MTBDRDA2MDI0MDAzNjcxNzkgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4RTg5NDMzMENEMDYwM0YwMDM2NzE3OSAvKiBK
U0dsb2JhbE9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2Jh
bE9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDFDRjA2ODE2RENBQjJE
MDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQcm9wZXJ0eVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyRTkwNDBFMTgzOURCMDAwRjkyOTcgLyog
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBFcnJvckNvbnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMw
MkU5MDUwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRXJyb3JDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjUxMiw2ICsyNTE0LDcgQEAKIAkJCQk2NTYyMUU2QjA4OUU4NTk3MDA3
NjBGMzUgLyogUHJvcGVydHlTbG90LmNwcCAqLywKIAkJCQk2NTYyMUU2QzA4OUU4NTk3MDA3NjBG
MzUgLyogUHJvcGVydHlTbG90LmggKi8sCiAJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8q
IFByb3BlcnR5U3RvcmFnZS5oICovLAorCQkJCUFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCAqLywKIAkJCQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogUHJv
dGVjdC5oICovLAogCQkJCTE0RDg0NEEyMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAu
Y3BwICovLAogCQkJCTE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuaCAq
LywKQEAgLTQwMzEsNiArNDAzNCw3IEBACiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8q
IERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJF
MEY3NjE2QzFEQjBGMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJQUQxQ0YwNkExNkRDQUQ1QjAwQjk3MTIzIC8qIFByb3BlcnR5
VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCmluZGV4IGJk
OWYwYzMuLjZlZTJmOTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpAQCAtMjk4LDYgKzI5
OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBc
CiAgICAgcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcCBcCisgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBcCiAgICAgcnVudGlt
ZS9Qcm90b3R5cGVNYXAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcCBc
CiAgICAgcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IGMwNmNmNWMuLjUwOGE4NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApA
QCAtMjMyLDYgKzIzMiw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFU
eXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEV2YWxD
b2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0
ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3Jl
YXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5VGFibGVTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAs
IGpzTnVsbCgpKSk7CiAgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJpbmdzKCp0
aGlzKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4
aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaAppbmRleCBkYzk4ODFmLi4xODk1YTA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaApAQCAtMjU2LDYgKzI1Niw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFByb2dy
YW1Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2Vk
RXZhbENvZGVCbG9ja1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5r
ZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
cHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50
aWZpZXJUYWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaAppbmRleCAyNDIyYzViLi41NGUyOTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKQEAgLTIyLDYgKzIyLDcgQEAK
ICNkZWZpbmUgUHJvcGVydHlNYXBIYXNoVGFibGVfaAogCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZz
ZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIK
ICNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
QEAgLTg1LDggKzg2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIH0KIH07CiAK
LWNsYXNzIFByb3BlcnR5VGFibGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xh
c3MgUHJvcGVydHlUYWJsZSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgLy8gVGhpcyBpcyB0aGUg
aW1wbGVtZW50YXRpb24gZm9yICdpdGVyYXRvcicgYW5kICdjb25zdF9pdGVyYXRvcicsCiAgICAg
Ly8gdXNlZCBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlIHRhYmxlIGluIGluc2VydGlvbiBvcmRlci4K
QEAgLTEyOSw2ICsxMjksMTkgQEAgY2xhc3MgUHJvcGVydHlUYWJsZSB7CiAgICAgfTsKIAogcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0
aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVj
dHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6
Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21w
b3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKICAg
ICB0eXBlZGVmIFN0cmluZ0ltcGwqIEtleVR5cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVu
dHJ5IFZhbHVlVHlwZTsKIApAQCAtMTQyLDkgKzE1NSw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCB1bnNpZ25lZD4gZmluZF9pdGVyYXRvcjsKIAogICAgIC8v
IENvbnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3BlcnR5VGFi
bGUgdG8gY29weSwgb3IgYm90aC4KLSAgICBleHBsaWNpdCBQcm9wZXJ0eVRhYmxlKHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0Nl
bGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERh
dGEmLCBKU0NlbGwqLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHVu
c2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25l
KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAg
ICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25l
ciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAg
flByb3BlcnR5VGFibGUoKTsKIAogICAgIC8vIE9yZGVyZWQgaXRlcmF0aW9uIG1ldGhvZHMuCkBA
IC0xODEsNyArMTk0LDcgQEAgcHVibGljOgogICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQo
UHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAgLy8gQ29weSB0aGlzIFByb3Bl
cnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJv
dmlkZWQuCi0gICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5KEpTR2xvYmFsRGF0YSYs
IEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxl
KiBjb3B5KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5
KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CkBAIC0xODks
NiArMjAyLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgorICAgIFByb3BlcnR5VGFi
bGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBQcm9wZXJ0
eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAg
ICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIHVuc2lnbmVkIGluaXRpYWxD
YXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworCiAgICAgUHJvcGVydHlUYWJsZShjb25z
dCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBu
b3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUgd2Uga25vdyBjYXBhY2l0eSB0byBiZSBh
dmFpbGFibGUuCiAgICAgdm9pZCByZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KTsKQEAg
LTIzOSw3MiArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRW1w
dHlFbnRyeUluZGV4ID0gMDsKIH07CiAKLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKLSAgICA6IG1faW5kZXhTaXplKHNpemVGb3JD
YXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRleE1hc2sobV9pbmRleFNpemUg
LSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJvZWRNYWxs
b2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQotICAgICwgbV9kZWxldGVkQ291
bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwotfQotCi1pbmxp
bmUgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93
bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXplKG90aGVy
Lm1faW5kZXhTaXplKQotICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCi0gICAg
LCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkp
Ci0gICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCi0gICAgLCBtX2RlbGV0ZWRDb3Vu
dChvdGhlci5tX2RlbGV0ZWRDb3VudCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4
U2l6ZSkpOwotCi0gICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkp
OwotCi0gICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBp
dGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpdGVyLT5rZXkt
PnJlZigpOwotICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmlj
VmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMg
dmVjdG9yLgotICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMg
PSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOwotICAgIGlmIChvdGhlckRlbGV0ZWRPZmZz
ZXRzKQotICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9w
ZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKLX0KLQotaW5saW5lIFByb3BlcnR5
VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1f
aW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRl
eE1hc2sobV9pbmRleFNpemUgLSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQot
ICAgICwgbV9kZWxldGVkQ291bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4
U2l6ZSkpOwotICAgIEFTU0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlDb3VudCk7
Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKLSAgICBmb3IgKGNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0g
ICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7Ci0gICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKLSAg
ICAgICAgaXRlci0+a2V5LT5yZWYoKTsKLSAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVy
LCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IHRoZSBt
X2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KLSAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhl
ckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKLSAgICBpZiAo
b3RoZXJEZWxldGVkT2Zmc2V0cykKLSAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7Ci19Ci0K
LWlubGluZSBQcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCi17Ci0gICAgaXRlcmF0b3Ig
ZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOwotCi0gICAgZmFz
dEZyZWUobV9pbmRleCk7Ci19Ci0KIGlubGluZSBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBQcm9w
ZXJ0eVRhYmxlOjpiZWdpbigpCiB7CiAgICAgcmV0dXJuIGl0ZXJhdG9yKHNraXBEZWxldGVkRW50
cmllcyh0YWJsZSgpKSk7CkBAIC01MDIsMTUgKzQ1MywxNSBAQCBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgUHJvcGVydHlUYWJsZTo6bmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0
eSkKICAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBh
Y2l0eSk7CiB9CiAKLWlubGluZSBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFByb3BlcnR5VGFi
bGU6OmNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCBuZXdDYXBhY2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2Fw
YWNpdHkpCiB7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwogCiAgICAg
Ly8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNp
emUgYXMgdGhpcyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2ZSByZWhhc2hpbmcg
YWxsIGtleXMuCiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRl
eFNpemUpCi0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxE
YXRhLCBvd25lciwgKnRoaXMpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFByb3BlcnR5VGFi
bGUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcykpOworICAgICAgICByZXR1
cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICp0aGlzKTsKKyAgICBy
ZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5
LCAqdGhpcyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmQyNGM0ODkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgorCisj
aW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY29uc3QgQ2xh
c3NJbmZvIFByb3BlcnR5VGFibGU6OnNfaW5mbyA9IHsgIlByb3BlcnR5VGFibGUiLCAwLCAwLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb3BlcnR5VGFibGUpIH07CisKK1Byb3BlcnR5VGFibGUq
IFByb3BlcnR5VGFibGU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSkKK3sKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90
TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIFByb3Bl
cnR5VGFibGUoZ2xvYmFsRGF0YSwgaW5pdGlhbENhcGFjaXR5KTsKKyAgICB0YWJsZS0+ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIHRhYmxlOworfQorCitQcm9wZXJ0eVRh
YmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2Vs
bCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQoreworICAgIFByb3BlcnR5VGFi
bGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xv
YmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwgb3RoZXIpOwor
ICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gdGFibGU7
Cit9CisKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25z
dCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK3sKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5l
dyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERhdGEuaGVhcCkp
IFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsIGluaXRpYWxDYXBhY2l0eSwgb3RoZXIp
OworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICByZXR1cm4gdGFi
bGU7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0
YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9pbmRl
eFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCisgICAgLCBtX2luZGV4TWFz
ayhtX2luZGV4U2l6ZSAtIDEpCisgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4o
ZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCisgICAgLCBtX2tleUNvdW50KDApCisgICAg
LCBtX2RlbGV0ZWRDb3VudCgwKQoreworICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5kZXhTaXpl
KSk7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKKyAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0
KCkpCisgICAgLCBtX2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6ZSkKKyAgICAsIG1faW5kZXhN
YXNrKG90aGVyLm1faW5kZXhNYXNrKQorICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCo+KGZhc3RNYWxsb2MoZGF0YVNpemUoKSkpKQorICAgICwgbV9rZXlDb3VudChvdGhlci5tX2tl
eUNvdW50KQorICAgICwgbV9kZWxldGVkQ291bnQob3RoZXIubV9kZWxldGVkQ291bnQpCit7Cisg
ICAgQVNTRVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKKworICAgIG1lbWNweShtX2luZGV4
LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6ZSgpKTsKKworICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXMt
PmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKyAgICAgICAgaXRlci0+a2V5LT5yZWYoKTsKKyAgICAgICAgSGVhcDo6d3JpdGVC
YXJyaWVyKG93bmVyLCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICAv
LyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KKyAgICBWZWN0b3I8UHJvcGVydHlP
ZmZzZXQ+KiBvdGhlckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQo
KTsKKyAgICBpZiAob3RoZXJEZWxldGVkT2Zmc2V0cykKKyAgICAgICAgbV9kZWxldGVkT2Zmc2V0
cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZz
ZXRzKSk7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0
IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERh
dGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faW5kZXhTaXplKHNpemVG
b3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQorICAgICwgbV9pbmRleE1hc2sobV9pbmRleFNp
emUgLSAxKQorICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJvZWRN
YWxsb2MoZGF0YVNpemUoKSkpKQorICAgICwgbV9rZXlDb3VudCgwKQorICAgICwgbV9kZWxldGVk
Q291bnQoMCkKK3sKKyAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOworICAgIEFT
U0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlDb3VudCk7CisKKyAgICBjb25zdF9p
dGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKKyAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIg
PSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIEFTU0VSVChj
YW5JbnNlcnQoKSk7CisgICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKKyAgICAgICAgaXRlci0+a2V5
LT5yZWYoKTsKKyAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5zcGVjaWZp
Y1ZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZzZXRz
IHZlY3Rvci4KKyAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhlckRlbGV0ZWRPZmZzZXRz
ID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKKyAgICBpZiAob3RoZXJEZWxldGVkT2Zm
c2V0cykKKyAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJv
cGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7Cit9CisKK3ZvaWQgUHJvcGVydHlU
YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGljX2Nhc3Q8UHJvcGVydHlU
YWJsZSo+KGNlbGwpLT5Qcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpOworfQorCitQcm9w
ZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCit7CisgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+
ZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikKKyAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOworCisgICAgZmFzdEZyZWUobV9pbmRl
eCk7Cit9CisKK3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFByb3BlcnR5VGFibGUqIHRoaXNPYmplY3Qg
PSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOworICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5I
RVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUKHRoaXNPYmplY3QtPnN0cnVj
dHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4oKSk7CisKKyAgICBKU0Nl
bGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisKKyAgICBQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5lbmQoKTsKKyAgICBmb3IgKFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPmJlZ2luKCk7IHB0ciAhPSBlbmQ7ICsr
cHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zcGVjaWZpY1ZhbHVlKTsKK30KKwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggYjc5
YzEwNi4uZmM2OWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJv
cGVydHlNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICAgICAgQVNTRVJUKHN0
cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKTsKICAgICAgICAgICAgIEFTU0VSVCghc3RydWN0dXJl
LT5wcmV2aW91c0lEKCkpOwogCi0gICAgICAgICAgICBtX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1
cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJPZlNsb3RzRm9y
TGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgICAgICAgICAgbV9w
cm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29m
ZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgfQogCiAgICAgaWYgKCFtX3Byb3Bl
cnR5VGFibGUpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKG51bWJlck9mU2xvdHNGb3JMYXN0
T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgIGNyZWF0ZVByb3Bl
cnR5TWFwKGdsb2JhbERhdGEsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBt
X2lubGluZUNhcGFjaXR5KSk7CiAKICAgICBmb3IgKHB0cmRpZmZfdCBpID0gc3RydWN0dXJlcy5z
aXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVz
W2ldOwpAQCAtMzc2LDE0ICszNzYsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3Bl
cnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSoKICAgICBp
ZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKICAgICAgICAgc3RydWN0dXJlLT5jaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQ
cm9wZXJ0eVRhYmxlKQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0g
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJv
cGVydHlUYWJsZS5yZWxlYXNlKCk7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlLT5jb3B5KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlLT5zaXplKCkgKyAxKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNpdGlv
bi0+bV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
Pm1fcHJvcGVydHlUYWJsZS5nZXQoKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPm1fcHJvcGVy
dHlUYWJsZS5jbGVhcigpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0
cnVjdHVyZS0+cHJldmlvdXNJRCgpKQogICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJh
bnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNy
ZWF0ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5tX29m
ZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAKQEAgLTQxNSw3ICs0MTcsNyBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFN0cnVjdAogICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldChnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uLCBwcm90b3R5cGUpOwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9w
cm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLnNl
dChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9y
UGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZz
ZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBAIC00
MzEsNyArNDMzLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnUKICAgICArK3RyYW5zaXRpb24t
Pm1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50OwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+
bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxl
LnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBA
IC00NTIsNyArNDU0LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRy
YW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3QKICAgICAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CiAKICAgICAg
ICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0
YSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+Y29w
eVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgICAg
ICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24s
IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5z
aXRpb24pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zm
c2V0OwogICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAgCkBAIC00NzUsNyArNDc3
LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUKICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24g
PSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKIAogICAgIHN0cnVjdHVyZS0+bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJs
ZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwogICAgIHRyYW5zaXRpb24tPm1f
b2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9uLT5tX2RpY3Rpb25h
cnlLaW5kID0ga2luZDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKQEAgLTUzNSw3ICs1MzcsNyBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydQogICAgIC8vIERvbid0IHNldCBtX29mZnNldCwgYXMg
b25lIGNhbiBub3QgdHJhbnNpdGlvbiB0byB0aGlzLgogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+
bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmco
Z2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxl
LnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9v
ZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1fcHJldmVudEV4
dGVuc2lvbnMgPSB0cnVlOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNTc1LDE0ICs1Nzcs
MTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSoKICAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3Bl
cnR5VGFibGUpIHsKICAgICAgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQotICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5
VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5
VGFibGUtPnNpemUoKSArIDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9u
LT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxlYXNlKCk7
CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgKyAxKSk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLnNl
dChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5nZXQo
KSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5jbGVhcigpOworICAg
ICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJldmlvdXNJRCgp
KQogICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxE
YXRhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVy
dHlNYXAoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFwKGdsb2Jh
bERhdGEpOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFk
ZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKQEAgLTczNywxNCArNzQxLDE4IEBAIGlubGluZSB2
b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAKICNlbmRpZgogCi1QYXNzT3duUHRy
PFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJl
Ojpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
b3duZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG1fcHJvcGVydHlUYWJsZSA/IG5ldyBQcm9w
ZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCAqbV9wcm9wZXJ0eVRhYmxlKSA6IDApOworICAg
IGlmICghbV9wcm9wZXJ0eVRhYmxlKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gUHJv
cGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUuZ2V0
KCkpOwogfQogCi1QYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBv
d25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5u
aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvd25lcikKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8gbmV3IFByb3BlcnR5VGFibGUoZ2xvYmFs
RGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDogbmV3IFByb3BlcnR5VGFibGUobnVtYmVy
T2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKSk7CisgICAg
aWYgKG1fcHJvcGVydHlUYWJsZSkKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25l
KGdsb2JhbERhdGEsIG93bmVyLCAqbV9wcm9wZXJ0eVRhYmxlLmdldCgpKTsKKyAgICByZXR1cm4g
UHJvcGVydHlUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zm
c2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpCkBA
IC04MDEsNyArODA5LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpwdXRTcGVjaWZpY1Zh
bHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW0KICAgICBTdHJpbmdJbXBs
KiByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkK
LSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAo
Z2xvYmFsRGF0YSk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBtX3Byb3BlcnR5
VGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKQEAgLTgzMywxMiArODQxLDEy
IEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVBy
b3BlcnR5TWFwKHVuc2lnbmVkIGNhcGFjaXR5KQordm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVByb3Bl
cnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2FwYWNpdHkpCiB7CiAg
ICAgQVNTRVJUKCFtX3Byb3BlcnR5VGFibGUpOwogCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwot
ICAgIG1fcHJvcGVydHlUYWJsZSA9IGFkb3B0UHRyKG5ldyBQcm9wZXJ0eVRhYmxlKGNhcGFjaXR5
KSk7CisgICAgbV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBQcm9wZXJ0eVRh
YmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgY2FwYWNpdHkpKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6
OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwg
UHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpA
QCAtODgyLDExICs4OTAsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB9CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKICAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgaWYgKHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBl
bmQgPSB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUtPmVuZCgpOwotICAgICAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZS0+
YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgm
cHRyLT5zcGVjaWZpY1ZhbHVlKTsKLSAgICB9CisKKyAgICBpZiAodGhpc09iamVjdC0+bV9pc1Bp
bm5lZFByb3BlcnR5VGFibGUpIHsKKyAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fcHJvcGVy
dHlUYWJsZSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5
VGFibGUpOworICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlKQorICAg
ICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUuY2xlYXIoKTsKIH0KIAogYm9vbCBTdHJ1
Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oCmluZGV4IDIzNTljNmMuLjZiMWQwOGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCkBAIC0zMSwxNiArMzEsMTUgQEAKICNp
bmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAjaW5jbHVkZSAiSlNU
eXBlLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJQcm9w
ZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiUHJvdGVjdC5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgiCiAjaW5j
bHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlICJX
ZWFrLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSW1wbC5oPgpAQCAtNTEsNiArNTAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIExM
SW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5OwogY2xhc3MgUHJv
cGVydHlOYW1lQXJyYXlEYXRhOworY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNsYXNzIFN0cnVjdHVy
ZUNoYWluOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmluZzsKQEAgLTEwOCwyNSAr
MTA4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxEYXRhJik7CiAgICAg
Ym9vbCBpc0V4dGVuc2libGUoKSBjb25zdCB7IHJldHVybiAhbV9wcmV2ZW50RXh0ZW5zaW9uczsg
fQogICAgIGJvb2wgZGlkVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlkVHJhbnNpdGlv
bjsgfQotICAgIGJvb2wgcHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkKLSAgICB7Ci0gICAg
ICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIAotICAgICAgICBBU1NF
UlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXplKCkpOwotICAgICAgICAgICAg
Ci0gICAgICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
dXJyZW50U2l6ZSA9IG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0
KTsKLSAgICAgICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IGN1cnJlbnRTaXpl
KTsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBvdXRPZkxpbmVDYXBhY2l0eSgp
OwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNh
cGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOwotICAg
ICAgICBpZiAobV9wcm9wZXJ0eVRhYmxlLT5oYXNEZWxldGVkT2Zmc2V0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgQVNTRVJUKHRvdGFsU3RvcmFn
ZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkpOwotICAgICAgICByZXR1cm4g
bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgPT0gdG90YWxTdG9yYWdlQ2FwYWNpdHkoKTsKLSAgICB9
CisgICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKTsKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzaXplX3Qgc3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNhcGFjaXR5KCk7IAog
CiAgICAgU3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
LCBKU09iamVjdCopOwpAQCAtMzgyLDE0ICszNjQsMTQgQEAgcHJpdmF0ZToKICAgICBQcm9wZXJ0
eU9mZnNldCBwdXRTcGVjaWZpY1ZhbHVlKEpTR2xvYmFsRGF0YSYsIFByb3BlcnR5TmFtZSwgdW5z
aWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKICAgICBQcm9wZXJ0eU9m
ZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAo
dW5zaWduZWQga2V5Q291bnQgPSAwKTsKKyAgICB2b2lkIGNyZWF0ZVByb3BlcnR5TWFwKEpTR2xv
YmFsRGF0YSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBjaGVja0NvbnNpc3Rl
bmN5KCk7CiAKICAgICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYsIFByb3Bl
cnR5TmFtZSk7CiAgICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoSlNHbG9iYWxEYXRhJik7
CiAKLSAgICBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IGNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIFBhc3NPd25QdHI8UHJvcGVydHlUYWJs
ZT4gY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSog
b3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRh
YmxlRm9yUGlubmluZyhKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVyKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJik7
CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogICAgIHsKQEAgLTQ0NSwxOSArNDI3LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFy
ZURhdGEuZ2V0KCkpOwogICAgIH0KICAgICAgICAgCi0gICAgQUxXQVlTX0lOTElORSBib29sIGNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3Byb3Bl
cnR5VGFibGUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUp
OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwg
bV9pbmxpbmVDYXBhY2l0eSkgPT0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXpl
KCkpOwotICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBtX3Byb3BlcnR5VGFibGUtPnByb3Bl
cnR5U3RvcmFnZVNpemUoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoKHRvdGFsU2l6ZSA8IGlu
bGluZUNhcGFjaXR5KCkgPyAwIDogdG90YWxTaXplIC0gaW5saW5lQ2FwYWNpdHkoKSkgPT0gbnVt
YmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpKTsKLSAgICAgICAgICAg
IAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgQUxXQVlTX0lOTElORSBib29sIGNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdDsKIAogICAgIHZvaWQgYWxsb2NhdGVSYXJlRGF0
YShKU0dsb2JhbERhdGEmKTsKICAgICB2b2lkIGNsb25lUmFyZURhdGFGcm9tKEpTR2xvYmFsRGF0
YSYsIGNvbnN0IFN0cnVjdHVyZSopOwpAQCAtNDgyLDcgKzQ1Miw3IEBAIHByaXZhdGU6CiAKICAg
ICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgbV90cmFuc2l0aW9uVGFibGU7CiAKLSAgICBPd25Q
dHI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlOworICAgIFdyaXRlQmFycmllcjxQcm9w
ZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGU7CiAKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9p
bnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDViZmQyZDUuLmFhYzgwNjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVz
LmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlSW5saW5lc19oCiAjZGVmaW5l
IFN0cnVjdHVyZUlubGluZXNfaAogCisjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0xNzksNiArMTgw
LDQwIEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6aXNWYWxpZChFeGVjU3RhdGUqIGV4ZWMsIFN0
cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDCiAgICAgcmV0dXJuIGlzVmFsaWQoZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWNoZWRQcm90b3R5cGVDaGFpbik7CiB9CiAKK2lubGlu
ZSBib29sIFN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkKK3sKKyAgICBj
aGVja09mZnNldENvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHko
KSA+PSBvdXRPZkxpbmVTaXplKCkpOworCisgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKKyAg
ICAgICAgdW5zaWduZWQgY3VycmVudFNpemUgPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFz
dE9mZnNldChtX29mZnNldCk7CisgICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49
IGN1cnJlbnRTaXplKTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRTaXplID09IG91dE9mTGluZUNh
cGFjaXR5KCk7CisgICAgfQorCisgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0g
bV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOworICAgIGlmIChtX3Byb3Bl
cnR5VGFibGUtPmhhc0RlbGV0ZWRPZmZzZXQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXpl
KCkpOworICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VD
YXBhY2l0eSgpOworfQorCitpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKSBjb25zdAoreworICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIEFT
U0VSVCghbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29m
ZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkgPT0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3Jh
Z2VTaXplKCkpOworICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG1fcHJvcGVydHlUYWJsZS0+cHJv
cGVydHlTdG9yYWdlU2l6ZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKCh0b3RhbFNpemUgPCBpbmxp
bmVDYXBhY2l0eSgpID8gMCA6IHRvdGFsU2l6ZSAtIGlubGluZUNhcGFjaXR5KCkpID09IG51bWJl
ck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTdHJ1Y3R1cmVJbmxp
bmVzX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190287</attachid>
            <date>2013-02-26 08:13:30 -0800</date>
            <delta_ts>2013-02-26 08:32:42 -0800</delta_ts>
            <desc>Come on EWS, not today.</desc>
            <filename>land-110854-3.diff</filename>
            <type>text/plain</type>
            <size>38902</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZDBlZGNiOS4uOTI1MTY1MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzAgQEAKIDIwMTMtMDItMjYgIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCisgICAgICAgIFVudXNlZCBTdHJ1Y3R1
cmUgcHJvcGVydHkgdGFibGVzIHdhc3RlIDE0TUIgb24gTWVtYnVzdGVyLgorICAgICAgICA8aHR0
cDovL3dlYmtpdC5vcmcvYi8xMTA4NTQ+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzI5MjEw
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUdXJuIFBy
b3BlcnR5VGFibGUgaW50byBhIEdDIG9iamVjdCBhbmQgaGF2ZSBTdHJ1Y3R1cmUgZHJvcCB1bnBp
bm5lZCB0YWJsZXMgd2hlbiBtYXJraW5nLgorICAgICAgICAxNCBNQiBwcm9ncmVzc2lvbiBvbiBN
ZW1idXN0ZXIzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGFyZ2V0LnByaToKKworICAgICAgICAgICAgQWRkZWQgUHJvcGVydHlUYWJs
ZS5jcHAuCisKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisKKyAgICAgICAgICAgIE1vdmVkIG1hcmtpbmcgb2Yg
cHJvcGVydHkgdGFibGUgdmFsdWVzIGhlcmUgZnJvbSBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
KS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAgICAgIE1vdmVk
IHRoZXNlIHRvIFN0cnVjdHVyZUlubGluZXMuaCB0byBicmVhayBoZWFkZXIgZGVwZW5kZW5jeSBj
eWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4p
OgorCisgICAgICAgICAgICBOdWxsIG91dCBtX3Byb3BlcnR5VGFibGUgaWYgdGhlIHRhYmxlIGlz
IHVucGlubmVkLiBUaGlzJ2xsIGNhdXNlIHRoZSB0YWJsZSB0byBnZXQgR0MnZC4KKworICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXApOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAg
KFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjb3B5KToKKworMjAxMy0wMi0y
NiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjE0NDA1NC4KICAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMTQ0MDU0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTA4NTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggZThhMWYyYi4uNTFkNWE0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTcyMiw2ICs3MjIsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3RvdHlwZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVN0b3JhZ2UuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
CmluZGV4IDg1ZjY0NDYuLmM5MDFjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpCkBAIC03NTksNiArNzU5LDcgQEAKICAgICAgICAgICAgICdydW50aW1lL1By
b3BlcnR5T2Zmc2V0LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcCcs
CiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVNsb3QuaCcsCisgICAgICAgICAgICAncnVu
dGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVN0
b3JhZ2UuaCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm90ZWN0LmgnLAogICAgICAgICAgICAg
J3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCmluZGV4IDc1MTdhNGEuLjU2MGZiMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCkBAIC0xMTc0LDYgKzExNzQsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQcm9wZXJ0eVRhYmxlLmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVu
dGltZVxQcm90b3R5cGVNYXAuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IDMyNWU3MjUuLmYwNTUwNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpAQCAtMzA1LDYgKzMwNSw3IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5RGVzY3JpcHRvci5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWVBcnJheS5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVNsb3QuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlUYWJsZS5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm90b3R5cGVNYXAu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENhY2hlLmNwcCIg
Lz4NCkBAIC03NDAsNCArNzQxLDQgQEAKICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1Bh
dGgpXE1pY3Jvc29mdC5DcHAudGFyZ2V0cyIgLz4NCiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0
ZW5zaW9uVGFyZ2V0cyI+DQogICA8L0ltcG9ydEdyb3VwPg0KLTwvUHJvamVjdD4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCis8L1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agppbmRleCBiZmUwMGI0Li44ZTlkZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNzA1LDYgKzcwNSw3IEBACiAJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0
eURlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdGQjYwQTMxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAg
Ki87IH07CiAJCUE3RkI2MTAwMTA0MEMzOEIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3RkI2MDRC
MTAzRjVFQUIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlBOEE0NzQ4RTE1MUE4MzA2MDA0MTIz
RkYgLyogbGliV1RGLmEgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEE0NzQ4RDE1MUE4MzA2MDA0MTIzRkYgLyogbGliV1RGLmEgKi87IH07CisJCUFE
RTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEy
MyAvKiBQcm9wZXJ0eVRhYmxlLmNwcCAqLzsgfTsKIAkJQkMwMkU5MEQwRTE4MzlEQjAwMEY5Mjk3
IC8qIEVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDMDJFOTA1MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9y
LmggKi87IH07CiAJCUJDMDJFOTBGMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDcw
RTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8q
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDMDJFOTA5MEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmggKi87IH07CkBAIC0xNjIyLDYgKzE2MjMsNyBAQAogCQlBOEE0NzQ4RDE1MUE4
MzA2MDA0MTIzRkYgLyogbGliV1RGLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBwYXRoID0gbGliV1RGLmE7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUE4RTg5NDMxMENEMDYwMjQwMDM2NzE3OSAvKiBK
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThFODk0MzMwQ0QwNjAzRjAwMzY3MTc5IC8qIEpTR2xvYmFsT2JqZWN0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2xvYmFsT2JqZWN0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQcm9wZXJ0eVRh
YmxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5VGFi
bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyMUJGMjEzNjkwMEMzMDBG
QzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmln
OyBwYXRoID0gVG9vbEV4ZWN1dGFibGUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDMDJFOTA0MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEVycm9yQ29uc3RydWN0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQzAyRTkwNTBFMTgzOURCMDAwRjkyOTcg
LyogRXJyb3JDb25zdHJ1Y3Rvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBF
cnJvckNvbnN0cnVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNTEyLDYg
KzI1MTQsNyBAQAogCQkJCTY1NjIxRTZCMDg5RTg1OTcwMDc2MEYzNSAvKiBQcm9wZXJ0eVNsb3Qu
Y3BwICovLAogCQkJCTY1NjIxRTZDMDg5RTg1OTcwMDc2MEYzNSAvKiBQcm9wZXJ0eVNsb3QuaCAq
LywKIAkJCQkwRkI3RjM5MDE1RUQ4RTM4MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggKi8s
CisJCQkJQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovLAog
CQkJCTY1QzAyRkJCMDYzNzQ2MkEwMDNFN0VFNiAvKiBQcm90ZWN0LmggKi8sCiAJCQkJMTREODQ0
QTIxNkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5jcHAgKi8sCiAJCQkJMTREODQ0QTMx
NkFBMkM3MDAwQTY1QUYwIC8qIFByb3RvdHlwZU1hcC5oICovLApAQCAtNDAzMSw2ICs0MDM0LDcg
QEAKIAkJCQkwRkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlv
blBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQkUwRjc2MTZDMURCMEYwMDgyQzVFOCAv
KiBERkdVbmlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDkzQUZBMTZE
MENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlB
REUzOUZGRjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKaW5kZXggNTgxNDBmNi4uNjYwOGEwNyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkKQEAgLTI5OCw2ICsyOTgsNyBAQCBTT1VSQ0VTICs9IFwKICAg
ICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVydHlO
YW1lQXJyYXkuY3BwIFwKICAgICBydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAgXAorICAgIHJ1bnRp
bWUvUHJvcGVydHlUYWJsZS5jcHAgXAogICAgIHJ1bnRpbWUvUHJvdG90eXBlTWFwLmNwcCBcCiAg
ICAgcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwQ2Fj
aGVkUmVzdWx0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbERhdGEuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxEYXRhLmNwcAppbmRleCBjMDZjZjVjLi41MDhhODc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKQEAgLTIzMiw2ICsyMzIsNyBAQCBKU0ds
b2JhbERhdGE6OkpTR2xvYmFsRGF0YShHbG9iYWxEYXRhVHlwZSBnbG9iYWxEYXRhVHlwZSwgSGVh
cFR5cGUgaGVhcFR5cGUpCiAgICAgdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlLnNl
dCgqdGhpcywgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMs
IDAsIGpzTnVsbCgpKSk7CiAgICAgdW5saW5rZWRFdmFsQ29kZUJsb2NrU3RydWN0dXJlLnNldCgq
dGhpcywgVW5saW5rZWRFdmFsQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRo
aXMsIFVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKKyAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVy
dHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHNtYWxs
U3RyaW5ncy5pbml0aWFsaXplQ29tbW9uU3RyaW5ncygqdGhpcyk7CiAKICAgICB3dGZUaHJlYWRE
YXRhKCkuc2V0Q3VycmVudElkZW50aWZpZXJUYWJsZShleGlzdGluZ0VudHJ5SWRlbnRpZmllclRh
YmxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKaW5k
ZXggZGM5ODgxZi4uMTg5NWEwNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmgKQEAgLTI1Niw2ICsyNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrU3RydWN0dXJlOwog
ICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmU7
CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1
Y3R1cmU7CisgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7
CiAKICAgICAgICAgSWRlbnRpZmllclRhYmxlKiBpZGVudGlmaWVyVGFibGU7CiAgICAgICAgIENv
bW1vbklkZW50aWZpZXJzKiBwcm9wZXJ0eU5hbWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKaW5kZXggMjQyMmM1Yi4uNTRl
Mjk3MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlN
YXBIYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0
eU1hcEhhc2hUYWJsZS5oCkBAIC0yMiw2ICsyMiw3IEBACiAjZGVmaW5lIFByb3BlcnR5TWFwSGFz
aFRhYmxlX2gKIAogI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3RydWN0
dXJlLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hUYWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CkBAIC04NSw4ICs4Niw3IEBAIHN0cnVj
dCBQcm9wZXJ0eU1hcEVudHJ5IHsKICAgICB9CiB9OwogCi1jbGFzcyBQcm9wZXJ0eVRhYmxlIHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFByb3BlcnR5VGFibGUgOiBwdWJs
aWMgSlNDZWxsIHsKIAogICAgIC8vIFRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIGZvciAnaXRl
cmF0b3InIGFuZCAnY29uc3RfaXRlcmF0b3InLAogICAgIC8vIHVzZWQgZm9yIGl0ZXJhdGluZyBv
dmVyIHRoZSB0YWJsZSBpbiBpbnNlcnRpb24gb3JkZXIuCkBAIC0xMjksNiArMTI5LDE5IEBAIGNs
YXNzIFByb3BlcnR5VGFibGUgewogICAgIH07CiAKIHB1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJ
bW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwq
KTsKKworICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CisK
KyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZShnbG9iYWxEYXRhLCBnbG9i
YWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ29tcG91bmRUeXBlLCBPdmVycmlkZXNWaXNp
dENoaWxkcmVuKSwgJnNfaW5mbyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgdmlzaXRDaGls
ZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworCiAgICAgdHlwZWRlZiBTdHJpbmdJbXBsKiBL
ZXlUeXBlOwogICAgIHR5cGVkZWYgUHJvcGVydHlNYXBFbnRyeSBWYWx1ZVR5cGU7CiAKQEAgLTE0
Miw5ICsxNTUsOSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBzdGQ6OnBhaXI8VmFsdWVUeXBlKiwg
dW5zaWduZWQ+IGZpbmRfaXRlcmF0b3I7CiAKICAgICAvLyBDb25zdHJ1Y3RvciBpcyBwYXNzZWQg
YW4gaW5pdGlhbCBjYXBhY2l0eSwgYSBQcm9wZXJ0eVRhYmxlIHRvIGNvcHksIG9yIGJvdGguCi0g
ICAgZXhwbGljaXQgUHJvcGVydHlUYWJsZSh1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOwotICAg
IFByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgY29uc3QgUHJvcGVydHlUYWJs
ZSYpOwotICAgIFByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3Bl
cnR5VGFibGUqIGNyZWF0ZShKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkp
OworICAgIHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjbG9uZShKU0dsb2JhbERhdGEmLCBKU0NlbGwq
IG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUq
IGNsb25lKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAgIH5Qcm9wZXJ0eVRhYmxlKCk7CiAKICAg
ICAvLyBPcmRlcmVkIGl0ZXJhdGlvbiBtZXRob2RzLgpAQCAtMTgxLDcgKzE5NCw3IEBAIHB1Ymxp
YzoKICAgICBQcm9wZXJ0eU9mZnNldCBuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNh
cGFjaXR5KTsKIAogICAgIC8vIENvcHkgdGhpcyBQcm9wZXJ0eVRhYmxlLCBlbnN1cmluZyB0aGUg
Y29weSBoYXMgYXQgbGVhc3QgdGhlIGNhcGFjaXR5IHByb3ZpZGVkLgotICAgIFBhc3NPd25QdHI8
UHJvcGVydHlUYWJsZT4gY29weShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCBuZXdDYXBhY2l0eSk7CisgICAgUHJvcGVydHlUYWJsZSogY29weShKU0dsb2JhbERhdGEmLCBK
U0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSk7CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgc2l6ZV90IHNpemVJbk1lbW9yeSgpOwpAQCAtMTg5LDYgKzIwMiwxMCBAQCBwdWJsaWM6CiAj
ZW5kaWYKIAogcHJpdmF0ZToKKyAgICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIHVuc2ln
bmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBK
U0NlbGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CisgICAgUHJvcGVydHlUYWJsZShKU0dsb2Jh
bERhdGEmLCBKU0NlbGwqLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5
VGFibGUmKTsKKwogICAgIFByb3BlcnR5VGFibGUoY29uc3QgUHJvcGVydHlUYWJsZSYpOwogICAg
IC8vIFVzZWQgdG8gaW5zZXJ0IGEgdmFsdWUga25vd24gbm90IHRvIGJlIGluIHRoZSB0YWJsZSwg
YW5kIHdoZXJlIHdlIGtub3cgY2FwYWNpdHkgdG8gYmUgYXZhaWxhYmxlLgogICAgIHZvaWQgcmVp
bnNlcnQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSk7CkBAIC0yMzksNzIgKzI1Niw2IEBAIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIEVtcHR5RW50cnlJbmRleCA9IDA7CiB9Owog
Ci1pbmxpbmUgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZSh1bnNpZ25lZCBpbml0aWFsQ2Fw
YWNpdHkpCi0gICAgOiBtX2luZGV4U2l6ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5
KSkKLSAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXplIC0gMSkKLSAgICAsIG1faW5kZXgoc3Rh
dGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVyb2VkTWFsbG9jKGRhdGFTaXplKCkpKSkKLSAgICAs
IG1fa2V5Q291bnQoMCkKLSAgICAsIG1fZGVsZXRlZENvdW50KDApCi17Ci0gICAgQVNTRVJUKGlz
UG93ZXJPZjIobV9pbmRleFNpemUpKTsKLX0KLQotaW5saW5lIFByb3BlcnR5VGFibGU6OlByb3Bl
cnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJs
ZSYgb3RoZXIpCi0gICAgOiBtX2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6ZSkKLSAgICAsIG1f
aW5kZXhNYXNrKG90aGVyLm1faW5kZXhNYXNrKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1
bnNpZ25lZCo+KGZhc3RNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudChvdGhl
ci5tX2tleUNvdW50KQotICAgICwgbV9kZWxldGVkQ291bnQob3RoZXIubV9kZWxldGVkQ291bnQp
Ci17Ci0gICAgQVNTRVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKLQotICAgIG1lbWNweSht
X2luZGV4LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6ZSgpKTsKLQotICAgIGl0ZXJhdG9yIGVuZCA9
IHRoaXMtPmVuZCgpOwotICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaXRlci0+a2V5LT5yZWYoKTsKLSAgICAgICAgSGVhcDo6
d3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9Ci0K
LSAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KLSAgICBWZWN0b3I8UHJv
cGVydHlPZmZzZXQ+KiBvdGhlckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0
cy5nZXQoKTsKLSAgICBpZiAob3RoZXJEZWxldGVkT2Zmc2V0cykKLSAgICAgICAgbV9kZWxldGVk
T2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0
ZWRPZmZzZXRzKSk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKEpT
R2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29u
c3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCi0gICAgOiBtX2luZGV4U2l6ZShzaXplRm9yQ2FwYWNp
dHkoaW5pdGlhbENhcGFjaXR5KSkKLSAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXplIC0gMSkK
LSAgICAsIG1faW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVyb2VkTWFsbG9jKGRh
dGFTaXplKCkpKSkKLSAgICAsIG1fa2V5Q291bnQoMCkKLSAgICAsIG1fZGVsZXRlZENvdW50KDAp
Ci17Ci0gICAgQVNTRVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKLSAgICBBU1NFUlQoaW5p
dGlhbENhcGFjaXR5ID49IG90aGVyLm1fa2V5Q291bnQpOwotCi0gICAgY29uc3RfaXRlcmF0b3Ig
ZW5kID0gb3RoZXIuZW5kKCk7Ci0gICAgZm9yIChjb25zdF9pdGVyYXRvciBpdGVyID0gb3RoZXIu
YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBBU1NFUlQoY2FuSW5zZXJ0
KCkpOwotICAgICAgICByZWluc2VydCgqaXRlcik7Ci0gICAgICAgIGl0ZXItPmtleS0+cmVmKCk7
Ci0gICAgICAgIEhlYXA6OndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5n
ZXQoKSk7Ci0gICAgfQotCi0gICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3Iu
Ci0gICAgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Piogb3RoZXJEZWxldGVkT2Zmc2V0cyA9IG90aGVy
Lm1fZGVsZXRlZE9mZnNldHMuZ2V0KCk7Ci0gICAgaWYgKG90aGVyRGVsZXRlZE9mZnNldHMpCi0g
ICAgICAgIG1fZGVsZXRlZE9mZnNldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFByb3BlcnR5T2Zm
c2V0Pigqb3RoZXJEZWxldGVkT2Zmc2V0cykpOwotfQotCi1pbmxpbmUgUHJvcGVydHlUYWJsZTo6
flByb3BlcnR5VGFibGUoKQotewotICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXMtPmVuZCgpOwotICAg
IGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCi0gICAg
ICAgIGl0ZXItPmtleS0+ZGVyZWYoKTsKLQotICAgIGZhc3RGcmVlKG1faW5kZXgpOwotfQotCiBp
bmxpbmUgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgUHJvcGVydHlUYWJsZTo6YmVnaW4oKQogewog
ICAgIHJldHVybiBpdGVyYXRvcihza2lwRGVsZXRlZEVudHJpZXModGFibGUoKSkpOwpAQCAtNTAy
LDE1ICs0NTMsMTUgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFByb3BlcnR5VGFibGU6Om5leHRP
ZmZzZXQoUHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpCiAgICAgcmV0dXJuIG9mZnNldEZv
clByb3BlcnR5TnVtYmVyKHNpemUoKSwgaW5saW5lQ2FwYWNpdHkpOwogfQogCi1pbmxpbmUgUGFz
c093blB0cjxQcm9wZXJ0eVRhYmxlPiBQcm9wZXJ0eVRhYmxlOjpjb3B5KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCitpbmxpbmUg
UHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y29weShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KQogewogICAgIEFTU0VSVChu
ZXdDYXBhY2l0eSA+PSBtX2tleUNvdW50KTsKIAogICAgIC8vIEZhc3QgY2FzZTsgaWYgdGhlIG5l
dyB0YWJsZSB3aWxsIGJlIHRoZSBzYW1lIG1faW5kZXhTaXplIGFzIHRoaXMgb25lLCB3ZSBjYW4g
bWVtY3B5IGl0LAogICAgIC8vIHNhdmUgcmVoYXNoaW5nIGFsbCBrZXlzLgogICAgIGlmIChzaXpl
Rm9yQ2FwYWNpdHkobmV3Q2FwYWNpdHkpID09IG1faW5kZXhTaXplKQotICAgICAgICByZXR1cm4g
YWRvcHRQdHIobmV3IFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsICp0aGlzKSk7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCBu
ZXdDYXBhY2l0eSwgKnRoaXMpKTsKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25l
KGdsb2JhbERhdGEsIG93bmVyLCAqdGhpcyk7CisgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNs
b25lKGdsb2JhbERhdGEsIG93bmVyLCBuZXdDYXBhY2l0eSwgKnRoaXMpOwogfQogCiAjaWZuZGVm
IE5ERUJVRwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlUYWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxl
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQyNjc2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5j
cHAKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGlu
ZXMuaCIKKyNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCisjaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsKKworY29uc3QgQ2xhc3NJbmZvIFByb3BlcnR5VGFibGU6OnNfaW5mbyA9IHsgIlByb3BlcnR5
VGFibGUiLCAwLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKFByb3BlcnR5VGFibGUpIH07CisK
K1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNyZWF0ZShKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKK3sKKyAgICBQcm9wZXJ0eVRhYmxlKiB0
YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERh
dGEuaGVhcCkpIFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgaW5pdGlhbENhcGFjaXR5KTsKKyAg
ICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIHRhYmxlOwor
fQorCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjbG9uZShKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorewor
ICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJv
cGVydHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBv
d25lciwgb3RoZXIpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAg
ICByZXR1cm4gdGFibGU7Cit9CisKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25l
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKK3sKKyAgICBQcm9wZXJ0eVRh
YmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGds
b2JhbERhdGEuaGVhcCkpIFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsIGluaXRpYWxD
YXBhY2l0eSwgb3RoZXIpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsK
KyAgICByZXR1cm4gdGFibGU7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCisgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgp
KQorICAgICwgbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCisg
ICAgLCBtX2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCisgICAgLCBtX2luZGV4KHN0YXRpY19j
YXN0PHVuc2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCisgICAgLCBtX2tl
eUNvdW50KDApCisgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQoreworICAgIEFTU0VSVChpc1Bvd2Vy
T2YyKG1faW5kZXhTaXplKSk7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxl
JiBvdGhlcikKKyAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFi
bGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2luZGV4U2l6ZShvdGhlci5tX2luZGV4U2l6ZSkK
KyAgICAsIG1faW5kZXhNYXNrKG90aGVyLm1faW5kZXhNYXNrKQorICAgICwgbV9pbmRleChzdGF0
aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RNYWxsb2MoZGF0YVNpemUoKSkpKQorICAgICwgbV9rZXlD
b3VudChvdGhlci5tX2tleUNvdW50KQorICAgICwgbV9kZWxldGVkQ291bnQob3RoZXIubV9kZWxl
dGVkQ291bnQpCit7CisgICAgQVNTRVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKKworICAg
IG1lbWNweShtX2luZGV4LCBvdGhlci5tX2luZGV4LCBkYXRhU2l6ZSgpKTsKKworICAgIGl0ZXJh
dG9yIGVuZCA9IHRoaXMtPmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7
IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgaXRlci0+a2V5LT5yZWYoKTsKKyAgICAg
ICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsK
KyAgICB9CisKKyAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KKyAgICBW
ZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhlckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxl
dGVkT2Zmc2V0cy5nZXQoKTsKKyAgICBpZiAob3RoZXJEZWxldGVkT2Zmc2V0cykKKyAgICAgICAg
bV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpv
dGhlckRlbGV0ZWRPZmZzZXRzKSk7Cit9CisKK1Byb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFs
Q2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1f
aW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQorICAgICwgbV9pbmRl
eE1hc2sobV9pbmRleFNpemUgLSAxKQorICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25l
ZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQorICAgICwgbV9rZXlDb3VudCgwKQor
ICAgICwgbV9kZWxldGVkQ291bnQoMCkKK3sKKyAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4
U2l6ZSkpOworICAgIEFTU0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlDb3VudCk7
CisKKyAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKKyAgICBmb3IgKGNvbnN0
X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Cisg
ICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7CisgICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKKyAg
ICAgICAgaXRlci0+a2V5LT5yZWYoKTsKKyAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVy
LCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBDb3B5IHRoZSBt
X2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KKyAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhl
ckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKKyAgICBpZiAo
b3RoZXJEZWxldGVkT2Zmc2V0cykKKyAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRy
KG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7Cit9CisK
K3ZvaWQgUHJvcGVydHlUYWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgc3RhdGlj
X2Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpLT5Qcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJs
ZSgpOworfQorCitQcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCit7CisgICAgaXRlcmF0
b3IgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsg
aXRlciAhPSBlbmQ7ICsraXRlcikKKyAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOworCisgICAg
ZmFzdEZyZWUobV9pbmRleCk7Cit9CisKK3ZvaWQgUHJvcGVydHlUYWJsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIFByb3BlcnR5VGFi
bGUqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UHJvcGVydHlUYWJsZSo+KGNlbGwpOworICAgIEFTU0VS
VF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgJnNfaW5mbyk7CisgICAgQVNTRVJUKHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT50eXBlSW5mbygpLm92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4o
KSk7CisKKyAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7CisK
KyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5lbmQoKTsKKyAg
ICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPmJlZ2luKCk7
IHB0ciAhPSBlbmQ7ICsrcHRyKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5zcGVjaWZp
Y1ZhbHVlKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKaW5kZXggYjc5YzEwNi4uZmM2OWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC0yNDcsNyArMjQ3LDcgQEAgdm9pZCBTdHJ1Y3R1cmU6
Om1hdGVyaWFsaXplUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKTsKICAgICAgICAgICAgIEFT
U0VSVCghc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwogCi0gICAgICAgICAgICBtX3Byb3BlcnR5
VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCAwLCBu
dW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwor
ICAgICAgICAgICAgbV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1
cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJPZlNsb3RzRm9y
TGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKQEAgLTI1NSw3ICsyNTUsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgfQogCiAg
ICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCi0gICAgICAgIGNyZWF0ZVByb3BlcnR5TWFwKG51bWJl
ck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAg
ICAgIGNyZWF0ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zm
c2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiAKICAgICBmb3IgKHB0cmRpZmZfdCBp
ID0gc3RydWN0dXJlcy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogICAgICAgICBzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmVzW2ldOwpAQCAtMzc2LDE0ICszNzYsMTYgQEAgU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdHVyZSoKICAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKICAgICAgICAg
c3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9w
cm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0
YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBz
dHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxlYXNlKCk7CisgICAgICAgICAgICB0cmFuc2l0
aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVy
ZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgKyAxKSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0
aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5nZXQoKSk7CisgICAgICAgICAgICBzdHJ1
Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5jbGVhcigpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJldmlvdXNJRCgpKQogICAgICAgICAgICAgdHJhbnNp
dGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICAgICAgICAg
IHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgIH0KICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAKQEAgLTQxNSw3ICs0
MTcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdAogICAgIHRyYW5zaXRpb24tPm1fcHJvdG90
eXBlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBwcm90b3R5cGUpOwogCiAgICAgc3RydWN0
dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAg
dHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9w
cm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQ
cm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJh
bnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24t
PnBpbigpOwogCkBAIC00MzEsNyArNDMzLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3Bl
Y2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnUKICAg
ICArK3RyYW5zaXRpb24tPm1fc3BlY2lmaWNGdW5jdGlvblRocmFzaENvdW50OwogCiAgICAgc3Ry
dWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0g
ICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+
bV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNv
cHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAg
dHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRp
b24tPnBpbigpOwogCkBAIC00NTIsNyArNDU0LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0
dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3QK
ICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVj
dHVyZSk7CiAKICAgICAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNl
c3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9
IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5z
aXRpb24pOworICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBz
dHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgICAgICB0cmFuc2l0aW9uLT5waW4oKTsKICAgICAgICAg
CkBAIC00NzUsNyArNDc3LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRy
YW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUKICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKIAogICAgIHN0
cnVjdHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwot
ICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5
VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwogICAg
IHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0
aW9uLT5tX2RpY3Rpb25hcnlLaW5kID0ga2luZDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKQEAg
LTUzNSw3ICs1MzcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNU
cmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydQogICAgIC8vIERvbid0IHNl
dCBtX29mZnNldCwgYXMgb25lIGNhbiBub3QgdHJhbnNpdGlvbiB0byB0aGlzLgogCiAgICAgc3Ry
dWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0g
ICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+
bV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNv
cHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAg
dHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRp
b24tPm1fcHJldmVudEV4dGVuc2lvbnMgPSB0cnVlOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpA
QCAtNTc1LDE0ICs1NzcsMTYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSoKICAgICBpZiAoc3Ry
dWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKICAgICAgICAgc3RydWN0dXJlLT5jaGVja09mZnNl
dENvbnNpc3RlbmN5KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0
eVRhYmxlKQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0
dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS5yZWxlYXNlKCk7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUu
c2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5j
b3B5KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5z
aXplKCkgKyAxKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9w
cm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJv
cGVydHlUYWJsZS5nZXQoKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJs
ZS5jbGVhcigpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+cHJldmlvdXNJRCgpKQogICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNpdGlv
bi0+Y3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVBy
b3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgIH0KICAgICAKICAgICBzdHJ1Y3R1cmUtPm1fdHJh
bnNpdGlvblRhYmxlLmFkZChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKQEAgLTczNywxNCArNzQx
LDE4IEBAIGlubGluZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAKICNlbmRp
ZgogCi1QYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlU
YWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSogb3duZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG1fcHJvcGVydHlU
YWJsZSA/IG5ldyBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCAqbV9wcm9wZXJ0eVRh
YmxlKSA6IDApOworICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3By
b3BlcnR5VGFibGUuZ2V0KCkpOwogfQogCi1QYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFN0cnVj
dHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSwgU3RydWN0dXJlKiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBv
d25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8gbmV3IFByb3Bl
cnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDogbmV3IFByb3Bl
cnR5VGFibGUobnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2Fw
YWNpdHkpKSk7CisgICAgaWYgKG1fcHJvcGVydHlUYWJsZSkKKyAgICAgICAgcmV0dXJuIFByb3Bl
cnR5VGFibGU6OmNsb25lKGdsb2JhbERhdGEsIG93bmVyLCAqbV9wcm9wZXJ0eVRhYmxlLmdldCgp
KTsKKyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIG51bWJlck9m
U2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAKIFBy
b3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNw
ZWNpZmljVmFsdWUpCkBAIC04MDEsNyArODA5LDcgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpwdXRTcGVjaWZpY1ZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW0K
ICAgICBTdHJpbmdJbXBsKiByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKICAgICBpZiAoIW1f
cHJvcGVydHlUYWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICAgICAgY3Jl
YXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZz
ZXQgPSBtX3Byb3BlcnR5VGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKQEAg
LTgzMywxMiArODQxLDEyIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBTdHJ1
Y3R1cmU6OmNyZWF0ZVByb3BlcnR5TWFwKHVuc2lnbmVkIGNhcGFjaXR5KQordm9pZCBTdHJ1Y3R1
cmU6OmNyZWF0ZVByb3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQg
Y2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKCFtX3Byb3BlcnR5VGFibGUpOwogCiAgICAgY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgIG1fcHJvcGVydHlUYWJsZSA9IGFkb3B0UHRyKG5ldyBQcm9wZXJ0
eVRhYmxlKGNhcGFjaXR5KSk7CisgICAgbV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgY2FwYWNpdHkpKTsKIH0KIAog
dm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0
aW9uTW9kZSBtb2RlKQpAQCAtODgyLDExICs4OTAsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB9CiAgICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0g
ICAgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICBQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBlbmQgPSB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUtPmVuZCgpOwot
ICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZS0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICB2
aXNpdG9yLmFwcGVuZCgmcHRyLT5zcGVjaWZpY1ZhbHVlKTsKLSAgICB9CisKKyAgICBpZiAodGhp
c09iamVjdC0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpIHsKKyAgICAgICAgQVNTRVJUKHRoaXNP
YmplY3QtPm1fcHJvcGVydHlUYWJsZSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3Byb3BlcnR5VGFibGUpOworICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9w
ZXJ0eVRhYmxlKQorICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUuY2xlYXIoKTsK
IH0KIAogYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVUbyhK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCmluZGV4IDIzNTljNmMuLjZiMWQw
OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCkBAIC0zMSwx
NiArMzEsMTUgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgi
CiAjaW5jbHVkZSAiSlNUeXBlLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIK
ICNpbmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5o
IgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiUHJvdGVjdC5oIgogI2lu
Y2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQu
aCIKICNpbmNsdWRlICJXZWFrLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNs
dWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgpAQCAtNTEsNiArNTAsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb3BlcnR5TmFtZUFy
cmF5OwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOworY2xhc3MgUHJvcGVydHlUYWJsZTsK
IGNsYXNzIFN0cnVjdHVyZUNoYWluOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmlu
ZzsKQEAgLTEwOCwyNSArMTA4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9i
YWxEYXRhJik7CiAgICAgYm9vbCBpc0V4dGVuc2libGUoKSBjb25zdCB7IHJldHVybiAhbV9wcmV2
ZW50RXh0ZW5zaW9uczsgfQogICAgIGJvb2wgZGlkVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGlkVHJhbnNpdGlvbjsgfQotICAgIGJvb2wgcHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdl
KCkKLSAgICB7Ci0gICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICAgICAgICAg
IAotICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXplKCkp
OwotICAgICAgICAgICAgCi0gICAgICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBjdXJyZW50U2l6ZSA9IG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0
T2Zmc2V0KG1fb2Zmc2V0KTsKLSAgICAgICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgp
ID49IGN1cnJlbnRTaXplKTsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBvdXRP
ZkxpbmVDYXBhY2l0eSgpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgQVNTRVJU
KHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3Jh
Z2VTaXplKCkpOwotICAgICAgICBpZiAobV9wcm9wZXJ0eVRhYmxlLT5oYXNEZWxldGVkT2Zmc2V0
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgQVNT
RVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkpOwot
ICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgPT0gdG90YWxTdG9yYWdlQ2Fw
YWNpdHkoKTsKLSAgICB9CisgICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFn
ZUNhcGFjaXR5KCk7IAogCiAgICAgU3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVy
ZShKU0dsb2JhbERhdGEmLCBKU09iamVjdCopOwpAQCAtMzgyLDE0ICszNjQsMTQgQEAgcHJpdmF0
ZToKICAgICBQcm9wZXJ0eU9mZnNldCBwdXRTcGVjaWZpY1ZhbHVlKEpTR2xvYmFsRGF0YSYsIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsK
ICAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3Jl
YXRlUHJvcGVydHlNYXAodW5zaWduZWQga2V5Q291bnQgPSAwKTsKKyAgICB2b2lkIGNyZWF0ZVBy
b3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9p
ZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKEpTR2xv
YmFsRGF0YSYsIFByb3BlcnR5TmFtZSk7CiAgICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMo
SlNHbG9iYWxEYXRhJik7CiAKLSAgICBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IGNvcHlQcm9w
ZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIFBhc3NPd25Q
dHI8UHJvcGVydHlUYWJsZT4gY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0
YSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRh
YmxlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUq
IGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93
bmVyKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAo
SlNHbG9iYWxEYXRhJik7CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3Nh
cnkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKQEAgLTQ0NSwxOSArNDI3LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4o
bV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOwogICAgIH0KICAgICAgICAgCi0gICAgQUxXQVlT
X0lOTElORSBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdAotICAgIHsKLSAgICAg
ICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9pc1Bpbm5l
ZFByb3BlcnR5VGFibGUpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RzRm9yTGFzdE9m
ZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkgPT0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9w
ZXJ0eVN0b3JhZ2VTaXplKCkpOwotICAgICAgICB1bnNpZ25lZCB0b3RhbFNpemUgPSBtX3Byb3Bl
cnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQo
KHRvdGFsU2l6ZSA8IGlubGluZUNhcGFjaXR5KCkgPyAwIDogdG90YWxTaXplIC0gaW5saW5lQ2Fw
YWNpdHkoKSkgPT0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQp
KTsKLSAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgQUxXQVlT
X0lOTElORSBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdDsKIAogICAgIHZvaWQg
YWxsb2NhdGVSYXJlRGF0YShKU0dsb2JhbERhdGEmKTsKICAgICB2b2lkIGNsb25lUmFyZURhdGFG
cm9tKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwpAQCAtNDgyLDcgKzQ1Miw3IEBA
IHByaXZhdGU6CiAKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgbV90cmFuc2l0aW9uVGFi
bGU7CiAKLSAgICBPd25QdHI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlOworICAgIFdy
aXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGU7CiAKICAgICBtdXRhYmxl
IElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDVi
ZmQyZDUuLjM1NmUxM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlSW5s
aW5lc19oCiAjZGVmaW5lIFN0cnVjdHVyZUlubGluZXNfaAogCisjaW5jbHVkZSAiUHJvcGVydHlN
YXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC0xNzksNiArMTgwLDQwIEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6aXNWYWxpZChFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVDCiAgICAgcmV0dXJu
IGlzVmFsaWQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWNoZWRQcm90b3R5cGVDaGFp
bik7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9y
YWdlKCkKK3sKKyAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CisKKyAgICBBU1NFUlQob3V0
T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXplKCkpOworCisgICAgaWYgKCFtX3Byb3Bl
cnR5VGFibGUpIHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudFNpemUgPSBudW1iZXJPZk91dE9m
TGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCk7CisgICAgICAgIEFTU0VSVChvdXRPZkxp
bmVDYXBhY2l0eSgpID49IGN1cnJlbnRTaXplKTsKKyAgICAgICAgcmV0dXJuIGN1cnJlbnRTaXpl
ID09IG91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgfQorCisgICAgQVNTRVJUKHRvdGFsU3RvcmFn
ZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOwor
ICAgIGlmIChtX3Byb3BlcnR5VGFibGUtPmhhc0RlbGV0ZWRPZmZzZXQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gbV9wcm9w
ZXJ0eVRhYmxlLT5zaXplKCkpOworICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSA9
PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgU3RydWN0
dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcHJvcGVy
dHlUYWJsZSkgeworICAgICAgICBBU1NFUlQoIW1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZT
bG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpID09IG1fcHJvcGVy
dHlUYWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsKKyAgICB1bnNpZ25lZCB0b3RhbFNpemUg
PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCgodG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBpbmxp
bmVDYXBhY2l0eSgpKSA9PSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29m
ZnNldCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gU3RydWN0dXJlSW5saW5lc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190288</attachid>
            <date>2013-02-26 08:15:13 -0800</date>
            <delta_ts>2013-02-26 08:32:42 -0800</delta_ts>
            <desc>Same patch tweaked for Windows line endings</desc>
            <filename>land-110854-3.diff</filename>
            <type>text/plain</type>
            <size>38703</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZDBlZGNiOS4uOTI1MTY1MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzAgQEAKIDIwMTMtMDItMjYgIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCisgICAgICAgIFVudXNlZCBTdHJ1Y3R1
cmUgcHJvcGVydHkgdGFibGVzIHdhc3RlIDE0TUIgb24gTWVtYnVzdGVyLgorICAgICAgICA8aHR0
cDovL3dlYmtpdC5vcmcvYi8xMTA4NTQ+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzI5MjEw
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUdXJuIFBy
b3BlcnR5VGFibGUgaW50byBhIEdDIG9iamVjdCBhbmQgaGF2ZSBTdHJ1Y3R1cmUgZHJvcCB1bnBp
bm5lZCB0YWJsZXMgd2hlbiBtYXJraW5nLgorICAgICAgICAxNCBNQiBwcm9ncmVzc2lvbiBvbiBN
ZW1idXN0ZXIzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGFyZ2V0LnByaToKKworICAgICAgICAgICAgQWRkZWQgUHJvcGVydHlUYWJs
ZS5jcHAuCisKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisKKyAgICAgICAgICAgIE1vdmVkIG1hcmtpbmcgb2Yg
cHJvcGVydHkgdGFibGUgdmFsdWVzIGhlcmUgZnJvbSBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
KS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAgICAgIE1vdmVk
IHRoZXNlIHRvIFN0cnVjdHVyZUlubGluZXMuaCB0byBicmVhayBoZWFkZXIgZGVwZW5kZW5jeSBj
eWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4p
OgorCisgICAgICAgICAgICBOdWxsIG91dCBtX3Byb3BlcnR5VGFibGUgaWYgdGhlIHRhYmxlIGlz
IHVucGlubmVkLiBUaGlzJ2xsIGNhdXNlIHRoZSB0YWJsZSB0byBnZXQgR0MnZC4KKworICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXApOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAg
KFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjb3B5KToKKworMjAxMy0wMi0y
NiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjE0NDA1NC4KICAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMTQ0MDU0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTA4NTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggZThhMWYyYi4uNTFkNWE0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTcyMiw2ICs3MjIsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3RvdHlwZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVN0b3JhZ2UuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
CmluZGV4IDg1ZjY0NDYuLmM5MDFjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpCkBAIC03NTksNiArNzU5LDcgQEAKICAgICAgICAgICAgICdydW50aW1lL1By
b3BlcnR5T2Zmc2V0LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcCcs
CiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVNsb3QuaCcsCisgICAgICAgICAgICAncnVu
dGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVN0
b3JhZ2UuaCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm90ZWN0LmgnLAogICAgICAgICAgICAg
J3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCmluZGV4IDc1MTdhNGEuLjU2MGZiMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCkBAIC0xMTc0LDYgKzExNzQsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQcm9wZXJ0eVRhYmxlLmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVu
dGltZVxQcm90b3R5cGVNYXAuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IDMyNWU3MjUuLmYwNTUwNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpAQCAtMzA1LDYgKzMwNSw3IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5RGVzY3JpcHRvci5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWVBcnJheS5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVNsb3QuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlUYWJsZS5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm90b3R5cGVNYXAu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENhY2hlLmNwcCIg
Lz4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJmZTAwYjQuLjhlOWRkOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MDUsNiArNzA1LDcgQEAKIAkJQTdGQjYw
QTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZCNjBBMzEwM0Y3REMyMDAxN0Ey
ODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmNwcCAqLzsgfTsKIAkJQTdGQjYxMDAxMDQwQzM4QjAw
MTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGQjYwNEIxMDNGNUVBQjAwMTdBMjg2IC8qIFByb3BlcnR5
RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE4QTQ3NDhFMTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3NDhEMTUxQTgzMDYwMDQx
MjNGRiAvKiBsaWJXVEYuYSAqLzsgfTsKKwkJQURFMzlGRkYxNkREMTQ0QjAwMDNDRDRBIC8qIFBy
b3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovOyB9
OwogCQlCQzAyRTkwRDBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDUwRTE4MzlE
QjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQkMwMkU5MEYwRTE4MzlE
QjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwNzBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90
b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDkwRTE4
MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCAqLzsgfTsKQEAgLTE2MjIs
NiArMTYyMyw3IEBACiAJCUE4QTQ3NDhEMTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
QThFODk0MzEwQ0QwNjAyNDAwMzY3MTc5IC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcx
NzkgLyogSlNHbG9iYWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNHbG9iYWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQxQ0YwNjgx
NkRDQUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBUb29sRXhlY3V0YWJsZS54Y2Nv
bmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkU5MDQwRTE4MzlEQjAwMEY5
Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXJyb3JDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMDJFOTA1MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9yQ29uc3RydWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MTIsNiArMjUxNCw3IEBACiAJCQkJNjU2MjFFNkIwODlF
ODU5NzAwNzYwRjM1IC8qIFByb3BlcnR5U2xvdC5jcHAgKi8sCiAJCQkJNjU2MjFFNkMwODlFODU5
NzAwNzYwRjM1IC8qIFByb3BlcnR5U2xvdC5oICovLAogCQkJCTBGQjdGMzkwMTVFRDhFMzgwMEYx
NjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLywKKwkJCQlBRDFDRjA2ODE2RENBQjJEMDBCOTcx
MjMgLyogUHJvcGVydHlUYWJsZS5jcHAgKi8sCiAJCQkJNjVDMDJGQkIwNjM3NDYyQTAwM0U3RUU2
IC8qIFByb3RlY3QuaCAqLywKIAkJCQkxNEQ4NDRBMjE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90
eXBlTWFwLmNwcCAqLywKIAkJCQkxNEQ4NDRBMzE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBl
TWFwLmggKi8sCkBAIC00MDMxLDYgKzQwMzQsNyBAQAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgy
QzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpp
bmRleCA1ODE0MGY2Li42NjA4YTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpAQCAtMjk4
LDYgKzI5OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9y
LmNwcCBcCiAgICAgcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUv
UHJvcGVydHlTbG90LmNwcCBcCisgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBcCiAgICAg
cnVudGltZS9Qcm90b3R5cGVNYXAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
LmNwcCBcCiAgICAgcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IGMwNmNmNWMuLjUw
OGE4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcApAQCAtMjMyLDYgKzIzMiw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2Jh
bERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtl
ZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5VGFi
bGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJp
bmdzKCp0aGlzKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRh
YmxlKGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAppbmRleCBkYzk4ODFmLi4xODk1YTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaApAQCAtMjU2LDYgKzI1
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVu
bGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUq
IGlkZW50aWZpZXJUYWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFt
ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1h
cEhhc2hUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBI
YXNoVGFibGUuaAppbmRleCAyNDIyYzViLi41NGUyOTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKQEAgLTIyLDYgKzIy
LDcgQEAKICNkZWZpbmUgUHJvcGVydHlNYXBIYXNoVGFibGVfaAogCiAjaW5jbHVkZSAiUHJvcGVy
dHlPZmZzZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJp
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KQEAgLTg1LDggKzg2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIH0K
IH07CiAKLWNsYXNzIFByb3BlcnR5VGFibGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworY2xhc3MgUHJvcGVydHlUYWJsZSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgLy8gVGhpcyBp
cyB0aGUgaW1wbGVtZW50YXRpb24gZm9yICdpdGVyYXRvcicgYW5kICdjb25zdF9pdGVyYXRvcics
CiAgICAgLy8gdXNlZCBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlIHRhYmxlIGluIGluc2VydGlvbiBv
cmRlci4KQEAgLTEyOSw2ICsxMjksMTkgQEAgY2xhc3MgUHJvcGVydHlUYWJsZSB7CiAgICAgfTsK
IAogcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIEpTX0VYUE9SVERB
VEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhDb21wb3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKICAgICB0eXBlZGVmIFN0cmluZ0ltcGwqIEtleVR5cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0
eU1hcEVudHJ5IFZhbHVlVHlwZTsKIApAQCAtMTQyLDkgKzE1NSw5IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCB1bnNpZ25lZD4gZmluZF9pdGVyYXRvcjsKIAog
ICAgIC8vIENvbnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3Bl
cnR5VGFibGUgdG8gY29weSwgb3IgYm90aC4KLSAgICBleHBsaWNpdCBQcm9wZXJ0eVRhYmxlKHVu
c2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEm
LCBKU0NlbGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0gICAgUHJvcGVydHlUYWJsZShKU0ds
b2JhbERhdGEmLCBKU0NlbGwqLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3Bl
cnR5VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUq
IGNsb25lKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUm
KTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxs
KiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7
CiAgICAgflByb3BlcnR5VGFibGUoKTsKIAogICAgIC8vIE9yZGVyZWQgaXRlcmF0aW9uIG1ldGhv
ZHMuCkBAIC0xODEsNyArMTk0LDcgQEAgcHVibGljOgogICAgIFByb3BlcnR5T2Zmc2V0IG5leHRP
ZmZzZXQoUHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAgLy8gQ29weSB0aGlz
IFByb3BlcnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNp
dHkgcHJvdmlkZWQuCi0gICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5KEpTR2xvYmFs
RGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0
eVRhYmxlKiBjb3B5KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0Nh
cGFjaXR5KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CkBA
IC0xODksNiArMjAyLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgorICAgIFByb3Bl
cnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBQ
cm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUm
KTsKKyAgICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIHVuc2lnbmVkIGlu
aXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworCiAgICAgUHJvcGVydHlUYWJs
ZShjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBr
bm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUgd2Uga25vdyBjYXBhY2l0eSB0
byBiZSBhdmFpbGFibGUuCiAgICAgdm9pZCByZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5
KTsKQEAgLTIzOSw3MiArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgRW1wdHlFbnRyeUluZGV4ID0gMDsKIH07CiAKLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9w
ZXJ0eVRhYmxlKHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKLSAgICA6IG1faW5kZXhTaXplKHNp
emVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRleE1hc2sobV9pbmRl
eFNpemUgLSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJv
ZWRNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQotICAgICwgbV9kZWxl
dGVkQ291bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwotfQot
Ci1pbmxpbmUgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0Nl
bGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXpl
KG90aGVyLm1faW5kZXhTaXplKQotICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2sp
Ci0gICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6
ZSgpKSkpCi0gICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCi0gICAgLCBtX2RlbGV0
ZWRDb3VudChvdGhlci5tX2RlbGV0ZWRDb3VudCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMiht
X2luZGV4U2l6ZSkpOwotCi0gICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFT
aXplKCkpOwotCi0gICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVy
YXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpdGVy
LT5rZXktPnJlZigpOwotICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNw
ZWNpZmljVmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9m
ZnNldHMgdmVjdG9yLgotICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9m
ZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOwotICAgIGlmIChvdGhlckRlbGV0
ZWRPZmZzZXRzKQotICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKLX0KLQotaW5saW5lIFBy
b3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwg
dW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAg
ICA6IG1faW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwg
bV9pbmRleE1hc2sobV9pbmRleFNpemUgLSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1
bnNpZ25lZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3Vu
dCgwKQotICAgICwgbV9kZWxldGVkQ291bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMiht
X2luZGV4U2l6ZSkpOwotICAgIEFTU0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlD
b3VudCk7Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKLSAgICBmb3Ig
KGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7Ci0gICAgICAgIHJlaW5zZXJ0KCppdGVy
KTsKLSAgICAgICAgaXRlci0+a2V5LT5yZWYoKTsKLSAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVy
KG93bmVyLCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9Ci0KLSAgICAvLyBDb3B5
IHRoZSBtX2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KLSAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+
KiBvdGhlckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKLSAg
ICBpZiAob3RoZXJEZWxldGVkT2Zmc2V0cykKLSAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFk
b3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7
Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCi17Ci0gICAgaXRl
cmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOwotCi0g
ICAgZmFzdEZyZWUobV9pbmRleCk7Ci19Ci0KIGlubGluZSBQcm9wZXJ0eVRhYmxlOjppdGVyYXRv
ciBQcm9wZXJ0eVRhYmxlOjpiZWdpbigpCiB7CiAgICAgcmV0dXJuIGl0ZXJhdG9yKHNraXBEZWxl
dGVkRW50cmllcyh0YWJsZSgpKSk7CkBAIC01MDIsMTUgKzQ1MywxNSBAQCBpbmxpbmUgUHJvcGVy
dHlPZmZzZXQgUHJvcGVydHlUYWJsZTo6bmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVD
YXBhY2l0eSkKICAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxp
bmVDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFByb3Bl
cnR5VGFibGU6OmNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1
bnNpZ25lZCBuZXdDYXBhY2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxl
Ojpjb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQg
bmV3Q2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwog
CiAgICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9p
bmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2ZSByZWhh
c2hpbmcgYWxsIGtleXMuCiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0g
bV9pbmRleFNpemUpCi0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShn
bG9iYWxEYXRhLCBvd25lciwgKnRoaXMpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFByb3Bl
cnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcykpOworICAgICAg
ICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICp0aGlzKTsK
KyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0Nh
cGFjaXR5LCAqdGhpcyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjk5ZDI2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgi
CisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGlu
ZXMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gUHJvcGVy
dHlUYWJsZTo6c19pbmZvID0geyAiUHJvcGVydHlUYWJsZSIsIDAsIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoUHJvcGVydHlUYWJsZSkgfTsKKworUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJs
ZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5KQoreworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9i
YWxEYXRhLCBpbml0aWFsQ2FwYWNpdHkpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICByZXR1cm4gdGFibGU7Cit9CisKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5
VGFibGU6OmNsb25lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29u
c3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXAp
KSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCBvdGhlcik7CisgICAgdGFibGUtPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJvcGVy
dHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmIG90aGVyKQoreworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJs
ZShnbG9iYWxEYXRhLCBvd25lciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7CisgICAgdGFibGUt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJv
cGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGluaXRpYWxDYXBhY2l0eSkKKyAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRh
LnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2luZGV4U2l6ZShzaXplRm9y
Q2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSkKKyAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXpl
IC0gMSkKKyAgICAsIG1faW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVyb2VkTWFs
bG9jKGRhdGFTaXplKCkpKSkKKyAgICAsIG1fa2V5Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZENv
dW50KDApCit7CisgICAgQVNTRVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKK30KKworUHJv
cGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2Vs
bCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1f
aW5kZXhTaXplKG90aGVyLm1faW5kZXhTaXplKQorICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9p
bmRleE1hc2spCisgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxv
YyhkYXRhU2l6ZSgpKSkpCisgICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisgICAg
LCBtX2RlbGV0ZWRDb3VudChvdGhlci5tX2RlbGV0ZWRDb3VudCkKK3sKKyAgICBBU1NFUlQoaXNQ
b3dlck9mMihtX2luZGV4U2l6ZSkpOworCisgICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5k
ZXgsIGRhdGFTaXplKCkpOworCisgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAg
Zm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
ICAgICBpdGVyLT5rZXktPnJlZigpOworICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIs
IGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIC8vIENvcHkgdGhlIG1f
ZGVsZXRlZE9mZnNldHMgdmVjdG9yLgorICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVy
RGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOworICAgIGlmIChv
dGhlckRlbGV0ZWRPZmZzZXRzKQorICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIo
bmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKK30KKwor
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJs
ZSYgb3RoZXIpCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRh
YmxlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGlu
aXRpYWxDYXBhY2l0eSkpCisgICAgLCBtX2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCisgICAg
LCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6
ZSgpKSkpCisgICAgLCBtX2tleUNvdW50KDApCisgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQorewor
ICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5kZXhTaXplKSk7CisgICAgQVNTRVJUKGluaXRpYWxD
YXBhY2l0eSA+PSBvdGhlci5tX2tleUNvdW50KTsKKworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG90aGVyLmVuZCgpOworICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVyLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgQVNTRVJUKGNhbkluc2VydCgpKTsK
KyAgICAgICAgcmVpbnNlcnQoKml0ZXIpOworICAgICAgICBpdGVyLT5rZXktPnJlZigpOworICAg
ICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkp
OworICAgIH0KKworICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgorICAg
IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2Rl
bGV0ZWRPZmZzZXRzLmdldCgpOworICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQorICAgICAg
ICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4o
Km90aGVyRGVsZXRlZE9mZnNldHMpKTsKK30KKwordm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCkt
PlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7Cit9CisKK1Byb3BlcnR5VGFibGU6On5Q
cm9wZXJ0eVRhYmxlKCkKK3sKKyAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICBm
b3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAg
ICBpdGVyLT5rZXktPmRlcmVmKCk7CisKKyAgICBmYXN0RnJlZShtX2luZGV4KTsKK30KKwordm9p
ZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9w
ZXJ0eVRhYmxlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKworICAgIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9y
IGVuZCA9IHRoaXNPYmplY3QtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgcHRyID0gdGhpc09iamVjdC0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZwdHItPnNwZWNpZmljVmFsdWUpOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBiNzljMTA2Li5mYzY5YTAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTI0
Nyw3ICsyNDcsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5tX3By
b3BlcnR5VGFibGUpOwogICAgICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSk7CiAKLSAgICAgICAgICAgIG1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0
eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1f
b2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgICAgICBtX3Byb3BlcnR5VGFibGUu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGds
b2JhbERhdGEsIDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGlu
ZUNhcGFjaXR5KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjU1LDcg
KzI1NSw3IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICB9CiAKICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkKLSAg
ICAgICAgY3JlYXRlUHJvcGVydHlNYXAobnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZz
ZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFs
RGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNp
dHkpKTsKIAogICAgIGZvciAocHRyZGlmZl90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDE7IGkg
Pj0gMDsgLS1pKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CkBAIC0zNzYs
MTQgKzM3NiwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKgogICAgIGlmIChzdHJ1Y3R1cmUt
Pm1fcHJvcGVydHlUYWJsZSkgewogICAgICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUp
Ci0gICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRy
YW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJl
bGVhc2UoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSAr
IDEpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmNsZWFy
KCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2
aW91c0lEKCkpCiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KGdsb2JhbERhdGEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVh
dGVQcm9wZXJ0eU1hcCgpOworICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlN
YXAoZ2xvYmFsRGF0YSk7CiAgICAgfQogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5tX29mZnNldDsKIApAQCAtNDE1LDcgKzQxNyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0CiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5cGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRp
b24sIHByb3RvdHlwZSk7CiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJ
Zk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUg
PSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFu
c2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2Jh
bERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVy
ZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTQzMSw3ICs0MzMsNyBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydQogICAgICsrdHJhbnNpdGlvbi0+bV9zcGVjaWZpY0Z1
bmN0aW9uVGhyYXNoQ291bnQ7CiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTQ1Miw3ICs0NTQs
NyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdAogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKIAogICAgICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICAgICAg
dHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwogICAg
ICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgICAg
IHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAKQEAgLTQ3NSw3ICs0NzcsNyBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZQogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpOwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhn
bG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1fZGljdGlvbmFyeUtpbmQgPSBraW5k
OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNTM1LDcgKzUzNyw3IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1CiAgICAgLy8gRG9uJ3Qgc2V0IG1fb2Zmc2V0LCBhcyBvbmUgY2FuIG5vdCB0
cmFuc2l0aW9uIHRvIHRoaXMuCiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+bV9wcmV2ZW50RXh0ZW5zaW9ucyA9IHRy
dWU7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC01NzUsMTQgKzU3NywxNiBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKgogICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSkgewog
ICAgICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCi0gICAgICAgICAgICB0cmFuc2l0
aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShn
bG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgp
ICsgMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlU
YWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAg
IHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmdldCgpKTsKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpCiAgICAgICAgICAg
ICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAg
ICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAgICAg
fQogICAgIAogICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEs
IHRyYW5zaXRpb24pOwpAQCAtNzM3LDE0ICs3NDEsMTggQEAgaW5saW5lIHZvaWQgU3RydWN0dXJl
OjpjaGVja0NvbnNpc3RlbmN5KCkKIAogI2VuZGlmCiAKLVBhc3NPd25QdHI8UHJvcGVydHlUYWJs
ZT4gU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0
eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvd25lcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8gbmV3IFByb3BlcnR5VGFibGUoZ2xv
YmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDogMCk7CisgICAgaWYgKCFtX3Byb3Bl
cnR5VGFibGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpj
bG9uZShnbG9iYWxEYXRhLCBvd25lciwgKm1fcHJvcGVydHlUYWJsZS5nZXQoKSk7CiB9CiAKLVBh
c3NPd25QdHI8UHJvcGVydHlUYWJsZT4gU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVy
dHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQogewotICAgIHJldHVybiBhZG9wdFB0
cihtX3Byb3BlcnR5VGFibGUgPyBuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwg
Km1fcHJvcGVydHlUYWJsZSkgOiBuZXcgUHJvcGVydHlUYWJsZShudW1iZXJPZlNsb3RzRm9yTGFz
dE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpKTsKKyAgICBpZiAobV9wcm9wZXJ0
eVRhYmxlKQorICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwg
b3duZXIsICptX3Byb3BlcnR5VGFibGUuZ2V0KCkpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQs
IG1faW5saW5lQ2FwYWNpdHkpKTsKIH0KIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkKQEAgLTgwMSw3ICs4MDks
NyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbQogICAgIFN0cmluZ0ltcGwqIHJlcCA9IHByb3Bl
cnR5TmFtZS51aWQoKTsKIAogICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKQotICAgICAgICBjcmVh
dGVQcm9wZXJ0eU1hcCgpOworICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsK
IAogICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IG1fcHJvcGVydHlUYWJsZS0+bmV4dE9m
ZnNldChtX2lubGluZUNhcGFjaXR5KTsKIApAQCAtODMzLDEyICs4NDEsMTIgQEAgUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICBy
ZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAodW5z
aWduZWQgY2FwYWNpdHkpCit2b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjYXBhY2l0eSkKIHsKICAgICBBU1NFUlQoIW1f
cHJvcGVydHlUYWJsZSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgbV9wcm9wZXJ0
eVRhYmxlID0gYWRvcHRQdHIobmV3IFByb3BlcnR5VGFibGUoY2FwYWNpdHkpKTsKKyAgICBtX3By
b3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBjYXBhY2l0eSkpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC04ODIsMTEgKzg5
MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9wcmV2aW91c09yUmFyZURhdGEpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0
eVRhYmxlKSB7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlLT5iZWdpbigpOyBwdHIg
IT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNwZWNpZmlj
VmFsdWUpOwotICAgIH0KKworICAgIGlmICh0aGlzT2JqZWN0LT5tX2lzUGlubmVkUHJvcGVydHlU
YWJsZSkgeworICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZSk7CisgICAg
fSBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUpCisgICAgICAgIHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZS5jbGVhcigpOwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJvdG90
eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKaW5kZXggMjM1OWM2Yy4uNmIxZDA4ZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTMxLDE2ICszMSwxNSBAQAogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKLSNpbmNs
dWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZS5oIgog
I2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQu
aCIKICNpbmNsdWRlICJQcm90ZWN0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGEuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCIKICNpbmNsdWRlICJKU1R5cGVJ
bmZvLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+
CkBAIC01MSw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eURhdGE7CitjbGFzcyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFz
cyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwpAQCAtMTA4LDI1ICsxMDgsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmKTsKICAgICBib29sIGlzRXh0ZW5z
aWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtX3ByZXZlbnRFeHRlbnNpb25zOyB9CiAgICAgYm9vbCBk
aWRUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaWRUcmFuc2l0aW9uOyB9Ci0gICAgYm9v
bCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKQotICAgIHsKLSAgICAgICAgY2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAgCi0gICAgICAgIEFTU0VSVChvdXRPZkxpbmVD
YXBhY2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYg
KCFtX3Byb3BlcnR5VGFibGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0g
bnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpOwotICAgICAgICAg
ICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gY3VycmVudFNpemUpOwotICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnRTaXplID09IG91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBt
X3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7Ci0gICAgICAgIGlmIChtX3By
b3BlcnR5VGFibGUtPmhhc0RlbGV0ZWRPZmZzZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+
PSBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5VGFi
bGUtPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpOwotICAgIH0KKyAgICBib29sIHB1
dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKTsgCiAKICAgICBTdHJ1Y3R1
cmUqIGZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7
CkBAIC0zODIsMTQgKzM2NCwxNCBAQCBwcml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IHB1dFNw
ZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQ
cm9wZXJ0eU5hbWUpOwogCi0gICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcCh1bnNpZ25lZCBrZXlD
b3VudCA9IDApOworICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAg
IGJvb2wgZGVzcGVjaWZ5RnVuY3Rpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lKTsKICAg
ICB2b2lkIGRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhKU0dsb2JhbERhdGEmKTsKIAotICAgIFBhc3NP
d25QdHI8UHJvcGVydHlUYWJsZT4gY29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiBvd25lcik7Ci0gICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5UHJvcGVy
dHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7CisgICAg
UHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBvd25lcik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmKTsKICAgICB2b2lkIG1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CiAgICAgewpAQCAtNDQ1LDE5ICs0MjcsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7
CiAgICAgfQogICAgICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY2hlY2tPZmZzZXRDb25z
aXN0ZW5jeSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkgewot
ICAgICAgICAgICAgQVNTRVJUKCFtX2lzUGlubmVkUHJvcGVydHlUYWJsZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFj
aXR5KSA9PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7Ci0gICAgICAg
IHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG1fcHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6
ZSgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCgodG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHko
KSA/IDAgOiB0b3RhbFNpemUgLSBpbmxpbmVDYXBhY2l0eSgpKSA9PSBudW1iZXJPZk91dE9mTGlu
ZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCkpOwotICAgICAgICAgICAgCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY2hlY2tPZmZzZXRDb25z
aXN0ZW5jeSgpIGNvbnN0OwogCiAgICAgdm9pZCBhbGxvY2F0ZVJhcmVEYXRhKEpTR2xvYmFsRGF0
YSYpOwogICAgIHZvaWQgY2xvbmVSYXJlRGF0YUZyb20oSlNHbG9iYWxEYXRhJiwgY29uc3QgU3Ry
dWN0dXJlKik7CkBAIC00ODIsNyArNDUyLDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZSBtX3RyYW5zaXRpb25UYWJsZTsKIAotICAgIE93blB0cjxQcm9wZXJ0eVRh
YmxlPiBtX3Byb3BlcnR5VGFibGU7CisgICAgV3JpdGVCYXJyaWVyPFByb3BlcnR5VGFibGU+IG1f
cHJvcGVydHlUYWJsZTsKIAogICAgIG11dGFibGUgSW5saW5lV2F0Y2hwb2ludFNldCBtX3RyYW5z
aXRpb25XYXRjaHBvaW50U2V0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggNWJmZDJkNS4uMzU2ZTEzZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApAQCAtMjYsNiAr
MjYsNyBAQAogI2lmbmRlZiBTdHJ1Y3R1cmVJbmxpbmVzX2gKICNkZWZpbmUgU3RydWN0dXJlSW5s
aW5lc19oCiAKKyNpbmNsdWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlN0
cnVjdHVyZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTE3OSw2ICsxODAsNDAgQEAgaW5saW5l
IGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4q
IGNhY2hlZFByb3RvdHlwZUMKICAgICByZXR1cm4gaXNWYWxpZChleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCksIGNhY2hlZFByb3RvdHlwZUNoYWluKTsKIH0KIAoraW5saW5lIGJvb2wgU3RydWN0
dXJlOjpwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKQoreworICAgIGNoZWNrT2Zmc2V0Q29u
c2lzdGVuY3koKTsKKworICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IG91dE9mTGlu
ZVNpemUoKSk7CisKKyAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkgeworICAgICAgICB1bnNpZ25l
ZCBjdXJyZW50U2l6ZSA9IG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zm
c2V0KTsKKyAgICAgICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gY3VycmVudFNpemUp
OworICAgICAgICByZXR1cm4gY3VycmVudFNpemUgPT0gb3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAg
ICB9CisKKyAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBtX3Byb3BlcnR5VGFi
bGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7CisgICAgaWYgKG1fcHJvcGVydHlUYWJsZS0+aGFz
RGVsZXRlZE9mZnNldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQodG90
YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSk7CisgICAgcmV0
dXJuIG1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpID09IHRvdGFsU3RvcmFnZUNhcGFjaXR5KCk7Cit9
CisKK0FMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3ko
KSBjb25zdAoreworICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIEFTU0VSVCgh
bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVChudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwg
bV9pbmxpbmVDYXBhY2l0eSkgPT0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXpl
KCkpOworICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG1fcHJvcGVydHlUYWJsZS0+cHJvcGVydHlT
dG9yYWdlU2l6ZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKCh0b3RhbFNpemUgPCBpbmxpbmVDYXBh
Y2l0eSgpID8gMCA6IHRvdGFsU2l6ZSAtIGlubGluZUNhcGFjaXR5KCkpID09IG51bWJlck9mT3V0
T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTdHJ1Y3R1cmVJbmxpbmVzX2gK
</data>
<flag name="commit-queue"
          id="210922"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190293</attachid>
            <date>2013-02-26 08:32:42 -0800</date>
            <delta_ts>2013-03-04 13:09:50 -0800</delta_ts>
            <desc>Add a cpp file, they said. It&apos;s not that hard, they said.</desc>
            <filename>land-110854-4.diff</filename>
            <type>text/plain</type>
            <size>38689</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZDBlZGNiOS4uOTI1MTY1MyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzAgQEAKIDIwMTMtMDItMjYgIEFu
ZHJlYXMgS2xpbmcgIDxha2xpbmdAYXBwbGUuY29tPgogCisgICAgICAgIFVudXNlZCBTdHJ1Y3R1
cmUgcHJvcGVydHkgdGFibGVzIHdhc3RlIDE0TUIgb24gTWVtYnVzdGVyLgorICAgICAgICA8aHR0
cDovL3dlYmtpdC5vcmcvYi8xMTA4NTQ+CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMzI5MjEw
ND4KKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4KKworICAgICAgICBUdXJuIFBy
b3BlcnR5VGFibGUgaW50byBhIEdDIG9iamVjdCBhbmQgaGF2ZSBTdHJ1Y3R1cmUgZHJvcCB1bnBp
bm5lZCB0YWJsZXMgd2hlbiBtYXJraW5nLgorICAgICAgICAxNCBNQiBwcm9ncmVzc2lvbiBvbiBN
ZW1idXN0ZXIzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFr
ZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3By
b2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogVGFyZ2V0LnByaToKKworICAgICAgICAgICAgQWRkZWQgUHJvcGVydHlUYWJs
ZS5jcHAuCisKKyAgICAgICAgKiBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6Y2xvbmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRh
YmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6dmlzaXRDaGlsZHJlbik6CisKKyAgICAgICAgICAgIE1vdmVkIG1hcmtpbmcgb2Yg
cHJvcGVydHkgdGFibGUgdmFsdWVzIGhlcmUgZnJvbSBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4o
KS4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAgICAgIE1vdmVk
IHRoZXNlIHRvIFN0cnVjdHVyZUlubGluZXMuaCB0byBicmVhayBoZWFkZXIgZGVwZW5kZW5jeSBj
eWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4p
OgorCisgICAgICAgICAgICBOdWxsIG91dCBtX3Byb3BlcnR5VGFibGUgaWYgdGhlIHRhYmxlIGlz
IHVucGlubmVkLiBUaGlzJ2xsIGNhdXNlIHRoZSB0YWJsZSB0byBnZXQgR0MnZC4KKworICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp0
b0RpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50
RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFi
bGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0U3BlY2lmaWNWYWx1ZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXApOgorICAgICAgICAqIHJ1bnRpbWUv
U3RydWN0dXJlLmg6CisgICAgICAgIChTdHJ1Y3R1cmUpOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERh
dGEpOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAg
KFByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1
Y3R1cmUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjb3B5KToKKworMjAxMy0wMi0y
NiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKICAgICAgICAgVW5yZXZpZXdl
ZCwgcm9sbGluZyBvdXQgcjE0NDA1NC4KICAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9j
aGFuZ2VzZXQvMTQ0MDU0CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTA4NTQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtl
ZmlsZS5saXN0LmFtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
aW5kZXggZThhMWYyYi4uNTFkNWE0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0KQEAgLTcyMiw2ICs3MjIsNyBAQCBqYXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9
IFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU9mZnNldC5oIFwKIAlT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwIFwKIAlTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVNsb3QuaCBcCisJU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1Byb3RvdHlwZU1hcC5jcHAgXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3RvdHlwZU1hcC5oIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVN0b3JhZ2UuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUuZ3lwaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5neXBp
CmluZGV4IDg1ZjY0NDYuLmM5MDFjYmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5neXBpCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpCkBAIC03NTksNiArNzU5LDcgQEAKICAgICAgICAgICAgICdydW50aW1lL1By
b3BlcnR5T2Zmc2V0LmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcCcs
CiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVNsb3QuaCcsCisgICAgICAgICAgICAncnVu
dGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVN0
b3JhZ2UuaCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm90ZWN0LmgnLAogICAgICAgICAgICAg
J3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjcHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCmluZGV4IDc1MTdhNGEuLjU2MGZiMjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ov
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCkBAIC0xMTc0LDYgKzExNzQsMTAgQEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8
RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxQcm9wZXJ0eVRhYmxlLmNwcCIK
KwkJCQk+CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVu
dGltZVxQcm90b3R5cGVNYXAuY3BwIgogCQkJCT4KIAkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qCmluZGV4IDMyNWU3MjUuLmYwNTUwNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
eHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagpAQCAtMzA1LDYgKzMwNSw3IEBACiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5RGVzY3JpcHRvci5jcHAiIC8+DQog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWVBcnJheS5jcHAi
IC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVNsb3QuY3Bw
IiAvPg0KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlUYWJsZS5j
cHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm90b3R5cGVNYXAu
Y3BwIiAvPg0KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwLmNwcCIg
Lz4NCiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENhY2hlLmNwcCIg
Lz4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJmZTAwYjQuLjhlOWRkOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC03MDUsNiArNzA1LDcgQEAKIAkJQTdGQjYw
QTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZCNjBBMzEwM0Y3REMyMDAxN0Ey
ODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmNwcCAqLzsgfTsKIAkJQTdGQjYxMDAxMDQwQzM4QjAw
MTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTdGQjYwNEIxMDNGNUVBQjAwMTdBMjg2IC8qIFByb3BlcnR5
RGVzY3JpcHRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCUE4QTQ3NDhFMTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3NDhEMTUxQTgzMDYwMDQx
MjNGRiAvKiBsaWJXVEYuYSAqLzsgfTsKKwkJQURFMzlGRkYxNkREMTQ0QjAwMDNDRDRBIC8qIFBy
b3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovOyB9
OwogCQlCQzAyRTkwRDBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDUwRTE4MzlE
QjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQkMwMkU5MEYwRTE4MzlE
QjAwMEY5Mjk3IC8qIEVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwNzBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90
b3R5cGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDkwRTE4
MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCAqLzsgfTsKQEAgLTE2MjIs
NiArMTYyMyw3IEBACiAJCUE4QTQ3NDhEMTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7
IHBhdGggPSBsaWJXVEYuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJ
QThFODk0MzEwQ0QwNjAyNDAwMzY3MTc5IC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcx
NzkgLyogSlNHbG9iYWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNHbG9iYWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQxQ0YwNjgx
NkRDQUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHJvcGVydHlUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2Nv
bmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQueGNjb25maWc7IHBhdGggPSBUb29sRXhlY3V0YWJsZS54Y2Nv
bmZpZzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkU5MDQwRTE4MzlEQjAwMEY5
Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gRXJyb3JDb25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUJDMDJFOTA1MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVycm9yQ29uc3RydWN0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1MTIsNiArMjUxNCw3IEBACiAJCQkJNjU2MjFFNkIwODlF
ODU5NzAwNzYwRjM1IC8qIFByb3BlcnR5U2xvdC5jcHAgKi8sCiAJCQkJNjU2MjFFNkMwODlFODU5
NzAwNzYwRjM1IC8qIFByb3BlcnR5U2xvdC5oICovLAogCQkJCTBGQjdGMzkwMTVFRDhFMzgwMEYx
NjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCAqLywKKwkJCQlBRDFDRjA2ODE2RENBQjJEMDBCOTcx
MjMgLyogUHJvcGVydHlUYWJsZS5jcHAgKi8sCiAJCQkJNjVDMDJGQkIwNjM3NDYyQTAwM0U3RUU2
IC8qIFByb3RlY3QuaCAqLywKIAkJCQkxNEQ4NDRBMjE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90
eXBlTWFwLmNwcCAqLywKIAkJCQkxNEQ4NDRBMzE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBl
TWFwLmggKi8sCkBAIC00MDMxLDYgKzQwMzQsNyBAQAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgy
QzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZCRTBGNzYxNkMxREIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3Zp
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpp
bmRleCA1ODE0MGY2Li42NjA4YTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
VGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpAQCAtMjk4
LDYgKzI5OCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9y
LmNwcCBcCiAgICAgcnVudGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUv
UHJvcGVydHlTbG90LmNwcCBcCisgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBcCiAgICAg
cnVudGltZS9Qcm90b3R5cGVNYXAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9y
LmNwcCBcCiAgICAgcnVudGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwIFwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IGMwNmNmNWMuLjUw
OGE4NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcApAQCAtMjMyLDYgKzIzMiw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2Jh
bERhdGFUeXBlIGdsb2JhbERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtl
ZEV2YWxDb2RlQmxvY2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEZ1bmN0
aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9j
azo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5VGFi
bGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJp
bmdzKCp0aGlzKTsKIAogICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRh
YmxlKGV4aXN0aW5nRW50cnlJZGVudGlmaWVyVGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAppbmRleCBkYzk4ODFmLi4xODk1YTA2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaApAQCAtMjU2LDYgKzI1
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtl
ZFByb2dyYW1Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVu
bGlua2VkRXZhbENvZGVCbG9ja1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4g
dW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVj
dHVyZT4gcHJvcGVydHlUYWJsZVN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUq
IGlkZW50aWZpZXJUYWJsZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFt
ZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1h
cEhhc2hUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBI
YXNoVGFibGUuaAppbmRleCAyNDIyYzViLi41NGUyOTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKQEAgLTIyLDYgKzIy
LDcgQEAKICNkZWZpbmUgUHJvcGVydHlNYXBIYXNoVGFibGVfaAogCiAjaW5jbHVkZSAiUHJvcGVy
dHlPZmZzZXQuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJp
ZXIuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFRhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KQEAgLTg1LDggKzg2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIH0K
IH07CiAKLWNsYXNzIFByb3BlcnR5VGFibGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworY2xhc3MgUHJvcGVydHlUYWJsZSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgLy8gVGhpcyBp
cyB0aGUgaW1wbGVtZW50YXRpb24gZm9yICdpdGVyYXRvcicgYW5kICdjb25zdF9pdGVyYXRvcics
CiAgICAgLy8gdXNlZCBmb3IgaXRlcmF0aW5nIG92ZXIgdGhlIHRhYmxlIGluIGluc2VydGlvbiBv
cmRlci4KQEAgLTEyOSw2ICsxMjksMTkgQEAgY2xhc3MgUHJvcGVydHlUYWJsZSB7CiAgICAgfTsK
IAogcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVl
OworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAg
ICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIEpTX0VYUE9SVERB
VEEgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0
ZVN0cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5m
byhDb21wb3VuZFR5cGUsIE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisKICAgICB0eXBlZGVmIFN0cmluZ0ltcGwqIEtleVR5cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0
eU1hcEVudHJ5IFZhbHVlVHlwZTsKIApAQCAtMTQyLDkgKzE1NSw5IEBAIHB1YmxpYzoKICAgICB0
eXBlZGVmIHN0ZDo6cGFpcjxWYWx1ZVR5cGUqLCB1bnNpZ25lZD4gZmluZF9pdGVyYXRvcjsKIAog
ICAgIC8vIENvbnN0cnVjdG9yIGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3Bl
cnR5VGFibGUgdG8gY29weSwgb3IgYm90aC4KLSAgICBleHBsaWNpdCBQcm9wZXJ0eVRhYmxlKHVu
c2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEm
LCBKU0NlbGwqLCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7Ci0gICAgUHJvcGVydHlUYWJsZShKU0ds
b2JhbERhdGEmLCBKU0NlbGwqLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3Bl
cnR5VGFibGUmKTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0
YSYsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSk7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUq
IGNsb25lKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUm
KTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxs
KiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7
CiAgICAgflByb3BlcnR5VGFibGUoKTsKIAogICAgIC8vIE9yZGVyZWQgaXRlcmF0aW9uIG1ldGhv
ZHMuCkBAIC0xODEsNyArMTk0LDcgQEAgcHVibGljOgogICAgIFByb3BlcnR5T2Zmc2V0IG5leHRP
ZmZzZXQoUHJvcGVydHlPZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAgLy8gQ29weSB0aGlz
IFByb3BlcnR5VGFibGUsIGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNp
dHkgcHJvdmlkZWQuCi0gICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5KEpTR2xvYmFs
RGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0
eVRhYmxlKiBjb3B5KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0Nh
cGFjaXR5KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CkBA
IC0xODksNiArMjAyLDEwIEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgorICAgIFByb3Bl
cnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBQ
cm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUm
KTsKKyAgICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIHVuc2lnbmVkIGlu
aXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworCiAgICAgUHJvcGVydHlUYWJs
ZShjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBr
bm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUgd2Uga25vdyBjYXBhY2l0eSB0
byBiZSBhdmFpbGFibGUuCiAgICAgdm9pZCByZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5
KTsKQEAgLTIzOSw3MiArMjU2LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgRW1wdHlFbnRyeUluZGV4ID0gMDsKIH07CiAKLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9w
ZXJ0eVRhYmxlKHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSkKLSAgICA6IG1faW5kZXhTaXplKHNp
emVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRleE1hc2sobV9pbmRl
eFNpemUgLSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJv
ZWRNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQotICAgICwgbV9kZWxl
dGVkQ291bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwotfQot
Ci1pbmxpbmUgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0Nl
bGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXpl
KG90aGVyLm1faW5kZXhTaXplKQotICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2sp
Ci0gICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6
ZSgpKSkpCi0gICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCi0gICAgLCBtX2RlbGV0
ZWRDb3VudChvdGhlci5tX2RlbGV0ZWRDb3VudCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMiht
X2luZGV4U2l6ZSkpOwotCi0gICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFT
aXplKCkpOwotCi0gICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVy
YXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpdGVy
LT5rZXktPnJlZigpOwotICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNw
ZWNpZmljVmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9m
ZnNldHMgdmVjdG9yLgotICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9m
ZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOwotICAgIGlmIChvdGhlckRlbGV0
ZWRPZmZzZXRzKQotICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKLX0KLQotaW5saW5lIFBy
b3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwg
dW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAg
ICA6IG1faW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwg
bV9pbmRleE1hc2sobV9pbmRleFNpemUgLSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1
bnNpZ25lZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3Vu
dCgwKQotICAgICwgbV9kZWxldGVkQ291bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMiht
X2luZGV4U2l6ZSkpOwotICAgIEFTU0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlD
b3VudCk7Ci0KLSAgICBjb25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKLSAgICBmb3Ig
KGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7Ci0gICAgICAgIEFTU0VSVChjYW5JbnNlcnQoKSk7Ci0gICAgICAgIHJlaW5zZXJ0KCppdGVy
KTsKLSAgICAgICAgaXRlci0+a2V5LT5yZWYoKTsKLSAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVy
KG93bmVyLCBpdGVyLT5zcGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9Ci0KLSAgICAvLyBDb3B5
IHRoZSBtX2RlbGV0ZWRPZmZzZXRzIHZlY3Rvci4KLSAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+
KiBvdGhlckRlbGV0ZWRPZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKLSAg
ICBpZiAob3RoZXJEZWxldGVkT2Zmc2V0cykKLSAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFk
b3B0UHRyKG5ldyBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7
Ci19Ci0KLWlubGluZSBQcm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCi17Ci0gICAgaXRl
cmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOwotCi0g
ICAgZmFzdEZyZWUobV9pbmRleCk7Ci19Ci0KIGlubGluZSBQcm9wZXJ0eVRhYmxlOjppdGVyYXRv
ciBQcm9wZXJ0eVRhYmxlOjpiZWdpbigpCiB7CiAgICAgcmV0dXJuIGl0ZXJhdG9yKHNraXBEZWxl
dGVkRW50cmllcyh0YWJsZSgpKSk7CkBAIC01MDIsMTUgKzQ1MywxNSBAQCBpbmxpbmUgUHJvcGVy
dHlPZmZzZXQgUHJvcGVydHlUYWJsZTo6bmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVD
YXBhY2l0eSkKICAgICByZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxp
bmVDYXBhY2l0eSk7CiB9CiAKLWlubGluZSBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFByb3Bl
cnR5VGFibGU6OmNvcHkoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1
bnNpZ25lZCBuZXdDYXBhY2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxl
Ojpjb3B5KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQg
bmV3Q2FwYWNpdHkpCiB7CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwog
CiAgICAgLy8gRmFzdCBjYXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9p
bmRleFNpemUgYXMgdGhpcyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2ZSByZWhh
c2hpbmcgYWxsIGtleXMuCiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0g
bV9pbmRleFNpemUpCi0gICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShn
bG9iYWxEYXRhLCBvd25lciwgKnRoaXMpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFByb3Bl
cnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcykpOworICAgICAg
ICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICp0aGlzKTsK
KyAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0Nh
cGFjaXR5LCAqdGhpcyk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjk5ZDI2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgi
CisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGlu
ZXMuaCIKKyNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1
cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gUHJvcGVy
dHlUYWJsZTo6c19pbmZvID0geyAiUHJvcGVydHlUYWJsZSIsIDAsIDAsIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoUHJvcGVydHlUYWJsZSkgfTsKKworUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJs
ZTo6Y3JlYXRlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5KQoreworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0
ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9i
YWxEYXRhLCBpbml0aWFsQ2FwYWNpdHkpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9i
YWxEYXRhKTsKKyAgICByZXR1cm4gdGFibGU7Cit9CisKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5
VGFibGU6OmNsb25lKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29u
c3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXAp
KSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCBvdGhlcik7CisgICAgdGFibGUtPmZp
bmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJvcGVy
dHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBK
U0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFi
bGUmIG90aGVyKQoreworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJs
ZShnbG9iYWxEYXRhLCBvd25lciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7CisgICAgdGFibGUt
PmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJv
cGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2ln
bmVkIGluaXRpYWxDYXBhY2l0eSkKKyAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRh
LnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2luZGV4U2l6ZShzaXplRm9y
Q2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSkKKyAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXpl
IC0gMSkKKyAgICAsIG1faW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVyb2VkTWFs
bG9jKGRhdGFTaXplKCkpKSkKKyAgICAsIG1fa2V5Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZENv
dW50KDApCit7CisgICAgQVNTRVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKK30KKworUHJv
cGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2Vs
bCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKGdsb2Jh
bERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1f
aW5kZXhTaXplKG90aGVyLm1faW5kZXhTaXplKQorICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9p
bmRleE1hc2spCisgICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxv
YyhkYXRhU2l6ZSgpKSkpCisgICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisgICAg
LCBtX2RlbGV0ZWRDb3VudChvdGhlci5tX2RlbGV0ZWRDb3VudCkKK3sKKyAgICBBU1NFUlQoaXNQ
b3dlck9mMihtX2luZGV4U2l6ZSkpOworCisgICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5k
ZXgsIGRhdGFTaXplKCkpOworCisgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAg
Zm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAg
ICAgICBpdGVyLT5rZXktPnJlZigpOworICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIs
IGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIC8vIENvcHkgdGhlIG1f
ZGVsZXRlZE9mZnNldHMgdmVjdG9yLgorICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVy
RGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOworICAgIGlmIChv
dGhlckRlbGV0ZWRPZmZzZXRzKQorICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIo
bmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKK30KKwor
UHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpT
Q2VsbCogb3duZXIsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJs
ZSYgb3RoZXIpCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRh
YmxlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGlu
aXRpYWxDYXBhY2l0eSkpCisgICAgLCBtX2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCisgICAg
LCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6
ZSgpKSkpCisgICAgLCBtX2tleUNvdW50KDApCisgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQorewor
ICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5kZXhTaXplKSk7CisgICAgQVNTRVJUKGluaXRpYWxD
YXBhY2l0eSA+PSBvdGhlci5tX2tleUNvdW50KTsKKworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG90aGVyLmVuZCgpOworICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVyLmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgQVNTRVJUKGNhbkluc2VydCgpKTsK
KyAgICAgICAgcmVpbnNlcnQoKml0ZXIpOworICAgICAgICBpdGVyLT5rZXktPnJlZigpOworICAg
ICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkp
OworICAgIH0KKworICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgorICAg
IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2Rl
bGV0ZWRPZmZzZXRzLmdldCgpOworICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQorICAgICAg
ICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4o
Km90aGVyRGVsZXRlZE9mZnNldHMpKTsKK30KKwordm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCkt
PlByb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCk7Cit9CisKK1Byb3BlcnR5VGFibGU6On5Q
cm9wZXJ0eVRhYmxlKCkKK3sKKyAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICBm
b3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAg
ICBpdGVyLT5rZXktPmRlcmVmKCk7CisKKyAgICBmYXN0RnJlZShtX2luZGV4KTsKK30KKwordm9p
ZCBQcm9wZXJ0eVRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9w
ZXJ0eVRhYmxlKj4oY2VsbCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCAmc19pbmZvKTsKKyAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJ
bmZvKCkub3ZlcnJpZGVzVmlzaXRDaGlsZHJlbigpKTsKKworICAgIEpTQ2VsbDo6dmlzaXRDaGls
ZHJlbih0aGlzT2JqZWN0LCB2aXNpdG9yKTsKKworICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9y
IGVuZCA9IHRoaXNPYmplY3QtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgcHRyID0gdGhpc09iamVjdC0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZwdHItPnNwZWNpZmljVmFsdWUpOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBiNzljMTA2Li5mYzY5YTAx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTI0
Nyw3ICsyNDcsNyBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5tX3By
b3BlcnR5VGFibGUpOwogICAgICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPnByZXZpb3VzSUQo
KSk7CiAKLSAgICAgICAgICAgIG1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0
eVRhYmxlLT5jb3B5KGdsb2JhbERhdGEsIDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1f
b2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgICAgICBtX3Byb3BlcnR5VGFibGUu
c2V0KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGds
b2JhbERhdGEsIDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGlu
ZUNhcGFjaXR5KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjU1LDcg
KzI1NSw3IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5TWFwKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSkKICAgICB9CiAKICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkKLSAg
ICAgICAgY3JlYXRlUHJvcGVydHlNYXAobnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZz
ZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFs
RGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNp
dHkpKTsKIAogICAgIGZvciAocHRyZGlmZl90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDE7IGkg
Pj0gMDsgLS1pKSB7CiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CkBAIC0zNzYs
MTQgKzM3NiwxNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKgogICAgIGlmIChzdHJ1Y3R1cmUt
Pm1fcHJvcGVydHlUYWJsZSkgewogICAgICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUp
Ci0gICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRy
YW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJl
bGVhc2UoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSAr
IDEpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5
VGFibGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlLmdldCgpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmNsZWFy
KCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2
aW91c0lEKCkpCiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KGdsb2JhbERhdGEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVh
dGVQcm9wZXJ0eU1hcCgpOworICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlN
YXAoZ2xvYmFsRGF0YSk7CiAgICAgfQogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5tX29mZnNldDsKIApAQCAtNDE1LDcgKzQxNyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0CiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5cGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRp
b24sIHByb3RvdHlwZSk7CiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJ
Zk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUg
PSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFu
c2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2Jh
bERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVy
ZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTQzMSw3ICs0MzMsNyBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydQogICAgICsrdHJhbnNpdGlvbi0+bV9zcGVjaWZpY0Z1
bmN0aW9uVGhyYXNoQ291bnQ7CiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTQ1Miw3ICs0NTQs
NyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdAogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKIAogICAgICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICAgICAg
dHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgICAgIHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwogICAg
ICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgICAg
IHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAKQEAgLTQ3NSw3ICs0NzcsNyBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZQogICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZShnbG9i
YWxEYXRhLCBzdHJ1Y3R1cmUpOwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLnNldChnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhn
bG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1fZGljdGlvbmFyeUtpbmQgPSBraW5k
OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNTM1LDcgKzUzNyw3IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1CiAgICAgLy8gRG9uJ3Qgc2V0IG1fb2Zmc2V0LCBhcyBvbmUgY2FuIG5vdCB0
cmFuc2l0aW9uIHRvIHRoaXMuCiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+bV9wcmV2ZW50RXh0ZW5zaW9ucyA9IHRy
dWU7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC01NzUsMTQgKzU3NywxNiBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKgogICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSkgewog
ICAgICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICAgICAgaWYg
KHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCi0gICAgICAgICAgICB0cmFuc2l0
aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShn
bG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgp
ICsgMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlU
YWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAg
IHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwg
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmdldCgpKTsKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpCiAgICAgICAgICAg
ICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAg
ICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAgICAg
fQogICAgIAogICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEs
IHRyYW5zaXRpb24pOwpAQCAtNzM3LDE0ICs3NDEsMTggQEAgaW5saW5lIHZvaWQgU3RydWN0dXJl
OjpjaGVja0NvbnNpc3RlbmN5KCkKIAogI2VuZGlmCiAKLVBhc3NPd25QdHI8UHJvcGVydHlUYWJs
ZT4gU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEs
IFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OmNvcHlQcm9wZXJ0
eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvd25lcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8gbmV3IFByb3BlcnR5VGFibGUoZ2xv
YmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDogMCk7CisgICAgaWYgKCFtX3Byb3Bl
cnR5VGFibGUpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxlOjpj
bG9uZShnbG9iYWxEYXRhLCBvd25lciwgKm1fcHJvcGVydHlUYWJsZS5nZXQoKSk7CiB9CiAKLVBh
c3NPd25QdHI8UHJvcGVydHlUYWJsZT4gU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVy
dHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQogewotICAgIHJldHVybiBhZG9wdFB0
cihtX3Byb3BlcnR5VGFibGUgPyBuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwg
Km1fcHJvcGVydHlUYWJsZSkgOiBuZXcgUHJvcGVydHlUYWJsZShudW1iZXJPZlNsb3RzRm9yTGFz
dE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpKTsKKyAgICBpZiAobV9wcm9wZXJ0
eVRhYmxlKQorICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwg
b3duZXIsICptX3Byb3BlcnR5VGFibGUuZ2V0KCkpOworICAgIHJldHVybiBQcm9wZXJ0eVRhYmxl
OjpjcmVhdGUoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQs
IG1faW5saW5lQ2FwYWNpdHkpKTsKIH0KIAogUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkKQEAgLTgwMSw3ICs4MDks
NyBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbQogICAgIFN0cmluZ0ltcGwqIHJlcCA9IHByb3Bl
cnR5TmFtZS51aWQoKTsKIAogICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKQotICAgICAgICBjcmVh
dGVQcm9wZXJ0eU1hcCgpOworICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsK
IAogICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IG1fcHJvcGVydHlUYWJsZS0+bmV4dE9m
ZnNldChtX2lubGluZUNhcGFjaXR5KTsKIApAQCAtODMzLDEyICs4NDEsMTIgQEAgUHJvcGVydHlP
ZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKICAgICBy
ZXR1cm4gb2Zmc2V0OwogfQogCi12b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAodW5z
aWduZWQgY2FwYWNpdHkpCit2b2lkIFN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXAoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBjYXBhY2l0eSkKIHsKICAgICBBU1NFUlQoIW1f
cHJvcGVydHlUYWJsZSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgbV9wcm9wZXJ0
eVRhYmxlID0gYWRvcHRQdHIobmV3IFByb3BlcnR5VGFibGUoY2FwYWNpdHkpKTsKKyAgICBtX3By
b3BlcnR5VGFibGUuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZShn
bG9iYWxEYXRhLCBjYXBhY2l0eSkpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWVB
cnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC04ODIsMTEgKzg5
MCwxMiBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQogICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+
bV9wcmV2aW91c09yUmFyZURhdGEpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5t
X3NwZWNpZmljVmFsdWVJblByZXZpb3VzKTsKLSAgICBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0
eVRhYmxlKSB7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZS0+ZW5kKCk7Ci0gICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgcHRyID0gdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlLT5iZWdpbigpOyBwdHIg
IT0gZW5kOyArK3B0cikKLSAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZwdHItPnNwZWNpZmlj
VmFsdWUpOwotICAgIH0KKworICAgIGlmICh0aGlzT2JqZWN0LT5tX2lzUGlubmVkUHJvcGVydHlU
YWJsZSkgeworICAgICAgICBBU1NFUlQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlKTsKKyAg
ICAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZSk7CisgICAg
fSBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUpCisgICAgICAgIHRoaXNPYmpl
Y3QtPm1fcHJvcGVydHlUYWJsZS5jbGVhcigpOwogfQogCiBib29sIFN0cnVjdHVyZTo6cHJvdG90
eXBlQ2hhaW5NYXlJbnRlcmNlcHRTdG9yZVRvKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKaW5kZXggMjM1OWM2Yy4uN2NhYjhiZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTMxLDE2ICszMSwxNSBAQAogI2luY2x1ZGUgIkpTQ0pT
VmFsdWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKICNpbmNsdWRlICJKU1R5cGUuaCIKLSNpbmNs
dWRlICJQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5TmFtZS5oIgog
I2luY2x1ZGUgIlByb3BlcnR5TmFtZUFycmF5LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQu
aCIKICNpbmNsdWRlICJQcm90ZWN0LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlUmFyZURhdGEuaCIK
ICNpbmNsdWRlICJTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCIKICNpbmNsdWRlICJKU1R5cGVJ
bmZvLmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgIldlYWsuaCIKLSNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+
CkBAIC01MSw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXk7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eURhdGE7CitjbGFzcyBQcm9wZXJ0eVRhYmxlOwogY2xhc3MgU3RydWN0dXJlQ2hhaW47CiBjbGFz
cyBTbG90VmlzaXRvcjsKIGNsYXNzIEpTU3RyaW5nOwpAQCAtMTA4LDI1ICsxMDgsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBpc0Zyb3plbihKU0dsb2JhbERhdGEmKTsKICAgICBib29sIGlzRXh0ZW5z
aWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtX3ByZXZlbnRFeHRlbnNpb25zOyB9CiAgICAgYm9vbCBk
aWRUcmFuc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kaWRUcmFuc2l0aW9uOyB9Ci0gICAgYm9v
bCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKQotICAgIHsKLSAgICAgICAgY2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwotICAgICAgICAgICAgCi0gICAgICAgIEFTU0VSVChvdXRPZkxpbmVD
YXBhY2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgaWYg
KCFtX3Byb3BlcnR5VGFibGUpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRTaXplID0g
bnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpOwotICAgICAgICAg
ICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gY3VycmVudFNpemUpOwotICAgICAgICAg
ICAgcmV0dXJuIGN1cnJlbnRTaXplID09IG91dE9mTGluZUNhcGFjaXR5KCk7Ci0gICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBt
X3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7Ci0gICAgICAgIGlmIChtX3By
b3BlcnR5VGFibGUtPmhhc0RlbGV0ZWRPZmZzZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAotICAgICAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+
PSBtX3Byb3BlcnR5VGFibGUtPnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5VGFi
bGUtPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpOwotICAgIH0KKyAgICBib29sIHB1
dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBzdWdnZXN0ZWROZXdPdXRPZkxpbmVTdG9yYWdlQ2FwYWNpdHkoKTsgCiAKICAgICBTdHJ1Y3R1
cmUqIGZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYsIEpTT2JqZWN0Kik7
CkBAIC0zODIsMTQgKzM2NCwxNCBAQCBwcml2YXRlOgogICAgIFByb3BlcnR5T2Zmc2V0IHB1dFNw
ZWNpZmljVmFsdWUoSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzLCBKU0NlbGwqIHNwZWNpZmljVmFsdWUpOwogICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQ
cm9wZXJ0eU5hbWUpOwogCi0gICAgdm9pZCBjcmVhdGVQcm9wZXJ0eU1hcCh1bnNpZ25lZCBrZXlD
b3VudCA9IDApOworICAgIHZvaWQgY3JlYXRlUHJvcGVydHlNYXAoSlNHbG9iYWxEYXRhJiwgdW5z
aWduZWQga2V5Q291bnQgPSAwKTsKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAg
IGJvb2wgZGVzcGVjaWZ5RnVuY3Rpb24oSlNHbG9iYWxEYXRhJiwgUHJvcGVydHlOYW1lKTsKICAg
ICB2b2lkIGRlc3BlY2lmeUFsbEZ1bmN0aW9ucyhKU0dsb2JhbERhdGEmKTsKIAotICAgIFBhc3NP
d25QdHI8UHJvcGVydHlUYWJsZT4gY29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgU3Ry
dWN0dXJlKiBvd25lcik7Ci0gICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5UHJvcGVy
dHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7CisgICAg
UHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgU3RydWN0dXJl
KiBvd25lcik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5n
KEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmKTsKICAgICB2b2lkIG1h
dGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
CiAgICAgewpAQCAtNDQ1LDE5ICs0MjcsNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7
CiAgICAgfQogICAgICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY2hlY2tPZmZzZXRDb25z
aXN0ZW5jeSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkgewot
ICAgICAgICAgICAgQVNTRVJUKCFtX2lzUGlubmVkUHJvcGVydHlUYWJsZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFj
aXR5KSA9PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7Ci0gICAgICAg
IHVuc2lnbmVkIHRvdGFsU2l6ZSA9IG1fcHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6
ZSgpOwotICAgICAgICBSRUxFQVNFX0FTU0VSVCgodG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHko
KSA/IDAgOiB0b3RhbFNpemUgLSBpbmxpbmVDYXBhY2l0eSgpKSA9PSBudW1iZXJPZk91dE9mTGlu
ZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCkpOwotICAgICAgICAgICAgCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KKyAgICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25z
dDsKIAogICAgIHZvaWQgYWxsb2NhdGVSYXJlRGF0YShKU0dsb2JhbERhdGEmKTsKICAgICB2b2lk
IGNsb25lUmFyZURhdGFGcm9tKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwpAQCAt
NDgyLDcgKzQ1Miw3IEBAIHByaXZhdGU6CiAKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUg
bV90cmFuc2l0aW9uVGFibGU7CiAKLSAgICBPd25QdHI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0
eVRhYmxlOworICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGU7
CiAKICAgICBtdXRhYmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2lu
dFNldDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5s
aW5lcy5oCmluZGV4IDViZmQyZDUuLjM1NmUxM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5k
ZWYgU3RydWN0dXJlSW5saW5lc19oCiAjZGVmaW5lIFN0cnVjdHVyZUlubGluZXNfaAogCisjaW5j
bHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CkBAIC0xNzksNiArMTgwLDQwIEBAIGlubGluZSBib29sIFN0cnVjdHVy
ZTo6aXNWYWxpZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5
cGVDCiAgICAgcmV0dXJuIGlzVmFsaWQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWNo
ZWRQcm90b3R5cGVDaGFpbik7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6cHV0V2lsbEdy
b3dPdXRPZkxpbmVTdG9yYWdlKCkKK3sKKyAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CisK
KyAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXplKCkpOworCisg
ICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudFNpemUg
PSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCk7CisgICAgICAg
IEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IGN1cnJlbnRTaXplKTsKKyAgICAgICAgcmV0
dXJuIGN1cnJlbnRTaXplID09IG91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgfQorCisgICAgQVNT
RVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0
b3JhZ2VTaXplKCkpOworICAgIGlmIChtX3Byb3BlcnR5VGFibGUtPmhhc0RlbGV0ZWRPZmZzZXQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFj
aXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkpOworICAgIHJldHVybiBtX3Byb3BlcnR5
VGFibGUtPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpOworfQorCitBTFdBWVNfSU5M
SU5FIGJvb2wgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fcHJvcGVydHlUYWJsZSkgeworICAgICAgICBBU1NFUlQoIW1faXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlQobnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNp
dHkpID09IG1fcHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpKTsKKyAgICB1bnNp
Z25lZCB0b3RhbFNpemUgPSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsK
KyAgICBSRUxFQVNFX0FTU0VSVCgodG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAgOiB0
b3RhbFNpemUgLSBpbmxpbmVDYXBhY2l0eSgpKSA9PSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9y
TGFzdE9mZnNldChtX29mZnNldCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gU3RydWN0dXJlSW5saW5lc19oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191298</attachid>
            <date>2013-03-04 13:09:50 -0800</date>
            <delta_ts>2013-03-04 15:25:42 -0800</delta_ts>
            <desc>Patch II: The Repatchening</desc>
            <filename>bug-110854-v2.diff</filename>
            <type>text/plain</type>
            <size>53432</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggMzYwZTBkZC4uOGE3ZWJhYiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTAzIEBACiAyMDEzLTAzLTA0ICBB
bmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAorICAgICAgICBVbnVzZWQgU3RydWN0
dXJlIHByb3BlcnR5IHRhYmxlcyB3YXN0ZSAxNE1CIG9uIE1lbWJ1c3Rlci4KKyAgICAgICAgPGh0
dHA6Ly93ZWJraXQub3JnL2IvMTEwODU0PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyOTIx
MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkKKworICAgICAgICBUdXJu
IFByb3BlcnR5VGFibGUgaW50byBhIEdDIG9iamVjdCBhbmQgaGF2ZSBTdHJ1Y3R1cmUgZHJvcCB1
bnBpbm5lZCB0YWJsZXMgd2hlbiBtYXJraW5nLgorICAgICAgICAxNCBNQiBwcm9ncmVzc2lvbiBv
biBNZW1idXN0ZXIzLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05V
bWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5neXBpOgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvajoKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAq
IFRhcmdldC5wcmk6CisKKyAgICAgICAgICAgIEFkZGVkIFByb3BlcnR5VGFibGUuY3BwLgorCisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OlByb3BlcnR5VGFibGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmNs
b25lKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6UHJvcGVydHlUYWJsZSk6CisgICAg
ICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0
eVRhYmxlOjp+UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OnZp
c2l0Q2hpbGRyZW4pOgorCisgICAgICAgICAgICBNb3ZlZCBtYXJraW5nIG9mIHByb3BlcnR5IHRh
YmxlIHZhbHVlcyBoZXJlIGZyb20gU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKCkuCisKKyAgICAg
ICAgKiBydW50aW1lL1dyaXRlQmFycmllci5oOgorICAgICAgICAoSlNDOjpXcml0ZUJhcnJpZXJC
YXNlOjpnZXQpOgorCisgICAgICAgICAgICBNb3ZlIG1fY2VsbCB0byBhIGxvY2FsIGJlZm9yZSB1
c2luZyBpdCBtdWx0aXBsZSB0aW1lcy4gVGhpcyBhdm9pZHMgYSBtdWx0aXBsZS1hY2Nlc3MgcmFj
ZSB3aGVuCisgICAgICAgICAgICBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBp
cyB1c2VkIGluIGFzc2VydGlvbnMgb24gdGhlIG1haW4gdGhyZWFkIHdoaWxlIGEgbWFya2luZyB0
aHJlYWQKKyAgICAgICAgICAgIHphcHMgdGhlIHByb3BlcnR5IHRhYmxlLgorCisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcpOgorICAgICAgICAqIHJ1bnRp
bWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByb3BlcnR5
VGFibGUpOgorCisgICAgICAgICAgICBBZGRlZCBhIGdldHRlciBmb3IgdGhlIFN0cnVjdHVyZSdz
IFByb3BlcnR5VGFibGUgdGhhdCBBU1NFUlRzIEdDIGN1cnJlbnRseSBpc24ndCBhY3RpdmUuCisg
ICAgICAgICAgICBCZWNhdXNlIEdDIGNhbiB6YXAgYW4gdW5waW5uZWQgcHJvcGVydHkgdGFibGUg
YXQgYW55IHRpbWUsIGl0J3Mgbm90IGVudGlyZWx5IHNhZmUgdG8gYWNjZXNzIGl0LgorICAgICAg
ICAgICAgUmVuYW1lZCB0aGUgdmFyaWFibGUgaXRzZWxmIHRvIG1fcHJvcGVydHlUYWJsZVVuc2Fm
ZSB0byBmb3JjZSBjYWxsIHNpdGVzIGludG8gZXhwbGFpbmluZyB0aGVtc2VsdmVzLgorCisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6cHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KToKKworICAgICAgICAg
ICAgTW92ZWQgdGhlc2Ugb3V0IG9mIFN0cnVjdHVyZS5oIHRvIGJyZWFrIGhlYWRlciBkZXBlbmRl
bmN5IGN5Y2xlIGJldHdlZW4gU3RydWN0dXJlL1Byb3BlcnR5VGFibGUuCisKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGls
ZHJlbik6CisKKyAgICAgICAgICAgIE51bGwgb3V0IG1fcHJvcGVydHlUYWJsZSBpZiB0aGUgdGFi
bGUgaXMgdW5waW5uZWQuIFRoaXMnbGwgY2F1c2UgdGhlIHRhYmxlIHRvIGdldCBHQydkLgorCisg
ICAgICAgICogcnVudGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsRGF0YS5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToK
KworICAgICAgICAgICAgQWRkIGEgZ2xvYmFsIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuCisKKyAg
ICAgICAgKiBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmg6CisgICAgICAgIChQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y3JlYXRlU3RydWN0dXJlKToK
KyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6Y29weSk6CisKKyAgICAgICAgICAgIE1ha2Ug
UHJvcGVydHlUYWJsZSBhIEdDIG9iamVjdC4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcyk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcCk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6
YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dG9E
aWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6c2VhbFRyYW5z
aXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZyZWV6ZVRyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbik6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjppc1NlYWxlZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6aXNGcm96
ZW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJl
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwaW4pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjb3B5UHJv
cGVydHlUYWJsZUZvclBpbm5pbmcpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmdldCk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb24pOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUFsbEZ1bmN0aW9ucyk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cHV0U3BlY2lmaWNWYWx1ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3Zl
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpjcmVhdGVQcm9wZXJ0eU1hcCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3kpOgorCisyMDEzLTAzLTA0ICBBbmRy
ZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KKwogICAgICAgICBBZGQgc2ltcGxlIHZlY3Rv
ciB0cmFpdHMgZm9yIEpTQzo6SWRlbnRpZmllci4KICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3Jn
L2IvMTExMzIzPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IGU4YTFmMmIuLjUxZDVhNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC03MjIsNiArNzIyLDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlPZmZzZXQuaCBcCiAJU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmNwcCBcCiAJU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlTbG90LmggXAorCVNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm90b3R5cGVNYXAuY3BwIFwKIAlTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm90b3R5cGVNYXAuaCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVy
dHlTdG9yYWdlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cGkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZ3lwaQpp
bmRleCAwYTlmYjE0Li5jMjdlN2Q2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUuZ3lwaQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZ3lwaQpAQCAtNzU4LDYgKzc1OCw3IEBACiAgICAgICAgICAgICAncnVudGltZS9Qcm9w
ZXJ0eU9mZnNldC5oJywKICAgICAgICAgICAgICdydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAnLAog
ICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlTbG90LmgnLAorICAgICAgICAgICAgJ3J1bnRp
bWUvUHJvcGVydHlUYWJsZS5jcHAnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVydHlTdG9y
YWdlLmgnLAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvdGVjdC5oJywKICAgICAgICAgICAgICdy
dW50aW1lL1Byb3RvdHlwZU1hcC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvaiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oKaW5kZXggMzI1ZTcyNS4uMGZhOTE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qCkBAIC0zMDUsNiArMzA1LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcUHJvcGVydHlEZXNjcmlwdG9yLmNwcCIgLz4NCiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5TmFtZUFycmF5LmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3BlcnR5U2xvdC5jcHAiIC8+DQorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVRhYmxlLmNwcCIgLz4NCiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFByb3RvdHlwZU1hcC5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxSZWdFeHAuY3BwIiAvPg0KICAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwQ2FjaGUuY3BwIiAvPg0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKaW5kZXggZjUwZDM2Yy4uZWFhMzkzYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKQEAgLTcwMyw2ICs3MDMsNyBAQAogCQlBN0ZCNjBBNDEwM0Y3REMyMDAxN0Ey
ODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3RkI2MEEzMTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURl
c2NyaXB0b3IuY3BwICovOyB9OwogCQlBN0ZCNjEwMDEwNDBDMzhCMDAxN0EyODYgLyogUHJvcGVy
dHlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBBN0ZCNjA0QjEwM0Y1RUFCMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQThBNDc0OEUx
NTFBODMwNjAwNDEyM0ZGIC8qIGxpYldURi5hIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQThBNDc0OEQxNTFBODMwNjAwNDEyM0ZGIC8qIGxpYldURi5h
ICovOyB9OworCQlBREUzOUZGRjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVydHlUYWJsZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBRDFDRjA2ODE2
RENBQjJEMDBCOTcxMjMgLyogUHJvcGVydHlUYWJsZS5jcHAgKi87IH07CiAJCUJDMDJFOTBEMEUx
ODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwNTBFMTgzOURCMDAwRjkyOTcgLyogRXJy
b3JDb25zdHJ1Y3Rvci5oICovOyB9OwogCQlCQzAyRTkwRjBFMTgzOURCMDAwRjkyOTcgLyogRXJy
b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDMDJFOTA3MEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDMDJFOTExMEUxODM5
REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzAyRTkwOTBFMTgzOURCMDAwRjkyOTcgLyog
TmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oICovOyB9OwpAQCAtMTYxOCw2ICsxNjE5LDcgQEAKIAkJ
QThBNDc0OEQxNTFBODMwNjAwNDEyM0ZGIC8qIGxpYldURi5hICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gYXJjaGl2ZS5hcjsgcGF0aCA9IGxpYldURi5h
OyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQlBOEU4OTQzMTBDRDA2MDI0
MDAzNjcxNzkgLyogSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE4RTg5NDMzMENEMDYwM0YwMDM2NzE3OSAvKiBKU0dsb2JhbE9i
amVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0dsb2JhbE9iamVjdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBRDFDRjA2ODE2RENBQjJEMDBCOTcxMjMg
LyogUHJvcGVydHlUYWJsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBQcm9wZXJ0eVRhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMjFC
RjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dC54Y2NvbmZpZzsgcGF0aCA9IFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCQzAyRTkwNDBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25z
dHJ1Y3Rvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFcnJvckNv
bnN0cnVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkU5MDUwRTE4
MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3RydWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXJyb3JDb25zdHJ1Y3Rvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjUwNiw2ICsyNTA4LDcgQEAKIAkJCQk2NTYyMUU2QjA4OUU4NTk3MDA3NjBGMzUgLyog
UHJvcGVydHlTbG90LmNwcCAqLywKIAkJCQk2NTYyMUU2QzA4OUU4NTk3MDA3NjBGMzUgLyogUHJv
cGVydHlTbG90LmggKi8sCiAJCQkJMEZCN0YzOTAxNUVEOEUzODAwRjE2N0IyIC8qIFByb3BlcnR5
U3RvcmFnZS5oICovLAorCQkJCUFEMUNGMDY4MTZEQ0FCMkQwMEI5NzEyMyAvKiBQcm9wZXJ0eVRh
YmxlLmNwcCAqLywKIAkJCQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYgLyogUHJvdGVjdC5oICov
LAogCQkJCTE0RDg0NEEyMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuY3BwICovLAog
CQkJCTE0RDg0NEEzMTZBQTJDNzAwMEE2NUFGMCAvKiBQcm90b3R5cGVNYXAuaCAqLywKQEAgLTQw
MjMsNiArNDAyNiw3IEBACiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NjE2QzFE
QjBGMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJQURFMzlGRkYxNkREMTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0
LnByaSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCmluZGV4IDU4MTQwZjYuLjY2
MDhhMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9UYXJnZXQucHJpCkBAIC0yOTgsNiArMjk4LDcgQEAgU09V
UkNFUyArPSBcCiAgICAgcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwIFwKICAgICBydW50
aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcCBcCiAgICAgcnVudGltZS9Qcm9wZXJ0eVNsb3QuY3Bw
IFwKKyAgICBydW50aW1lL1Byb3BlcnR5VGFibGUuY3BwIFwKICAgICBydW50aW1lL1Byb3RvdHlw
ZU1hcC5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwIFwKICAgICBydW50
aW1lL1JlZ0V4cENhY2hlZFJlc3VsdC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKaW5kZXggYzA2Y2Y1Yy4uNTA4YTg3NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCkBAIC0yMzIsNiAr
MjMyLDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoR2xvYmFsRGF0YVR5cGUgZ2xvYmFs
RGF0YVR5cGUsIEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
a1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jazo6Y3JlYXRlU3Ry
dWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHVubGlua2VkRXZhbENvZGVCbG9ja1N0
cnVjdHVyZS5zZXQoKnRoaXMsIFVubGlua2VkRXZhbENvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1
cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQo
KnRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkp
KTsKICAgICBzbWFsbFN0cmluZ3MuaW5pdGlhbGl6ZUNvbW1vblN0cmluZ3MoKnRoaXMpOwogCiAg
ICAgd3RmVGhyZWFkRGF0YSgpLnNldEN1cnJlbnRJZGVudGlmaWVyVGFibGUoZXhpc3RpbmdFbnRy
eUlkZW50aWZpZXJUYWJsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsRGF0YS5oCmluZGV4IGRjOTg4MWYuLjE4OTVhMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCkBAIC0yNTYsNiArMjU2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkUHJvZ3JhbUNvZGVCbG9j
a1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRFdmFsQ29kZUJs
b2NrU3RydWN0dXJlOwogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrU3RydWN0dXJlOworICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRh
YmxlU3RydWN0dXJlOwogCiAgICAgICAgIElkZW50aWZpZXJUYWJsZSogaWRlbnRpZmllclRhYmxl
OwogICAgICAgICBDb21tb25JZGVudGlmaWVycyogcHJvcGVydHlOYW1lczsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCmluZGV4
IDI0MjJjNWIuLjU0ZTI5NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaApAQCAtMjIsNiArMjIsNyBAQAogI2RlZmluZSBQ
cm9wZXJ0eU1hcEhhc2hUYWJsZV9oCiAKICNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgorI2lu
Y2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoVGFibGUuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgpAQCAtODUsOCAr
ODYsNyBAQCBzdHJ1Y3QgUHJvcGVydHlNYXBFbnRyeSB7CiAgICAgfQogfTsKIAotY2xhc3MgUHJv
cGVydHlUYWJsZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBQcm9wZXJ0
eVRhYmxlIDogcHVibGljIEpTQ2VsbCB7CiAKICAgICAvLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRh
dGlvbiBmb3IgJ2l0ZXJhdG9yJyBhbmQgJ2NvbnN0X2l0ZXJhdG9yJywKICAgICAvLyB1c2VkIGZv
ciBpdGVyYXRpbmcgb3ZlciB0aGUgdGFibGUgaW4gaW5zZXJ0aW9uIG9yZGVyLgpAQCAtMTI5LDYg
KzEyOSwxOSBAQCBjbGFzcyBQcm9wZXJ0eVRhYmxlIHsKICAgICB9OwogCiBwdWJsaWM6CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CisKKyAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0lu
Zm8gc19pbmZvOworCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1
ZSBwcm90b3R5cGUpCisgICAgeworICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xv
YmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENvbXBvdW5kVHlwZSwg
T3ZlcnJpZGVzVmlzaXRDaGlsZHJlbiksICZzX2luZm8pOworICAgIH0KKworICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKwogICAgIHR5cGVkZWYg
U3RyaW5nSW1wbCogS2V5VHlwZTsKICAgICB0eXBlZGVmIFByb3BlcnR5TWFwRW50cnkgVmFsdWVU
eXBlOwogCkBAIC0xNDIsOSArMTU1LDkgQEAgcHVibGljOgogICAgIHR5cGVkZWYgc3RkOjpwYWly
PFZhbHVlVHlwZSosIHVuc2lnbmVkPiBmaW5kX2l0ZXJhdG9yOwogCiAgICAgLy8gQ29uc3RydWN0
b3IgaXMgcGFzc2VkIGFuIGluaXRpYWwgY2FwYWNpdHksIGEgUHJvcGVydHlUYWJsZSB0byBjb3B5
LCBvciBib3RoLgotICAgIGV4cGxpY2l0IFByb3BlcnR5VGFibGUodW5zaWduZWQgaW5pdGlhbENh
cGFjaXR5KTsKLSAgICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0
IFByb3BlcnR5VGFibGUmKTsKLSAgICBQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2Vs
bCosIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAg
IHN0YXRpYyBQcm9wZXJ0eVRhYmxlKiBjcmVhdGUoSlNHbG9iYWxEYXRhJiwgdW5zaWduZWQgaW5p
dGlhbENhcGFjaXR5KTsKKyAgICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxE
YXRhJiwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIHN0YXRpYyBQ
cm9wZXJ0eVRhYmxlKiBjbG9uZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25l
ZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKICAgICB+UHJvcGVydHlU
YWJsZSgpOwogCiAgICAgLy8gT3JkZXJlZCBpdGVyYXRpb24gbWV0aG9kcy4KQEAgLTE4MSw3ICsx
OTQsNyBAQCBwdWJsaWM6CiAgICAgUHJvcGVydHlPZmZzZXQgbmV4dE9mZnNldChQcm9wZXJ0eU9m
ZnNldCBpbmxpbmVDYXBhY2l0eSk7CiAKICAgICAvLyBDb3B5IHRoaXMgUHJvcGVydHlUYWJsZSwg
ZW5zdXJpbmcgdGhlIGNvcHkgaGFzIGF0IGxlYXN0IHRoZSBjYXBhY2l0eSBwcm92aWRlZC4KLSAg
ICBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IGNvcHkoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBv
d25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHkoSlNH
bG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpOwogCiAjaWZu
ZGVmIE5ERUJVRwogICAgIHNpemVfdCBzaXplSW5NZW1vcnkoKTsKQEAgLTE4OSw2ICsyMDIsMTAg
QEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6CisgICAgUHJvcGVydHlUYWJsZShKU0dsb2Jh
bERhdGEmLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpOworICAgIFByb3BlcnR5VGFibGUoSlNH
bG9iYWxEYXRhJiwgSlNDZWxsKiwgY29uc3QgUHJvcGVydHlUYWJsZSYpOworICAgIFByb3BlcnR5
VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5LCBj
b25zdCBQcm9wZXJ0eVRhYmxlJik7CisKICAgICBQcm9wZXJ0eVRhYmxlKGNvbnN0IFByb3BlcnR5
VGFibGUmKTsKICAgICAvLyBVc2VkIHRvIGluc2VydCBhIHZhbHVlIGtub3duIG5vdCB0byBiZSBp
biB0aGUgdGFibGUsIGFuZCB3aGVyZSB3ZSBrbm93IGNhcGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4K
ICAgICB2b2lkIHJlaW5zZXJ0KGNvbnN0IFZhbHVlVHlwZSYgZW50cnkpOwpAQCAtMjM5LDcyICsy
NTYsNiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBFbXB0eUVudHJ5SW5k
ZXggPSAwOwogfTsKIAotaW5saW5lIFByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUodW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5KQotICAgIDogbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGlu
aXRpYWxDYXBhY2l0eSkpCi0gICAgLCBtX2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCi0gICAg
LCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6
ZSgpKSkpCi0gICAgLCBtX2tleUNvdW50KDApCi0gICAgLCBtX2RlbGV0ZWRDb3VudCgwKQotewot
ICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5kZXhTaXplKSk7Ci19Ci0KLWlubGluZSBQcm9wZXJ0
eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0
IFByb3BlcnR5VGFibGUmIG90aGVyKQotICAgIDogbV9pbmRleFNpemUob3RoZXIubV9pbmRleFNp
emUpCi0gICAgLCBtX2luZGV4TWFzayhvdGhlci5tX2luZGV4TWFzaykKLSAgICAsIG1faW5kZXgo
c3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0TWFsbG9jKGRhdGFTaXplKCkpKSkKLSAgICAsIG1f
a2V5Q291bnQob3RoZXIubV9rZXlDb3VudCkKLSAgICAsIG1fZGVsZXRlZENvdW50KG90aGVyLm1f
ZGVsZXRlZENvdW50KQotewotICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5kZXhTaXplKSk7Ci0K
LSAgICBtZW1jcHkobV9pbmRleCwgb3RoZXIubV9pbmRleCwgZGF0YVNpemUoKSk7Ci0KLSAgICBp
dGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGl0ZXItPmtleS0+cmVmKCk7Ci0g
ICAgICAgIEhlYXA6OndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQo
KSk7Ci0gICAgfQotCi0gICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3IuCi0g
ICAgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Piogb3RoZXJEZWxldGVkT2Zmc2V0cyA9IG90aGVyLm1f
ZGVsZXRlZE9mZnNldHMuZ2V0KCk7Ci0gICAgaWYgKG90aGVyRGVsZXRlZE9mZnNldHMpCi0gICAg
ICAgIG1fZGVsZXRlZE9mZnNldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFByb3BlcnR5T2Zmc2V0
Pigqb3RoZXJEZWxldGVkT2Zmc2V0cykpOwotfQotCi1pbmxpbmUgUHJvcGVydHlUYWJsZTo6UHJv
cGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBpbml0aWFs
Q2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQotICAgIDogbV9pbmRleFNpemUo
c2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCi0gICAgLCBtX2luZGV4TWFzayhtX2lu
ZGV4U2l6ZSAtIDEpCi0gICAgLCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdFpl
cm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCi0gICAgLCBtX2tleUNvdW50KDApCi0gICAgLCBtX2Rl
bGV0ZWRDb3VudCgwKQotewotICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5kZXhTaXplKSk7Ci0g
ICAgQVNTRVJUKGluaXRpYWxDYXBhY2l0eSA+PSBvdGhlci5tX2tleUNvdW50KTsKLQotICAgIGNv
bnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmVuZCgpOwotICAgIGZvciAoY29uc3RfaXRlcmF0b3Ig
aXRlciA9IG90aGVyLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgQVNT
RVJUKGNhbkluc2VydCgpKTsKLSAgICAgICAgcmVpbnNlcnQoKml0ZXIpOwotICAgICAgICBpdGVy
LT5rZXktPnJlZigpOwotICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNw
ZWNpZmljVmFsdWUuZ2V0KCkpOwotICAgIH0KLQotICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9m
ZnNldHMgdmVjdG9yLgotICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9m
ZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOwotICAgIGlmIChvdGhlckRlbGV0
ZWRPZmZzZXRzKQotICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3Rv
cjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKLX0KLQotaW5saW5lIFBy
b3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCkKLXsKLSAgICBpdGVyYXRvciBlbmQgPSB0aGlz
LT5lbmQoKTsKLSAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsg
KytpdGVyKQotICAgICAgICBpdGVyLT5rZXktPmRlcmVmKCk7Ci0KLSAgICBmYXN0RnJlZShtX2lu
ZGV4KTsKLX0KLQogaW5saW5lIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIFByb3BlcnR5VGFibGU6
OmJlZ2luKCkKIHsKICAgICByZXR1cm4gaXRlcmF0b3Ioc2tpcERlbGV0ZWRFbnRyaWVzKHRhYmxl
KCkpKTsKQEAgLTUwMiwxNSArNDUzLDE1IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBQcm9wZXJ0
eVRhYmxlOjpuZXh0T2Zmc2V0KFByb3BlcnR5T2Zmc2V0IGlubGluZUNhcGFjaXR5KQogICAgIHJl
dHVybiBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihzaXplKCksIGlubGluZUNhcGFjaXR5KTsKIH0K
IAotaW5saW5lIFBhc3NPd25QdHI8UHJvcGVydHlUYWJsZT4gUHJvcGVydHlUYWJsZTo6Y29weShK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFj
aXR5KQoraW5saW5lIFByb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNvcHkoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0eSkKIHsK
ICAgICBBU1NFUlQobmV3Q2FwYWNpdHkgPj0gbV9rZXlDb3VudCk7CiAKICAgICAvLyBGYXN0IGNh
c2U7IGlmIHRoZSBuZXcgdGFibGUgd2lsbCBiZSB0aGUgc2FtZSBtX2luZGV4U2l6ZSBhcyB0aGlz
IG9uZSwgd2UgY2FuIG1lbWNweSBpdCwKICAgICAvLyBzYXZlIHJlaGFzaGluZyBhbGwga2V5cy4K
ICAgICBpZiAoc2l6ZUZvckNhcGFjaXR5KG5ld0NhcGFjaXR5KSA9PSBtX2luZGV4U2l6ZSkKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVy
LCAqdGhpcykpOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxE
YXRhLCBvd25lciwgbmV3Q2FwYWNpdHksICp0aGlzKSk7CisgICAgICAgIHJldHVybiBQcm9wZXJ0
eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRhLCBvd25lciwgKnRoaXMpOworICAgIHJldHVybiBQcm9w
ZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRhLCBvd25lciwgbmV3Q2FwYWNpdHksICp0aGlzKTsK
IH0KIAogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5VGFibGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlUYWJsZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTlk
MjY3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5VGFibGUuY3BwCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKKworI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgorI2luY2x1ZGUg
IlNsb3RWaXNpdG9ySW5saW5lcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZUlubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBQcm9wZXJ0eVRhYmxlOjpzX2luZm8g
PSB7ICJQcm9wZXJ0eVRhYmxlIiwgMCwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShQcm9wZXJ0
eVRhYmxlKSB9OworCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHkpCit7CisgICAgUHJv
cGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9wZXJ0eVRh
YmxlPihnbG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIGluaXRpYWxD
YXBhY2l0eSk7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOworICAgIHJl
dHVybiB0YWJsZTsKK30KKworUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y2xvbmUoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQcm9wZXJ0eVRhYmxl
JiBvdGhlcikKK3sKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IG5ldyAoTm90TnVsbCwgYWxs
b2NhdGVDZWxsPFByb3BlcnR5VGFibGU+KGdsb2JhbERhdGEuaGVhcCkpIFByb3BlcnR5VGFibGUo
Z2xvYmFsRGF0YSwgb3duZXIsIG90aGVyKTsKKyAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CisgICAgcmV0dXJuIHRhYmxlOworfQorCitQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0
eVRhYmxlOjpjbG9uZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIHVu
c2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCit7Cisg
ICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxQcm9w
ZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93
bmVyLCBpbml0aWFsQ2FwYWNpdHksIG90aGVyKTsKKyAgICB0YWJsZS0+ZmluaXNoQ3JlYXRpb24o
Z2xvYmFsRGF0YSk7CisgICAgcmV0dXJuIHRhYmxlOworfQorCitQcm9wZXJ0eVRhYmxlOjpQcm9w
ZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5KQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEucHJvcGVydHlUYWJsZVN0
cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0aWFs
Q2FwYWNpdHkpKQorICAgICwgbV9pbmRleE1hc2sobV9pbmRleFNpemUgLSAxKQorICAgICwgbV9p
bmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkp
KQorICAgICwgbV9rZXlDb3VudCgwKQorICAgICwgbV9kZWxldGVkQ291bnQoMCkKK3sKKyAgICBB
U1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOworfQorCitQcm9wZXJ0eVRhYmxlOjpQcm9w
ZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3Qg
UHJvcGVydHlUYWJsZSYgb3RoZXIpCisgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9pbmRleFNpemUob3RoZXIu
bV9pbmRleFNpemUpCisgICAgLCBtX2luZGV4TWFzayhvdGhlci5tX2luZGV4TWFzaykKKyAgICAs
IG1faW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0TWFsbG9jKGRhdGFTaXplKCkpKSkK
KyAgICAsIG1fa2V5Q291bnQob3RoZXIubV9rZXlDb3VudCkKKyAgICAsIG1fZGVsZXRlZENvdW50
KG90aGVyLm1fZGVsZXRlZENvdW50KQoreworICAgIEFTU0VSVChpc1Bvd2VyT2YyKG1faW5kZXhT
aXplKSk7CisKKyAgICBtZW1jcHkobV9pbmRleCwgb3RoZXIubV9pbmRleCwgZGF0YVNpemUoKSk7
CisKKyAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0
ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIGl0ZXItPmtleS0+
cmVmKCk7CisgICAgICAgIEhlYXA6OndyaXRlQmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNW
YWx1ZS5nZXQoKSk7CisgICAgfQorCisgICAgLy8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2
ZWN0b3IuCisgICAgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Piogb3RoZXJEZWxldGVkT2Zmc2V0cyA9
IG90aGVyLm1fZGVsZXRlZE9mZnNldHMuZ2V0KCk7CisgICAgaWYgKG90aGVyRGVsZXRlZE9mZnNl
dHMpCisgICAgICAgIG1fZGVsZXRlZE9mZnNldHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFByb3Bl
cnR5T2Zmc2V0Pigqb3RoZXJEZWxldGVkT2Zmc2V0cykpOworfQorCitQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5z
aWduZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKKyAgICA6
IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuZ2V0
KCkpCisgICAgLCBtX2luZGV4U2l6ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENhcGFjaXR5KSkK
KyAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXplIC0gMSkKKyAgICAsIG1faW5kZXgoc3RhdGlj
X2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVyb2VkTWFsbG9jKGRhdGFTaXplKCkpKSkKKyAgICAsIG1f
a2V5Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCit7CisgICAgQVNTRVJUKGlzUG93
ZXJPZjIobV9pbmRleFNpemUpKTsKKyAgICBBU1NFUlQoaW5pdGlhbENhcGFjaXR5ID49IG90aGVy
Lm1fa2V5Q291bnQpOworCisgICAgY29uc3RfaXRlcmF0b3IgZW5kID0gb3RoZXIuZW5kKCk7Cisg
ICAgZm9yIChjb25zdF9pdGVyYXRvciBpdGVyID0gb3RoZXIuYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgeworICAgICAgICBBU1NFUlQoY2FuSW5zZXJ0KCkpOworICAgICAgICByZWluc2Vy
dCgqaXRlcik7CisgICAgICAgIGl0ZXItPmtleS0+cmVmKCk7CisgICAgICAgIEhlYXA6OndyaXRl
QmFycmllcihvd25lciwgaXRlci0+c3BlY2lmaWNWYWx1ZS5nZXQoKSk7CisgICAgfQorCisgICAg
Ly8gQ29weSB0aGUgbV9kZWxldGVkT2Zmc2V0cyB2ZWN0b3IuCisgICAgVmVjdG9yPFByb3BlcnR5
T2Zmc2V0Piogb3RoZXJEZWxldGVkT2Zmc2V0cyA9IG90aGVyLm1fZGVsZXRlZE9mZnNldHMuZ2V0
KCk7CisgICAgaWYgKG90aGVyRGVsZXRlZE9mZnNldHMpCisgICAgICAgIG1fZGVsZXRlZE9mZnNl
dHMgPSBhZG9wdFB0cihuZXcgVmVjdG9yPFByb3BlcnR5T2Zmc2V0Pigqb3RoZXJEZWxldGVkT2Zm
c2V0cykpOworfQorCit2b2lkIFByb3BlcnR5VGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQor
eworICAgIHN0YXRpY19jYXN0PFByb3BlcnR5VGFibGUqPihjZWxsKS0+UHJvcGVydHlUYWJsZTo6
flByb3BlcnR5VGFibGUoKTsKK30KKworUHJvcGVydHlUYWJsZTo6flByb3BlcnR5VGFibGUoKQor
eworICAgIGl0ZXJhdG9yIGVuZCA9IHRoaXMtPmVuZCgpOworICAgIGZvciAoaXRlcmF0b3IgaXRl
ciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgICAgIGl0ZXItPmtleS0+ZGVy
ZWYoKTsKKworICAgIGZhc3RGcmVlKG1faW5kZXgpOworfQorCit2b2lkIFByb3BlcnR5VGFibGU6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAg
ICBQcm9wZXJ0eVRhYmxlKiB0aGlzT2JqZWN0ID0ganNDYXN0PFByb3BlcnR5VGFibGUqPihjZWxs
KTsKKyAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNPYmplY3QsICZzX2luZm8pOwor
ICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5vdmVycmlkZXNW
aXNpdENoaWxkcmVuKCkpOworCisgICAgSlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3Qs
IHZpc2l0b3IpOworCisgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVj
dC0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBwdHIgPSB0aGlzT2Jq
ZWN0LT5iZWdpbigpOyBwdHIgIT0gZW5kOyArK3B0cikKKyAgICAgICAgdmlzaXRvci5hcHBlbmQo
JnB0ci0+c3BlY2lmaWNWYWx1ZSk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwCmluZGV4IGI3OWMxMDYuLjk3MzE2NmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcApAQCAtMTMxLDkgKzEzMSw5IEBAIHZv
aWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKKyAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpKSB7CiAgICAgICAgICAgICArK251
bWJlcldpdGhQcm9wZXJ0eU1hcHM7Ci0gICAgICAgICAgICB0b3RhbFByb3BlcnR5TWFwc1NpemUg
Kz0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUtPnNpemVJbk1lbW9yeSgpOworICAgICAgICAg
ICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9IHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5z
aXplSW5NZW1vcnkoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjM0LDcgKzIzNCw3IEBAIHZv
aWQgU3RydWN0dXJlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHZvaWQgU3RydWN0dXJlOjptYXRl
cmlhbGl6ZVByb3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKIHsKICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwotICAgIEFTU0VSVCghbV9w
cm9wZXJ0eVRhYmxlKTsKKyAgICBBU1NFUlQoIXByb3BlcnR5VGFibGUoKSk7CiAKICAgICBWZWN0
b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKICAgICBzdHJ1Y3R1cmVzLmFwcGVuZCh0aGlz
KTsKQEAgLTI0NCwyNSArMjQ0LDI1IEBAIHZvaWQgU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAvLyBTZWFyY2ggZm9yIHRoZSBs
YXN0IFN0cnVjdHVyZSB3aXRoIGEgcHJvcGVydHkgdGFibGUuCiAgICAgd2hpbGUgKChzdHJ1Y3R1
cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkpIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+
bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUt
Pm1fcHJvcGVydHlUYWJsZSk7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5wcm9wZXJ0
eVRhYmxlKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSk7
CiAKLSAgICAgICAgICAgIG1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRh
YmxlLT5jb3B5KGdsb2JhbERhdGEsIDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zm
c2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CisgICAgICAgICAgICBwcm9wZXJ0eVRhYmxlKCkuc2V0
KGdsb2JhbERhdGEsIHRoaXMsIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5jb3B5KGdsb2Jh
bERhdGEsIDAsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNh
cGFjaXR5KSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBzdHJ1
Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOwogICAgIH0KIAotICAgIGlmICghbV9wcm9wZXJ0eVRh
YmxlKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNl
dChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgIGlmICghcHJvcGVydHlUYWJsZSgp
KQorICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhLCBudW1iZXJPZlNsb3RzRm9y
TGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOwogCiAgICAgZm9yIChwdHJk
aWZmX3QgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAg
c3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fbmFt
ZUluUHJldmlvdXMpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgUHJvcGVydHlNYXBF
bnRyeSBlbnRyeShnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPm1fbmFtZUluUHJldmlvdXMu
Z2V0KCksIHN0cnVjdHVyZS0+bV9vZmZzZXQsIHN0cnVjdHVyZS0+bV9hdHRyaWJ1dGVzSW5QcmV2
aW91cywgc3RydWN0dXJlLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3VzLmdldCgpKTsKLSAgICAg
ICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQ
cm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOworICAgICAgICBwcm9wZXJ0eVRhYmxlKCktPmFk
ZChlbnRyeSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENo
YW5nZSk7CiAgICAgfQogICAgIAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKQEAgLTI4
Nyw5ICsyODcsOSBAQCB2b2lkIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RGljdGlvbmFyeUZ1bmN0aW9u
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYQogICAgIG1hdGVyaWFsaXplUHJv
cGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKIAogICAgIEFTU0VSVChpc0RpY3Rpb25h
cnkoKSk7Ci0gICAgQVNTRVJUKG1fcHJvcGVydHlUYWJsZSk7CisgICAgQVNTRVJUKHByb3BlcnR5
VGFibGUoKSk7CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IG1fcHJvcGVydHlUYWJs
ZS0+ZmluZChyZXApLmZpcnN0OworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gcHJvcGVy
dHlUYWJsZSgpLT5maW5kKHJlcCkuZmlyc3Q7CiAgICAgQVNTRVJUKGVudHJ5KTsKICAgICBlbnRy
eS0+c3BlY2lmaWNWYWx1ZS5jbGVhcigpOwogfQpAQCAtMzczLDE3ICszNzMsMTkgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSoKICAgICB0cmFuc2l0aW9uLT5tX2F0dHJpYnV0ZXNJblByZXZpb3Vz
ID0gYXR0cmlidXRlczsKICAgICB0cmFuc2l0aW9uLT5tX3NwZWNpZmljVmFsdWVJblByZXZpb3Vz
LnNldE1heUJlTnVsbChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzcGVjaWZpY1ZhbHVlKTsKIAot
ICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSkgeworICAgIGlmIChzdHJ1Y3R1cmUt
PnByb3BlcnR5VGFibGUoKSkgewogICAgICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKTsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUp
Ci0gICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1f
cHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRy
YW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJl
bGVhc2UoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPmNvcHkoZ2xv
YmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCktPnNpemUoKSAr
IDEpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRh
YmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJs
ZSgpLmdldCgpKTsKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLmNsZWFy
KCk7CisgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2
aW91c0lEKCkpCiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
KGdsb2JhbERhdGEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVh
dGVQcm9wZXJ0eU1hcCgpOworICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlN
YXAoZ2xvYmFsRGF0YSk7CiAgICAgfQogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0
dXJlLT5tX29mZnNldDsKIApAQCAtNDE1LDcgKzQxNyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3Ry
dWN0CiAgICAgdHJhbnNpdGlvbi0+bV9wcm90b3R5cGUuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRp
b24sIHByb3RvdHlwZSk7CiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJ
Zk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUg
PSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFu
c2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEs
IHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2Jh
bERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVy
ZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTQzMSw3ICs0MzMsNyBA
QCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6ZGVzcGVjaWZ5RnVuY3Rpb25UcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydQogICAgICsrdHJhbnNpdGlvbi0+bV9zcGVjaWZpY0Z1
bmN0aW9uVGhyYXNoQ291bnQ7CiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CiAKQEAgLTQ1MiwxNSArNDU0
LDE1IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNp
dGlvbiA9IGNyZWF0ZShnbG9iYWxEYXRhLCBzdHJ1Y3R1cmUpOwogCiAgICAgICAgIHN0cnVjdHVy
ZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgICAg
ICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRh
YmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICAgICAgdHJhbnNpdGlv
bi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
PmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAg
ICAgICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICAg
ICAgdHJhbnNpdGlvbi0+cGluKCk7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3R1cmUgPSB0cmFu
c2l0aW9uOwogICAgIH0KIAotICAgIEFTU0VSVChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZSk7
Ci0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJs
ZS0+ZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpLmZpcnN0OworICAgIEFTU0VSVChzdHJ1Y3R1cmUt
PnByb3BlcnR5VGFibGUoKSk7CisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1
cmUtPnByb3BlcnR5VGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpLmZpcnN0OwogICAg
IEFTU0VSVChlbnRyeSk7CiAgICAgZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOwogCkBA
IC00NzUsNyArNDc3LDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5z
aXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUKICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKIAogICAgIHN0cnVj
dHVyZS0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAg
IHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFi
bGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pOworICAgIHRyYW5zaXRpb24tPnBy
b3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5jb3B5
UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwogICAgIHRy
YW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5tX29mZnNldDsKICAgICB0cmFuc2l0aW9u
LT5tX2RpY3Rpb25hcnlLaW5kID0ga2luZDsKICAgICB0cmFuc2l0aW9uLT5waW4oKTsKQEAgLTQ5
OSw5ICs1MDEsOSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c2VhbFRyYW5zaXRpb24oSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnVjdAogewogICAgIFN0cnVjdHVyZSog
dHJhbnNpdGlvbiA9IHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihnbG9iYWxEYXRhLCBzdHJ1
Y3R1cmUpOwogCi0gICAgaWYgKHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSkgewotICAgICAg
ICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUtPmVuZCgpOwotICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0
cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIp
CisgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKSkgeworICAgICAgICBQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmVuZCgp
OworICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0cmFuc2l0aW9u
LT5wcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAg
ICAgICBpdGVyLT5hdHRyaWJ1dGVzIHw9IERvbnREZWxldGU7CiAgICAgfQogCkBAIC01MTQsOSAr
NTE2LDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmZyZWV6ZVRyYW5zaXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIHN0cnUKIHsKICAgICBTdHJ1Y3R1cmUqIHRyYW5z
aXRpb24gPSBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0dXJl
KTsKIAotICAgIGlmICh0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUpIHsKLSAgICAgICAgUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZS0+
YmVnaW4oKTsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdHJhbnNpdGlv
bi0+bV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKKyAgICBpZiAodHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpKSB7CisgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0cmFuc2l0
aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7CisgICAgICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CiAgICAgICAg
IGlmIChpdGVyICE9IGVuZCkKICAgICAgICAgICAgIHRyYW5zaXRpb24tPm1faGFzUmVhZE9ubHlP
ckdldHRlclNldHRlclByb3BlcnRpZXNFeGNsdWRpbmdQcm90byA9IHRydWU7CiAgICAgICAgIGZv
ciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQpAQCAtNTM1LDcgKzUzNyw3IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1CiAgICAgLy8gRG9uJ3Qgc2V0IG1fb2Zmc2V0LCBhcyBvbmUgY2FuIG5vdCB0
cmFuc2l0aW9uIHRvIHRoaXMuCiAKICAgICBzdHJ1Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlN
YXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFi
bGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGds
b2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+bV9wcmV2ZW50RXh0ZW5zaW9ucyA9IHRy
dWU7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC01NzIsMTcgKzU3NCwxOSBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydWN0dXJlKgogICAgIHRyYW5zaXRpb24tPm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5t
X29mZnNldDsKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT5tX29mZnNldCwgdHJhbnNpdGlv
bi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgCi0gICAgaWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0
eVRhYmxlKSB7CisgICAgaWYgKHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpKSB7CiAgICAgICAg
IHN0cnVjdHVyZS0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgICAgICBpZiAoc3RydWN0
dXJlLT5tX2lzUGlubmVkUHJvcGVydHlUYWJsZSkKLSAgICAgICAgICAgIHRyYW5zaXRpb24tPm1f
cHJvcGVydHlUYWJsZSA9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5jb3B5KGdsb2JhbERh
dGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgKyAxKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0g
c3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUucmVsZWFzZSgpOworICAgICAgICAgICAgdHJhbnNp
dGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1
cmUtPnByb3BlcnR5VGFibGUoKS0+Y29weShnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1
cmUtPnByb3BlcnR5VGFibGUoKS0+c2l6ZSgpICsgMSkpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHRyYW5zaXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNp
dGlvbiwgc3RydWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOworICAgICAgICAgICAgc3Ry
dWN0dXJlLT5wcm9wZXJ0eVRhYmxlKCkuY2xlYXIoKTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkKICAgICAgICAgICAgIHRyYW5z
aXRpb24tPm1hdGVyaWFsaXplUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFwKCk7CisgICAgICAgICAg
ICB0cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICB9CiAgICAg
CiAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQoZ2xvYmFsRGF0YSwgdHJhbnNp
dGlvbik7CkBAIC01OTcsMTEgKzYwMSwxMSBAQCBib29sIFN0cnVjdHVyZTo6aXNTZWFsZWQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgaWYgKCFtX3By
b3BlcnR5VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxl
LT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Byb3Bl
cnR5VGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICBQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOworICAgIGZvciAoUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewogICAgICAgICBpZiAoKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250
RGVsZXRlKSAhPSBEb250RGVsZXRlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
QEAgLTYxNSwxMSArNjE5LDExIEBAIGJvb2wgU3RydWN0dXJlOjppc0Zyb3plbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICBpZiAoIW1fcHJvcGVydHlU
YWJsZSkKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAK
LSAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBtX3Byb3BlcnR5VGFibGUtPmVuZCgp
OwotICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG1fcHJvcGVydHlUYWJs
ZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CiAgICAgICAgIGlmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RGVsZXRl
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKCEoaXRlci0+YXR0cmli
dXRlcyAmIChSZWFkT25seSB8IEFjY2Vzc29yKSkpCkBAIC02MzMsMTggKzYzNywxOCBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU09iagogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICBB
U1NFUlQoaXNEaWN0aW9uYXJ5KCkpOwogICAgIGlmIChpc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KSB7Ci0gICAgICAgIEFTU0VSVChtX3Byb3BlcnR5VGFibGUpOworICAgICAgICBBU1NFUlQocHJv
cGVydHlUYWJsZSgpKTsKIAotICAgICAgICBzaXplX3QgcHJvcGVydHlDb3VudCA9IG1fcHJvcGVy
dHlUYWJsZS0+c2l6ZSgpOworICAgICAgICBzaXplX3QgcHJvcGVydHlDb3VudCA9IHByb3BlcnR5
VGFibGUoKS0+c2l6ZSgpOwogCiAgICAgICAgIC8vIEhvbGRzIG91ciB2YWx1ZXMgY29tcGFjdGVk
IGJ5IGluc2VydGlvbiBvcmRlci4KICAgICAgICAgVmVjdG9yPEpTVmFsdWU+IHZhbHVlcyhwcm9w
ZXJ0eUNvdW50KTsKIAogICAgICAgICAvLyBDb3BpZXMgb3V0IG91ciB2YWx1ZXMgZnJvbSB0aGVp
ciBoYXNoZWQgbG9jYXRpb25zLCBjb21wYWN0aW5nIHByb3BlcnR5IHRhYmxlIG9mZnNldHMgYXMg
d2UgZ28uCiAgICAgICAgIHVuc2lnbmVkIGkgPSAwOwotICAgICAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBlbmQgPSBtX3Byb3BlcnR5VGFibGUtPmVuZCgpOworICAgICAgICBQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwogICAgICAgICBtX29m
ZnNldCA9IGludmFsaWRPZmZzZXQ7Ci0gICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0
b3IgaXRlciA9IG1fcHJvcGVydHlUYWJsZS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwg
KytpKSB7CisgICAgICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3Bl
cnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlciwgKytpKSB7CiAgICAgICAg
ICAgICB2YWx1ZXNbaV0gPSBvYmplY3QtPmdldERpcmVjdChpdGVyLT5vZmZzZXQpOwogICAgICAg
ICAgICAgbV9vZmZzZXQgPSBpdGVyLT5vZmZzZXQgPSBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihp
LCBtX2lubGluZUNhcGFjaXR5KTsKICAgICAgICAgfQpAQCAtNjUzLDcgKzY1Nyw3IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIEpTT2JqCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcm9w
ZXJ0eUNvdW50OyBpKyspCiAgICAgICAgICAgICBvYmplY3QtPnB1dERpcmVjdChnbG9iYWxEYXRh
LCBvZmZzZXRGb3JQcm9wZXJ0eU51bWJlcihpLCBtX2lubGluZUNhcGFjaXR5KSwgdmFsdWVzW2ld
KTsKIAotICAgICAgICBtX3Byb3BlcnR5VGFibGUtPmNsZWFyRGVsZXRlZE9mZnNldHMoKTsKKyAg
ICAgICAgcHJvcGVydHlUYWJsZSgpLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CiAgICAgICAgIGNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICB9CiAKQEAgLTY4OCw3ICs2OTIsNyBAQCBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYQogCiB2b2lkIFN0cnVjdHVyZTo6cGluKCkKIHsKLSAgICBBU1NF
UlQobV9wcm9wZXJ0eVRhYmxlKTsKKyAgICBBU1NFUlQocHJvcGVydHlUYWJsZSgpKTsKICAgICBt
X2lzUGlubmVkUHJvcGVydHlUYWJsZSA9IHRydWU7CiAgICAgY2xlYXJQcmV2aW91c0lEKCk7CiAg
ICAgbV9uYW1lSW5QcmV2aW91cy5jbGVhcigpOwpAQCAtNzM3LDE0ICs3NDEsMTggQEAgaW5saW5l
IHZvaWQgU3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KCkKIAogI2VuZGlmCiAKLVBhc3NPd25Q
dHI8UHJvcGVydHlUYWJsZT4gU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSogb3duZXIpCitQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1
cmU6OmNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8gbmV3IFBy
b3BlcnR5VGFibGUoZ2xvYmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDogMCk7Cisg
ICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBQ
cm9wZXJ0eVRhYmxlOjpjbG9uZShnbG9iYWxEYXRhLCBvd25lciwgKnByb3BlcnR5VGFibGUoKS5n
ZXQoKSk7CiB9CiAKLVBhc3NPd25QdHI8UHJvcGVydHlUYWJsZT4gU3RydWN0dXJlOjpjb3B5UHJv
cGVydHlUYWJsZUZvclBpbm5pbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUq
IG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpjb3B5UHJvcGVydHlUYWJsZUZvclBp
bm5pbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQogewotICAg
IHJldHVybiBhZG9wdFB0cihtX3Byb3BlcnR5VGFibGUgPyBuZXcgUHJvcGVydHlUYWJsZShnbG9i
YWxEYXRhLCBvd25lciwgKm1fcHJvcGVydHlUYWJsZSkgOiBuZXcgUHJvcGVydHlUYWJsZShudW1i
ZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpKTsKKyAg
ICBpZiAocHJvcGVydHlUYWJsZSgpKQorICAgICAgICByZXR1cm4gUHJvcGVydHlUYWJsZTo6Y2xv
bmUoZ2xvYmFsRGF0YSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0KCkpOworICAgIHJldHVy
biBQcm9wZXJ0eVRhYmxlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxhc3RP
ZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIH0KIAogUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpnZXQoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCYgYXR0cmlidXRlcywgSlNDZWxsKiYgc3BlY2lmaWNWYWx1ZSkK
QEAgLTc1MiwxMCArNzYwLDEwIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtCiAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKIAogICAgIG1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICBpZiAoIW1fcHJvcGVydHlU
YWJsZSkKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGludmFsaWRP
ZmZzZXQ7CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IG1fcHJvcGVydHlUYWJsZS0+
ZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpLmZpcnN0OworICAgIFByb3BlcnR5TWFwRW50cnkqIGVu
dHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHByb3BlcnR5TmFtZS51aWQoKSkuZmlyc3Q7CiAg
ICAgaWYgKCFlbnRyeSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7CiAKQEAgLTc2Nywx
MCArNzc1LDEwIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtCiBib29sIFN0cnVjdHVyZTo6ZGVz
cGVjaWZ5RnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lKQogewogICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9i
YWxEYXRhKTsKLSAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkKKyAgICBpZiAoIXByb3BlcnR5VGFi
bGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50
cnkgPSBtX3Byb3BlcnR5VGFibGUtPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKKyAg
ICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChwcm9wZXJ0
eU5hbWUudWlkKCkpLmZpcnN0OwogICAgIGlmICghZW50cnkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIApAQCAtNzgyLDExICs3OTAsMTEgQEAgYm9vbCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3BlcnQKIHZvaWQg
U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQogewogICAgIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsK
LSAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9wcm9w
ZXJ0eVRhYmxlLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIg
PSBtX3Byb3BlcnR5VGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCisgICAgUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKKyAgICBm
b3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2lu
KCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpCiAgICAgICAgIGl0ZXItPnNwZWNpZmljVmFsdWUuY2xl
YXIoKTsKIH0KIApAQCAtODAwLDEyICs4MDgsMTIgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpwdXRTcGVjaWZpY1ZhbHVlKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW0K
IAogICAgIFN0cmluZ0ltcGwqIHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKIAotICAgIGlmICgh
bV9wcm9wZXJ0eVRhYmxlKQotICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgIGlmICgh
cHJvcGVydHlUYWJsZSgpKQorICAgICAgICBjcmVhdGVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsK
IAotICAgIFByb3BlcnR5T2Zmc2V0IG5ld09mZnNldCA9IG1fcHJvcGVydHlUYWJsZS0+bmV4dE9m
ZnNldChtX2lubGluZUNhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBw
cm9wZXJ0eVRhYmxlKCktPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKLSAgICBtX3By
b3BlcnR5VGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KGdsb2JhbERhdGEsIHRoaXMsIHJlcCwg
bmV3T2Zmc2V0LCBhdHRyaWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSwgbV9vZmZzZXQsIFByb3BlcnR5
VGFibGU6OlByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmFk
ZChQcm9wZXJ0eU1hcEVudHJ5KGdsb2JhbERhdGEsIHRoaXMsIHJlcCwgbmV3T2Zmc2V0LCBhdHRy
aWJ1dGVzLCBzcGVjaWZpY1ZhbHVlKSwgbV9vZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5
T2Zmc2V0TWF5Q2hhbmdlKTsKICAgICAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgcmV0
dXJuIG5ld09mZnNldDsKQEAgLTgxNyw0MCArODI1LDQwIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiAKICAgICBTdHJpbmdJbXBs
KiByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKLSAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkK
KyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGludmFsaWRPZmZzZXQ7
CiAKLSAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0aW9uID0gbV9wcm9wZXJ0
eVRhYmxlLT5maW5kKHJlcCk7CisgICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3Np
dGlvbiA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChyZXApOwogICAgIGlmICghcG9zaXRpb24uZmly
c3QpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCiAgICAgUHJvcGVydHlPZmZzZXQg
b2Zmc2V0ID0gcG9zaXRpb24uZmlyc3QtPm9mZnNldDsKIAotICAgIG1fcHJvcGVydHlUYWJsZS0+
cmVtb3ZlKHBvc2l0aW9uKTsKLSAgICBtX3Byb3BlcnR5VGFibGUtPmFkZERlbGV0ZWRPZmZzZXQo
b2Zmc2V0KTsKKyAgICBwcm9wZXJ0eVRhYmxlKCktPnJlbW92ZShwb3NpdGlvbik7CisgICAgcHJv
cGVydHlUYWJsZSgpLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7CiAKICAgICBjaGVja0NvbnNp
c3RlbmN5KCk7CiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBTdHJ1Y3R1cmU6OmNyZWF0
ZVByb3BlcnR5TWFwKHVuc2lnbmVkIGNhcGFjaXR5KQordm9pZCBTdHJ1Y3R1cmU6OmNyZWF0ZVBy
b3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgY2FwYWNpdHkpCiB7
Ci0gICAgQVNTRVJUKCFtX3Byb3BlcnR5VGFibGUpOworICAgIEFTU0VSVCghcHJvcGVydHlUYWJs
ZSgpKTsKIAogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBtX3Byb3BlcnR5VGFibGUgPSBh
ZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShjYXBhY2l0eSkpOworICAgIHByb3BlcnR5VGFibGUo
KS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgUHJvcGVydHlUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEs
IGNhcGFjaXR5KSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpnZXRQcm9wZXJ0eU5hbWVzRnJvbVN0
cnVjdHVyZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZUFycmF5JiBwcm9w
ZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKIHsKICAgICBtYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgaWYgKCFtX3Byb3BlcnR5VGFibGUp
CisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGJvb2wg
a25vd25VbmlxdWUgPSAhcHJvcGVydHlOYW1lcy5zaXplKCk7CiAKLSAgICBQcm9wZXJ0eVRhYmxl
OjppdGVyYXRvciBlbmQgPSBtX3Byb3BlcnR5VGFibGUtPmVuZCgpOwotICAgIGZvciAoUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IG1fcHJvcGVydHlUYWJsZS0+YmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgeworICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3Bl
cnR5VGFibGUoKS0+ZW5kKCk7CisgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVy
ID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CiAgICAg
ICAgIEFTU0VSVChtX2hhc05vbkVudW1lcmFibGVQcm9wZXJ0aWVzIHx8ICEoaXRlci0+YXR0cmli
dXRlcyAmIERvbnRFbnVtKSk7CiAgICAgICAgIGlmIChpdGVyLT5rZXktPmlzSWRlbnRpZmllcigp
ICYmICghKGl0ZXItPmF0dHJpYnV0ZXMgJiBEb250RW51bSkgfHwgbW9kZSA9PSBJbmNsdWRlRG9u
dEVudW1Qcm9wZXJ0aWVzKSkgewogICAgICAgICAgICAgaWYgKGtub3duVW5pcXVlKQpAQCAtODgy
LDExICs4OTAsMTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB9CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fcHJldmlvdXNPclJhcmVEYXRhKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09i
amVjdC0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cyk7Ci0gICAgaWYgKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZSkgewotICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSB0
aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUtPmVuZCgpOwotICAgICAgICBmb3IgKFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIHB0ciA9IHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZS0+YmVnaW4o
KTsgcHRyICE9IGVuZDsgKytwdHIpCi0gICAgICAgICAgICB2aXNpdG9yLmFwcGVuZCgmcHRyLT5z
cGVjaWZpY1ZhbHVlKTsKLSAgICB9CisKKyAgICBpZiAodGhpc09iamVjdC0+bV9pc1Bpbm5lZFBy
b3BlcnR5VGFibGUpIHsKKyAgICAgICAgQVNTRVJUKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJs
ZVVuc2FmZSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3Byb3BlcnR5
VGFibGVVbnNhZmUpOworICAgIH0gZWxzZSBpZiAodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxl
VW5zYWZlKQorICAgICAgICB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUuY2xlYXIo
KTsKIH0KIAogYm9vbCBTdHJ1Y3R1cmU6OnByb3RvdHlwZUNoYWluTWF5SW50ZXJjZXB0U3RvcmVU
byhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCkBA
IC05NzcsMTcgKzk4NiwxNyBAQCB2b2lkIFByb3BlcnR5VGFibGU6OmNoZWNrQ29uc2lzdGVuY3ko
KQogCiB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCiB7Ci0gICAgaWYgKCFtX3By
b3BlcnR5VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmICghbV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcykgewotICAgICAgICBQcm9w
ZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBtX3Byb3BlcnR5VGFibGUtPmVuZCgpOwotICAgICAg
ICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Byb3BlcnR5VGFibGUtPmJl
Z2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRl
cmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKKyAgICAgICAgZm9yIChQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9
IGVuZDsgKytpdGVyKSB7CiAgICAgICAgICAgICBBU1NFUlQoIShpdGVyLT5hdHRyaWJ1dGVzICYg
RG9udEVudW0pKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIG1fcHJvcGVydHlUYWJsZS0+Y2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgIHByb3BlcnR5VGFibGUoKS0+Y2hlY2tDb25zaXN0ZW5jeSgp
OwogfQogCiAjZW5kaWYgLy8gRE9fUFJPUEVSVFlNQVBfQ09OU1RFTkNZX0NIRUNLCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCmluZGV4IDIzNTljNmMuLjUwZTcwN2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCkBAIC0zMSwxNiAr
MzEsMTUgQEAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiSlNDZWxsLmgiCiAj
aW5jbHVkZSAiSlNUeXBlLmgiCi0jaW5jbHVkZSAiUHJvcGVydHlNYXBIYXNoVGFibGUuaCIKICNp
bmNsdWRlICJQcm9wZXJ0eU5hbWUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgor
I2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAjaW5jbHVkZSAiUHJvdGVjdC5oIgogI2luY2x1
ZGUgIlN0cnVjdHVyZVJhcmVEYXRhLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmgiCiAjaW5jbHVkZSAiSlNUeXBlSW5mby5oIgogI2luY2x1ZGUgIldhdGNocG9pbnQuaCIK
ICNpbmNsdWRlICJXZWFrLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgpAQCAtNTEsNiArNTAsNyBAQCBuYW1lc3BhY2UgSlND
IHsKIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5
OwogY2xhc3MgUHJvcGVydHlOYW1lQXJyYXlEYXRhOworY2xhc3MgUHJvcGVydHlUYWJsZTsKIGNs
YXNzIFN0cnVjdHVyZUNoYWluOwogY2xhc3MgU2xvdFZpc2l0b3I7CiBjbGFzcyBKU1N0cmluZzsK
QEAgLTEwOCwyNSArMTA4LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNGcm96ZW4oSlNHbG9iYWxE
YXRhJik7CiAgICAgYm9vbCBpc0V4dGVuc2libGUoKSBjb25zdCB7IHJldHVybiAhbV9wcmV2ZW50
RXh0ZW5zaW9uczsgfQogICAgIGJvb2wgZGlkVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlkVHJhbnNpdGlvbjsgfQotICAgIGJvb2wgcHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCkK
LSAgICB7Ci0gICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICAgICAgICAgIAot
ICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXplKCkpOwot
ICAgICAgICAgICAgCi0gICAgICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjdXJyZW50U2l6ZSA9IG51bWJlck9mT3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zm
c2V0KG1fb2Zmc2V0KTsKLSAgICAgICAgICAgIEFTU0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49
IGN1cnJlbnRTaXplKTsKLSAgICAgICAgICAgIHJldHVybiBjdXJyZW50U2l6ZSA9PSBvdXRPZkxp
bmVDYXBhY2l0eSgpOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgQVNTRVJUKHRv
dGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VT
aXplKCkpOwotICAgICAgICBpZiAobV9wcm9wZXJ0eVRhYmxlLT5oYXNEZWxldGVkT2Zmc2V0KCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgQVNTRVJU
KHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkpOwotICAg
ICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlLT5zaXplKCkgPT0gdG90YWxTdG9yYWdlQ2FwYWNp
dHkoKTsKLSAgICB9CisgICAgYm9vbCBwdXRXaWxsR3Jvd091dE9mTGluZVN0b3JhZ2UoKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3Qgc3VnZ2VzdGVkTmV3T3V0T2ZMaW5lU3RvcmFnZUNh
cGFjaXR5KCk7IAogCiAgICAgU3RydWN0dXJlKiBmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZShK
U0dsb2JhbERhdGEmLCBKU09iamVjdCopOwpAQCAtMzgyLDI3ICszNjQsMjkgQEAgcHJpdmF0ZToK
ICAgICBQcm9wZXJ0eU9mZnNldCBwdXRTcGVjaWZpY1ZhbHVlKEpTR2xvYmFsRGF0YSYsIFByb3Bl
cnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgSlNDZWxsKiBzcGVjaWZpY1ZhbHVlKTsKICAg
ICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKIAotICAgIHZvaWQgY3JlYXRl
UHJvcGVydHlNYXAodW5zaWduZWQga2V5Q291bnQgPSAwKTsKKyAgICB2b2lkIGNyZWF0ZVByb3Bl
cnR5TWFwKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CiAgICAgdm9pZCBj
aGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBib29sIGRlc3BlY2lmeUZ1bmN0aW9uKEpTR2xvYmFs
RGF0YSYsIFByb3BlcnR5TmFtZSk7CiAgICAgdm9pZCBkZXNwZWNpZnlBbGxGdW5jdGlvbnMoSlNH
bG9iYWxEYXRhJik7CiAKLSAgICBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IGNvcHlQcm9wZXJ0
eVRhYmxlKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwotICAgIFBhc3NPd25QdHI8
UHJvcGVydHlUYWJsZT4gY29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYs
IFN0cnVjdHVyZSogb3duZXIpOworICAgIFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgcHJv
cGVydHlUYWJsZSgpOworCisgICAgUHJvcGVydHlUYWJsZSogY29weVByb3BlcnR5VGFibGUoSlNH
bG9iYWxEYXRhJiwgU3RydWN0dXJlKiBvd25lcik7CisgICAgUHJvcGVydHlUYWJsZSogY29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOwog
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2Jh
bERhdGEmKTsKICAgICB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCkt
PmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgICAgICBBU1NFUlQoY2hlY2tPZmZzZXRDb25z
aXN0ZW5jeSgpKTsKLSAgICAgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUgJiYgcHJldmlvdXNJRCgp
KQorICAgICAgICBpZiAoIXByb3BlcnR5VGFibGUoKSAmJiBwcmV2aW91c0lEKCkpCiAgICAgICAg
ICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgIH0KICAgICB2b2lk
IG1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeUZvclBpbm5pbmcoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0lu
Zm8oKSA9PSAmc19pbmZvKTsKICAgICAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwotICAg
ICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkKKyAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkp
CiAgICAgICAgICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgIH0K
IApAQCAtNDQ1LDE5ICs0MjksNyBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8U3RydWN0dXJlUmFyZURhdGEqPihtX3ByZXZpb3VzT3JSYXJlRGF0YS5nZXQoKSk7CiAgICAg
fQogICAgICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIGJvb2wgY2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkgewotICAgICAg
ICAgICAgQVNTRVJUKCFtX2lzUGlubmVkUHJvcGVydHlUYWJsZSk7Ci0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIFJFTEVBU0VfQVNTRVJU
KG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSA9
PSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7Ci0gICAgICAgIHVuc2ln
bmVkIHRvdGFsU2l6ZSA9IG1fcHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6ZSgpOwot
ICAgICAgICBSRUxFQVNFX0FTU0VSVCgodG90YWxTaXplIDwgaW5saW5lQ2FwYWNpdHkoKSA/IDAg
OiB0b3RhbFNpemUgLSBpbmxpbmVDYXBhY2l0eSgpKSA9PSBudW1iZXJPZk91dE9mTGluZVNsb3Rz
Rm9yTGFzdE9mZnNldChtX29mZnNldCkpOwotICAgICAgICAgICAgCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIH0KKyAgICBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKSBjb25zdDsKIAog
ICAgIHZvaWQgYWxsb2NhdGVSYXJlRGF0YShKU0dsb2JhbERhdGEmKTsKICAgICB2b2lkIGNsb25l
UmFyZURhdGFGcm9tKEpTR2xvYmFsRGF0YSYsIGNvbnN0IFN0cnVjdHVyZSopOwpAQCAtNDgyLDcg
KzQ1NCw4IEBAIHByaXZhdGU6CiAKICAgICBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgbV90cmFu
c2l0aW9uVGFibGU7CiAKLSAgICBPd25QdHI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxl
OworICAgIC8vIFNob3VsZCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHByb3BlcnR5VGFibGUoKS4KKyAg
ICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCiAg
ICAgbXV0YWJsZSBJbmxpbmVXYXRjaHBvaW50U2V0IG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQ7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlu
bGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMu
aAppbmRleCA1YmZkMmQ1Li41MjJlODI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCkBAIC0yNiw2ICsyNiw3IEBACiAjaWZuZGVmIFN0
cnVjdHVyZUlubGluZXNfaAogI2RlZmluZSBTdHJ1Y3R1cmVJbmxpbmVzX2gKIAorI2luY2x1ZGUg
IlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNjEsMTAgKzYyLDEwIEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OmdldChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wCiB7
CiAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgaWYgKCFt
X3Byb3BlcnR5VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVy
biBpbnZhbGlkT2Zmc2V0OwogCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3Bl
cnR5VGFibGUtPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKKyAgICBQcm9wZXJ0eU1h
cEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUudWlkKCkp
LmZpcnN0OwogICAgIHJldHVybiBlbnRyeSA/IGVudHJ5LT5vZmZzZXQgOiBpbnZhbGlkT2Zmc2V0
OwogfQogCkBAIC03MiwxMCArNzMsMTAgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgY29uc3QgV1RGOjpTdHJpbmcKIHsKICAg
ICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgIG1hdGVy
aWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICBpZiAoIW1fcHJv
cGVydHlUYWJsZSkKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGlu
dmFsaWRPZmZzZXQ7CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IG1fcHJvcGVydHlU
YWJsZS0+ZmluZFdpdGhTdHJpbmcobmFtZS5pbXBsKCkpLmZpcnN0OworICAgIFByb3BlcnR5TWFw
RW50cnkqIGVudHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5maW5kV2l0aFN0cmluZyhuYW1lLmltcGwo
KSkuZmlyc3Q7CiAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZz
ZXQ7CiB9CiAgICAgCkBAIC0xNzksNiArMTgwLDQ4IEBAIGlubGluZSBib29sIFN0cnVjdHVyZTo6
aXNWYWxpZChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZUNoYWluKiBjYWNoZWRQcm90b3R5cGVD
CiAgICAgcmV0dXJuIGlzVmFsaWQoZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBjYWNoZWRQ
cm90b3R5cGVDaGFpbik7CiB9CiAKK2lubGluZSBib29sIFN0cnVjdHVyZTo6cHV0V2lsbEdyb3dP
dXRPZkxpbmVTdG9yYWdlKCkKK3sKKyAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CisKKyAg
ICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBvdXRPZkxpbmVTaXplKCkpOworCisgICAg
aWYgKCFwcm9wZXJ0eVRhYmxlKCkpIHsKKyAgICAgICAgdW5zaWduZWQgY3VycmVudFNpemUgPSBu
dW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCk7CisgICAgICAgIEFT
U0VSVChvdXRPZkxpbmVDYXBhY2l0eSgpID49IGN1cnJlbnRTaXplKTsKKyAgICAgICAgcmV0dXJu
IGN1cnJlbnRTaXplID09IG91dE9mTGluZUNhcGFjaXR5KCk7CisgICAgfQorCisgICAgQVNTRVJU
KHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgPj0gcHJvcGVydHlUYWJsZSgpLT5wcm9wZXJ0eVN0b3Jh
Z2VTaXplKCkpOworICAgIGlmIChwcm9wZXJ0eVRhYmxlKCktPmhhc0RlbGV0ZWRPZmZzZXQoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKHRvdGFsU3RvcmFnZUNhcGFjaXR5
KCkgPj0gcHJvcGVydHlUYWJsZSgpLT5zaXplKCkpOworICAgIHJldHVybiBwcm9wZXJ0eVRhYmxl
KCktPnNpemUoKSA9PSB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpOworfQorCitBTFdBWVNfSU5MSU5F
IFdyaXRlQmFycmllcjxQcm9wZXJ0eVRhYmxlPiYgU3RydWN0dXJlOjpwcm9wZXJ0eVRhYmxlKCkK
K3sKKyAgICBBU1NFUlQoIWdsb2JhbE9iamVjdCgpIHx8ICFnbG9iYWxPYmplY3QoKS0+Z2xvYmFs
RGF0YSgpLmhlYXAuaXNCdXN5KCkpOworICAgIHJldHVybiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7
Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OmNoZWNrT2Zmc2V0Q29uc2lzdGVu
Y3koKSBjb25zdAoreworICAgIFByb3BlcnR5VGFibGUqIHByb3BlcnR5VGFibGUgPSBtX3Byb3Bl
cnR5VGFibGVVbnNhZmUuZ2V0KCk7CisKKyAgICBpZiAoIXByb3BlcnR5VGFibGUpIHsKKyAgICAg
ICAgQVNTRVJUKCFtX2lzUGlubmVkUHJvcGVydHlUYWJsZSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUKG51bWJlck9mU2xvdHNGb3JMYXN0T2Zmc2V0
KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSA9PSBwcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0
b3JhZ2VTaXplKCkpOworICAgIHVuc2lnbmVkIHRvdGFsU2l6ZSA9IHByb3BlcnR5VGFibGUtPnBy
b3BlcnR5U3RvcmFnZVNpemUoKTsKKyAgICBSRUxFQVNFX0FTU0VSVCgodG90YWxTaXplIDwgaW5s
aW5lQ2FwYWNpdHkoKSA/IDAgOiB0b3RhbFNpemUgLSBpbmxpbmVDYXBhY2l0eSgpKSA9PSBudW1i
ZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCkpOworCisgICAgcmV0dXJu
IHRydWU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gU3RydWN0dXJlSW5s
aW5lc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Xcml0ZUJh
cnJpZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oCmlu
ZGV4IGVmOGMzYWYuLmE2ZDk5OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1dyaXRlQmFycmllci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1dyaXRlQmFycmllci5oCkBAIC05OSw5ICs5OSwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgVCog
Z2V0KCkgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChtX2NlbGwpCi0gICAgICAgICAgICB2YWxp
ZGF0ZUNlbGwobV9jZWxsKTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KHN0
YXRpY19jYXN0PHZvaWQqPihtX2NlbGwpKTsKKyAgICAgICAgLy8gQ29weSBjZWxsIHRvIGEgbG9j
YWwgdG8gYXZvaWQgbXVsdGlwbGUtcmVhZCBpc3N1ZXMuIFNlZSA8aHR0cDovL3dlYmtpdC5vcmcv
Yi8xMTA4NTQ+KQorICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX2NlbGw7CisgICAgICAgIGlmIChj
ZWxsKQorICAgICAgICAgICAgdmFsaWRhdGVDZWxsKGNlbGwpOworICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8dm9pZCo+KGNlbGwpKTsKICAgICB9CiAKICAg
ICBUKiBvcGVyYXRvciooKSBjb25zdAo=
</data>
<flag name="review"
          id="212224"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191323</attachid>
            <date>2013-03-04 15:25:42 -0800</date>
            <delta_ts>2013-03-04 15:31:34 -0800</delta_ts>
            <desc>Patch for lunar landing</desc>
            <filename>land-110854.diff</filename>
            <type>text/plain</type>
            <size>53482</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggMzYwZTBkZC4uNzZhNTE3MSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTAzIEBACiAyMDEzLTAzLTA0ICBB
bmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAorICAgICAgICBVbnVzZWQgU3RydWN0
dXJlIHByb3BlcnR5IHRhYmxlcyB3YXN0ZSAxNE1CIG9uIE1lbWJ1c3Rlci4KKyAgICAgICAgPGh0
dHA6Ly93ZWJraXQub3JnL2IvMTEwODU0PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyOTIx
MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmYgR2FyZW4uCisKKyAgICAgICAgVHVybiBQ
cm9wZXJ0eVRhYmxlIGludG8gYSBHQyBvYmplY3QgYW5kIGhhdmUgU3RydWN0dXJlIGRyb3AgdW5w
aW5uZWQgdGFibGVzIHdoZW4gbWFya2luZy4KKyAgICAgICAgMTQgTUIgcHJvZ3Jlc3Npb24gb24g
TWVtYnVzdGVyMy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1h
a2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBU
YXJnZXQucHJpOgorCisgICAgICAgICAgICBBZGRlZCBQcm9wZXJ0eVRhYmxlLmNwcC4KKworICAg
ICAgICAqIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpQ
cm9wZXJ0eVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpjbG9u
ZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUpOgorICAgICAg
ICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlU
YWJsZTo6flByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjp2aXNp
dENoaWxkcmVuKToKKworICAgICAgICAgICAgTW92ZWQgbWFya2luZyBvZiBwcm9wZXJ0eSB0YWJs
ZSB2YWx1ZXMgaGVyZSBmcm9tIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbigpLgorCisgICAgICAg
ICogcnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVyQmFz
ZTo6Z2V0KToKKworICAgICAgICAgICAgTW92ZSBtX2NlbGwgdG8gYSBsb2NhbCBiZWZvcmUgdXNp
bmcgaXQgbXVsdGlwbGUgdGltZXMuIFRoaXMgYXZvaWRzIGEgbXVsdGlwbGUtYWNjZXNzIHJhY2Ug
d2hlbgorICAgICAgICAgICAgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkgaXMg
dXNlZCBpbiBhc3NlcnRpb25zIG9uIHRoZSBtYWluIHRocmVhZCB3aGlsZSBhIG1hcmtpbmcgdGhy
ZWFkCisgICAgICAgICAgICB6YXBzIHRoZSBwcm9wZXJ0eSB0YWJsZS4KKworICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlh
bGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKToKKyAgICAgICAgKiBydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0eVRh
YmxlKToKKworICAgICAgICAgICAgQWRkZWQgYSBnZXR0ZXIgZm9yIHRoZSBTdHJ1Y3R1cmUncyBQ
cm9wZXJ0eVRhYmxlIHRoYXQgQVNTRVJUcyBHQyBjdXJyZW50bHkgaXNuJ3QgYWN0aXZlLgorICAg
ICAgICAgICAgQmVjYXVzZSBHQyBjYW4gemFwIGFuIHVucGlubmVkIHByb3BlcnR5IHRhYmxlIGF0
IGFueSB0aW1lLCBpdCdzIG5vdCBlbnRpcmVseSBzYWZlIHRvIGFjY2VzcyBpdC4KKyAgICAgICAg
ICAgIFJlbmFtZWQgdGhlIHZhcmlhYmxlIGl0c2VsZiB0byBtX3Byb3BlcnR5VGFibGVVbnNhZmUg
dG8gZm9yY2UgY2FsbCBzaXRlcyBpbnRvIGV4cGxhaW5pbmcgdGhlbXNlbHZlcy4KKworICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAgICAg
IE1vdmVkIHRoZXNlIG91dCBvZiBTdHJ1Y3R1cmUuaCB0byBicmVhayBoZWFkZXIgZGVwZW5kZW5j
eSBjeWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICogcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRy
ZW4pOgorCisgICAgICAgICAgICBOdWxsIG91dCBtX3Byb3BlcnR5VGFibGUgaWYgdGhlIHRhYmxl
IGlzIHVucGlubmVkLiBUaGlzJ2xsIGNhdXNlIHRoZSB0YWJsZSB0byBnZXQgR0MnZC4KKworICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6CisK
KyAgICAgICAgICAgIEFkZCBhIGdsb2JhbCBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLgorCisgICAg
ICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoUHJvcGVydHlU
YWJsZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmNvcHkpOgorCisgICAgICAgICAgICBNYWtlIFBy
b3BlcnR5VGFibGUgYSBHQyBvYmplY3QuCisKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MpOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbik6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpk
ZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0
dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvRGlj
dGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0
aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6aXNTZWFsZWQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlzRnJvemVu
KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cGluKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
Ojpjb3B5UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXQpOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1
cmU6OnB1dFNwZWNpZmljVmFsdWUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXApOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KToKKworMjAxMy0wMy0wNCAgQW5kcmVh
cyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHNpbXBsZSB2ZWN0b3Ig
dHJhaXRzIGZvciBKU0M6OklkZW50aWZpZXIuCiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9yZy9i
LzExMTMyMz4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRl
eCBlOGExZjJiLi41MWQ1YTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbQpAQCAtNzIyLDYgKzcyMiw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmggXAogCVNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAgXAogCVNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUHJvdG90eXBlTWFwLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvdG90eXBlTWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5
U3RvcmFnZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS5neXBpIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkKaW5k
ZXggMGE5ZmIxNC4uYzI3ZTdkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLmd5cGkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLmd5cGkKQEAgLTc1OCw2ICs3NTgsNyBAQAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJvcGVy
dHlPZmZzZXQuaCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwJywKICAg
ICAgICAgICAgICdydW50aW1lL1Byb3BlcnR5U2xvdC5oJywKKyAgICAgICAgICAgICdydW50aW1l
L1Byb3BlcnR5VGFibGUuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL1Byb3BlcnR5U3RvcmFn
ZS5oJywKICAgICAgICAgICAgICdydW50aW1lL1Byb3RlY3QuaCcsCiAgICAgICAgICAgICAncnVu
dGltZS9Qcm90b3R5cGVNYXAuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ogYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCmluZGV4IDMyNWU3MjUuLjBmYTkxNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagpAQCAtMzA1LDYgKzMwNSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxydW50aW1lXFByb3BlcnR5RGVzY3JpcHRvci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWVBcnJheS5jcHAiIC8+DQogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVNsb3QuY3BwIiAvPg0KKyAgICA8Q2xDb21w
aWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlUYWJsZS5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm90b3R5cGVNYXAuY3BwIiAvPg0KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwLmNwcCIgLz4NCiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENhY2hlLmNwcCIgLz4NCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IGY1MGQzNmMuLmVhYTM5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCkBAIC03MDMsNiArNzAzLDcgQEAKIAkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2
IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBN0ZCNjBBMzEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNj
cmlwdG9yLmNwcCAqLzsgfTsKIAkJQTdGQjYxMDAxMDQwQzM4QjAwMTdBMjg2IC8qIFByb3BlcnR5
RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQTdGQjYwNEIxMDNGNUVBQjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4QTQ3NDhFMTUx
QTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3NDhEMTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSAq
LzsgfTsKKwkJQURFMzlGRkYxNkREMTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQxQ0YwNjgxNkRD
QUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovOyB9OwogCQlCQzAyRTkwRDBFMTgz
OURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDUwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9y
Q29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQkMwMkU5MEYwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9y
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQzAyRTkwNzBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzAyRTkxMTBFMTgzOURC
MDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDkwRTE4MzlEQjAwMEY5Mjk3IC8qIE5h
dGl2ZUVycm9yQ29uc3RydWN0b3IuaCAqLzsgfTsKQEAgLTE2MTgsNiArMTYxOSw3IEBACiAJCUE4
QTQ3NDhEMTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJXVEYuYTsg
c291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQThFODk0MzEwQ0QwNjAyNDAw
MzY3MTc5IC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcxNzkgLyogSlNHbG9iYWxPYmpl
Y3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxPYmplY3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIzIC8q
IFByb3BlcnR5VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UHJvcGVydHlUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDIxQkYy
MTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQueGNjb25maWc7IHBhdGggPSBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkU5MDQwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29uc3Ry
dWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXJyb3JDb25z
dHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDJFOTA1MEUxODM5
REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEVycm9yQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI1MDYsNiArMjUwOCw3IEBACiAJCQkJNjU2MjFFNkIwODlFODU5NzAwNzYwRjM1IC8qIFBy
b3BlcnR5U2xvdC5jcHAgKi8sCiAJCQkJNjU2MjFFNkMwODlFODU5NzAwNzYwRjM1IC8qIFByb3Bl
cnR5U2xvdC5oICovLAogCQkJCTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0
b3JhZ2UuaCAqLywKKwkJCQlBRDFDRjA2ODE2RENBQjJEMDBCOTcxMjMgLyogUHJvcGVydHlUYWJs
ZS5jcHAgKi8sCiAJCQkJNjVDMDJGQkIwNjM3NDYyQTAwM0U3RUU2IC8qIFByb3RlY3QuaCAqLywK
IAkJCQkxNEQ4NDRBMjE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBlTWFwLmNwcCAqLywKIAkJ
CQkxNEQ4NDRBMzE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBlTWFwLmggKi8sCkBAIC00MDIz
LDYgKzQwMjYsNyBAQAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0
aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzYxNkMxREIw
RjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3Np
bmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1RhcmdldC5w
cmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQppbmRleCA1ODE0MGY2Li42NjA4
YTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpAQCAtMjk4LDYgKzI5OCw3IEBAIFNPVVJD
RVMgKz0gXAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBcCiAgICAgcnVudGlt
ZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVydHlTbG90LmNwcCBc
CisgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBcCiAgICAgcnVudGltZS9Qcm90b3R5cGVN
YXAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVudGlt
ZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IGMwNmNmNWMuLjUwOGE4NzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApAQCAtMjMyLDYgKzIz
Miw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2JhbERh
dGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0cnVj
dHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEV2YWxDb2RlQmxvY2tTdHJ1
Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgq
dGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0
dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJl
KCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0
aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7
CiAgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJpbmdzKCp0aGlzKTsKIAogICAg
IHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50cnlJ
ZGVudGlmaWVyVGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bERhdGEuaAppbmRleCBkYzk4ODFmLi4xODk1YTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbERhdGEuaApAQCAtMjU2LDYgKzI1Niw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFByb2dyYW1Db2RlQmxvY2tT
dHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVCbG9j
a1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNv
ZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJs
ZVN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJsZTsK
ICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAppbmRleCAy
NDIyYzViLi41NGUyOTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUgUHJv
cGVydHlNYXBIYXNoVGFibGVfaAogCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNpbmNs
dWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3
dGYvSGFzaFRhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTg1LDggKzg2
LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIH0KIH07CiAKLWNsYXNzIFByb3Bl
cnR5VGFibGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgUHJvcGVydHlU
YWJsZSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgLy8gVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRp
b24gZm9yICdpdGVyYXRvcicgYW5kICdjb25zdF9pdGVyYXRvcicsCiAgICAgLy8gdXNlZCBmb3Ig
aXRlcmF0aW5nIG92ZXIgdGhlIHRhYmxlIGluIGluc2VydGlvbiBvcmRlci4KQEAgLTEyOSw2ICsx
MjksMTkgQEAgY2xhc3MgUHJvcGVydHlUYWJsZSB7CiAgICAgfTsKIAogcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0
cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJbmZv
IHNfaW5mbzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUg
cHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2Jh
bERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUsIE92
ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKICAgICB0eXBlZGVmIFN0
cmluZ0ltcGwqIEtleVR5cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVudHJ5IFZhbHVlVHlw
ZTsKIApAQCAtMTQyLDkgKzE1NSw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxW
YWx1ZVR5cGUqLCB1bnNpZ25lZD4gZmluZF9pdGVyYXRvcjsKIAogICAgIC8vIENvbnN0cnVjdG9y
IGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3BlcnR5VGFibGUgdG8gY29weSwg
b3IgYm90aC4KLSAgICBleHBsaWNpdCBQcm9wZXJ0eVRhYmxlKHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBjb25zdCBQ
cm9wZXJ0eVRhYmxlJik7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwq
LCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBz
dGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGluaXRp
YWxDYXBhY2l0eSk7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKEpTR2xvYmFsRGF0
YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBzdGF0aWMgUHJv
cGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQg
aW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgflByb3BlcnR5VGFi
bGUoKTsKIAogICAgIC8vIE9yZGVyZWQgaXRlcmF0aW9uIG1ldGhvZHMuCkBAIC0xODEsNyArMTk0
LDcgQEAgcHVibGljOgogICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVydHlPZmZz
ZXQgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAgLy8gQ29weSB0aGlzIFByb3BlcnR5VGFibGUsIGVu
c3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQuCi0gICAg
UGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCogb3du
ZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5KEpTR2xv
YmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CkBAIC0xODksNiArMjAyLDEwIEBA
IHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgorICAgIFByb3BlcnR5VGFibGUoSlNHbG9iYWxE
YXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxlKEpTR2xv
YmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0eVRh
YmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29u
c3QgUHJvcGVydHlUYWJsZSYpOworCiAgICAgUHJvcGVydHlUYWJsZShjb25zdCBQcm9wZXJ0eVRh
YmxlJik7CiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUgaW4g
dGhlIHRhYmxlLCBhbmQgd2hlcmUgd2Uga25vdyBjYXBhY2l0eSB0byBiZSBhdmFpbGFibGUuCiAg
ICAgdm9pZCByZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KTsKQEAgLTIzOSw3MiArMjU2
LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRW1wdHlFbnRyeUluZGV4
ID0gMDsKIH07CiAKLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKHVuc2lnbmVk
IGluaXRpYWxDYXBhY2l0eSkKLSAgICA6IG1faW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShpbml0
aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRleE1hc2sobV9pbmRleFNpemUgLSAxKQotICAgICwg
bV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNpemUo
KSkpKQotICAgICwgbV9rZXlDb3VudCgwKQotICAgICwgbV9kZWxldGVkQ291bnQoMCkKLXsKLSAg
ICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwotfQotCi1pbmxpbmUgUHJvcGVydHlU
YWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCBjb25zdCBQ
cm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXplKG90aGVyLm1faW5kZXhTaXpl
KQotICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCi0gICAgLCBtX2luZGV4KHN0
YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkpCi0gICAgLCBtX2tl
eUNvdW50KG90aGVyLm1fa2V5Q291bnQpCi0gICAgLCBtX2RlbGV0ZWRDb3VudChvdGhlci5tX2Rl
bGV0ZWRDb3VudCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwotCi0g
ICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkpOwotCi0gICAgaXRl
cmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4o
KTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpdGVyLT5rZXktPnJlZigpOwotICAg
ICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkp
OwotICAgIH0KLQotICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgotICAg
IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2Rl
bGV0ZWRPZmZzZXRzLmdldCgpOwotICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQotICAgICAg
ICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4o
Km90aGVyRGVsZXRlZE9mZnNldHMpKTsKLX0KLQotaW5saW5lIFByb3BlcnR5VGFibGU6OlByb3Bl
cnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlhbENh
cGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXplKHNp
emVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRleE1hc2sobV9pbmRl
eFNpemUgLSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJv
ZWRNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQotICAgICwgbV9kZWxl
dGVkQ291bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwotICAg
IEFTU0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlDb3VudCk7Ci0KLSAgICBjb25z
dF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKLSAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0
ZXIgPSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VS
VChjYW5JbnNlcnQoKSk7Ci0gICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKLSAgICAgICAgaXRlci0+
a2V5LT5yZWYoKTsKLSAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5zcGVj
aWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRPZmZz
ZXRzIHZlY3Rvci4KLSAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhlckRlbGV0ZWRPZmZz
ZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKLSAgICBpZiAob3RoZXJEZWxldGVk
T2Zmc2V0cykKLSAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0b3I8
UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7Ci19Ci0KLWlubGluZSBQcm9w
ZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+
ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsr
aXRlcikKLSAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOwotCi0gICAgZmFzdEZyZWUobV9pbmRl
eCk7Ci19Ci0KIGlubGluZSBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBQcm9wZXJ0eVRhYmxlOjpi
ZWdpbigpCiB7CiAgICAgcmV0dXJuIGl0ZXJhdG9yKHNraXBEZWxldGVkRW50cmllcyh0YWJsZSgp
KSk7CkBAIC01MDIsMTUgKzQ1MywxNSBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgUHJvcGVydHlU
YWJsZTo6bmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0eSkKICAgICByZXR1
cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9CiAK
LWlubGluZSBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFByb3BlcnR5VGFibGU6OmNvcHkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBhY2l0
eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCiB7CiAg
ICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwogCiAgICAgLy8gRmFzdCBjYXNl
OyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNpemUgYXMgdGhpcyBv
bmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2ZSByZWhhc2hpbmcgYWxsIGtleXMuCiAg
ICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRleFNpemUpCi0gICAg
ICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25lciwg
KnRoaXMpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFByb3BlcnR5VGFibGUoZ2xvYmFsRGF0
YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcykpOworICAgICAgICByZXR1cm4gUHJvcGVydHlU
YWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICp0aGlzKTsKKyAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcyk7CiB9
CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5VGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZDI2
NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eVRhYmxlLmNwcApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCisKKyNpbmNsdWRlICJKU0NK
U1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gUHJvcGVydHlUYWJsZTo6c19pbmZvID0g
eyAiUHJvcGVydHlUYWJsZSIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUHJvcGVydHlU
YWJsZSkgfTsKKworUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y3JlYXRlKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQoreworICAgIFByb3Bl
cnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlUYWJs
ZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBpbml0aWFsQ2Fw
YWNpdHkpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICByZXR1
cm4gdGFibGU7Cit9CisKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJsZSYg
b3RoZXIpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRhYmxlKGds
b2JhbERhdGEsIG93bmVyLCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJvcGVydHlUYWJsZSogUHJvcGVydHlU
YWJsZTo6Y2xvbmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNp
Z25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQoreworICAg
IFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVy
dHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25l
ciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJvcGVydHlUYWJsZTo6UHJvcGVy
dHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0
eSkKKyAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVTdHJ1
Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2luZGV4U2l6ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlhbENh
cGFjaXR5KSkKKyAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXplIC0gMSkKKyAgICAsIG1faW5k
ZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVyb2VkTWFsbG9jKGRhdGFTaXplKCkpKSkK
KyAgICAsIG1fa2V5Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCit7CisgICAgQVNT
RVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKK30KKworUHJvcGVydHlUYWJsZTo6UHJvcGVy
dHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFBy
b3BlcnR5VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERhdGEu
cHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faW5kZXhTaXplKG90aGVyLm1f
aW5kZXhTaXplKQorICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCisgICAgLCBt
X2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkpCisg
ICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisgICAgLCBtX2RlbGV0ZWRDb3VudChv
dGhlci5tX2RlbGV0ZWRDb3VudCkKK3sKKyAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6
ZSkpOworCisgICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkpOwor
CisgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBpdGVy
ID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBpdGVyLT5rZXktPnJl
ZigpOworICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFs
dWUuZ2V0KCkpOworICAgIH0KKworICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVj
dG9yLgorICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBv
dGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOworICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRz
KQorICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0
eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKK30KKworUHJvcGVydHlUYWJsZTo6UHJv
cGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIHVuc2ln
bmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCisgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdldCgp
KQorICAgICwgbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpCisg
ICAgLCBtX2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCisgICAgLCBtX2luZGV4KHN0YXRpY19j
YXN0PHVuc2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCisgICAgLCBtX2tl
eUNvdW50KDApCisgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQoreworICAgIEFTU0VSVChpc1Bvd2Vy
T2YyKG1faW5kZXhTaXplKSk7CisgICAgQVNTRVJUKGluaXRpYWxDYXBhY2l0eSA+PSBvdGhlci5t
X2tleUNvdW50KTsKKworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmVuZCgpOworICAg
IGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVyLmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKKyAgICAgICAgQVNTRVJUKGNhbkluc2VydCgpKTsKKyAgICAgICAgcmVpbnNlcnQo
Kml0ZXIpOworICAgICAgICBpdGVyLT5rZXktPnJlZigpOworICAgICAgICBIZWFwOjp3cml0ZUJh
cnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIC8v
IENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgorICAgIFZlY3RvcjxQcm9wZXJ0eU9m
ZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgp
OworICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQorICAgICAgICBtX2RlbGV0ZWRPZmZzZXRz
ID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNl
dHMpKTsKK30KKwordm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6On5Q
cm9wZXJ0eVRhYmxlKCk7Cit9CisKK1Byb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCkKK3sK
KyAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0ZXIg
PSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5rZXktPmRlcmVm
KCk7CisKKyAgICBmYXN0RnJlZShtX2luZGV4KTsKK30KKwordm9pZCBQcm9wZXJ0eVRhYmxlOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
UHJvcGVydHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCk7
CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsKKyAg
ICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVzVmlz
aXRDaGlsZHJlbigpKTsKKworICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKKworICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmplY3Qt
PmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0gdGhpc09iamVj
dC0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZw
dHItPnNwZWNpZmljVmFsdWUpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAppbmRleCBiNzljMTA2Li45NzMxNjZmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTEzMSw5ICsxMzEsOSBAQCB2b2lk
IFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKSB7CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKSkgewogICAgICAgICAgICAgKytudW1i
ZXJXaXRoUHJvcGVydHlNYXBzOwotICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXplICs9
IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplSW5NZW1vcnkoKTsKKyAgICAgICAgICAg
IHRvdGFsUHJvcGVydHlNYXBzU2l6ZSArPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+c2l6
ZUluTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzNCw3ICsyMzQsNyBAQCB2b2lk
IFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgQVNTRVJU
KHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKLSAgICBBU1NFUlQoIW1fcHJv
cGVydHlUYWJsZSk7CisgICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwogCiAgICAgVmVjdG9y
PFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CiAgICAgc3RydWN0dXJlcy5hcHBlbmQodGhpcyk7
CkBAIC0yNDQsMjUgKzI0NCwyNSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgLy8gU2VhcmNoIGZvciB0aGUgbGFz
dCBTdHJ1Y3R1cmUgd2l0aCBhIHByb3BlcnR5IHRhYmxlLgogICAgIHdoaWxlICgoc3RydWN0dXJl
ID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKSB7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1f
aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5t
X3Byb3BlcnR5VGFibGUpOworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJvcGVydHlU
YWJsZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpOwog
Ci0gICAgICAgICAgICBtX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJs
ZS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNl
dCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgICAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNldChn
bG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+Y29weShnbG9iYWxE
YXRhLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBh
Y2l0eSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgc3RydWN0
dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBpZiAoIW1fcHJvcGVydHlUYWJs
ZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAobnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQo
bV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkK
KyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zvckxh
c3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIAogICAgIGZvciAocHRyZGlm
Zl90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAgIHN0
cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25hbWVJ
blByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5TWFwRW50
cnkgZW50cnkoZ2xvYmFsRGF0YSwgdGhpcywgc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3VzLmdl
dCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPm1fYXR0cmlidXRlc0luUHJldmlv
dXMsIHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSk7Ci0gICAgICAg
IG1fcHJvcGVydHlUYWJsZS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJv
cGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQo
ZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFu
Z2UpOwogICAgIH0KICAgICAKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC0yODcs
OSArMjg3LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmEKICAgICBtYXRlcmlhbGl6ZVByb3Bl
cnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7CiAKICAgICBBU1NFUlQoaXNEaWN0aW9uYXJ5
KCkpOwotICAgIEFTU0VSVChtX3Byb3BlcnR5VGFibGUpOworICAgIEFTU0VSVChwcm9wZXJ0eVRh
YmxlKCkpOwogCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUt
PmZpbmQocmVwKS5maXJzdDsKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3BlcnR5
VGFibGUoKS0+ZmluZChyZXApLmZpcnN0OwogICAgIEFTU0VSVChlbnRyeSk7CiAgICAgZW50cnkt
PnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKIH0KQEAgLTM3MywxNyArMzczLDE5IEBAIFN0cnVjdHVy
ZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBTdHJ1Y3R1cmUqCiAgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91cyA9
IGF0dHJpYnV0ZXM7CiAgICAgdHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5z
ZXRNYXlCZU51bGwoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1ZSk7CiAKLSAg
ICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKKyAgICBpZiAoc3RydWN0dXJlLT5w
cm9wZXJ0eVRhYmxlKCkpIHsKICAgICAgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3Rl
bmN5KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKQot
ICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5tX3By
b3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX3By
b3BlcnR5VGFibGUtPnNpemUoKSArIDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFu
c2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5yZWxl
YXNlKCk7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2Jh
bERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5jb3B5KGdsb2Jh
bERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5zaXplKCkgKyAx
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJs
ZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUo
KS5nZXQoKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS5jbGVhcigp
OworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJldmlv
dXNJRCgpKQogICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChn
bG9iYWxEYXRhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3JlYXRl
UHJvcGVydHlNYXAoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5TWFw
KGdsb2JhbERhdGEpOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVy
ZS0+bV9vZmZzZXQ7CiAKQEAgLTQxNSw3ICs0MTcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVj
dAogICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9u
LCBwcm90b3R5cGUpOwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZO
ZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0g
c3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNp
dGlvbik7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRhLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1cmUt
Pm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBAIC00MzEsNyArNDMzLDcgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFN0cnUKICAgICArK3RyYW5zaXRpb24tPm1fc3BlY2lmaWNGdW5j
dGlvblRocmFzaENvdW50OwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxl
ID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJh
bnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9i
YWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1
cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBAIC00NTIsMTUgKzQ1NCwx
NSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdAogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKIAogICAgICAgICBzdHJ1Y3R1cmUt
Pm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICAgICAg
dHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJs
ZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgICAgIHRyYW5zaXRpb24t
PnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5j
b3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwogICAg
ICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgICAg
IHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlID0gdHJhbnNp
dGlvbjsKICAgICB9CiAKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpOwot
ICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUt
PmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKKyAgICBBU1NFUlQoc3RydWN0dXJlLT5w
cm9wZXJ0eVRhYmxlKCkpOworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJl
LT5wcm9wZXJ0eVRhYmxlKCktPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKICAgICBB
U1NFUlQoZW50cnkpOwogICAgIGVudHJ5LT5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIApAQCAt
NDc1LDcgKzQ3Nyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFuc2l0
aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlCiAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CiAKICAgICBzdHJ1Y3R1
cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICB0
cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxl
Rm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5wcm9w
ZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0cmFu
c2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlvbi0+
bV9kaWN0aW9uYXJ5S2luZCA9IGtpbmQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC00OTks
OSArNTAxLDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3QKIHsKICAgICBTdHJ1Y3R1cmUqIHRy
YW5zaXRpb24gPSBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3RydWN0
dXJlKTsKIAotICAgIGlmICh0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUpIHsKLSAgICAgICAg
UHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxl
LT5lbmQoKTsKLSAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdHJh
bnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQor
ICAgIGlmICh0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkpIHsKKyAgICAgICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLT5lbmQoKTsK
KyAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdHJhbnNpdGlvbi0+
cHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICAg
ICAgaXRlci0+YXR0cmlidXRlcyB8PSBEb250RGVsZXRlOwogICAgIH0KIApAQCAtNTE0LDkgKzUx
Niw5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1CiB7CiAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7
CiAKLSAgICBpZiAodHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgIFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUtPmJl
Z2luKCk7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRyYW5zaXRpb24t
Pm1fcHJvcGVydHlUYWJsZS0+ZW5kKCk7CisgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5VGFi
bGUoKSkgeworICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdHJhbnNpdGlv
bi0+cHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOworICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBlbmQgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwogICAgICAgICBp
ZiAoaXRlciAhPSBlbmQpCiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX2hhc1JlYWRPbmx5T3JH
ZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8gPSB0cnVlOwogICAgICAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTUzNSw3ICs1MzcsNyBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFs
RGF0YSwgU3RydQogICAgIC8vIERvbid0IHNldCBtX29mZnNldCwgYXMgb25lIGNhbiBub3QgdHJh
bnNpdGlvbiB0byB0aGlzLgogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxl
ID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJh
bnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9i
YWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1
cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1fcHJldmVudEV4dGVuc2lvbnMgPSB0cnVl
OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNTcyLDE3ICs1NzQsMTkgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERh
dGEsIFN0cnVjdHVyZSoKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9v
ZmZzZXQ7CiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRyYW5zaXRpb24t
PmlubGluZUNhcGFjaXR5KCkpOwogICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZSkgeworICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKSkgewogICAgICAgICBz
dHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICAgICAgaWYgKHN0cnVjdHVy
ZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5tX3By
b3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9IHN0
cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
LT5wcm9wZXJ0eVRhYmxlKCktPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
LT5wcm9wZXJ0eVRhYmxlKCktPnNpemUoKSArIDEpKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRp
b24sIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLmdldCgpKTsKKyAgICAgICAgICAgIHN0cnVj
dHVyZS0+cHJvcGVydHlUYWJsZSgpLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpCiAgICAgICAgICAgICB0cmFuc2l0
aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgICAgICAgICAg
dHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAgICAgfQogICAgIAog
ICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5zaXRp
b24pOwpAQCAtNTk3LDExICs2MDEsMTEgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbWF0ZXJp
YWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIGlmICghbV9wcm9w
ZXJ0eVRhYmxlKQorICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvcGVydHlUYWJsZS0+
ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gbV9wcm9wZXJ0
eVRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKKyAgICBmb3IgKFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgaWYgKChpdGVyLT5hdHRyaWJ1dGVzICYgRG9udERl
bGV0ZSkgIT0gRG9udERlbGV0ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBA
IC02MTUsMTEgKzYxOSwxMSBAQCBib29sIFN0cnVjdHVyZTo6aXNGcm96ZW4oSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgaWYgKCFtX3Byb3BlcnR5VGFi
bGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0g
ICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsK
LSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Byb3BlcnR5VGFibGUt
PmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVy
YXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikgewogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udERlbGV0ZSkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghKGl0ZXItPmF0dHJpYnV0
ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpKQpAQCAtNjMzLDE4ICs2MzcsMTggQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgSlNPYmoKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgQVNT
RVJUKGlzRGljdGlvbmFyeSgpKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkg
ewotICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVRhYmxlKTsKKyAgICAgICAgQVNTRVJUKHByb3Bl
cnR5VGFibGUoKSk7CiAKLSAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBtX3Byb3BlcnR5
VGFibGUtPnNpemUoKTsKKyAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0eVRh
YmxlKCktPnNpemUoKTsKIAogICAgICAgICAvLyBIb2xkcyBvdXIgdmFsdWVzIGNvbXBhY3RlZCBi
eSBpbnNlcnRpb24gb3JkZXIuCiAgICAgICAgIFZlY3RvcjxKU1ZhbHVlPiB2YWx1ZXMocHJvcGVy
dHlDb3VudCk7CiAKICAgICAgICAgLy8gQ29waWVzIG91dCBvdXIgdmFsdWVzIGZyb20gdGhlaXIg
aGFzaGVkIGxvY2F0aW9ucywgY29tcGFjdGluZyBwcm9wZXJ0eSB0YWJsZSBvZmZzZXRzIGFzIHdl
IGdvLgogICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRl
cmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKKyAgICAgICAgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKICAgICAgICAgbV9vZmZz
ZXQgPSBpbnZhbGlkT2Zmc2V0OwotICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9y
IGl0ZXIgPSBtX3Byb3BlcnR5VGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsr
aSkgeworICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0
eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsraSkgewogICAgICAgICAg
ICAgdmFsdWVzW2ldID0gb2JqZWN0LT5nZXREaXJlY3QoaXRlci0+b2Zmc2V0KTsKICAgICAgICAg
ICAgIG1fb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwg
bV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIH0KQEAgLTY1Myw3ICs2NTcsNyBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBn
bG9iYWxEYXRhLCBKU09iagogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJvcGVy
dHlDb3VudDsgaSsrKQogICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QoZ2xvYmFsRGF0YSwg
b2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSksIHZhbHVlc1tpXSk7
CiAKLSAgICAgICAgbV9wcm9wZXJ0eVRhYmxlLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7CisgICAg
ICAgIHByb3BlcnR5VGFibGUoKS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygpOwogICAgICAgICBjaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgfQogCkBAIC02ODgsNyArNjkyLDcgQEAgUHJvcGVy
dHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGEKIAogdm9pZCBTdHJ1Y3R1cmU6OnBpbigpCiB7Ci0gICAgQVNTRVJU
KG1fcHJvcGVydHlUYWJsZSk7CisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CiAgICAgbV9p
c1Bpbm5lZFByb3BlcnR5VGFibGUgPSB0cnVlOwogICAgIGNsZWFyUHJldmlvdXNJRCgpOwogICAg
IG1fbmFtZUluUHJldmlvdXMuY2xlYXIoKTsKQEAgLTczNywxNCArNzQxLDE4IEBAIGlubGluZSB2
b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAKICNlbmRpZgogCi1QYXNzT3duUHRy
PFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0dXJl
Ojpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVyZSog
b3duZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG1fcHJvcGVydHlUYWJsZSA/IG5ldyBQcm9w
ZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCAqbV9wcm9wZXJ0eVRhYmxlKSA6IDApOworICAg
IGlmICghcHJvcGVydHlUYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gUHJv
cGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCkuZ2V0
KCkpOwogfQogCi1QYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVByb3Bl
cnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBv
d25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQaW5u
aW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvd25lcikKIHsKLSAgICBy
ZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8gbmV3IFByb3BlcnR5VGFibGUoZ2xvYmFs
RGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDogbmV3IFByb3BlcnR5VGFibGUobnVtYmVy
T2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKSk7CisgICAg
aWYgKHByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNsb25l
KGdsb2JhbERhdGEsIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKKyAgICByZXR1cm4g
UHJvcGVydHlUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIG51bWJlck9mU2xvdHNGb3JMYXN0T2Zm
c2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0IFN0
cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUpCkBA
IC03NTIsMTAgKzc2MCwxMCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2Jh
bERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbQogICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAKICAgICBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgaWYgKCFtX3Byb3BlcnR5VGFi
bGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zm
c2V0OwogCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUtPmZp
bmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRy
eSA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpLmZpcnN0OwogICAg
IGlmICghZW50cnkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCkBAIC03NjcsMTAg
Kzc3NSwxMCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbQogYm9vbCBTdHJ1Y3R1cmU6OmRlc3Bl
Y2lmeUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSkKIHsKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFs
RGF0YSk7Ci0gICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxl
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5
ID0gbV9wcm9wZXJ0eVRhYmxlLT5maW5kKHByb3BlcnR5TmFtZS51aWQoKSkuZmlyc3Q7CisgICAg
UHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocHJvcGVydHlO
YW1lLnVpZCgpKS5maXJzdDsKICAgICBpZiAoIWVudHJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKQEAgLTc4MiwxMSArNzkwLDExIEBAIGJvb2wgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5jdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0CiB2b2lkIFN0
cnVjdHVyZTo6ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
IHsKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0g
ICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvcGVy
dHlUYWJsZS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0g
bV9wcm9wZXJ0eVRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgIFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CisgICAgZm9y
IChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdpbigp
OyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICBpdGVyLT5zcGVjaWZpY1ZhbHVlLmNsZWFy
KCk7CiB9CiAKQEAgLTgwMCwxMiArODA4LDEyIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
cHV0U3BlY2lmaWNWYWx1ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtCiAK
ICAgICBTdHJpbmdJbXBsKiByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKLSAgICBpZiAoIW1f
cHJvcGVydHlUYWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICBpZiAoIXBy
b3BlcnR5VGFibGUoKSkKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAK
LSAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBtX3Byb3BlcnR5VGFibGUtPm5leHRPZmZz
ZXQobV9pbmxpbmVDYXBhY2l0eSk7CisgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gcHJv
cGVydHlUYWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwogCi0gICAgbV9wcm9w
ZXJ0eVRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShnbG9iYWxEYXRhLCB0aGlzLCByZXAsIG5l
d09mZnNldCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRh
YmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5hZGQo
UHJvcGVydHlNYXBFbnRyeShnbG9iYWxEYXRhLCB0aGlzLCByZXAsIG5ld09mZnNldCwgYXR0cmli
dXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9m
ZnNldE1heUNoYW5nZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVy
biBuZXdPZmZzZXQ7CkBAIC04MTcsNDAgKzgyNSw0MCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogCiAgICAgU3RyaW5nSW1wbCog
cmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwogCi0gICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisg
ICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0Owog
Ci0gICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IG1fcHJvcGVydHlU
YWJsZS0+ZmluZChyZXApOworICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRp
b24gPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocmVwKTsKICAgICBpZiAoIXBvc2l0aW9uLmZpcnN0
KQogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIFByb3BlcnR5T2Zmc2V0IG9m
ZnNldCA9IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7CiAKLSAgICBtX3Byb3BlcnR5VGFibGUtPnJl
bW92ZShwb3NpdGlvbik7Ci0gICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KG9m
ZnNldCk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOworICAgIHByb3Bl
cnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOwogCiAgICAgY2hlY2tDb25zaXN0
ZW5jeSgpOwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpjcmVhdGVQ
cm9wZXJ0eU1hcCh1bnNpZ25lZCBjYXBhY2l0eSkKK3ZvaWQgU3RydWN0dXJlOjpjcmVhdGVQcm9w
ZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNhcGFjaXR5KQogewot
ICAgIEFTU0VSVCghbV9wcm9wZXJ0eVRhYmxlKTsKKyAgICBBU1NFUlQoIXByb3BlcnR5VGFibGUo
KSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgbV9wcm9wZXJ0eVRhYmxlID0gYWRv
cHRQdHIobmV3IFByb3BlcnR5VGFibGUoY2FwYWNpdHkpKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCku
c2V0KGdsb2JhbERhdGEsIHRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZShnbG9iYWxEYXRhLCBj
YXBhY2l0eSkpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1
Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVy
dHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0
eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlKQor
ICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGtu
b3duVW5pcXVlID0gIXByb3BlcnR5TmFtZXMuc2l6ZSgpOwogCi0gICAgUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKLSAgICBmb3IgKFByb3BlcnR5
VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Byb3BlcnR5VGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9wZXJ0
eVRhYmxlKCktPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9
IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAgICAg
ICBBU1NFUlQobV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyB8fCAhKGl0ZXItPmF0dHJpYnV0
ZXMgJiBEb250RW51bSkpOwogICAgICAgICBpZiAoaXRlci0+a2V5LT5pc0lkZW50aWZpZXIoKSAm
JiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pIHx8IG1vZGUgPT0gSW5jbHVkZURvbnRF
bnVtUHJvcGVydGllcykpIHsKICAgICAgICAgICAgIGlmIChrbm93blVuaXF1ZSkKQEAgLTg4Miwx
MSArODkwLDEyIEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwg
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgfQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmpl
Y3QtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwotICAgIGlmICh0aGlzT2JqZWN0LT5tX3By
b3BlcnR5VGFibGUpIHsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdGhp
c09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKLSAgICAgICAgZm9yIChQcm9wZXJ0eVRh
YmxlOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUtPmJlZ2luKCk7
IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+c3Bl
Y2lmaWNWYWx1ZSk7Ci0gICAgfQorCisgICAgaWYgKHRoaXNPYmplY3QtPm1faXNQaW5uZWRQcm9w
ZXJ0eVRhYmxlKSB7CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVV
bnNhZmUpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRh
YmxlVW5zYWZlKTsKKyAgICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVu
c2FmZSkKKyAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFyKCk7
CiB9CiAKIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3JlVG8o
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpAQCAt
OTc3LDE3ICs5ODYsMTcgQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpjaGVja0NvbnNpc3RlbmN5KCkK
IAogdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQogewotICAgIGlmICghbV9wcm9w
ZXJ0eVRhYmxlKQorICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoIW1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMpIHsKLSAgICAgICAgUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKLSAgICAgICAg
Zm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gbV9wcm9wZXJ0eVRhYmxlLT5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJh
dG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CisgICAgICAgIGZvciAoUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewogICAgICAgICAgICAgQVNTRVJUKCEoaXRlci0+YXR0cmlidXRlcyAmIERv
bnRFbnVtKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3Byb3BlcnR5VGFibGUtPmNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmNoZWNrQ29uc2lzdGVuY3koKTsK
IH0KIAogI2VuZGlmIC8vIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCAyMzU5YzZjLi4zMDNiZTM5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtMzEsMTYgKzMx
LDE1IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgogI2lu
Y2x1ZGUgIkpTVHlwZS5oIgotI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAjaW5j
bHVkZSAiUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNp
bmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUgIlByb3RlY3QuaCIKICNpbmNsdWRl
ICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAj
aW5jbHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTUxLDYgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJheTsK
IGNsYXNzIFByb3BlcnR5TmFtZUFycmF5RGF0YTsKK2NsYXNzIFByb3BlcnR5VGFibGU7CiBjbGFz
cyBTdHJ1Y3R1cmVDaGFpbjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7CkBA
IC0xMDgsMjUgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFsRGF0
YSYpOwogICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgY29uc3QgeyByZXR1cm4gIW1fcHJldmVudEV4
dGVuc2lvbnM7IH0KICAgICBib29sIGRpZFRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2Rp
ZFRyYW5zaXRpb247IH0KLSAgICBib29sIHB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpCi0g
ICAgewotICAgICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gb3V0T2ZMaW5lU2l6ZSgpKTsKLSAg
ICAgICAgICAgIAotICAgICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICAgICAg
dW5zaWduZWQgY3VycmVudFNpemUgPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9mZnNl
dChtX29mZnNldCk7Ci0gICAgICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+PSBj
dXJyZW50U2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudFNpemUgPT0gb3V0T2ZMaW5l
Q2FwYWNpdHkoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIEFTU0VSVCh0b3Rh
bFN0b3JhZ2VDYXBhY2l0eSgpID49IG1fcHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9yYWdlU2l6
ZSgpKTsKLSAgICAgICAgaWYgKG1fcHJvcGVydHlUYWJsZS0+aGFzRGVsZXRlZE9mZnNldCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIEFTU0VSVCh0
b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IG1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpKTsKLSAgICAg
ICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpID09IHRvdGFsU3RvcmFnZUNhcGFjaXR5
KCk7Ci0gICAgfQorICAgIGJvb2wgcHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCk7CiAgICAg
SlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VDYXBh
Y2l0eSgpOyAKIAogICAgIFN0cnVjdHVyZSogZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoSlNH
bG9iYWxEYXRhJiwgSlNPYmplY3QqKTsKQEAgLTM4MiwyNyArMzY0LDI5IEBAIHByaXZhdGU6CiAg
ICAgUHJvcGVydHlPZmZzZXQgcHV0U3BlY2lmaWNWYWx1ZShKU0dsb2JhbERhdGEmLCBQcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CiAgICAg
UHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAKLSAgICB2b2lkIGNyZWF0ZVBy
b3BlcnR5TWFwKHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CisgICAgdm9pZCBjcmVhdGVQcm9wZXJ0
eU1hcChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZvaWQgY2hl
Y2tDb25zaXN0ZW5jeSgpOwogCiAgICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlvbihKU0dsb2JhbERh
dGEmLCBQcm9wZXJ0eU5hbWUpOwogICAgIHZvaWQgZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKEpTR2xv
YmFsRGF0YSYpOwogCi0gICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5UHJvcGVydHlU
YWJsZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVyKTsKLSAgICBQYXNzT3duUHRyPFBy
b3BlcnR5VGFibGU+IGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhKU0dsb2JhbERhdGEmLCBT
dHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHByb3Bl
cnR5VGFibGUoKTsKKworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKEpTR2xv
YmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9w
ZXJ0eVRhYmxlRm9yUGlubmluZyhKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVyKTsKICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoSlNHbG9iYWxE
YXRhJik7CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoSlNHbG9i
YWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5j
bGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICAgICAgQVNTRVJUKGNoZWNrT2Zmc2V0Q29uc2lz
dGVuY3koKSk7Ci0gICAgICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlICYmIHByZXZpb3VzSUQoKSkK
KyAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkgJiYgcHJldmlvdXNJRCgpKQogICAgICAgICAg
ICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICB9CiAgICAgdm9pZCBt
YXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZv
KCkgPT0gJnNfaW5mbyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAgICAg
ICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQog
ICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICB9CiAK
QEAgLTQ0NSwxOSArNDI5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOwogICAgIH0K
ICAgICAgICAgCi0gICAgQUxXQVlTX0lOTElORSBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3ko
KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpOwotICAgICAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VSVChu
dW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkgPT0g
bV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOwotICAgICAgICB1bnNpZ25l
ZCB0b3RhbFNpemUgPSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoKHRvdGFsU2l6ZSA8IGlubGluZUNhcGFjaXR5KCkgPyAwIDog
dG90YWxTaXplIC0gaW5saW5lQ2FwYWNpdHkoKSkgPT0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90c0Zv
ckxhc3RPZmZzZXQobV9vZmZzZXQpKTsKLSAgICAgICAgICAgIAotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9CisgICAgYm9vbCBjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3Q7CiAKICAg
ICB2b2lkIGFsbG9jYXRlUmFyZURhdGEoSlNHbG9iYWxEYXRhJik7CiAgICAgdm9pZCBjbG9uZVJh
cmVEYXRhRnJvbShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsKQEAgLTQ4Miw3ICs0
NTQsOCBAQCBwcml2YXRlOgogCiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIG1fdHJhbnNp
dGlvblRhYmxlOwogCi0gICAgT3duUHRyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJsZTsK
KyAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBwcm9wZXJ0eVRhYmxlKCkuIER1cmlu
ZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgIFdyaXRlQmFy
cmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiAKICAgICBtdXRhYmxl
IElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDVi
ZmQyZDUuLjUyMmU4MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJlSW5s
aW5lc19oCiAjZGVmaW5lIFN0cnVjdHVyZUlubGluZXNfaAogCisjaW5jbHVkZSAiUHJvcGVydHlN
YXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNlIEpTQyB7
CkBAIC02MSwxMCArNjIsMTAgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6Z2V0
KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3AKIHsKICAgICBBU1NF
UlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgIG1hdGVyaWFsaXpl
UHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICBpZiAoIW1fcHJvcGVydHlU
YWJsZSkKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGludmFsaWRP
ZmZzZXQ7CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IG1fcHJvcGVydHlUYWJsZS0+
ZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpLmZpcnN0OworICAgIFByb3BlcnR5TWFwRW50cnkqIGVu
dHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHByb3BlcnR5TmFtZS51aWQoKSkuZmlyc3Q7CiAg
ICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CiB9CiAKQEAg
LTcyLDEwICs3MywxMCBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0cmluZwogewogICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgbWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIGlmICghbV9wcm9wZXJ0eVRhYmxl
KQorICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNl
dDsKIAotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gbV9wcm9wZXJ0eVRhYmxlLT5maW5k
V2l0aFN0cmluZyhuYW1lLmltcGwoKSkuZmlyc3Q7CisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50
cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmRXaXRoU3RyaW5nKG5hbWUuaW1wbCgpKS5maXJzdDsK
ICAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52YWxpZE9mZnNldDsKIH0KICAg
ICAKQEAgLTE3OSw2ICsxODAsNDggQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlkKEV4
ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUMKICAgICByZXR1
cm4gaXNWYWxpZChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhY2hlZFByb3RvdHlwZUNo
YWluKTsKIH0KIAoraW5saW5lIGJvb2wgU3RydWN0dXJlOjpwdXRXaWxsR3Jvd091dE9mTGluZVN0
b3JhZ2UoKQoreworICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKworICAgIEFTU0VSVChv
dXRPZkxpbmVDYXBhY2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7CisKKyAgICBpZiAoIXByb3Bl
cnR5VGFibGUoKSkgeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2l6ZSA9IG51bWJlck9mT3V0
T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG91dE9m
TGluZUNhcGFjaXR5KCkgPj0gY3VycmVudFNpemUpOworICAgICAgICByZXR1cm4gY3VycmVudFNp
emUgPT0gb3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBBU1NFUlQodG90YWxTdG9y
YWdlQ2FwYWNpdHkoKSA+PSBwcm9wZXJ0eVRhYmxlKCktPnByb3BlcnR5U3RvcmFnZVNpemUoKSk7
CisgICAgaWYgKHByb3BlcnR5VGFibGUoKS0+aGFzRGVsZXRlZE9mZnNldCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBwcm9w
ZXJ0eVRhYmxlKCktPnNpemUoKSk7CisgICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+c2l6ZSgp
ID09IHRvdGFsU3RvcmFnZUNhcGFjaXR5KCk7Cit9CisKK0FMV0FZU19JTkxJTkUgV3JpdGVCYXJy
aWVyPFByb3BlcnR5VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQoreworICAgIEFT
U0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCkuaGVh
cC5pc0J1c3koKSk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKK30KKworQUxX
QVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNvbnN0
Cit7CisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IG1fcHJvcGVydHlUYWJsZVVu
c2FmZS5nZXQoKTsKKworICAgIGlmICghcHJvcGVydHlUYWJsZSkgeworICAgICAgICBBU1NFUlQo
IW1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQs
IG1faW5saW5lQ2FwYWNpdHkpID09IHByb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUo
KSk7CisgICAgdW5zaWduZWQgdG90YWxTaXplID0gcHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9y
YWdlU2l6ZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKCh0b3RhbFNpemUgPCBpbmxpbmVDYXBhY2l0
eSgpID8gMCA6IHRvdGFsU2l6ZSAtIGlubGluZUNhcGFjaXR5KCkpID09IG51bWJlck9mT3V0T2ZM
aW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTdHJ1Y3R1cmVJbmxpbmVzX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKaW5kZXggZWY4YzNh
Zi4uNmZhOGI2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3Jp
dGVCYXJyaWVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJy
aWVyLmgKQEAgLTk5LDkgKzk5LDExIEBAIHB1YmxpYzoKICAgICAKICAgICBUKiBnZXQoKSBjb25z
dAogICAgIHsKLSAgICAgICAgaWYgKG1fY2VsbCkKLSAgICAgICAgICAgIHZhbGlkYXRlQ2VsbCht
X2NlbGwpOwotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nhc3Q8
dm9pZCo+KG1fY2VsbCkpOworICAgICAgICAvLyBDb3B5IG1fY2VsbCB0byBhIGxvY2FsIHRvIGF2
b2lkIG11bHRpcGxlLXJlYWQgaXNzdWVzLiAoU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzExMDg1
ND4pCisgICAgICAgIEpTQ2VsbCogY2VsbCA9IG1fY2VsbDsKKyAgICAgICAgaWYgKGNlbGwpCisg
ICAgICAgICAgICB2YWxpZGF0ZUNlbGwoY2VsbCk7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFQqPihzdGF0aWNfY2FzdDx2b2lkKj4oY2VsbCkpOwogICAgIH0KIAogICAgIFQqIG9w
ZXJhdG9yKigpIGNvbnN0Cg==
</data>
<flag name="commit-queue"
          id="212259"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191324</attachid>
            <date>2013-03-04 15:31:34 -0800</date>
            <delta_ts>2013-03-04 19:07:30 -0800</delta_ts>
            <desc>Geoffrey not Geoff.</desc>
            <filename>bug-110854-v3.diff</filename>
            <type>text/plain</type>
            <size>53485</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAzYmQ2ODIzLi4zYmIzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yODAsNiArMjgwLDcgQEAgc2V0
KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5j
cHAKICAgICBydW50aW1lL1Byb3BlcnR5TmFtZUFycmF5LmNwcAogICAgIHJ1bnRpbWUvUHJvcGVy
dHlTbG90LmNwcAorICAgIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHAKICAgICBydW50aW1lL1By
b3RvdHlwZU1hcC5jcHAKICAgICBydW50aW1lL1JlZ0V4cC5jcHAKICAgICBydW50aW1lL1JlZ0V4
cENhY2hlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggMzYwZTBkZC4uNTdkMjhkZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTAzIEBACiAyMDEzLTAzLTA0ICBB
bmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAorICAgICAgICBVbnVzZWQgU3RydWN0
dXJlIHByb3BlcnR5IHRhYmxlcyB3YXN0ZSAxNE1CIG9uIE1lbWJ1c3Rlci4KKyAgICAgICAgPGh0
dHA6Ly93ZWJraXQub3JnL2IvMTEwODU0PgorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTMyOTIx
MDQ+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4uCisKKyAgICAgICAgVHVy
biBQcm9wZXJ0eVRhYmxlIGludG8gYSBHQyBvYmplY3QgYW5kIGhhdmUgU3RydWN0dXJlIGRyb3Ag
dW5waW5uZWQgdGFibGVzIHdoZW4gbWFya2luZy4KKyAgICAgICAgMTQgTUIgcHJvZ3Jlc3Npb24g
b24gTWVtYnVzdGVyMy4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZ3lwaToKKyAgICAg
ICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAg
ICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBUYXJnZXQucHJpOgorCisgICAgICAgICAgICBBZGRlZCBQcm9wZXJ0eVRhYmxlLmNwcC4KKwor
ICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlUYWJsZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpQcm9wZXJ0eVRhYmxlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpj
bG9uZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OlByb3BlcnR5VGFibGUpOgorICAg
ICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KToKKyAgICAgICAgKEpTQzo6UHJvcGVy
dHlUYWJsZTo6flByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjp2
aXNpdENoaWxkcmVuKToKKworICAgICAgICAgICAgTW92ZWQgbWFya2luZyBvZiBwcm9wZXJ0eSB0
YWJsZSB2YWx1ZXMgaGVyZSBmcm9tIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbigpLgorCisgICAg
ICAgICogcnVudGltZS9Xcml0ZUJhcnJpZXIuaDoKKyAgICAgICAgKEpTQzo6V3JpdGVCYXJyaWVy
QmFzZTo6Z2V0KToKKworICAgICAgICAgICAgTW92ZSBtX2NlbGwgdG8gYSBsb2NhbCBiZWZvcmUg
dXNpbmcgaXQgbXVsdGlwbGUgdGltZXMuIFRoaXMgYXZvaWRzIGEgbXVsdGlwbGUtYWNjZXNzIHJh
Y2Ugd2hlbgorICAgICAgICAgICAgU3RydWN0dXJlOjpjaGVja09mZnNldENvbnNpc3RlbmN5KCkg
aXMgdXNlZCBpbiBhc3NlcnRpb25zIG9uIHRoZSBtYWluIHRocmVhZCB3aGlsZSBhIG1hcmtpbmcg
dGhyZWFkCisgICAgICAgICAgICB6YXBzIHRoZSBwcm9wZXJ0eSB0YWJsZS4KKworICAgICAgICAq
IHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxp
emVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRl
cmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKToKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcm9wZXJ0
eVRhYmxlKToKKworICAgICAgICAgICAgQWRkZWQgYSBnZXR0ZXIgZm9yIHRoZSBTdHJ1Y3R1cmUn
cyBQcm9wZXJ0eVRhYmxlIHRoYXQgQVNTRVJUcyBHQyBjdXJyZW50bHkgaXNuJ3QgYWN0aXZlLgor
ICAgICAgICAgICAgQmVjYXVzZSBHQyBjYW4gemFwIGFuIHVucGlubmVkIHByb3BlcnR5IHRhYmxl
IGF0IGFueSB0aW1lLCBpdCdzIG5vdCBlbnRpcmVseSBzYWZlIHRvIGFjY2VzcyBpdC4KKyAgICAg
ICAgICAgIFJlbmFtZWQgdGhlIHZhcmlhYmxlIGl0c2VsZiB0byBtX3Byb3BlcnR5VGFibGVVbnNh
ZmUgdG8gZm9yY2UgY2FsbCBzaXRlcyBpbnRvIGV4cGxhaW5pbmcgdGhlbXNlbHZlcy4KKworICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSk6CisKKyAgICAgICAg
ICAgIE1vdmVkIHRoZXNlIG91dCBvZiBTdHJ1Y3R1cmUuaCB0byBicmVhayBoZWFkZXIgZGVwZW5k
ZW5jeSBjeWNsZSBiZXR3ZWVuIFN0cnVjdHVyZS9Qcm9wZXJ0eVRhYmxlLgorCisgICAgICAgICog
cnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hp
bGRyZW4pOgorCisgICAgICAgICAgICBOdWxsIG91dCBtX3Byb3BlcnR5VGFibGUgaWYgdGhlIHRh
YmxlIGlzIHVucGlubmVkLiBUaGlzJ2xsIGNhdXNlIHRoZSB0YWJsZSB0byBnZXQgR0MnZC4KKwor
ICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICogcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6
CisKKyAgICAgICAgICAgIEFkZCBhIGdsb2JhbCBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLgorCisg
ICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oOgorICAgICAgICAoUHJvcGVy
dHlUYWJsZSk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmNvcHkpOgorCisgICAgICAgICAgICBNYWtl
IFByb3BlcnR5VGFibGUgYSBHQyBvYmplY3QuCisKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlNYXApOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlvbik6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6YWRkUHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjpkZXNwZWNpZnlGdW5jdGlvblRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRv
RGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNlYWxUcmFu
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgorICAg
ICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6aXNTZWFsZWQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmlzRnJv
emVuKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmbGF0dGVuRGljdGlvbmFyeVN0cnVjdHVy
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cGluKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpjb3B5UHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpnZXQpOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uKToKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjpkZXNwZWNpZnlBbGxGdW5jdGlvbnMpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnB1dFNwZWNpZmljVmFsdWUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92
ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlUHJvcGVydHlNYXApOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpjaGVja0NvbnNpc3RlbmN5KToKKworMjAxMy0wMy0wNCAgQW5k
cmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CisKICAgICAgICAgQWRkIHNpbXBsZSB2ZWN0
b3IgdHJhaXRzIGZvciBKU0M6OklkZW50aWZpZXIuCiAgICAgICAgIDxodHRwOi8vd2Via2l0Lm9y
Zy9iLzExMTMyMz4KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmxpc3QuYW0gYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCBlOGExZjJiLi41MWQ1YTQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQpAQCAtNzIyLDYgKzcyMiw3IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0g
XAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5T2Zmc2V0LmggXAogCVNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5jcHAgXAogCVNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5U2xvdC5oIFwKKwlTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvUHJvdG90eXBlTWFwLmNwcCBcCiAJU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvdG90eXBlTWFwLmggXAogCVNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3Bl
cnR5U3RvcmFnZS5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5neXBpIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmd5cGkK
aW5kZXggMGE5ZmIxNC4uYzI3ZTdkNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLmd5cGkKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLmd5cGkKQEAgLTc1OCw2ICs3NTgsNyBAQAogICAgICAgICAgICAgJ3J1bnRpbWUvUHJv
cGVydHlPZmZzZXQuaCcsCiAgICAgICAgICAgICAncnVudGltZS9Qcm9wZXJ0eVNsb3QuY3BwJywK
ICAgICAgICAgICAgICdydW50aW1lL1Byb3BlcnR5U2xvdC5oJywKKyAgICAgICAgICAgICdydW50
aW1lL1Byb3BlcnR5VGFibGUuY3BwJywKICAgICAgICAgICAgICdydW50aW1lL1Byb3BlcnR5U3Rv
cmFnZS5oJywKICAgICAgICAgICAgICdydW50aW1lL1Byb3RlY3QuaCcsCiAgICAgICAgICAgICAn
cnVudGltZS9Qcm90b3R5cGVNYXAuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCmluZGV4IDMyNWU3MjUuLjBmYTkxNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlw
dENvcmUudmN4cHJvagpAQCAtMzA1LDYgKzMwNSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXFByb3BlcnR5RGVzY3JpcHRvci5jcHAiIC8+DQogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eU5hbWVBcnJheS5jcHAiIC8+DQogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm9wZXJ0eVNsb3QuY3BwIiAvPg0KKyAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUHJvcGVydHlUYWJsZS5jcHAiIC8+DQogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxQcm90b3R5cGVNYXAuY3BwIiAvPg0KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcUmVnRXhwLmNwcCIgLz4NCiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXFJlZ0V4cENhY2hlLmNwcCIgLz4NCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCmluZGV4IGY1MGQzNmMuLmVhYTM5M2EgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC03MDMsNiArNzAzLDcgQEAKIAkJQTdGQjYwQTQxMDNGN0RDMjAwMTdB
Mjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBN0ZCNjBBMzEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlE
ZXNjcmlwdG9yLmNwcCAqLzsgfTsKIAkJQTdGQjYxMDAxMDQwQzM4QjAwMTdBMjg2IC8qIFByb3Bl
cnR5RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdGQjYwNEIxMDNGNUVBQjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE4QTQ3NDhF
MTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QTQ3NDhEMTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYu
YSAqLzsgfTsKKwkJQURFMzlGRkYxNkREMTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQUQxQ0YwNjgx
NkRDQUIyRDAwQjk3MTIzIC8qIFByb3BlcnR5VGFibGUuY3BwICovOyB9OwogCQlCQzAyRTkwRDBF
MTgzOURCMDAwRjkyOTcgLyogRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDUwRTE4MzlEQjAwMEY5Mjk3IC8qIEVy
cm9yQ29uc3RydWN0b3IuaCAqLzsgfTsKIAkJQkMwMkU5MEYwRTE4MzlEQjAwMEY5Mjk3IC8qIEVy
cm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBCQzAyRTkwNzBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzAyRTkxMTBFMTgz
OURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkMwMkU5MDkwRTE4MzlEQjAwMEY5Mjk3IC8q
IE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCAqLzsgfTsKQEAgLTE2MTgsNiArMTYxOSw3IEBACiAJ
CUE4QTQ3NDhEMTUxQTgzMDYwMDQxMjNGRiAvKiBsaWJXVEYuYSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IGFyY2hpdmUuYXI7IHBhdGggPSBsaWJXVEYu
YTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJQThFODk0MzEwQ0QwNjAy
NDAwMzY3MTc5IC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcxNzkgLyogSlNHbG9iYWxP
YmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNHbG9iYWxPYmplY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUQxQ0YwNjgxNkRDQUIyRDAwQjk3MTIz
IC8qIFByb3BlcnR5VGFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUHJvcGVydHlUYWJsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQueGNjb25maWc7IHBhdGggPSBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkMwMkU5MDQwRTE4MzlEQjAwMEY5Mjk3IC8qIEVycm9yQ29u
c3RydWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRXJyb3JD
b25zdHJ1Y3Rvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDMDJFOTA1MEUx
ODM5REIwMDBGOTI5NyAvKiBFcnJvckNvbnN0cnVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVycm9yQ29uc3RydWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTI1MDYsNiArMjUwOCw3IEBACiAJCQkJNjU2MjFFNkIwODlFODU5NzAwNzYwRjM1IC8q
IFByb3BlcnR5U2xvdC5jcHAgKi8sCiAJCQkJNjU2MjFFNkMwODlFODU5NzAwNzYwRjM1IC8qIFBy
b3BlcnR5U2xvdC5oICovLAogCQkJCTBGQjdGMzkwMTVFRDhFMzgwMEYxNjdCMiAvKiBQcm9wZXJ0
eVN0b3JhZ2UuaCAqLywKKwkJCQlBRDFDRjA2ODE2RENBQjJEMDBCOTcxMjMgLyogUHJvcGVydHlU
YWJsZS5jcHAgKi8sCiAJCQkJNjVDMDJGQkIwNjM3NDYyQTAwM0U3RUU2IC8qIFByb3RlY3QuaCAq
LywKIAkJCQkxNEQ4NDRBMjE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBlTWFwLmNwcCAqLywK
IAkJCQkxNEQ4NDRBMzE2QUEyQzcwMDBBNjVBRjAgLyogUHJvdG90eXBlTWFwLmggKi8sCkBAIC00
MDIzLDYgKzQwMjYsNyBAQAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVk
aWN0aW9uSW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzYxNkMx
REIwRjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY0OTNBRkExNkQwQ0FEMzAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwogCQl9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1Rhcmdl
dC5wcmkgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQppbmRleCA1ODE0MGY2Li42
NjA4YTA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvVGFyZ2V0LnByaQpAQCAtMjk4LDYgKzI5OCw3IEBAIFNP
VVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBcCiAgICAgcnVu
dGltZS9Qcm9wZXJ0eU5hbWVBcnJheS5jcHAgXAogICAgIHJ1bnRpbWUvUHJvcGVydHlTbG90LmNw
cCBcCisgICAgcnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBcCiAgICAgcnVudGltZS9Qcm90b3R5
cGVNYXAuY3BwIFwKICAgICBydW50aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVu
dGltZS9SZWdFeHBDYWNoZWRSZXN1bHQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbERhdGEuY3BwCmluZGV4IGMwNmNmNWMuLjUwOGE4NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcApAQCAtMjMyLDYg
KzIzMiw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKEdsb2JhbERhdGFUeXBlIGdsb2Jh
bERhdGFUeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2tTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s6OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEV2YWxDb2RlQmxvY2tT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEV2YWxDb2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVy
ZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3Ry
dWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAgICAgc21hbGxTdHJpbmdzLmluaXRpYWxpemVDb21tb25TdHJpbmdzKCp0aGlzKTsKIAog
ICAgIHd0ZlRocmVhZERhdGEoKS5zZXRDdXJyZW50SWRlbnRpZmllclRhYmxlKGV4aXN0aW5nRW50
cnlJZGVudGlmaWVyVGFibGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuaAppbmRleCBkYzk4ODFmLi4xODk1YTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaApAQCAtMjU2LDYgKzI1Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZFByb2dyYW1Db2RlQmxv
Y2tTdHJ1Y3R1cmU7CiAgICAgICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRXZhbENvZGVC
bG9ja1N0cnVjdHVyZTsKICAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlv
bkNvZGVCbG9ja1N0cnVjdHVyZTsKKyAgICAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlU
YWJsZVN0cnVjdHVyZTsKIAogICAgICAgICBJZGVudGlmaWVyVGFibGUqIGlkZW50aWZpZXJUYWJs
ZTsKICAgICAgICAgQ29tbW9uSWRlbnRpZmllcnMqIHByb3BlcnR5TmFtZXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAppbmRl
eCAyNDIyYzViLi41NGUyOTczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKQEAgLTIyLDYgKzIyLDcgQEAKICNkZWZpbmUg
UHJvcGVydHlNYXBIYXNoVGFibGVfaAogCiAjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRl
IDx3dGYvSGFzaFRhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTg1LDgg
Kzg2LDcgQEAgc3RydWN0IFByb3BlcnR5TWFwRW50cnkgewogICAgIH0KIH07CiAKLWNsYXNzIFBy
b3BlcnR5VGFibGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworY2xhc3MgUHJvcGVy
dHlUYWJsZSA6IHB1YmxpYyBKU0NlbGwgewogCiAgICAgLy8gVGhpcyBpcyB0aGUgaW1wbGVtZW50
YXRpb24gZm9yICdpdGVyYXRvcicgYW5kICdjb25zdF9pdGVyYXRvcicsCiAgICAgLy8gdXNlZCBm
b3IgaXRlcmF0aW5nIG92ZXIgdGhlIHRhYmxlIGluIGluc2VydGlvbiBvcmRlci4KQEAgLTEyOSw2
ICsxMjksMTkgQEAgY2xhc3MgUHJvcGVydHlUYWJsZSB7CiAgICAgfTsKIAogcHVibGljOgorICAg
IHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBk
ZXN0cm95KEpTQ2VsbCopOworCisgICAgc3RhdGljIEpTX0VYUE9SVERBVEEgY29uc3QgQ2xhc3NJ
bmZvIHNfaW5mbzsKKworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFs
dWUgcHJvdG90eXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGds
b2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDb21wb3VuZFR5cGUs
IE92ZXJyaWRlc1Zpc2l0Q2hpbGRyZW4pLCAmc19pbmZvKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisKICAgICB0eXBlZGVm
IFN0cmluZ0ltcGwqIEtleVR5cGU7CiAgICAgdHlwZWRlZiBQcm9wZXJ0eU1hcEVudHJ5IFZhbHVl
VHlwZTsKIApAQCAtMTQyLDkgKzE1NSw5IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxWYWx1ZVR5cGUqLCB1bnNpZ25lZD4gZmluZF9pdGVyYXRvcjsKIAogICAgIC8vIENvbnN0cnVj
dG9yIGlzIHBhc3NlZCBhbiBpbml0aWFsIGNhcGFjaXR5LCBhIFByb3BlcnR5VGFibGUgdG8gY29w
eSwgb3IgYm90aC4KLSAgICBleHBsaWNpdCBQcm9wZXJ0eVRhYmxlKHVuc2lnbmVkIGluaXRpYWxD
YXBhY2l0eSk7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqLCBjb25z
dCBQcm9wZXJ0eVRhYmxlJik7Ci0gICAgUHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0Nl
bGwqLCB1bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAg
ICBzdGF0aWMgUHJvcGVydHlUYWJsZSogY3JlYXRlKEpTR2xvYmFsRGF0YSYsIHVuc2lnbmVkIGlu
aXRpYWxDYXBhY2l0eSk7CisgICAgc3RhdGljIFByb3BlcnR5VGFibGUqIGNsb25lKEpTR2xvYmFs
RGF0YSYsIEpTQ2VsbCogb3duZXIsIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBzdGF0aWMg
UHJvcGVydHlUYWJsZSogY2xvbmUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWdu
ZWQgaW5pdGlhbENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJik7CiAgICAgflByb3BlcnR5
VGFibGUoKTsKIAogICAgIC8vIE9yZGVyZWQgaXRlcmF0aW9uIG1ldGhvZHMuCkBAIC0xODEsNyAr
MTk0LDcgQEAgcHVibGljOgogICAgIFByb3BlcnR5T2Zmc2V0IG5leHRPZmZzZXQoUHJvcGVydHlP
ZmZzZXQgaW5saW5lQ2FwYWNpdHkpOwogCiAgICAgLy8gQ29weSB0aGlzIFByb3BlcnR5VGFibGUs
IGVuc3VyaW5nIHRoZSBjb3B5IGhhcyBhdCBsZWFzdCB0aGUgY2FwYWNpdHkgcHJvdmlkZWQuCi0g
ICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5KEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCog
b3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxlKiBjb3B5KEpT
R2xvYmFsRGF0YSYsIEpTQ2VsbCogb3duZXIsIHVuc2lnbmVkIG5ld0NhcGFjaXR5KTsKIAogI2lm
bmRlZiBOREVCVUcKICAgICBzaXplX3Qgc2l6ZUluTWVtb3J5KCk7CkBAIC0xODksNiArMjAyLDEw
IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgorICAgIFByb3BlcnR5VGFibGUoSlNHbG9i
YWxEYXRhJiwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KTsKKyAgICBQcm9wZXJ0eVRhYmxlKEpT
R2xvYmFsRGF0YSYsIEpTQ2VsbCosIGNvbnN0IFByb3BlcnR5VGFibGUmKTsKKyAgICBQcm9wZXJ0
eVRhYmxlKEpTR2xvYmFsRGF0YSYsIEpTQ2VsbCosIHVuc2lnbmVkIGluaXRpYWxDYXBhY2l0eSwg
Y29uc3QgUHJvcGVydHlUYWJsZSYpOworCiAgICAgUHJvcGVydHlUYWJsZShjb25zdCBQcm9wZXJ0
eVRhYmxlJik7CiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8gYmUg
aW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUgd2Uga25vdyBjYXBhY2l0eSB0byBiZSBhdmFpbGFibGUu
CiAgICAgdm9pZCByZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KTsKQEAgLTIzOSw3MiAr
MjU2LDYgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgRW1wdHlFbnRyeUlu
ZGV4ID0gMDsKIH07CiAKLWlubGluZSBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eVRhYmxlKHVuc2ln
bmVkIGluaXRpYWxDYXBhY2l0eSkKLSAgICA6IG1faW5kZXhTaXplKHNpemVGb3JDYXBhY2l0eShp
bml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRleE1hc2sobV9pbmRleFNpemUgLSAxKQotICAg
ICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3RaZXJvZWRNYWxsb2MoZGF0YVNp
emUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQotICAgICwgbV9kZWxldGVkQ291bnQoMCkKLXsK
LSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwotfQotCi1pbmxpbmUgUHJvcGVy
dHlUYWJsZTo6UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmLCBKU0NlbGwqIG93bmVyLCBjb25z
dCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXplKG90aGVyLm1faW5kZXhT
aXplKQotICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCi0gICAgLCBtX2luZGV4
KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkpCi0gICAgLCBt
X2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCi0gICAgLCBtX2RlbGV0ZWRDb3VudChvdGhlci5t
X2RlbGV0ZWRDb3VudCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwot
Ci0gICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkpOwotCi0gICAg
aXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVn
aW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpdGVyLT5rZXktPnJlZigpOwot
ICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0
KCkpOwotICAgIH0KLQotICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgot
ICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5t
X2RlbGV0ZWRPZmZzZXRzLmdldCgpOwotICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQotICAg
ICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNl
dD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKLX0KLQotaW5saW5lIFByb3BlcnR5VGFibGU6OlBy
b3BlcnR5VGFibGUoSlNHbG9iYWxEYXRhJiwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgaW5pdGlh
bENhcGFjaXR5LCBjb25zdCBQcm9wZXJ0eVRhYmxlJiBvdGhlcikKLSAgICA6IG1faW5kZXhTaXpl
KHNpemVGb3JDYXBhY2l0eShpbml0aWFsQ2FwYWNpdHkpKQotICAgICwgbV9pbmRleE1hc2sobV9p
bmRleFNpemUgLSAxKQotICAgICwgbV9pbmRleChzdGF0aWNfY2FzdDx1bnNpZ25lZCo+KGZhc3Ra
ZXJvZWRNYWxsb2MoZGF0YVNpemUoKSkpKQotICAgICwgbV9rZXlDb3VudCgwKQotICAgICwgbV9k
ZWxldGVkQ291bnQoMCkKLXsKLSAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4U2l6ZSkpOwot
ICAgIEFTU0VSVChpbml0aWFsQ2FwYWNpdHkgPj0gb3RoZXIubV9rZXlDb3VudCk7Ci0KLSAgICBj
b25zdF9pdGVyYXRvciBlbmQgPSBvdGhlci5lbmQoKTsKLSAgICBmb3IgKGNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBvdGhlci5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIEFT
U0VSVChjYW5JbnNlcnQoKSk7Ci0gICAgICAgIHJlaW5zZXJ0KCppdGVyKTsKLSAgICAgICAgaXRl
ci0+a2V5LT5yZWYoKTsKLSAgICAgICAgSGVhcDo6d3JpdGVCYXJyaWVyKG93bmVyLCBpdGVyLT5z
cGVjaWZpY1ZhbHVlLmdldCgpKTsKLSAgICB9Ci0KLSAgICAvLyBDb3B5IHRoZSBtX2RlbGV0ZWRP
ZmZzZXRzIHZlY3Rvci4KLSAgICBWZWN0b3I8UHJvcGVydHlPZmZzZXQ+KiBvdGhlckRlbGV0ZWRP
ZmZzZXRzID0gb3RoZXIubV9kZWxldGVkT2Zmc2V0cy5nZXQoKTsKLSAgICBpZiAob3RoZXJEZWxl
dGVkT2Zmc2V0cykKLSAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9IGFkb3B0UHRyKG5ldyBWZWN0
b3I8UHJvcGVydHlPZmZzZXQ+KCpvdGhlckRlbGV0ZWRPZmZzZXRzKSk7Ci19Ci0KLWlubGluZSBQ
cm9wZXJ0eVRhYmxlOjp+UHJvcGVydHlUYWJsZSgpCi17Ci0gICAgaXRlcmF0b3IgZW5kID0gdGhp
cy0+ZW5kKCk7Ci0gICAgZm9yIChpdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7
ICsraXRlcikKLSAgICAgICAgaXRlci0+a2V5LT5kZXJlZigpOwotCi0gICAgZmFzdEZyZWUobV9p
bmRleCk7Ci19Ci0KIGlubGluZSBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBQcm9wZXJ0eVRhYmxl
OjpiZWdpbigpCiB7CiAgICAgcmV0dXJuIGl0ZXJhdG9yKHNraXBEZWxldGVkRW50cmllcyh0YWJs
ZSgpKSk7CkBAIC01MDIsMTUgKzQ1MywxNSBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgUHJvcGVy
dHlUYWJsZTo6bmV4dE9mZnNldChQcm9wZXJ0eU9mZnNldCBpbmxpbmVDYXBhY2l0eSkKICAgICBy
ZXR1cm4gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoc2l6ZSgpLCBpbmxpbmVDYXBhY2l0eSk7CiB9
CiAKLWlubGluZSBQYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFByb3BlcnR5VGFibGU6OmNvcHko
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1bnNpZ25lZCBuZXdDYXBh
Y2l0eSkKK2lubGluZSBQcm9wZXJ0eVRhYmxlKiBQcm9wZXJ0eVRhYmxlOjpjb3B5KEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgdW5zaWduZWQgbmV3Q2FwYWNpdHkpCiB7
CiAgICAgQVNTRVJUKG5ld0NhcGFjaXR5ID49IG1fa2V5Q291bnQpOwogCiAgICAgLy8gRmFzdCBj
YXNlOyBpZiB0aGUgbmV3IHRhYmxlIHdpbGwgYmUgdGhlIHNhbWUgbV9pbmRleFNpemUgYXMgdGhp
cyBvbmUsIHdlIGNhbiBtZW1jcHkgaXQsCiAgICAgLy8gc2F2ZSByZWhhc2hpbmcgYWxsIGtleXMu
CiAgICAgaWYgKHNpemVGb3JDYXBhY2l0eShuZXdDYXBhY2l0eSkgPT0gbV9pbmRleFNpemUpCi0g
ICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBvd25l
ciwgKnRoaXMpKTsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFByb3BlcnR5VGFibGUoZ2xvYmFs
RGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcykpOworICAgICAgICByZXR1cm4gUHJvcGVy
dHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICp0aGlzKTsKKyAgICByZXR1cm4gUHJv
cGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsIG5ld0NhcGFjaXR5LCAqdGhpcyk7
CiB9CiAKICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eVRhYmxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5VGFibGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5
ZDI2NzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eVRhYmxlLmNwcApAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCisKKyNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKKyNpbmNsdWRl
ICJTbG90VmlzaXRvcklubGluZXMuaCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gUHJvcGVydHlUYWJsZTo6c19pbmZv
ID0geyAiUHJvcGVydHlUYWJsZSIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUHJvcGVy
dHlUYWJsZSkgfTsKKworUHJvcGVydHlUYWJsZSogUHJvcGVydHlUYWJsZTo6Y3JlYXRlKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5KQoreworICAgIFBy
b3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJvcGVydHlU
YWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBpbml0aWFs
Q2FwYWNpdHkpOworICAgIHRhYmxlLT5maW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKKyAgICBy
ZXR1cm4gdGFibGU7Cit9CisKK1Byb3BlcnR5VGFibGUqIFByb3BlcnR5VGFibGU6OmNsb25lKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgSlNDZWxsKiBvd25lciwgY29uc3QgUHJvcGVydHlUYWJs
ZSYgb3RoZXIpCit7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBuZXcgKE5vdE51bGwsIGFs
bG9jYXRlQ2VsbDxQcm9wZXJ0eVRhYmxlPihnbG9iYWxEYXRhLmhlYXApKSBQcm9wZXJ0eVRhYmxl
KGdsb2JhbERhdGEsIG93bmVyLCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9uKGds
b2JhbERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJvcGVydHlUYWJsZSogUHJvcGVy
dHlUYWJsZTo6Y2xvbmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBKU0NlbGwqIG93bmVyLCB1
bnNpZ25lZCBpbml0aWFsQ2FwYWNpdHksIGNvbnN0IFByb3BlcnR5VGFibGUmIG90aGVyKQorewor
ICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8UHJv
cGVydHlUYWJsZT4oZ2xvYmFsRGF0YS5oZWFwKSkgUHJvcGVydHlUYWJsZShnbG9iYWxEYXRhLCBv
d25lciwgaW5pdGlhbENhcGFjaXR5LCBvdGhlcik7CisgICAgdGFibGUtPmZpbmlzaENyZWF0aW9u
KGdsb2JhbERhdGEpOworICAgIHJldHVybiB0YWJsZTsKK30KKworUHJvcGVydHlUYWJsZTo6UHJv
cGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eSkKKyAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnByb3BlcnR5VGFibGVT
dHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX2luZGV4U2l6ZShzaXplRm9yQ2FwYWNpdHkoaW5pdGlh
bENhcGFjaXR5KSkKKyAgICAsIG1faW5kZXhNYXNrKG1faW5kZXhTaXplIC0gMSkKKyAgICAsIG1f
aW5kZXgoc3RhdGljX2Nhc3Q8dW5zaWduZWQqPihmYXN0WmVyb2VkTWFsbG9jKGRhdGFTaXplKCkp
KSkKKyAgICAsIG1fa2V5Q291bnQoMCkKKyAgICAsIG1fZGVsZXRlZENvdW50KDApCit7CisgICAg
QVNTRVJUKGlzUG93ZXJPZjIobV9pbmRleFNpemUpKTsKK30KKworUHJvcGVydHlUYWJsZTo6UHJv
cGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIGNvbnN0
IFByb3BlcnR5VGFibGUmIG90aGVyKQorICAgIDogSlNDZWxsKGdsb2JhbERhdGEsIGdsb2JhbERh
dGEucHJvcGVydHlUYWJsZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1faW5kZXhTaXplKG90aGVy
Lm1faW5kZXhTaXplKQorICAgICwgbV9pbmRleE1hc2sob3RoZXIubV9pbmRleE1hc2spCisgICAg
LCBtX2luZGV4KHN0YXRpY19jYXN0PHVuc2lnbmVkKj4oZmFzdE1hbGxvYyhkYXRhU2l6ZSgpKSkp
CisgICAgLCBtX2tleUNvdW50KG90aGVyLm1fa2V5Q291bnQpCisgICAgLCBtX2RlbGV0ZWRDb3Vu
dChvdGhlci5tX2RlbGV0ZWRDb3VudCkKK3sKKyAgICBBU1NFUlQoaXNQb3dlck9mMihtX2luZGV4
U2l6ZSkpOworCisgICAgbWVtY3B5KG1faW5kZXgsIG90aGVyLm1faW5kZXgsIGRhdGFTaXplKCkp
OworCisgICAgaXRlcmF0b3IgZW5kID0gdGhpcy0+ZW5kKCk7CisgICAgZm9yIChpdGVyYXRvciBp
dGVyID0gYmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAgICBpdGVyLT5rZXkt
PnJlZigpOworICAgICAgICBIZWFwOjp3cml0ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmlj
VmFsdWUuZ2V0KCkpOworICAgIH0KKworICAgIC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMg
dmVjdG9yLgorICAgIFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMg
PSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdldCgpOworICAgIGlmIChvdGhlckRlbGV0ZWRPZmZz
ZXRzKQorICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9w
ZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9mZnNldHMpKTsKK30KKworUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIEpTQ2VsbCogb3duZXIsIHVu
c2lnbmVkIGluaXRpYWxDYXBhY2l0eSwgY29uc3QgUHJvcGVydHlUYWJsZSYgb3RoZXIpCisgICAg
OiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5wcm9wZXJ0eVRhYmxlU3RydWN0dXJlLmdl
dCgpKQorICAgICwgbV9pbmRleFNpemUoc2l6ZUZvckNhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkp
CisgICAgLCBtX2luZGV4TWFzayhtX2luZGV4U2l6ZSAtIDEpCisgICAgLCBtX2luZGV4KHN0YXRp
Y19jYXN0PHVuc2lnbmVkKj4oZmFzdFplcm9lZE1hbGxvYyhkYXRhU2l6ZSgpKSkpCisgICAgLCBt
X2tleUNvdW50KDApCisgICAgLCBtX2RlbGV0ZWRDb3VudCgwKQoreworICAgIEFTU0VSVChpc1Bv
d2VyT2YyKG1faW5kZXhTaXplKSk7CisgICAgQVNTRVJUKGluaXRpYWxDYXBhY2l0eSA+PSBvdGhl
ci5tX2tleUNvdW50KTsKKworICAgIGNvbnN0X2l0ZXJhdG9yIGVuZCA9IG90aGVyLmVuZCgpOwor
ICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IG90aGVyLmJlZ2luKCk7IGl0ZXIgIT0gZW5k
OyArK2l0ZXIpIHsKKyAgICAgICAgQVNTRVJUKGNhbkluc2VydCgpKTsKKyAgICAgICAgcmVpbnNl
cnQoKml0ZXIpOworICAgICAgICBpdGVyLT5rZXktPnJlZigpOworICAgICAgICBIZWFwOjp3cml0
ZUJhcnJpZXIob3duZXIsIGl0ZXItPnNwZWNpZmljVmFsdWUuZ2V0KCkpOworICAgIH0KKworICAg
IC8vIENvcHkgdGhlIG1fZGVsZXRlZE9mZnNldHMgdmVjdG9yLgorICAgIFZlY3RvcjxQcm9wZXJ0
eU9mZnNldD4qIG90aGVyRGVsZXRlZE9mZnNldHMgPSBvdGhlci5tX2RlbGV0ZWRPZmZzZXRzLmdl
dCgpOworICAgIGlmIChvdGhlckRlbGV0ZWRPZmZzZXRzKQorICAgICAgICBtX2RlbGV0ZWRPZmZz
ZXRzID0gYWRvcHRQdHIobmV3IFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4oKm90aGVyRGVsZXRlZE9m
ZnNldHMpKTsKK30KKwordm9pZCBQcm9wZXJ0eVRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkK
K3sKKyAgICBzdGF0aWNfY2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2VsbCktPlByb3BlcnR5VGFibGU6
On5Qcm9wZXJ0eVRhYmxlKCk7Cit9CisKK1Byb3BlcnR5VGFibGU6On5Qcm9wZXJ0eVRhYmxlKCkK
K3sKKyAgICBpdGVyYXRvciBlbmQgPSB0aGlzLT5lbmQoKTsKKyAgICBmb3IgKGl0ZXJhdG9yIGl0
ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgICAgICBpdGVyLT5rZXktPmRl
cmVmKCk7CisKKyAgICBmYXN0RnJlZShtX2luZGV4KTsKK30KKwordm9pZCBQcm9wZXJ0eVRhYmxl
Ojp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7Cisg
ICAgUHJvcGVydHlUYWJsZSogdGhpc09iamVjdCA9IGpzQ2FzdDxQcm9wZXJ0eVRhYmxlKj4oY2Vs
bCk7CisgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCAmc19pbmZvKTsK
KyAgICBBU1NFUlQodGhpc09iamVjdC0+c3RydWN0dXJlKCktPnR5cGVJbmZvKCkub3ZlcnJpZGVz
VmlzaXRDaGlsZHJlbigpKTsKKworICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKKworICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRoaXNPYmpl
Y3QtPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgcHRyID0gdGhpc09i
amVjdC0+YmVnaW4oKTsgcHRyICE9IGVuZDsgKytwdHIpCisgICAgICAgIHZpc2l0b3IuYXBwZW5k
KCZwdHItPnNwZWNpZmljVmFsdWUpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBiNzljMTA2Li45NzMxNjZmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTEzMSw5ICsxMzEsOSBAQCB2
b2lkIFN0cnVjdHVyZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlKSB7Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKSkgewogICAgICAgICAgICAgKytu
dW1iZXJXaXRoUHJvcGVydHlNYXBzOwotICAgICAgICAgICAgdG90YWxQcm9wZXJ0eU1hcHNTaXpl
ICs9IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLT5zaXplSW5NZW1vcnkoKTsKKyAgICAgICAg
ICAgIHRvdGFsUHJvcGVydHlNYXBzU2l6ZSArPSBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+
c2l6ZUluTWVtb3J5KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTIzNCw3ICsyMzQsNyBAQCB2
b2lkIFN0cnVjdHVyZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB2b2lkIFN0cnVjdHVyZTo6bWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiB7CiAgICAgQVNT
RVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKLSAgICBBU1NFUlQoIW1f
cHJvcGVydHlUYWJsZSk7CisgICAgQVNTRVJUKCFwcm9wZXJ0eVRhYmxlKCkpOwogCiAgICAgVmVj
dG9yPFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CiAgICAgc3RydWN0dXJlcy5hcHBlbmQodGhp
cyk7CkBAIC0yNDQsMjUgKzI0NCwyNSBAQCB2b2lkIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgLy8gU2VhcmNoIGZvciB0aGUg
bGFzdCBTdHJ1Y3R1cmUgd2l0aCBhIHByb3BlcnR5IHRhYmxlLgogICAgIHdoaWxlICgoc3RydWN0
dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpKSB7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUt
Pm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJl
LT5tX3Byb3BlcnR5VGFibGUpOworICAgICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZS0+cHJvcGVy
dHlUYWJsZSgpKTsKICAgICAgICAgICAgIEFTU0VSVCghc3RydWN0dXJlLT5wcmV2aW91c0lEKCkp
OwogCi0gICAgICAgICAgICBtX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlU
YWJsZS0+Y29weShnbG9iYWxEYXRhLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29m
ZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkpOworICAgICAgICAgICAgcHJvcGVydHlUYWJsZSgpLnNl
dChnbG9iYWxEYXRhLCB0aGlzLCBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS0+Y29weShnbG9i
YWxEYXRhLCAwLCBudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVD
YXBhY2l0eSkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgc3Ry
dWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKICAgICB9CiAKLSAgICBpZiAoIW1fcHJvcGVydHlU
YWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAobnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZz
ZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKKyAgICBpZiAoIXByb3BlcnR5VGFibGUo
KSkKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSwgbnVtYmVyT2ZTbG90c0Zv
ckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKTsKIAogICAgIGZvciAocHRy
ZGlmZl90IGkgPSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CiAgICAgICAg
IHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3RydWN0dXJlLT5tX25h
bWVJblByZXZpb3VzKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIFByb3BlcnR5TWFw
RW50cnkgZW50cnkoZ2xvYmFsRGF0YSwgdGhpcywgc3RydWN0dXJlLT5tX25hbWVJblByZXZpb3Vz
LmdldCgpLCBzdHJ1Y3R1cmUtPm1fb2Zmc2V0LCBzdHJ1Y3R1cmUtPm1fYXR0cmlidXRlc0luUHJl
dmlvdXMsIHN0cnVjdHVyZS0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91cy5nZXQoKSk7Ci0gICAg
ICAgIG1fcHJvcGVydHlUYWJsZS0+YWRkKGVudHJ5LCBtX29mZnNldCwgUHJvcGVydHlUYWJsZTo6
UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAgcHJvcGVydHlUYWJsZSgpLT5h
ZGQoZW50cnksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RD
aGFuZ2UpOwogICAgIH0KICAgICAKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC0y
ODcsOSArMjg3LDkgQEAgdm9pZCBTdHJ1Y3R1cmU6OmRlc3BlY2lmeURpY3Rpb25hcnlGdW5jdGlv
bihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmEKICAgICBtYXRlcmlhbGl6ZVBy
b3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7CiAKICAgICBBU1NFUlQoaXNEaWN0aW9u
YXJ5KCkpOwotICAgIEFTU0VSVChtX3Byb3BlcnR5VGFibGUpOworICAgIEFTU0VSVChwcm9wZXJ0
eVRhYmxlKCkpOwogCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3BlcnR5VGFi
bGUtPmZpbmQocmVwKS5maXJzdDsKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IHByb3Bl
cnR5VGFibGUoKS0+ZmluZChyZXApLmZpcnN0OwogICAgIEFTU0VSVChlbnRyeSk7CiAgICAgZW50
cnktPnNwZWNpZmljVmFsdWUuY2xlYXIoKTsKIH0KQEAgLTM3MywxNyArMzczLDE5IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb24oSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhLCBTdHJ1Y3R1cmUqCiAgICAgdHJhbnNpdGlvbi0+bV9hdHRyaWJ1dGVzSW5QcmV2aW91
cyA9IGF0dHJpYnV0ZXM7CiAgICAgdHJhbnNpdGlvbi0+bV9zcGVjaWZpY1ZhbHVlSW5QcmV2aW91
cy5zZXRNYXlCZU51bGwoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3BlY2lmaWNWYWx1ZSk7CiAK
LSAgICBpZiAoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUpIHsKKyAgICBpZiAoc3RydWN0dXJl
LT5wcm9wZXJ0eVRhYmxlKCkpIHsKICAgICAgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNp
c3RlbmN5KCk7CiAgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1faXNQaW5uZWRQcm9wZXJ0eVRhYmxl
KQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5t
X3Byb3BlcnR5VGFibGUtPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5t
X3Byb3BlcnR5VGFibGUtPnNpemUoKSArIDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0
cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS5y
ZWxlYXNlKCk7CisgICAgICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGds
b2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5jb3B5KGds
b2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLT5zaXplKCkg
KyAxKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlU
YWJsZSgpLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFi
bGUoKS5nZXQoKSk7CisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKS5jbGVh
cigpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHN0cnVjdHVyZS0+cHJl
dmlvdXNJRCgpKQogICAgICAgICAgICAgdHJhbnNpdGlvbi0+bWF0ZXJpYWxpemVQcm9wZXJ0eU1h
cChnbG9iYWxEYXRhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y3Jl
YXRlUHJvcGVydHlNYXAoKTsKKyAgICAgICAgICAgIHRyYW5zaXRpb24tPmNyZWF0ZVByb3BlcnR5
TWFwKGdsb2JhbERhdGEpOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVj
dHVyZS0+bV9vZmZzZXQ7CiAKQEAgLTQxNSw3ICs0MTcsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6Y2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0
cnVjdAogICAgIHRyYW5zaXRpb24tPm1fcHJvdG90eXBlLnNldChnbG9iYWxEYXRhLCB0cmFuc2l0
aW9uLCBwcm90b3R5cGUpOwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFw
SWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxl
ID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJh
bnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxEYXRh
LCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhnbG9i
YWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1Y3R1
cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBAIC00MzEsNyArNDMzLDcg
QEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmRlc3BlY2lmeUZ1bmN0aW9uVHJhbnNpdGlvbihKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnUKICAgICArK3RyYW5zaXRpb24tPm1fc3BlY2lmaWNG
dW5jdGlvblRocmFzaENvdW50OwogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhn
bG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPnBpbigpOwogCkBAIC00NTIsMTUgKzQ1
NCwxNSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihK
U0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdAogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5z
aXRpb24gPSBjcmVhdGUoZ2xvYmFsRGF0YSwgc3RydWN0dXJlKTsKIAogICAgICAgICBzdHJ1Y3R1
cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlU
YWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbik7CisgICAgICAgIHRyYW5zaXRp
b24tPnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0dXJl
LT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbikpOwog
ICAgICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAg
ICAgIHRyYW5zaXRpb24tPnBpbigpOwogICAgICAgICAKICAgICAgICAgc3RydWN0dXJlID0gdHJh
bnNpdGlvbjsKICAgICB9CiAKLSAgICBBU1NFUlQoc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFibGUp
OwotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJlLT5tX3Byb3BlcnR5VGFi
bGUtPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKKyAgICBBU1NFUlQoc3RydWN0dXJl
LT5wcm9wZXJ0eVRhYmxlKCkpOworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0
dXJlLT5wcm9wZXJ0eVRhYmxlKCktPmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKICAg
ICBBU1NFUlQoZW50cnkpOwogICAgIGVudHJ5LT5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKIApA
QCAtNDc1LDcgKzQ3Nyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjp0b0RpY3Rpb25hcnlUcmFu
c2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlCiAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gY3JlYXRlKGdsb2JhbERhdGEsIHN0cnVjdHVyZSk7CiAKICAgICBzdHJ1
Y3R1cmUtPm1hdGVyaWFsaXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAg
ICB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRh
YmxlRm9yUGlubmluZyhnbG9iYWxEYXRhLCB0cmFuc2l0aW9uKTsKKyAgICB0cmFuc2l0aW9uLT5w
cm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5zaXRpb24sIHN0cnVjdHVyZS0+Y29w
eVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKGdsb2JhbERhdGEsIHRyYW5zaXRpb24pKTsKICAgICB0
cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+bV9vZmZzZXQ7CiAgICAgdHJhbnNpdGlv
bi0+bV9kaWN0aW9uYXJ5S2luZCA9IGtpbmQ7CiAgICAgdHJhbnNpdGlvbi0+cGluKCk7CkBAIC00
OTksOSArNTAxLDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKEpTR2xv
YmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1Y3QKIHsKICAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oZ2xvYmFsRGF0YSwgc3Ry
dWN0dXJlKTsKIAotICAgIGlmICh0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUpIHsKLSAgICAg
ICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRh
YmxlLT5lbmQoKTsKLSAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0g
dHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVy
KQorICAgIGlmICh0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkpIHsKKyAgICAgICAgUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLT5lbmQo
KTsKKyAgICAgICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdHJhbnNpdGlv
bi0+cHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAg
ICAgICAgaXRlci0+YXR0cmlidXRlcyB8PSBEb250RGVsZXRlOwogICAgIH0KIApAQCAtNTE0LDkg
KzUxNiw5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKEpTR2xvYmFs
RGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBzdHJ1CiB7CiAgICAgU3RydWN0dXJlKiB0cmFu
c2l0aW9uID0gcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKGdsb2JhbERhdGEsIHN0cnVjdHVy
ZSk7CiAKLSAgICBpZiAodHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRhYmxlKSB7Ci0gICAgICAgIFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSB0cmFuc2l0aW9uLT5tX3Byb3BlcnR5VGFibGUt
PmJlZ2luKCk7Ci0gICAgICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHRyYW5zaXRp
b24tPm1fcHJvcGVydHlUYWJsZS0+ZW5kKCk7CisgICAgaWYgKHRyYW5zaXRpb24tPnByb3BlcnR5
VGFibGUoKSkgeworICAgICAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gdHJhbnNp
dGlvbi0+cHJvcGVydHlUYWJsZSgpLT5iZWdpbigpOworICAgICAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBlbmQgPSB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCktPmVuZCgpOwogICAgICAg
ICBpZiAoaXRlciAhPSBlbmQpCiAgICAgICAgICAgICB0cmFuc2l0aW9uLT5tX2hhc1JlYWRPbmx5
T3JHZXR0ZXJTZXR0ZXJQcm9wZXJ0aWVzRXhjbHVkaW5nUHJvdG8gPSB0cnVlOwogICAgICAgICBm
b3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKQEAgLTUzNSw3ICs1MzcsNyBAQCBTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6cHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgU3RydQogICAgIC8vIERvbid0IHNldCBtX29mZnNldCwgYXMgb25lIGNhbiBub3Qg
dHJhbnNpdGlvbiB0byB0aGlzLgogCiAgICAgc3RydWN0dXJlLT5tYXRlcmlhbGl6ZVByb3BlcnR5
TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgdHJhbnNpdGlvbi0+bV9wcm9wZXJ0eVRh
YmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcoZ2xvYmFsRGF0YSwg
dHJhbnNpdGlvbik7CisgICAgdHJhbnNpdGlvbi0+cHJvcGVydHlUYWJsZSgpLnNldChnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhn
bG9iYWxEYXRhLCB0cmFuc2l0aW9uKSk7CiAgICAgdHJhbnNpdGlvbi0+bV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPm1fb2Zmc2V0OwogICAgIHRyYW5zaXRpb24tPm1fcHJldmVudEV4dGVuc2lvbnMgPSB0
cnVlOwogICAgIHRyYW5zaXRpb24tPnBpbigpOwpAQCAtNTcyLDE3ICs1NzQsMTkgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbihKU0dsb2JhbERhdGEmIGdsb2Jh
bERhdGEsIFN0cnVjdHVyZSoKICAgICB0cmFuc2l0aW9uLT5tX29mZnNldCA9IHN0cnVjdHVyZS0+
bV9vZmZzZXQ7CiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+bV9vZmZzZXQsIHRyYW5zaXRp
b24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIAotICAgIGlmIChzdHJ1Y3R1cmUtPm1fcHJvcGVy
dHlUYWJsZSkgeworICAgIGlmIChzdHJ1Y3R1cmUtPnByb3BlcnR5VGFibGUoKSkgewogICAgICAg
ICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKICAgICAgICAgaWYgKHN0cnVj
dHVyZS0+bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpCi0gICAgICAgICAgICB0cmFuc2l0aW9uLT5t
X3Byb3BlcnR5VGFibGUgPSBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+Y29weShnbG9iYWxE
YXRhLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpICsgMSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRyYW5zaXRpb24tPm1fcHJvcGVydHlUYWJsZSA9
IHN0cnVjdHVyZS0+bV9wcm9wZXJ0eVRhYmxlLnJlbGVhc2UoKTsKKyAgICAgICAgICAgIHRyYW5z
aXRpb24tPnByb3BlcnR5VGFibGUoKS5zZXQoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5wcm9wZXJ0eVRhYmxlKCktPmNvcHkoZ2xvYmFsRGF0YSwgdHJhbnNpdGlvbiwgc3RydWN0
dXJlLT5wcm9wZXJ0eVRhYmxlKCktPnNpemUoKSArIDEpKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICB0cmFuc2l0aW9uLT5wcm9wZXJ0eVRhYmxlKCkuc2V0KGdsb2JhbERhdGEsIHRyYW5z
aXRpb24sIHN0cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLmdldCgpKTsKKyAgICAgICAgICAgIHN0
cnVjdHVyZS0+cHJvcGVydHlUYWJsZSgpLmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpCiAgICAgICAgICAgICB0cmFu
c2l0aW9uLT5tYXRlcmlhbGl6ZVByb3BlcnR5TWFwKGdsb2JhbERhdGEpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jcmVhdGVQcm9wZXJ0eU1hcCgpOworICAgICAgICAg
ICAgdHJhbnNpdGlvbi0+Y3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7CiAgICAgfQogICAg
IAogICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKGdsb2JhbERhdGEsIHRyYW5z
aXRpb24pOwpAQCAtNTk3LDExICs2MDEsMTEgQEAgYm9vbCBTdHJ1Y3R1cmU6OmlzU2VhbGVkKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbWF0
ZXJpYWxpemVQcm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIGlmICghbV9w
cm9wZXJ0eVRhYmxlKQorICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKIAotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IG1fcHJvcGVydHlUYWJs
ZS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gbV9wcm9w
ZXJ0eVRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKKyAgICBmb3IgKFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9wZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0
ZXIgIT0gZW5kOyArK2l0ZXIpIHsKICAgICAgICAgaWYgKChpdGVyLT5hdHRyaWJ1dGVzICYgRG9u
dERlbGV0ZSkgIT0gRG9udERlbGV0ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CkBAIC02MTUsMTEgKzYxOSwxMSBAQCBib29sIFN0cnVjdHVyZTo6aXNGcm96ZW4oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgaWYgKCFtX3Byb3BlcnR5
VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxlLT5lbmQo
KTsKLSAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Byb3BlcnR5VGFi
bGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAgICBQcm9wZXJ0eVRhYmxlOjpp
dGVyYXRvciBlbmQgPSBwcm9wZXJ0eVRhYmxlKCktPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBl
bmQ7ICsraXRlcikgewogICAgICAgICBpZiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udERlbGV0
ZSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGlmICghKGl0ZXItPmF0dHJp
YnV0ZXMgJiAoUmVhZE9ubHkgfCBBY2Nlc3NvcikpKQpAQCAtNjMzLDE4ICs2MzcsMTggQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmZsYXR0ZW5EaWN0aW9uYXJ5U3RydWN0dXJlKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSwgSlNPYmoKICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAg
QVNTRVJUKGlzRGljdGlvbmFyeSgpKTsKICAgICBpZiAoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnko
KSkgewotICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVRhYmxlKTsKKyAgICAgICAgQVNTRVJUKHBy
b3BlcnR5VGFibGUoKSk7CiAKLSAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBtX3Byb3Bl
cnR5VGFibGUtPnNpemUoKTsKKyAgICAgICAgc2l6ZV90IHByb3BlcnR5Q291bnQgPSBwcm9wZXJ0
eVRhYmxlKCktPnNpemUoKTsKIAogICAgICAgICAvLyBIb2xkcyBvdXIgdmFsdWVzIGNvbXBhY3Rl
ZCBieSBpbnNlcnRpb24gb3JkZXIuCiAgICAgICAgIFZlY3RvcjxKU1ZhbHVlPiB2YWx1ZXMocHJv
cGVydHlDb3VudCk7CiAKICAgICAgICAgLy8gQ29waWVzIG91dCBvdXIgdmFsdWVzIGZyb20gdGhl
aXIgaGFzaGVkIGxvY2F0aW9ucywgY29tcGFjdGluZyBwcm9wZXJ0eSB0YWJsZSBvZmZzZXRzIGFz
IHdlIGdvLgogICAgICAgICB1bnNpZ25lZCBpID0gMDsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6
aXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKKyAgICAgICAgUHJvcGVydHlU
YWJsZTo6aXRlcmF0b3IgZW5kID0gcHJvcGVydHlUYWJsZSgpLT5lbmQoKTsKICAgICAgICAgbV9v
ZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwotICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3Byb3BlcnR5VGFibGUtPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIs
ICsraSkgeworICAgICAgICBmb3IgKFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBwcm9w
ZXJ0eVRhYmxlKCktPmJlZ2luKCk7IGl0ZXIgIT0gZW5kOyArK2l0ZXIsICsraSkgewogICAgICAg
ICAgICAgdmFsdWVzW2ldID0gb2JqZWN0LT5nZXREaXJlY3QoaXRlci0+b2Zmc2V0KTsKICAgICAg
ICAgICAgIG1fb2Zmc2V0ID0gaXRlci0+b2Zmc2V0ID0gb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIo
aSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgICAgIH0KQEAgLTY1Myw3ICs2NTcsNyBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6ZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBKU09iagogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJv
cGVydHlDb3VudDsgaSsrKQogICAgICAgICAgICAgb2JqZWN0LT5wdXREaXJlY3QoZ2xvYmFsRGF0
YSwgb2Zmc2V0Rm9yUHJvcGVydHlOdW1iZXIoaSwgbV9pbmxpbmVDYXBhY2l0eSksIHZhbHVlc1tp
XSk7CiAKLSAgICAgICAgbV9wcm9wZXJ0eVRhYmxlLT5jbGVhckRlbGV0ZWRPZmZzZXRzKCk7Cisg
ICAgICAgIHByb3BlcnR5VGFibGUoKS0+Y2xlYXJEZWxldGVkT2Zmc2V0cygpOwogICAgICAgICBj
aGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgfQogCkBAIC02ODgsNyArNjkyLDcgQEAgUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGEKIAogdm9pZCBTdHJ1Y3R1cmU6OnBpbigpCiB7Ci0gICAgQVNT
RVJUKG1fcHJvcGVydHlUYWJsZSk7CisgICAgQVNTRVJUKHByb3BlcnR5VGFibGUoKSk7CiAgICAg
bV9pc1Bpbm5lZFByb3BlcnR5VGFibGUgPSB0cnVlOwogICAgIGNsZWFyUHJldmlvdXNJRCgpOwog
ICAgIG1fbmFtZUluUHJldmlvdXMuY2xlYXIoKTsKQEAgLTczNywxNCArNzQxLDE4IEBAIGlubGlu
ZSB2b2lkIFN0cnVjdHVyZTo6Y2hlY2tDb25zaXN0ZW5jeSgpCiAKICNlbmRpZgogCi1QYXNzT3du
UHRyPFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGUoSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBTdHJ1Y3R1cmUqIG93bmVyKQorUHJvcGVydHlUYWJsZSogU3RydWN0
dXJlOjpjb3B5UHJvcGVydHlUYWJsZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFN0cnVjdHVy
ZSogb3duZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG1fcHJvcGVydHlUYWJsZSA/IG5ldyBQ
cm9wZXJ0eVRhYmxlKGdsb2JhbERhdGEsIG93bmVyLCAqbV9wcm9wZXJ0eVRhYmxlKSA6IDApOwor
ICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
UHJvcGVydHlUYWJsZTo6Y2xvbmUoZ2xvYmFsRGF0YSwgb3duZXIsICpwcm9wZXJ0eVRhYmxlKCku
Z2V0KCkpOwogfQogCi1QYXNzT3duUHRyPFByb3BlcnR5VGFibGU+IFN0cnVjdHVyZTo6Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJl
KiBvd25lcikKK1Byb3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6Y29weVByb3BlcnR5VGFibGVGb3JQ
aW5uaW5nKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgU3RydWN0dXJlKiBvd25lcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobV9wcm9wZXJ0eVRhYmxlID8gbmV3IFByb3BlcnR5VGFibGUoZ2xv
YmFsRGF0YSwgb3duZXIsICptX3Byb3BlcnR5VGFibGUpIDogbmV3IFByb3BlcnR5VGFibGUobnVt
YmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQsIG1faW5saW5lQ2FwYWNpdHkpKSk7Cisg
ICAgaWYgKHByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgcmV0dXJuIFByb3BlcnR5VGFibGU6OmNs
b25lKGdsb2JhbERhdGEsIG93bmVyLCAqcHJvcGVydHlUYWJsZSgpLmdldCgpKTsKKyAgICByZXR1
cm4gUHJvcGVydHlUYWJsZTo6Y3JlYXRlKGdsb2JhbERhdGEsIG51bWJlck9mU2xvdHNGb3JMYXN0
T2Zmc2V0KG1fb2Zmc2V0LCBtX2lubGluZUNhcGFjaXR5KSk7CiB9CiAKIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQmIGF0dHJpYnV0ZXMsIEpTQ2VsbComIHNwZWNpZmljVmFsdWUp
CkBAIC03NTIsMTAgKzc2MCwxMCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0ds
b2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbQogICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAKICAgICBtYXRlcmlhbGl6
ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7Ci0gICAgaWYgKCFtX3Byb3BlcnR5
VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBpbnZhbGlk
T2Zmc2V0OwogCi0gICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBtX3Byb3BlcnR5VGFibGUt
PmZpbmQocHJvcGVydHlOYW1lLnVpZCgpKS5maXJzdDsKKyAgICBQcm9wZXJ0eU1hcEVudHJ5KiBl
bnRyeSA9IHByb3BlcnR5VGFibGUoKS0+ZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpLmZpcnN0Owog
ICAgIGlmICghZW50cnkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OwogCkBAIC03Njcs
MTAgKzc3NSwxMCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmdldChKU0dsb2JhbERhdGEm
IGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbQogYm9vbCBTdHJ1Y3R1cmU6OmRl
c3BlY2lmeUZ1bmN0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKIHsKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xv
YmFsRGF0YSk7Ci0gICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRh
YmxlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIFByb3BlcnR5TWFwRW50cnkqIGVu
dHJ5ID0gbV9wcm9wZXJ0eVRhYmxlLT5maW5kKHByb3BlcnR5TmFtZS51aWQoKSkuZmlyc3Q7Cisg
ICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocHJvcGVy
dHlOYW1lLnVpZCgpKS5maXJzdDsKICAgICBpZiAoIWVudHJ5KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTc4MiwxMSArNzkwLDExIEBAIGJvb2wgU3RydWN0dXJlOjpkZXNwZWNpZnlGdW5j
dGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFtZSBwcm9wZXJ0CiB2b2lk
IFN0cnVjdHVyZTo6ZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0
YSkKIHsKICAgICBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoZ2xvYmFsRGF0YSk7
Ci0gICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIFByb3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IG1fcHJv
cGVydHlUYWJsZS0+ZW5kKCk7Ci0gICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVy
ID0gbV9wcm9wZXJ0eVRhYmxlLT5iZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQorICAgIFBy
b3BlcnR5VGFibGU6Oml0ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CisgICAg
Zm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gcHJvcGVydHlUYWJsZSgpLT5iZWdp
bigpOyBpdGVyICE9IGVuZDsgKytpdGVyKQogICAgICAgICBpdGVyLT5zcGVjaWZpY1ZhbHVlLmNs
ZWFyKCk7CiB9CiAKQEAgLTgwMCwxMiArODA4LDEyIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6cHV0U3BlY2lmaWNWYWx1ZShKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFByb3BlcnR5TmFt
CiAKICAgICBTdHJpbmdJbXBsKiByZXAgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CiAKLSAgICBpZiAo
IW1fcHJvcGVydHlUYWJsZSkKLSAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoKTsKKyAgICBpZiAo
IXByb3BlcnR5VGFibGUoKSkKKyAgICAgICAgY3JlYXRlUHJvcGVydHlNYXAoZ2xvYmFsRGF0YSk7
CiAKLSAgICBQcm9wZXJ0eU9mZnNldCBuZXdPZmZzZXQgPSBtX3Byb3BlcnR5VGFibGUtPm5leHRP
ZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CisgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0g
cHJvcGVydHlUYWJsZSgpLT5uZXh0T2Zmc2V0KG1faW5saW5lQ2FwYWNpdHkpOwogCi0gICAgbV9w
cm9wZXJ0eVRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShnbG9iYWxEYXRhLCB0aGlzLCByZXAs
IG5ld09mZnNldCwgYXR0cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0
eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5h
ZGQoUHJvcGVydHlNYXBFbnRyeShnbG9iYWxEYXRhLCB0aGlzLCByZXAsIG5ld09mZnNldCwgYXR0
cmlidXRlcywgc3BlY2lmaWNWYWx1ZSksIG1fb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0
eU9mZnNldE1heUNoYW5nZSk7CiAgICAgCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJl
dHVybiBuZXdPZmZzZXQ7CkBAIC04MTcsNDAgKzgyNSw0MCBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogCiAgICAgU3RyaW5nSW1w
bCogcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwogCi0gICAgaWYgKCFtX3Byb3BlcnR5VGFibGUp
CisgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0
OwogCi0gICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IG1fcHJvcGVy
dHlUYWJsZS0+ZmluZChyZXApOworICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9z
aXRpb24gPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmQocmVwKTsKICAgICBpZiAoIXBvc2l0aW9uLmZp
cnN0KQogICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIFByb3BlcnR5T2Zmc2V0
IG9mZnNldCA9IHBvc2l0aW9uLmZpcnN0LT5vZmZzZXQ7CiAKLSAgICBtX3Byb3BlcnR5VGFibGUt
PnJlbW92ZShwb3NpdGlvbik7Ci0gICAgbV9wcm9wZXJ0eVRhYmxlLT5hZGREZWxldGVkT2Zmc2V0
KG9mZnNldCk7CisgICAgcHJvcGVydHlUYWJsZSgpLT5yZW1vdmUocG9zaXRpb24pOworICAgIHBy
b3BlcnR5VGFibGUoKS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOwogCiAgICAgY2hlY2tDb25z
aXN0ZW5jeSgpOwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLXZvaWQgU3RydWN0dXJlOjpjcmVh
dGVQcm9wZXJ0eU1hcCh1bnNpZ25lZCBjYXBhY2l0eSkKK3ZvaWQgU3RydWN0dXJlOjpjcmVhdGVQ
cm9wZXJ0eU1hcChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHVuc2lnbmVkIGNhcGFjaXR5KQog
ewotICAgIEFTU0VSVCghbV9wcm9wZXJ0eVRhYmxlKTsKKyAgICBBU1NFUlQoIXByb3BlcnR5VGFi
bGUoKSk7CiAKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgbV9wcm9wZXJ0eVRhYmxlID0g
YWRvcHRQdHIobmV3IFByb3BlcnR5VGFibGUoY2FwYWNpdHkpKTsKKyAgICBwcm9wZXJ0eVRhYmxl
KCkuc2V0KGdsb2JhbERhdGEsIHRoaXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZShnbG9iYWxEYXRh
LCBjYXBhY2l0eSkpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21T
dHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJv
cGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCiB7CiAgICAgbWF0ZXJpYWxpemVQcm9w
ZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIGlmICghbV9wcm9wZXJ0eVRhYmxl
KQorICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47CiAKICAgICBib29s
IGtub3duVW5pcXVlID0gIXByb3BlcnR5TmFtZXMuc2l6ZSgpOwogCi0gICAgUHJvcGVydHlUYWJs
ZTo6aXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKLSAgICBmb3IgKFByb3Bl
cnR5VGFibGU6Oml0ZXJhdG9yIGl0ZXIgPSBtX3Byb3BlcnR5VGFibGUtPmJlZ2luKCk7IGl0ZXIg
IT0gZW5kOyArK2l0ZXIpIHsKKyAgICBQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBlbmQgPSBwcm9w
ZXJ0eVRhYmxlKCktPmVuZCgpOworICAgIGZvciAoUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgaXRl
ciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAhPSBlbmQ7ICsraXRlcikgewogICAg
ICAgICBBU1NFUlQobV9oYXNOb25FbnVtZXJhYmxlUHJvcGVydGllcyB8fCAhKGl0ZXItPmF0dHJp
YnV0ZXMgJiBEb250RW51bSkpOwogICAgICAgICBpZiAoaXRlci0+a2V5LT5pc0lkZW50aWZpZXIo
KSAmJiAoIShpdGVyLT5hdHRyaWJ1dGVzICYgRG9udEVudW0pIHx8IG1vZGUgPT0gSW5jbHVkZURv
bnRFbnVtUHJvcGVydGllcykpIHsKICAgICAgICAgICAgIGlmIChrbm93blVuaXF1ZSkKQEAgLTg4
MiwxMSArODkwLDEyIEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2Vs
bCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgfQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
T2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNP
YmplY3QtPm1fc3BlY2lmaWNWYWx1ZUluUHJldmlvdXMpOwotICAgIGlmICh0aGlzT2JqZWN0LT5t
X3Byb3BlcnR5VGFibGUpIHsKLSAgICAgICAgUHJvcGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0g
dGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKLSAgICAgICAgZm9yIChQcm9wZXJ0
eVRhYmxlOjppdGVyYXRvciBwdHIgPSB0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGUtPmJlZ2lu
KCk7IHB0ciAhPSBlbmQ7ICsrcHRyKQotICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJnB0ci0+
c3BlY2lmaWNWYWx1ZSk7Ci0gICAgfQorCisgICAgaWYgKHRoaXNPYmplY3QtPm1faXNQaW5uZWRQ
cm9wZXJ0eVRhYmxlKSB7CisgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpOworICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm9wZXJ0
eVRhYmxlVW5zYWZlKTsKKyAgICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJs
ZVVuc2FmZSkKKyAgICAgICAgdGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlLmNsZWFy
KCk7CiB9CiAKIGJvb2wgU3RydWN0dXJlOjpwcm90b3R5cGVDaGFpbk1heUludGVyY2VwdFN0b3Jl
VG8oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpA
QCAtOTc3LDE3ICs5ODYsMTcgQEAgdm9pZCBQcm9wZXJ0eVRhYmxlOjpjaGVja0NvbnNpc3RlbmN5
KCkKIAogdm9pZCBTdHJ1Y3R1cmU6OmNoZWNrQ29uc2lzdGVuY3koKQogewotICAgIGlmICghbV9w
cm9wZXJ0eVRhYmxlKQorICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoIW1faGFzTm9uRW51bWVyYWJsZVByb3BlcnRpZXMpIHsKLSAgICAgICAgUHJv
cGVydHlUYWJsZTo6aXRlcmF0b3IgZW5kID0gbV9wcm9wZXJ0eVRhYmxlLT5lbmQoKTsKLSAgICAg
ICAgZm9yIChQcm9wZXJ0eVRhYmxlOjppdGVyYXRvciBpdGVyID0gbV9wcm9wZXJ0eVRhYmxlLT5i
ZWdpbigpOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7CisgICAgICAgIFByb3BlcnR5VGFibGU6Oml0
ZXJhdG9yIGVuZCA9IHByb3BlcnR5VGFibGUoKS0+ZW5kKCk7CisgICAgICAgIGZvciAoUHJvcGVy
dHlUYWJsZTo6aXRlcmF0b3IgaXRlciA9IHByb3BlcnR5VGFibGUoKS0+YmVnaW4oKTsgaXRlciAh
PSBlbmQ7ICsraXRlcikgewogICAgICAgICAgICAgQVNTRVJUKCEoaXRlci0+YXR0cmlidXRlcyAm
IERvbnRFbnVtKSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX3Byb3BlcnR5VGFibGUtPmNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICBwcm9wZXJ0eVRhYmxlKCktPmNoZWNrQ29uc2lzdGVuY3ko
KTsKIH0KIAogI2VuZGlmIC8vIERPX1BST1BFUlRZTUFQX0NPTlNURU5DWV9DSEVDSwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCAyMzU5YzZjLi4zMDNiZTM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtMzEsMTYg
KzMxLDE1IEBACiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgog
I2luY2x1ZGUgIkpTVHlwZS5oIgotI2luY2x1ZGUgIlByb3BlcnR5TWFwSGFzaFRhYmxlLmgiCiAj
aW5jbHVkZSAiUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIK
KyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogI2luY2x1ZGUgIlByb3RlY3QuaCIKICNpbmNs
dWRlICJTdHJ1Y3R1cmVSYXJlRGF0YS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZS5oIgogI2luY2x1ZGUgIkpTVHlwZUluZm8uaCIKICNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSAiV2Vhay5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVk
ZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KQEAgLTUxLDYgKzUwLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBjbGFzcyBQcm9wZXJ0eU5hbWVBcnJh
eTsKIGNsYXNzIFByb3BlcnR5TmFtZUFycmF5RGF0YTsKK2NsYXNzIFByb3BlcnR5VGFibGU7CiBj
bGFzcyBTdHJ1Y3R1cmVDaGFpbjsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgSlNTdHJpbmc7
CkBAIC0xMDgsMjUgKzEwOCw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzRnJvemVuKEpTR2xvYmFs
RGF0YSYpOwogICAgIGJvb2wgaXNFeHRlbnNpYmxlKCkgY29uc3QgeyByZXR1cm4gIW1fcHJldmVu
dEV4dGVuc2lvbnM7IH0KICAgICBib29sIGRpZFRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2RpZFRyYW5zaXRpb247IH0KLSAgICBib29sIHB1dFdpbGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgp
Ci0gICAgewotICAgICAgICBjaGVja09mZnNldENvbnNpc3RlbmN5KCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgQVNTRVJUKG91dE9mTGluZUNhcGFjaXR5KCkgPj0gb3V0T2ZMaW5lU2l6ZSgpKTsK
LSAgICAgICAgICAgIAotICAgICAgICBpZiAoIW1fcHJvcGVydHlUYWJsZSkgewotICAgICAgICAg
ICAgdW5zaWduZWQgY3VycmVudFNpemUgPSBudW1iZXJPZk91dE9mTGluZVNsb3RzRm9yTGFzdE9m
ZnNldChtX29mZnNldCk7Ci0gICAgICAgICAgICBBU1NFUlQob3V0T2ZMaW5lQ2FwYWNpdHkoKSA+
PSBjdXJyZW50U2l6ZSk7Ci0gICAgICAgICAgICByZXR1cm4gY3VycmVudFNpemUgPT0gb3V0T2ZM
aW5lQ2FwYWNpdHkoKTsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIEFTU0VSVCh0
b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IG1fcHJvcGVydHlUYWJsZS0+cHJvcGVydHlTdG9yYWdl
U2l6ZSgpKTsKLSAgICAgICAgaWYgKG1fcHJvcGVydHlUYWJsZS0+aGFzRGVsZXRlZE9mZnNldCgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCi0gICAgICAgIEFTU0VS
VCh0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpID49IG1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpKTsKLSAg
ICAgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZS0+c2l6ZSgpID09IHRvdGFsU3RvcmFnZUNhcGFj
aXR5KCk7Ci0gICAgfQorICAgIGJvb2wgcHV0V2lsbEdyb3dPdXRPZkxpbmVTdG9yYWdlKCk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IHN1Z2dlc3RlZE5ld091dE9mTGluZVN0b3JhZ2VD
YXBhY2l0eSgpOyAKIAogICAgIFN0cnVjdHVyZSogZmxhdHRlbkRpY3Rpb25hcnlTdHJ1Y3R1cmUo
SlNHbG9iYWxEYXRhJiwgSlNPYmplY3QqKTsKQEAgLTM4MiwyNyArMzY0LDI5IEBAIHByaXZhdGU6
CiAgICAgUHJvcGVydHlPZmZzZXQgcHV0U3BlY2lmaWNWYWx1ZShKU0dsb2JhbERhdGEmLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIEpTQ2VsbCogc3BlY2lmaWNWYWx1ZSk7CiAg
ICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CiAKLSAgICB2b2lkIGNyZWF0
ZVByb3BlcnR5TWFwKHVuc2lnbmVkIGtleUNvdW50ID0gMCk7CisgICAgdm9pZCBjcmVhdGVQcm9w
ZXJ0eU1hcChKU0dsb2JhbERhdGEmLCB1bnNpZ25lZCBrZXlDb3VudCA9IDApOwogICAgIHZvaWQg
Y2hlY2tDb25zaXN0ZW5jeSgpOwogCiAgICAgYm9vbCBkZXNwZWNpZnlGdW5jdGlvbihKU0dsb2Jh
bERhdGEmLCBQcm9wZXJ0eU5hbWUpOwogICAgIHZvaWQgZGVzcGVjaWZ5QWxsRnVuY3Rpb25zKEpT
R2xvYmFsRGF0YSYpOwogCi0gICAgUGFzc093blB0cjxQcm9wZXJ0eVRhYmxlPiBjb3B5UHJvcGVy
dHlUYWJsZShKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVyKTsKLSAgICBQYXNzT3duUHRy
PFByb3BlcnR5VGFibGU+IGNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyhKU0dsb2JhbERhdGEm
LCBTdHJ1Y3R1cmUqIG93bmVyKTsKKyAgICBXcml0ZUJhcnJpZXI8UHJvcGVydHlUYWJsZT4mIHBy
b3BlcnR5VGFibGUoKTsKKworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQcm9wZXJ0eVRhYmxlKEpT
R2xvYmFsRGF0YSYsIFN0cnVjdHVyZSogb3duZXIpOworICAgIFByb3BlcnR5VGFibGUqIGNvcHlQ
cm9wZXJ0eVRhYmxlRm9yUGlubmluZyhKU0dsb2JhbERhdGEmLCBTdHJ1Y3R1cmUqIG93bmVyKTsK
ICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1hdGVyaWFsaXplUHJvcGVydHlNYXAoSlNHbG9i
YWxEYXRhJik7CiAgICAgdm9pZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnkoSlNH
bG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgp
LT5jbGFzc0luZm8oKSA9PSAmc19pbmZvKTsKICAgICAgICAgQVNTRVJUKGNoZWNrT2Zmc2V0Q29u
c2lzdGVuY3koKSk7Ci0gICAgICAgIGlmICghbV9wcm9wZXJ0eVRhYmxlICYmIHByZXZpb3VzSUQo
KSkKKyAgICAgICAgaWYgKCFwcm9wZXJ0eVRhYmxlKCkgJiYgcHJldmlvdXNJRCgpKQogICAgICAg
ICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICB9CiAgICAgdm9p
ZCBtYXRlcmlhbGl6ZVByb3BlcnR5TWFwSWZOZWNlc3NhcnlGb3JQaW5uaW5nKEpTR2xvYmFsRGF0
YSYgZ2xvYmFsRGF0YSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xhc3NJ
bmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAg
ICAgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpCisgICAgICAgIGlmICghcHJvcGVydHlUYWJsZSgp
KQogICAgICAgICAgICAgbWF0ZXJpYWxpemVQcm9wZXJ0eU1hcChnbG9iYWxEYXRhKTsKICAgICB9
CiAKQEAgLTQ0NSwxOSArNDI5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFN0cnVjdHVyZVJhcmVEYXRhKj4obV9wcmV2aW91c09yUmFyZURhdGEuZ2V0KCkpOwogICAg
IH0KICAgICAgICAgCi0gICAgQUxXQVlTX0lOTElORSBib29sIGNoZWNrT2Zmc2V0Q29uc2lzdGVu
Y3koKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKCFtX3Byb3BlcnR5VGFibGUpIHsKLSAgICAg
ICAgICAgIEFTU0VSVCghbV9pc1Bpbm5lZFByb3BlcnR5VGFibGUpOwotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBSRUxFQVNFX0FTU0VS
VChudW1iZXJPZlNsb3RzRm9yTGFzdE9mZnNldChtX29mZnNldCwgbV9pbmxpbmVDYXBhY2l0eSkg
PT0gbV9wcm9wZXJ0eVRhYmxlLT5wcm9wZXJ0eVN0b3JhZ2VTaXplKCkpOwotICAgICAgICB1bnNp
Z25lZCB0b3RhbFNpemUgPSBtX3Byb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNpemUoKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQoKHRvdGFsU2l6ZSA8IGlubGluZUNhcGFjaXR5KCkgPyAw
IDogdG90YWxTaXplIC0gaW5saW5lQ2FwYWNpdHkoKSkgPT0gbnVtYmVyT2ZPdXRPZkxpbmVTbG90
c0Zvckxhc3RPZmZzZXQobV9vZmZzZXQpKTsKLSAgICAgICAgICAgIAotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9CisgICAgYm9vbCBjaGVja09mZnNldENvbnNpc3RlbmN5KCkgY29uc3Q7CiAK
ICAgICB2b2lkIGFsbG9jYXRlUmFyZURhdGEoSlNHbG9iYWxEYXRhJik7CiAgICAgdm9pZCBjbG9u
ZVJhcmVEYXRhRnJvbShKU0dsb2JhbERhdGEmLCBjb25zdCBTdHJ1Y3R1cmUqKTsKQEAgLTQ4Miw3
ICs0NTQsOCBAQCBwcml2YXRlOgogCiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlIG1fdHJh
bnNpdGlvblRhYmxlOwogCi0gICAgT3duUHRyPFByb3BlcnR5VGFibGU+IG1fcHJvcGVydHlUYWJs
ZTsKKyAgICAvLyBTaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBwcm9wZXJ0eVRhYmxlKCkuIER1
cmluZyBHQywgaXQgbWF5IGJlIHNldCB0byAwIGJ5IGFub3RoZXIgdGhyZWFkLgorICAgIFdyaXRl
QmFycmllcjxQcm9wZXJ0eVRhYmxlPiBtX3Byb3BlcnR5VGFibGVVbnNhZmU7CiAKICAgICBtdXRh
YmxlIElubGluZVdhdGNocG9pbnRTZXQgbV90cmFuc2l0aW9uV2F0Y2hwb2ludFNldDsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4
IDViZmQyZDUuLjUyMmU4MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgU3RydWN0dXJl
SW5saW5lc19oCiAjZGVmaW5lIFN0cnVjdHVyZUlubGluZXNfaAogCisjaW5jbHVkZSAiUHJvcGVy
dHlNYXBIYXNoVGFibGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CkBAIC02MSwxMCArNjIsMTAgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
Z2V0KEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgUHJvcGVydHlOYW1lIHByb3AKIHsKICAgICBB
U1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09ICZzX2luZm8pOwogICAgIG1hdGVyaWFs
aXplUHJvcGVydHlNYXBJZk5lY2Vzc2FyeShnbG9iYWxEYXRhKTsKLSAgICBpZiAoIW1fcHJvcGVy
dHlUYWJsZSkKKyAgICBpZiAoIXByb3BlcnR5VGFibGUoKSkKICAgICAgICAgcmV0dXJuIGludmFs
aWRPZmZzZXQ7CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9IG1fcHJvcGVydHlUYWJs
ZS0+ZmluZChwcm9wZXJ0eU5hbWUudWlkKCkpLmZpcnN0OworICAgIFByb3BlcnR5TWFwRW50cnkq
IGVudHJ5ID0gcHJvcGVydHlUYWJsZSgpLT5maW5kKHByb3BlcnR5TmFtZS51aWQoKSkuZmlyc3Q7
CiAgICAgcmV0dXJuIGVudHJ5ID8gZW50cnktPm9mZnNldCA6IGludmFsaWRPZmZzZXQ7CiB9CiAK
QEAgLTcyLDEwICs3MywxMCBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpnZXQo
SlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBjb25zdCBXVEY6OlN0cmluZwogewogICAgIEFTU0VS
VChzdHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gJnNfaW5mbyk7CiAgICAgbWF0ZXJpYWxpemVQ
cm9wZXJ0eU1hcElmTmVjZXNzYXJ5KGdsb2JhbERhdGEpOwotICAgIGlmICghbV9wcm9wZXJ0eVRh
YmxlKQorICAgIGlmICghcHJvcGVydHlUYWJsZSgpKQogICAgICAgICByZXR1cm4gaW52YWxpZE9m
ZnNldDsKIAotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gbV9wcm9wZXJ0eVRhYmxlLT5m
aW5kV2l0aFN0cmluZyhuYW1lLmltcGwoKSkuZmlyc3Q7CisgICAgUHJvcGVydHlNYXBFbnRyeSog
ZW50cnkgPSBwcm9wZXJ0eVRhYmxlKCktPmZpbmRXaXRoU3RyaW5nKG5hbWUuaW1wbCgpKS5maXJz
dDsKICAgICByZXR1cm4gZW50cnkgPyBlbnRyeS0+b2Zmc2V0IDogaW52YWxpZE9mZnNldDsKIH0K
ICAgICAKQEAgLTE3OSw2ICsxODAsNDggQEAgaW5saW5lIGJvb2wgU3RydWN0dXJlOjppc1ZhbGlk
KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUMKICAgICBy
ZXR1cm4gaXNWYWxpZChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGNhY2hlZFByb3RvdHlw
ZUNoYWluKTsKIH0KIAoraW5saW5lIGJvb2wgU3RydWN0dXJlOjpwdXRXaWxsR3Jvd091dE9mTGlu
ZVN0b3JhZ2UoKQoreworICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKworICAgIEFTU0VS
VChvdXRPZkxpbmVDYXBhY2l0eSgpID49IG91dE9mTGluZVNpemUoKSk7CisKKyAgICBpZiAoIXBy
b3BlcnR5VGFibGUoKSkgeworICAgICAgICB1bnNpZ25lZCBjdXJyZW50U2l6ZSA9IG51bWJlck9m
T3V0T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG91
dE9mTGluZUNhcGFjaXR5KCkgPj0gY3VycmVudFNpemUpOworICAgICAgICByZXR1cm4gY3VycmVu
dFNpemUgPT0gb3V0T2ZMaW5lQ2FwYWNpdHkoKTsKKyAgICB9CisKKyAgICBBU1NFUlQodG90YWxT
dG9yYWdlQ2FwYWNpdHkoKSA+PSBwcm9wZXJ0eVRhYmxlKCktPnByb3BlcnR5U3RvcmFnZVNpemUo
KSk7CisgICAgaWYgKHByb3BlcnR5VGFibGUoKS0+aGFzRGVsZXRlZE9mZnNldCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBBU1NFUlQodG90YWxTdG9yYWdlQ2FwYWNpdHkoKSA+PSBw
cm9wZXJ0eVRhYmxlKCktPnNpemUoKSk7CisgICAgcmV0dXJuIHByb3BlcnR5VGFibGUoKS0+c2l6
ZSgpID09IHRvdGFsU3RvcmFnZUNhcGFjaXR5KCk7Cit9CisKK0FMV0FZU19JTkxJTkUgV3JpdGVC
YXJyaWVyPFByb3BlcnR5VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQoreworICAg
IEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT5nbG9iYWxEYXRhKCku
aGVhcC5pc0J1c3koKSk7CisgICAgcmV0dXJuIG1fcHJvcGVydHlUYWJsZVVuc2FmZTsKK30KKwor
QUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpIGNv
bnN0Cit7CisgICAgUHJvcGVydHlUYWJsZSogcHJvcGVydHlUYWJsZSA9IG1fcHJvcGVydHlUYWJs
ZVVuc2FmZS5nZXQoKTsKKworICAgIGlmICghcHJvcGVydHlUYWJsZSkgeworICAgICAgICBBU1NF
UlQoIW1faXNQaW5uZWRQcm9wZXJ0eVRhYmxlKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlQobnVtYmVyT2ZTbG90c0Zvckxhc3RPZmZzZXQobV9vZmZz
ZXQsIG1faW5saW5lQ2FwYWNpdHkpID09IHByb3BlcnR5VGFibGUtPnByb3BlcnR5U3RvcmFnZVNp
emUoKSk7CisgICAgdW5zaWduZWQgdG90YWxTaXplID0gcHJvcGVydHlUYWJsZS0+cHJvcGVydHlT
dG9yYWdlU2l6ZSgpOworICAgIFJFTEVBU0VfQVNTRVJUKCh0b3RhbFNpemUgPCBpbmxpbmVDYXBh
Y2l0eSgpID8gMCA6IHRvdGFsU2l6ZSAtIGlubGluZUNhcGFjaXR5KCkpID09IG51bWJlck9mT3V0
T2ZMaW5lU2xvdHNGb3JMYXN0T2Zmc2V0KG1fb2Zmc2V0KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBTdHJ1Y3R1cmVJbmxpbmVzX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1dyaXRlQmFycmllci5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVCYXJyaWVyLmgKaW5kZXggZWY4
YzNhZi4uNmZhOGI2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
V3JpdGVCYXJyaWVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvV3JpdGVC
YXJyaWVyLmgKQEAgLTk5LDkgKzk5LDExIEBAIHB1YmxpYzoKICAgICAKICAgICBUKiBnZXQoKSBj
b25zdAogICAgIHsKLSAgICAgICAgaWYgKG1fY2VsbCkKLSAgICAgICAgICAgIHZhbGlkYXRlQ2Vs
bChtX2NlbGwpOwotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4oc3RhdGljX2Nh
c3Q8dm9pZCo+KG1fY2VsbCkpOworICAgICAgICAvLyBDb3B5IG1fY2VsbCB0byBhIGxvY2FsIHRv
IGF2b2lkIG11bHRpcGxlLXJlYWQgaXNzdWVzLiAoU2VlIDxodHRwOi8vd2Via2l0Lm9yZy9iLzEx
MDg1ND4pCisgICAgICAgIEpTQ2VsbCogY2VsbCA9IG1fY2VsbDsKKyAgICAgICAgaWYgKGNlbGwp
CisgICAgICAgICAgICB2YWxpZGF0ZUNlbGwoY2VsbCk7CisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFQqPihzdGF0aWNfY2FzdDx2b2lkKj4oY2VsbCkpOwogICAgIH0KIAogICAgIFQq
IG9wZXJhdG9yKigpIGNvbnN0Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>