<?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>147665</bug_id>
          
          <creation_ts>2015-08-04 17:06:38 -0700</creation_ts>
          <short_desc>WTF should have a ParkingLot for parking sleeping threads, so that locks can fit in 1.6 bits</short_desc>
          <delta_ts>2015-08-11 14:02:01 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>147545</dependson>
          <blocked>147841</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>achristensen</cc>
    
    <cc>andersca</cc>
    
    <cc>barraclough</cc>
    
    <cc>basile_clement</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1114879</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 17:06:38 -0700</bug_when>
    <thetext>Patch forthcoming after https://bugs.webkit.org/show_bug.cgi?id=147545 lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114880</commentid>
    <comment_count>1</comment_count>
      <attachid>258237</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 17:07:34 -0700</bug_when>
    <thetext>Created attachment 258237
ByteLock.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114881</commentid>
    <comment_count>2</comment_count>
      <attachid>258238</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 17:07:51 -0700</bug_when>
    <thetext>Created attachment 258238
ByteLock.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114882</commentid>
    <comment_count>3</comment_count>
      <attachid>258239</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 17:08:10 -0700</bug_when>
    <thetext>Created attachment 258239
ParkingLot.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1114883</commentid>
    <comment_count>4</comment_count>
      <attachid>258240</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-04 17:08:27 -0700</bug_when>
    <thetext>Created attachment 258240
ParkingLot.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115589</commentid>
    <comment_count>5</comment_count>
      <attachid>258430</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 18:40:35 -0700</bug_when>
    <thetext>Created attachment 258430
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115647</commentid>
    <comment_count>6</comment_count>
      <attachid>258454</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 22:00:09 -0700</bug_when>
    <thetext>Created attachment 258454
it does things

But mostly it just deadlocks a lot, for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115661</commentid>
    <comment_count>7</comment_count>
      <attachid>258459</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-06 22:59:13 -0700</bug_when>
    <thetext>Created attachment 258459
passing tests

albeit with rehashing disabled</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1115996</commentid>
    <comment_count>8</comment_count>
      <attachid>258560</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-07 21:58:10 -0700</bug_when>
    <thetext>Created attachment 258560
might be done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116021</commentid>
    <comment_count>9</comment_count>
      <attachid>258569</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-08 11:21:27 -0700</bug_when>
    <thetext>Created attachment 258569
writing more tests and stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116083</commentid>
    <comment_count>10</comment_count>
      <attachid>258588</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-08 20:31:41 -0700</bug_when>
    <thetext>Created attachment 258588
wrote more tests

It&apos;s failing some of the tests I wrote.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116084</commentid>
    <comment_count>11</comment_count>
      <attachid>258589</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-08 20:42:42 -0700</bug_when>
    <thetext>Created attachment 258589
it works

Have to finish up the various build systems but I think it&apos;s done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116331</commentid>
    <comment_count>12</comment_count>
      <attachid>258650</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-10 14:12:48 -0700</bug_when>
    <thetext>Created attachment 258650
it has tests even</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116336</commentid>
    <comment_count>13</comment_count>
      <attachid>258650</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-08-10 14:33:56 -0700</bug_when>
    <thetext>Comment on attachment 258650
it has tests even

Is there a reason you have not deleted wtf/ByteSpinLock.h?  I don&apos;t see anyone else using it except ConcurrentJITLock.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116337</commentid>
    <comment_count>14</comment_count>
      <attachid>258652</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-10 14:34:56 -0700</bug_when>
    <thetext>Created attachment 258652
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116388</commentid>
    <comment_count>15</comment_count>
      <attachid>258671</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-10 16:24:15 -0700</bug_when>
    <thetext>Created attachment 258671
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116389</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-10 16:26:22 -0700</bug_when>
    <thetext>Attachment 258671 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:51:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:115:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ParkingLot.cpp:541:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ParkingLot.cpp:570:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 18 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>1116423</commentid>
    <comment_count>17</comment_count>
      <attachid>258678</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-10 18:03:14 -0700</bug_when>
    <thetext>Created attachment 258678
the patch

Fix build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116424</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-08-10 18:05:34 -0700</bug_when>
    <thetext>Attachment 258678 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:51:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:71:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WTF/ParkingLot.cpp:115:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ParkingLot.cpp:542:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ParkingLot.cpp:571:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 6 in 18 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>1116636</commentid>
    <comment_count>19</comment_count>
      <attachid>258678</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-08-11 12:18:19 -0700</bug_when>
    <thetext>Comment on attachment 258678
the patch

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

r=me with comments for your consideration.

&gt; Source/WTF/wtf/ByteLock.cpp:34
&gt; +static bool verbose = false;

nit: Should this be a static const?

&gt; Source/WTF/wtf/ParkingLot.cpp:43
&gt; +bool verbose = false;

nit: should this be a static const?

&gt; Source/WTF/wtf/ParkingLot.cpp:52
&gt; +    ThreadIdentifier threadIdentifier;

In the project, we’ve been gradually migrating to use std::thread::id.  So we want to introduce new usage of the old ThreadIdentifier?  Or should we just start using std::thread::id instead?

&gt; Source/WTF/wtf/ParkingLot.cpp:259
&gt; +        std::sort(buckets.begin(), buckets.end());
&gt; +        for (Bucket* bucket : buckets)
&gt; +            bucket-&gt;lock.lock();

Hmmm … ensuring ordered locking by using the bucket addresses as the lock rank.  Nice trick.

&gt; Source/WTF/wtf/ParkingLot.cpp:284
&gt; +    // We try to ensure that the size of the hashtable used for thread queues is always large enough
&gt; +    // to avoid collisions. So, since we started a new thread, we may need to increase the size of the
&gt; +    // hashtable. This does just that. Note that we never free the old spine, since we never lock
&gt; +    // around spine accesses (i.e. the &quot;hashtable&quot; global variable).

I wish that we don’t have to leak the old hashtable, but I see that this is necessary for correctness because we want enqueue() and dequeue() to be able to get to the desired bucket without first acquiring a common lock.  And there’s no way to tell when all threads are done with the old hashtable.

&gt; Source/WTF/wtf/ParkingLot.h:31
&gt; +#include &lt;wtf/DataLog.h&gt;

Shouldn’t you put this #include &lt;wtf/DataLog.h&gt; in ParkingLot.cpp and ByteLock.cpp instead?

&gt; Source/WTF/wtf/ParkingLot.h:32
&gt; +#include &lt;wtf/StringPrintStream.h&gt;

Ditto.  Put in ParkingLot.cpp and ByteLock.cpp instead?

&gt; Source/WTF/wtf/ParkingLot.h:57
&gt; +    template&lt;typename T, typename U&gt;
&gt; +    static bool compareAndPark(const Atomic&lt;T&gt;* address, U expected)
&gt; +    {
&gt; +        return parkConditionally(
&gt; +            address,
&gt; +            [address, expected] () -&gt; bool {
&gt; +                U value = address-&gt;load();
&gt; +                return value == expected;
&gt; +            });
&gt; +    }

When would we ever want T to be different from U?  In the lambda function, we expect to load a value of type U from the address of Atomic&lt;T&gt;*.  According to Atomics.h, Atomic&lt;T&gt;::load will always return a value of type T.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116645</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 12:31:57 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Comment on attachment 258678 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=258678&amp;action=review
&gt; 
&gt; r=me with comments for your consideration.
&gt; 
&gt; &gt; Source/WTF/wtf/ByteLock.cpp:34
&gt; &gt; +static bool verbose = false;
&gt; 
&gt; nit: Should this be a static const?

Yes it should!

&gt; 
&gt; &gt; Source/WTF/wtf/ParkingLot.cpp:43
&gt; &gt; +bool verbose = false;
&gt; 
&gt; nit: should this be a static const?

It should be a const bool.  It&apos;s already &quot;static&quot; because it&apos;s inside an anonymous namespace.

&gt; 
&gt; &gt; Source/WTF/wtf/ParkingLot.cpp:52
&gt; &gt; +    ThreadIdentifier threadIdentifier;
&gt; 
&gt; In the project, we’ve been gradually migrating to use std::thread::id.  So
&gt; we want to introduce new usage of the old ThreadIdentifier?  Or should we
&gt; just start using std::thread::id instead?

Hmmm.  I&apos;ll keep using ThreadIdentifier for now just because Threading.h still does use it.

&gt; 
&gt; &gt; Source/WTF/wtf/ParkingLot.cpp:259
&gt; &gt; +        std::sort(buckets.begin(), buckets.end());
&gt; &gt; +        for (Bucket* bucket : buckets)
&gt; &gt; +            bucket-&gt;lock.lock();
&gt; 
&gt; Hmmm … ensuring ordered locking by using the bucket addresses as the lock
&gt; rank.  Nice trick.
&gt; 
&gt; &gt; Source/WTF/wtf/ParkingLot.cpp:284
&gt; &gt; +    // We try to ensure that the size of the hashtable used for thread queues is always large enough
&gt; &gt; +    // to avoid collisions. So, since we started a new thread, we may need to increase the size of the
&gt; &gt; +    // hashtable. This does just that. Note that we never free the old spine, since we never lock
&gt; &gt; +    // around spine accesses (i.e. the &quot;hashtable&quot; global variable).
&gt; 
&gt; I wish that we don’t have to leak the old hashtable, but I see that this is
&gt; necessary for correctness because we want enqueue() and dequeue() to be able
&gt; to get to the desired bucket without first acquiring a common lock.  And
&gt; there’s no way to tell when all threads are done with the old hashtable.

Right. This is why the hashtable spine is separate from the Bucket objects.  The Bucket objects are big because of the 64-byte padding to prevent false sharing (like, my MBP has 64-byte cache lines) and because they hold all of the interesting state.  The spines are small.  The fact that we resize the hashtable at least 2x each time means that the leaking of the spines causes at worst a 2x increase in spine memory usage, which is fine since the spines are tiny compared to the total sizes of the Buckets.

&gt; 
&gt; &gt; Source/WTF/wtf/ParkingLot.h:31
&gt; &gt; +#include &lt;wtf/DataLog.h&gt;
&gt; 
&gt; Shouldn’t you put this #include &lt;wtf/DataLog.h&gt; in ParkingLot.cpp and
&gt; ByteLock.cpp instead?

Ooops, this is leftover from when I had debug code in ParkingLot.h.  I&apos;ll remove.

&gt; 
&gt; &gt; Source/WTF/wtf/ParkingLot.h:32
&gt; &gt; +#include &lt;wtf/StringPrintStream.h&gt;
&gt; 
&gt; Ditto.  Put in ParkingLot.cpp and ByteLock.cpp instead?

Ditto, will remove.

&gt; 
&gt; &gt; Source/WTF/wtf/ParkingLot.h:57
&gt; &gt; +    template&lt;typename T, typename U&gt;
&gt; &gt; +    static bool compareAndPark(const Atomic&lt;T&gt;* address, U expected)
&gt; &gt; +    {
&gt; &gt; +        return parkConditionally(
&gt; &gt; +            address,
&gt; &gt; +            [address, expected] () -&gt; bool {
&gt; &gt; +                U value = address-&gt;load();
&gt; &gt; +                return value == expected;
&gt; &gt; +            });
&gt; &gt; +    }
&gt; 
&gt; When would we ever want T to be different from U?  In the lambda function,
&gt; we expect to load a value of type U from the address of Atomic&lt;T&gt;*. 
&gt; According to Atomics.h, Atomic&lt;T&gt;::load will always return a value of type T.

This is because of code like:

Atomic&lt;uint8_t&gt; thing;
...
ParkingLot::compareAndPark(&amp;thing, 0)

If we didn&apos;t have U, this would fail to compile because &quot;0&quot; is an int and not a uint8_t.  In fact, even if we did:

ParkingLot::compareAndPark(&amp;thing, 0u)

then it would still not compile because unsigned and uint8_t are not the same.  This is why U is separate - it allows &quot;expected&quot; to be a constant and the code will compile fine so long as that constant (or variable) has an appropriate operator==.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116656</commentid>
    <comment_count>21</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 12:52:17 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/188280</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116672</commentid>
    <comment_count>22</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2015-08-11 13:21:59 -0700</bug_when>
    <thetext>Build fix for at least GTK and Windows in http://trac.webkit.org/changeset/188284</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1116699</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-08-11 14:02:01 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Build fix for at least GTK and Windows in
&gt; http://trac.webkit.org/changeset/188284

Thank you!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>258237</attachid>
            <date>2015-08-04 17:07:34 -0700</date>
            <delta_ts>2015-08-06 18:40:35 -0700</delta_ts>
            <desc>ByteLock.cpp</desc>
            <filename>ByteLock.cpp</filename>
            <type>text/plain</type>
            <size>3698</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogKi8KCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIkJ5dGVM
b2NrLmgiCgojaW5jbHVkZSAiUGFya2luZ0xvdC5oIgoKbmFtZXNwYWNlIFdURiB7Cgp2b2lkIEJ5
dGVMb2NrOjpsb2NrU2xvdygpCnsKICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CgogICAgLy8g
VGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBK
aWtlc1JWTSBleHBlcmltZW50cy4KICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOwog
ICAgCiAgICBmb3IgKDs7KSB7CiAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9i
eXRlLmxvYWQoKTsKCiAgICAgICAgLy8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgog
ICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCiAgICAgICAgICAgICYm
IG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBpc0hlbGRCaXQpKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIC8vIElmIHRo
ZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2Fu
IGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgogICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUg
JiBoYXNQYXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgewogICAgICAgICAgICBz
cGluQ291bnQrKzsKICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRv
IHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4g
V2Ugc3BpbiBhcm91bmQKICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFu
ZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVl
ICYgaGFzUGFya2VkQml0KQogICAgICAgICAgICAmJiAhbV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdl
YWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCiAg
ICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0
byBiZSBpc0hlbGR8aGFzUGFya2VkLiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2Fu
IHBhcmsuCiAgICAgICAgUGFya2luZ0xvdDo6cGFyaygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQ
YXJrZWRCaXQpOwoKICAgICAgICAvLyBXZSBoYXZlIGF3YWtlZCwgb3Igd2UgbmV2ZXIgcGFya2Vk
IGJlY2F1c2UgdGhlIGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAogICAg
ICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgogICAgfQp9Cgp2b2lkIEJ5dGVMb2NrOjp1bmxv
Y2tTbG93KCkKewogICAgLy8gUmVsZWFzZSB0aGUgbG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBz
b21lb25lIGlzIHBhcmtlZC4gTm90ZSB0aGF0IGFzIHNvb24gYXMgd2UgZG8gdGhpcywKICAgIC8v
IHNvbWVvbmUgbWlnaHQgYmFyZ2UgaW4uCiAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZTsKICAgIGZv
ciAoOzspIHsKICAgICAgICBvbGRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOwogICAgICAgIEFT
U0VSVChvbGRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpOwogICAgICAgIGlmIChtX2J5dGUuY29tcGFy
ZUV4Y2hhbmdlV2VhayhvbGRCeXRlVmFsdWUsIDApKQogICAgICAgICAgICBicmVhazsKICAgIH0K
CiAgICAvLyBOb3RlIHRoYXQgc29tZW9uZSBjb3VsZCB0cnkgdG8gcGFyayByaWdodCBub3cuIElm
IHRoYXQgaGFwcGVucywgdGhleSB3aWxsIHJldHVybiBpbW1lZGlhdGVseQogICAgLy8gYmVjYXVz
ZSBvdXIgcGFya2luZyBwcmVkaWNhdGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFz
UGFya2VkQml0LCBidXQgd2UndmUgYWxyZWFkeSBzZXQKICAgIC8vIG1fYnl0ZSA9IDAuCgogICAg
Ly8gSWYgdGhlcmUgaGFkIGJlZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4g
VGhpcyBjYXVzZXMgYSBiYXJnaW5nIHN0YW1wZWRlLCBidXQgd2hpbGUKICAgIC8vIHRoYXQgaXMg
dGhlb3JldGljYWxseSBzY2FyeSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ug
d2UgdXN1YWxseSBkb24ndCBoYXZlIGVub3VnaAogICAgLy8gdGhyZWFkcyBmb3IgdGhpcyB0byBt
YXR0ZXIuCiAgICBpZiAob2xkQnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQogICAgICAgIFBhcmtp
bmdMb3Q6OnVucGFya0FsbCgmbV9ieXRlKTsKfQoKfSAvLyBuYW1lc3BhY2UgV1RGCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>258238</attachid>
            <date>2015-08-04 17:07:51 -0700</date>
            <delta_ts>2015-08-06 18:40:35 -0700</delta_ts>
            <desc>ByteLock.h</desc>
            <filename>ByteLock.h</filename>
            <type>text/plain</type>
            <size>2371</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogKi8KCiNpZm5kZWYgQnl0ZUxvY2tfaAojZGVmaW5lIEJ5dGVMb2Nr
X2gKCiNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgoKbmFtZXNwYWNlIFdURiB7CgpjbGFzcyBCeXRl
TG9jayB7CnB1YmxpYzoKICAgIEJ5dGVMb2NrKCkKICAgIHsKICAgICAgICBtX2J5dGUuc3RvcmUo
MCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CiAgICB9CiAgICAKICAgIHZvaWQgbG9jaygp
CiAgICB7CiAgICAgICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBp
c0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgewogICAgICAgICAgICAvLyBM
b2NrIGFjcXVpcmVkIQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBsb2Nr
U2xvdygpOwogICAgfQoKICAgIHZvaWQgdW5sb2NrKCkKICAgIHsKICAgICAgICBpZiAoTElLRUxZ
KG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3Jk
ZXJfcmVsZWFzZSkpKSB7CiAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3
YXMgd2FpdGluZyEKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdW5sb2Nr
U2xvdygpOwogICAgfQoKICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKICAgIHsKICAgICAgICByZXR1
cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CiAg
ICB9CgogICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CiAgICB7CiAgICAgICAgcmV0dXJuIGlzSGVs
ZCgpOwogICAgfQoKcHJpdmF0ZToKICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGlzSGVsZEJpdCA9
IDE7CiAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJrZWRCaXQgPSAxOwoKICAgIFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGxvY2tTbG93KCk7CiAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCB1bmxvY2tTbG93KCk7CgogICAgQXRvbWljPHVpbnQ4X3Q+IG1fYnl0ZTsKfTsKCn0gLy8gbmFt
ZXNwYWNlIFdURgoKI2VuZGlmIC8vIEJ5dGVMb2NrX2gKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>258239</attachid>
            <date>2015-08-04 17:08:10 -0700</date>
            <delta_ts>2015-08-06 18:40:35 -0700</delta_ts>
            <desc>ParkingLot.cpp</desc>
            <filename>ParkingLot.cpp</filename>
            <type>text/plain</type>
            <size>12943</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogKi8KCiNpbmNsdWRlICJjb25maWcuaCIKI2luY2x1ZGUgIlBhcmtp
bmdMb3QuaCIKCiNpbmNsdWRlICJMb2NrLmgiCiNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgoj
aW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgojaW5jbHVkZSA8bXV0ZXg+CiNpbmNsdWRl
IDx0aHJlYWQ+CgpuYW1lc3BhY2UgV1RGIHsKCm5hbWVzcGFjZSB7CgpzdHJ1Y3QgVGhyZWFkRGF0
YSB7CiAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKcHVibGljOgogICAgCiAgICBUaHJlYWRE
YXRhKCk7CiAgICB+VGhyZWFkRGF0YSgpOwogICAgCiAgICBib29sIHNob3VsZFBhcmsgeyBmYWxz
ZSB9OwogICAgc3RkOjptdXRleCBwYXJraW5nTG9jazsKICAgIHN0ZDo6Y29uZGl0aW9uX3Zhcmlh
YmxlIHBhcmtpbmdDb25kaXRpb247CgogICAgdm9pZCogYWRkcmVzczsKICAgIFRocmVhZERhdGEq
IG5leHRJblF1ZXVlIHsgbnVsbHB0ciB9Owp9OwoKZW51bSBjbGFzcyBEZXF1ZXVlUmVzdWx0IHsK
ICAgIElnbm9yZSwKICAgIFJlbW92ZUFuZENvbnRpbnVlLAogICAgUmVtb3ZlQW5kU3RvcAp9OwoK
c3RydWN0IEJ1Y2tldCB7CiAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKcHVibGljOgogICAg
dm9pZCBlbnF1ZXVlKFRocmVhZERhdGEqIGRhdGEpCiAgICB7CiAgICAgICAgQVNTRVJUKGRhdGEt
PmFkZHJlc3MpOwogICAgICAgIEFTU0VSVCghZGF0YS0+bmV4dEluUXVldWUpOwogICAgICAgIAog
ICAgICAgIGlmIChxdWV1ZVRhaWwpIHsKICAgICAgICAgICAgcXVldWVUYWlsLT5uZXh0SW5RdWV1
ZSA9IGRhdGE7CiAgICAgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7CiAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICB9CgogICAgICAgIHF1ZXVlSGVhZCA9IGRhdGE7CiAgICAgICAgcXVldWVUYWls
ID0gZGF0YTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgogICAgdm9pZCBn
ZW5lcmljRGVxdWV1ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgewogICAgICAgIGlmICgh
cXVldWVIZWFkKQogICAgICAgICAgICByZXR1cm47CgogICAgICAgIGJvb2wgc2hvdWxkQ29udGlu
dWUgPSB0cnVlOwogICAgICAgIGZvciAoCiAgICAgICAgICAgIFRocmVhZERhdGEqKiBjdXJyZW50
UHRyID0gJnF1ZXVlSGVhZDsKICAgICAgICAgICAgc2hvdWxkQ29udGludWUgJiYgKmN1cnJlbnRQ
dHI7CiAgICAgICAgICAgIGN1cnJlbnRQdHIgPSAmKCgqY3VycmVudFB0ciktPm5leHRJblF1ZXVl
KSkgewogICAgICAgICAgICAKICAgICAgICAgICAgVGhyZWFkRGF0YSogY3VycmVudCA9ICpjdXJy
ZW50UHRyOwogICAgICAgICAgICBEZXF1ZXVlUmVzdWx0IHJlc3VsdCA9IGZ1bmN0b3IoY3VycmVu
dCk7CiAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgICAgICAgIGNhc2UgRGVxdWV1
ZVJlc3VsdDo6SWdub3JlOgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2Ug
RGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kQ29udGludWU6CiAgICAgICAgICAgICAgICAqY3VycmVu
dFB0ciA9IGN1cnJlbnQtPm5leHRJblF1ZXVlOwogICAgICAgICAgICAgICAgY3VycmVudC0+bmV4
dEluUXVldWUgPSBudWxscHRyOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNh
c2UgRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcDoKICAgICAgICAgICAgICAgICpjdXJyZW50
UHRyID0gY3VycmVudC0+bmV4dEluUXVldWU7CiAgICAgICAgICAgICAgICBjdXJyZW50LT5uZXh0
SW5RdWV1ZSA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNl
OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAg
IGlmICghcXVldWVIZWFkKQogICAgICAgICAgICBxdWV1ZVRhaWwgPSBudWxscHRyOwogICAgfQog
ICAgCiAgICBUaHJlYWREYXRhKiBkZXF1ZXVlKCkKICAgIHsKICAgICAgICBUaHJlYWREYXRhKiBy
ZXN1bHQgPSBudWxscHRyOwogICAgICAgIGdlbmVyaWNEZXF1ZXVlKAogICAgICAgICAgICBbJl0g
KFRocmVhZERhdGEqIGVsZW1lbnQpIC0+IERlcXVldWVSZXN1bHQgewogICAgICAgICAgICAgICAg
cmVzdWx0ID0gZWxlbWVudDsKICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpS
ZW1vdmVBbmRTdG9wOwogICAgICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
fQoKICAgIFRocmVhZERhdGEqIHF1ZXVlSGVhZCB7IG51bGxwdHIgfTsKICAgIFRocmVhZERhdGEq
IHF1ZXVlVGFpbCB7IG51bGxwdHIgfTsKCiAgICAvLyBUaGlzIGxvY2sgcHJvdGVjdHMgdGhlIGVu
dGlyZSBidWNrZXQuIFRob3Ugc2hhbGwgbm90IG1ha2UgY2hhbmdlcyB0byBCdWNrZXQgd2l0aG91
dCBob2xkaW5nCiAgICAvLyB0aGlzIGxvY2suCiAgICBMb2NrIGxvY2s7CgogICAgLy8gUHV0IHNv
bWUgZGlzdGFuZSBiZXR3ZWVuIGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9uZSBvZiBzZXZl
cmFsIG1pdGlnYXRpb25zIGFnYWluc3QgZmFsc2UKICAgIC8vIHNoYXJpbmcuCiAgICBjaGFyIHBh
ZGRpbmdbNjRdOwp9OwoKc3RydWN0IEhhc2h0YWJsZSB7CiAgICB1bnNpZ25lZCBzaXplOwogICAg
QXRvbWljPEJ1Y2tldCo+IGRhdGFbMV07CgogICAgSGFzaHRhYmxlKiBjcmVhdGUodW5zaWduZWQg
c2l6ZSkKICAgIHsKICAgICAgICBBU1NFUlQoc2l6ZSA+PSAxKTsKICAgICAgICAKICAgICAgICBI
YXNodGFibGUqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEhhc2h0YWJsZSo+KAogICAgICAgICAgICBm
YXN0WmVyb2VkTWFsbG9jKHNpemVvZihIYXNodGFibGUpICsgc2l6ZW9mKEF0b21pYzxCdWNrZXQq
PikgKiAoc2l6ZSAtIDEpKSk7CiAgICAgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIHZvaWQgZGVzdHJveShIYXNodGFibGUqIGhhc2h0YWJs
ZSkKICAgIHsKICAgICAgICBmYXN0RnJlZShoYXNodGFibGUpOwogICAgfQp9OwoKVGhyZWFkU3Bl
Y2lmaWM8VGhyZWFkRGF0YT4qIHRocmVhZERhdGE7CkF0b21pYzxIYXNodGFibGUqPiBoYXNodGFi
bGU7CkF0b21pYzx1bnNpZ25lZD4gbnVtVGhyZWFkczsKCi8vIFdpdGggNjQgYnl0ZXMgb2YgcGFk
ZGluZyBwZXIgYnVja2V0LCBhc3N1bWluZyBhIGhhc2h0YWJsZSBpcyBmdWxseSBwb3B1bGF0ZWQg
d2l0aCBidWNrZXRzLCB0aGUKLy8gbWVtb3J5IHVzYWdlIHBlciB0aHJlYWQgd2lsbCBzdGlsbCBi
ZSBsZXNzIHRoYW4gMUtCLgpjb25zdCB1bnNpZ25lZCBtYXhMb2FkRmFjdG9yID0gMTA7Cgpjb25z
dCB1bnNpZ25lZCBncm93dGhGYWN0b3IgPSAyOwoKdW5zaWduZWQgaGFzaEFkZHJlc3Modm9pZCog
YWRkcmVzcykKewogICAgcmV0dXJuIFdURjo6UHRySGFzaDx2b2lkKj46Omhhc2goYWRkcmVzcyk7
Cn0KClRocmVhZERhdGE6OlRocmVhZERhdGEoKQp7CiAgICB1bnNpZ25lZCBjdXJyZW50TnVtVGhy
ZWFkczsKICAgIGZvciAoOzspIHsKICAgICAgICB1bnNpZ25lZCBvbGROdW1UaHJlYWRzID0gbnVt
VGhyZWFkcy5sb2FkKCk7CiAgICAgICAgY3VycmVudE51bVRocmVhZHMgPSBvbGROdW1UaHJlYWRz
ICsgMTsKICAgICAgICBpZiAobnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRo
cmVhZHMsIGN1cnJlbnROdW1UaHJlYWRzKSkKICAgICAgICAgICAgYnJlYWs7CiAgICB9CgogICAg
Zm9yICg7OykgewogICAgICAgIEhhc2h0YWJsZSogb2xkSGFzaHRhYmxlOwogICAgICAgIAogICAg
ICAgIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CiAgICAgICAgaWYgKCFvbGRIYXNo
dGFibGUpIHsKICAgICAgICAgICAgLy8gVHJ5IHRvIGJlIHRoZSBmaXJzdCB0byBjcmVhdGUgdGhl
IGhhc2h0YWJsZS4KICAgICAgICAgICAgSGFzaHRhYmxlKiBuZXdIYXNodGFibGUgPSBIYXNodGFi
bGU6OmNyZWF0ZShtYXhMb2FkRmFjdG9yKTsKICAgICAgICAgICAgaWYgKGhhc2h0YWJsZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIG5ld0hhc2h0YWJsZSkpCiAgICAgICAgICAgICAgICBi
cmVhazsKCiAgICAgICAgICAgIEhhc2h0YWJsZTo6ZGVzdHJveShuZXdIYXNodGFibGUpOwogICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0YXRpY19j
YXN0PGRvdWJsZT4ob2xkSGFzaHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY3Vy
cmVudE51bVRocmVhZHMpIDw9IG1heExvYWRGYWN0b3IpCiAgICAgICAgICAgIGJyZWFrOwoKICAg
ICAgICAvLyBOZWVkIHRvIGZpcnN0IHByZXZlbnQgYW55b25lIGZyb20gbXVja2luZyB3aXRoIHRo
ZSBleGlzdGluZyBoYXNodGFibGUuIFRoaXMgaXMgc29tZXdoYXQKICAgICAgICAvLyBjaGFsbGVu
Z2luZy4gV2UgZG8gaXQgYnkgbG9ja2luZyBhbGwgYnVja2V0cy4gQnV0IGlmIGEgYnVja2V0IGlz
IGJsYW5rLCB0aGVuIGl0J3MgcG9zc2libGUKICAgICAgICAvLyBmb3Igc29tZSB0aHJlYWQgdG8g
Q0FTIGluIGEgbmV3IGJ1Y2tldCBvbiB0aGUgb2xkIGhhc2h0YWJsZS4gV2UgcHJldmVudCB0aGlz
IGJ5IGZvcmNpbmcKICAgICAgICAvLyBhbGxvY2F0aW9uIG9mIGFsbCBidWNrZXRzLgogICAgICAg
IFZlY3RvcjxCdWNrZXQqPiByZXVzYWJsZUJ1Y2tldHM7CiAgICAgICAgVmVjdG9yPEJ1Y2tldCo+
IGJ1Y2tldHNUb1VubG9jazsKICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRIYXNodGFibGUt
PnNpemU7IGktLTspIHsKICAgICAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQb2ludGVy
ID0gb2xkSGFzaHRhYmxlLT5kYXRhW2ldOwoKICAgICAgICAgICAgZm9yICg7OykgewogICAgICAg
ICAgICAgICAgQnVja2V0KiBidWNrZXQgPSBidWNrZXRQb2ludGVyLmxvYWQoKTsKCiAgICAgICAg
ICAgICAgICBpZiAoIWJ1Y2tldCkgewogICAgICAgICAgICAgICAgICAgIGJ1Y2tldCA9IG5ldyBC
dWNrZXQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1Y2tldFBvaW50ZXIuY29tcGFyZUV4
Y2hhbmdlV2VhayhudWxscHRyLCBidWNrZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBidWNrZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBidWNrZXQtPmxv
Y2subG9jaygpOwogICAgICAgICAgICAgICAgcmV1c2FibGVCdWNrZXRzLmFwcGVuZChidWNrZXQp
OwogICAgICAgICAgICAgICAgYnVja2V0c1RvVW5sb2NrLmFwcGVuZChidWNrZXQpOwogICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIE5vdyBh
bGwgYnVja2V0cyBhcmUgbG9ja2VkLiBSZWxvYWQgdGhlIGhhc2h0YWJsZSBhbmQgc2VlIGlmIGl0
J3Mgc3RpbGwgdGhlIHNhbWUgYW5kIGlmIGl0J3MKICAgICAgICAvLyBzdGlsbCB0b28gc21hbGwu
CiAgICAgICAgSGFzaHRhYmxlKiBuZXdPbGRIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOwog
ICAgICAgIGlmIChuZXdPbGRIYXNodGFibGUgIT0gb2xkSGFzaHRhYmxlKSB7CiAgICAgICAgICAg
IC8vIFVubG9jayBhbGwgb2YgdGhlIGJ1Y2tldHMuCiAgICAgICAgICAgIGZvciAoQnVja2V0KiBi
dWNrZXQgOiBidWNrZXRzVG9VbmxvY2spCiAgICAgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5s
b2NrKCk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBJZiB0aGUgbmV3IGhhc2h0YWJsZSBp
cyBiaWcgZW5vdWdoLCB0aGVuIHdlJ3JlIGRvbmUuCiAgICAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxkb3VibGU+KG5ld09sZEhhc2h0YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGN1
cnJlbnROdW1UaHJlYWRzKSA8PSBtYXhMb2FkRmFjdG9yKQogICAgICAgICAgICAgICAgYnJlYWs7
CgogICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGp1c3QgbmVlZCB0byB0cnkgYWdhaW4uCiAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gT0ssIHdlJ3ZlIGxvY2tl
ZCBhbGwgYnVja2V0cyBhbmQgdGhlIG9sZCBoYXNodGFibGUgaXMgc3RpbGwgdGhlIHZhbGlkIG9u
ZS4gVGhpcyBpcyB0aGUgY2FzZQogICAgICAgIC8vIHdoZXJlIHdlIGNhbiBhY3R1YWxseSBkbyB0
aGUgcmVzaXppbmcuCgogICAgICAgIC8vIFRoZXNlIHRocmVhZCBkYXRhcyBhcmUgcGxhY2VkIGlu
dG8gdGhlIHZlY3RvciBpbiBxdWV1ZSBvcmRlci4KICAgICAgICBWZWN0b3I8VGhyZWFkRGF0YSo+
IHRocmVhZERhdGFzOwogICAgICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiByZXVzYWJsZUJ1Y2tl
dHMpIHsKICAgICAgICAgICAgd2hpbGUgKFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBidWNrZXQt
PmRlcXVldWUoKSkKICAgICAgICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZCh0aHJlYWREYXRh
KTsKICAgICAgICB9CgogICAgICAgIEhhc2h0YWJsZSogbmV3SGFzaHRhYmxlID0gSGFzaHRhYmxl
OjpjcmVhdGUoY3VycmVudE51bVRocmVhZHMgKiBncm93dGhGYWN0b3IgKiBtYXhMb2FkRmFjdG9y
KTsKICAgICAgICBmb3IgKFRocmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgewog
ICAgICAgICAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3ModGhyZWFkRGF0YS0+YWRkcmVz
cyk7CiAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG5ld0hhc2h0YWJsZS0+c2l6
ZTsKICAgICAgICAgICAgQnVja2V0KiBidWNrZXQgPSBuZXdIYXNodGFibGUtPmRhdGFbaW5kZXhd
LmxvYWQoKTsKICAgICAgICAgICAgaWYgKCFidWNrZXQpIHsKICAgICAgICAgICAgICAgIGlmIChy
ZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgICAgIGJ1Y2tldCA9IG5l
dyBCdWNrZXQoKTsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBidWNr
ZXQgPSByZXVzYWJsZUJ1Y2tldHMudGFrZUxhc3QoKTsKICAgICAgICAgICAgICAgIG5ld0hhc2h0
YWJsZS0+ZGF0YVtpbmRleF0uc3RvcmUoYnVja2V0KTsKICAgICAgICAgICAgfQoKICAgICAgICAg
ICAgYnVja2V0LT5lbnF1ZXVlKHRocmVhZERhdGEpOwogICAgICAgIH0KCiAgICAgICAgLy8gT0ss
IHJpZ2h0IG5vdyB0aGUgb2xkIGhhc2h0YWJsZSBpcyBsb2NrZWQgdXAgYW5kIHRoZSBuZXcgaGFz
aHRhYmxlIGlzIHJlYWR5IHRvIHJvY2sgYW5kCiAgICAgICAgLy8gcm9sbC4gQWZ0ZXIgd2UgaW5z
dGFsbCB0aGUgbmV3IGhhc2h0YWJsZSwgd2UgY2FuIHJlbGVhc2UgYWxsIGJ1Y2tldCBsb2Nrcy4K
CiAgICAgICAgYm9vbCByZXN1bHQgPSBoYXNodGFibGUuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG9s
ZEhhc2h0YWJsZSwgbmV3SGFzaHRhYmxlKTsKICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQp
OwoKICAgICAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDogYnVja2V0c1RvVW5sb2NrKQogICAgICAg
ICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CiAgICAgICAgYnJlYWs7CiAgICB9Cn0KClRocmVh
ZERhdGE6On5UaHJlYWREYXRhKCkKewogICAgZm9yICg7OykgewogICAgICAgIHVuc2lnbmVkIG9s
ZE51bVRocmVhZHMgPSBudW1UaHJlYWRzLmxvYWQoKTsKICAgICAgICBpZiAobnVtVGhyZWFkcy5j
b21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMsIG9sZE51bVRocmVhZHMgLSAxKSkKICAg
ICAgICAgICAgYnJlYWs7CiAgICB9Cn0KClRocmVhZERhdGEqIG15VGhyZWFkRGF0YSgpCnsKICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKICAgIHN0ZDo6Y2FsbF9vbmNl
KAogICAgICAgIGluaXRpYWxpemVPbmNlLAogICAgICAgIFtdewogICAgICAgICAgICB0aHJlYWRE
YXRhID0gbmV3IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7CiAgICAgICAgfSk7CgogICAg
cmV0dXJuICp0aHJlYWREYXRhOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgpib29sIGVu
cXVldWUodm9pZCogYWRkcmVzcywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKewogICAgdW5zaWdu
ZWQgaGFzaCA9IGhhc2hBZGRyZXNzKGFkZHJlc3MpOwoKICAgIGZvciAoOzspIHsKICAgICAgICBI
YXNodGFibGUqIG15SGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKICAgICAgICB1bnNpZ25l
ZCBpbmRleCA9IGhhc2ggJSBteUhhc2h0YWJsZS0+c2l6ZTsKICAgICAgICBBdG9taWM8QnVja2V0
PiYgYnVja2V0UG9pbnRlciA9IG15SGFzaHRhYmxlLT5kYXRhW2luZGV4XTsKICAgICAgICBCdWNr
ZXQqIGJ1Y2tldDsKICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgIGJ1Y2tldCA9IGJ1Y2tl
dFBvaW50ZXIubG9hZCgpOwogICAgICAgICAgICBpZiAoIWJ1Y2tldCkgewogICAgICAgICAgICAg
ICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOwogICAgICAgICAgICAgICAgaWYgKCFidWNrZXRQb2lu
dGVyLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgYnVja2V0KSkgewogICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSBidWNrZXQ7CiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnVja2V0LT5sb2Nr
LmxvY2soKTsKCiAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhh
dmUgcmVoYXNoZWQgdW5kZXIgdXMuCiAgICAgICAgaWYgKGhhc2h0YWJsZS5sb2FkKCkgIT0gbXlI
YXNodGFibGUpIHsKICAgICAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOwogICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBm
dW5jdG9yKCk7CiAgICAgICAgYm9vbCByZXN1bHQ7CiAgICAgICAgaWYgKHRocmVhZERhdGEpIHsK
ICAgICAgICAgICAgYnVja2V0LT5lbnF1ZXVlKHRocmVhZERhdGEpOwogICAgICAgICAgICByZXN1
bHQgPSB0cnVlOwogICAgICAgIH0gZWxzZQogICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAg
ICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0K
fQoKdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KYm9vbCBkZXF1ZXVlKHZvaWQqIGFkZHJlc3Ms
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCnsKICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVz
cyh0aHJlYWREYXRhLT5hZGRyZXNzKTsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgSGFzaHRhYmxl
KiBteUhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CiAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBoYXNoICYgbXlIYXNodGFibGUtPnNpemU7CiAgICAgICAgQnVja2V0KiBidWNrZXQgPSBteUhh
c2h0YWJsZS0+ZGF0YVtpbmRleF0ubG9hZCgpOwogICAgICAgIGlmICghYnVja2V0KQogICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CgogICAgICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIGhhc2h0YWJsZSBjb3VsZCBoYXZlIHJlaGFzaGVkIHVuZGVy
IHVzLgogICAgICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CiAgICAg
ICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgfQoKICAgICAgICBidWNrZXQtPmdlbmVyaWNEZXF1ZXVlKGZ1bmN0b3IpOwogICAgICAgIGJv
b2wgcmVzdWx0ID0gISFidWNrZXQtPnF1ZXVlSGVhZDsKICAgICAgICBidWNrZXQtPmxvY2sudW5s
b2NrKCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KfQoKfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCgpib29sIFBhcmtpbmdMb3Q6OnBhcmsoY29uc3Qgdm9pZCogYWRkcmVzcywgc3RkOjpm
dW5jdGlvbjxib29sKCk+IHZhbGlkYXRpb24pCnsKICAgIFRocmVhZERhdGEqIG1lID0gbXlUaHJl
YWREYXRhKCk7CgogICAgQVNTRVJUKCFtZS0+c2hvdWxkUGFyayk7CiAgICAKICAgIGJvb2wgcmVz
dWx0ID0gZW5xdWV1ZSgKICAgICAgICBhZGRyZXNzLAogICAgICAgIFsmXSAoKSAtPiBUaHJlYWRE
YXRhKiB7CiAgICAgICAgICAgIGlmICghdmFsaWRhdGlvbigpKQogICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CgogICAgICAgICAgICBtZS0+YWRkcmVzcyA9IGFkZHJlc3M7CiAgICAgICAg
ICAgIG1lLT5zaG91bGRQYXJrID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuIG1lOwogICAgICAg
IH0pOwoKICAgIGlmICghcmVzdWx0KQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgICB7CiAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsK
ICAgICAgICB3aGlsZSAobWUtPnNob3VsZFBhcmspCiAgICAgICAgICAgIG1lLT5wYXJraW5nQ29u
ZGl0aW9uLndhaXQobG9ja2VyKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwp9Cgpib29sIFBhcmtp
bmdMb3Q6OnVucGFya09uZShjb25zdCB2b2lkKiBhZGRyZXNzKQp7CiAgICBUaHJlYWREYXRhKiB0
aHJlYWREYXRhOwogICAgYm9vbCByZXN1bHQgPSBkZXF1ZXVlKAogICAgICAgIGFkZHJlc3MsCiAg
ICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50KSB7CiAgICAgICAgICAgIGlmIChlbGVtZW50
LT5hZGRyZXNzICE9IGFkZHJlc3MpCiAgICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3Vs
dDo6SWdub3JlOwogICAgICAgICAgICB0aHJlYWREYXRhID0gZWxlbWVudDsKICAgICAgICAgICAg
cmV0dXJuIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A7CiAgICAgICAgfSk7CgogICAgQVNT
RVJUKHRocmVhZERhdGEtPnNob3VsZFBhcmspOwoKICAgIHsKICAgICAgICBzdGQ6OnVuaXF1ZV9s
b2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAgICAgICAg
dGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9IGZhbHNlOwogICAgICAgIHRocmVhZERhdGEtPnBhcmtp
bmdDb25kaXRpb24ubm90aWZ5X2FsbCgpOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7Cn0KCnZv
aWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZvaWQqIGFkZHJlc3MpCnsKICAgIFZlY3Rv
cjxUaHJlYWREYXRhKiwgOD4gdGhyZWFkRGF0YXM7CiAgICBkZXF1ZXVlKAogICAgICAgIGFkZHJl
c3MsCiAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50KSB7CiAgICAgICAgICAgIGlmIChl
bGVtZW50LT5hZGRyZXNzICE9IGFkZHJlc3MpCiAgICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1
ZVJlc3VsdDo6SWdub3JlOwogICAgICAgICAgICB0aHJlYWREYXRhcy5hcHBlbmQoZWxlbWVudCk7
CiAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZTsKICAg
ICAgICB9KTsKCiAgICBmb3IgKFRocmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykg
ewogICAgICAgIEFTU0VSVCh0aHJlYWREYXRhLT5zaG91bGRQYXJrKTsKICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CiAg
ICAgICAgdGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9IGZhbHNlOwogICAgICAgIHRocmVhZERhdGEt
PnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X2FsbCgpOwogICAgfQp9Cgp9IC8vIG5hbWVzcGFjZSBX
VEYKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>258240</attachid>
            <date>2015-08-04 17:08:27 -0700</date>
            <delta_ts>2015-08-06 18:40:35 -0700</delta_ts>
            <desc>ParkingLot.h</desc>
            <filename>ParkingLot.h</filename>
            <type>text/plain</type>
            <size>2541</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogKiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
ICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCiAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCiAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgogKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgogKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAogKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CiAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogKi8KCiNpZm5kZWYgV1RGX1BhcmtpbmdMb3RfaAojZGVmaW5lIFdU
Rl9QYXJraW5nTG90X2gKCm5hbWVzcGFjZSBXVEYgewoKY2xhc3MgUGFya2luZ0xvdCB7CiAgICBQ
YXJraW5nTG90KCkgPSBkZWxldGU7CiAgICBQYXJraW5nTG90KGNvbnN0IFBhcmtpbmdMb3QmKSA9
IGRlbGV0ZTsKCnB1YmxpYzoKICAgIC8vIFBhcmtzIHRoZSB0aHJlYWQgaW4gYSBxdWV1ZSBhc3Nv
Y2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLiBUaGUK
ICAgIC8vIHBhcmtpbmcgb25seSBzdWNjZWVkcyBpZiB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBy
ZXR1cm5zIHRydWUgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgaGVsZC4KICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCBwYXJrKGNvbnN0IHZvaWQqIGFkZHJlc3MsIHN0ZDo6ZnVuY3Rp
b248Ym9vbCgpPiB2YWxpZGF0aW9uKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgc3Rh
dGljIGJvb2wgcGFyayhjb25zdCBBdG9taWM8VD4qIGFkZHJlc3MsIFQgZXhwZWN0ZWQpCiAgICB7
CiAgICAgICAgcmV0dXJuIHBhcmsoYWRkcmVzcywgW2FkZHJlc3MsIGV4cGVjdGVkXSAoKSAtPiBi
b29sIHsgcmV0dXJuIGFkZHJlc3MtPmxvYWQoKSA9PSBleHBlY3RlZDsgfSk7CiAgICB9CgogICAg
Ly8gVW5wYXJrcyBvbmUgdGhyZWFkIGZyb20gdGhlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUg
Z2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51bGwuCiAgICAvLyBSZXR1cm5zIHRydWUg
aWYgdGhlcmUgbWF5IHN0aWxsIGJlIG90aGVyIHRocmVhZHMgb24gdGhhdCBxdWV1ZSwgb3IgZmFs
c2UgaWYgdGhlcmUgZGVmaW5pdGVseQogICAgLy8gYXJlIG5vIG1vcmUgdGhyZWFkcyBvbiB0aGUg
cXVldWUuCiAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgdW5wYXJrT25lKGNvbnN0
IHZvaWQqIGFkZHJlc3MpOwoKICAgIC8vIFVucGFya3MgZXZlcnkgdGhyZWFkIGZyb20gdGhlIHF1
ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51
bGwuCiAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrQWxsKGNvbnN0IHZv
aWQqIGFkZHJlc3MpOwp9OwoKfSAvLyBuYW1lc3BhY2UgV1RGCgp1c2luZyBXVEY6OlBhcmtpbmdM
b3Q7CgojZW5kaWYgLy8gV1RGX1BhcmtpbmdMb3RfaAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258430</attachid>
            <date>2015-08-06 18:40:35 -0700</date>
            <delta_ts>2015-08-06 22:00:09 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30734</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTg4MTAwKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsMTAgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEw
IC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZB
NjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUz
RiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBB
N0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07
CisJCTBGODI0QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0
NUQgLyogQnl0ZUxvY2suY3BwICovOyB9OworCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyog
Qnl0ZUxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OworCQkwRjgyNEE2
ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5jcHAgKi87IH07CisJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5n
TG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgy
NEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2
NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50
ZXIuaCAqLzsgfTsKIAkJMEY4ODVFMEYxODQ1QUVBOTAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVF
MEUxODQ1QUU5RjAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjhGMkI5
MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAv
KiBDb21waWxhdGlvblRocmVhZC5oICovOyB9OwpAQCAtMzA3LDYgKzMxMSwxMCBAQAogCQkwRjJC
NjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFC
NDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0
ZUxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MzFCNzQ0M0Ew
MDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZUxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjQxQjc0NDNB
MDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
ODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTcxNiw2ICs3MjQsOCBAQAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEw
MDQxMjNGRiAvKiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZG
IC8qIEJsb29tRmlsdGVyLmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1
bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCisJCQkJMEY4MjRBNjIxQjc0NDNBMDAwMkUzNDVEIC8q
IEJ5dGVMb2NrLmNwcCAqLywKKwkJCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxv
Y2suaCAqLywKIAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8s
CiAJCQkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovLAogCQkJ
CUE4QTQ3MjZBMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLApAQCAt
ODEwLDYgKzgyMCw4IEBACiAJCQkJQThBNDcyRTUxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VSZXNl
cnZhdGlvbi5oICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpv
YnMuaCAqLywKIAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGli
ZGlzcGF0Y2guaCAqLywKKwkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xv
dC5jcHAgKi8sCisJCQkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAq
LywKIAkJCQlBOEE0NzJFRDE1MUE4MjVCMDA0MTIzRkYgLyogUGFzc1JlZlB0ci5oICovLAogCQkJ
CUE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTBGOUQzMzVE
MTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCkBAIC0xMTU2LDYgKzExNjgs
NyBAQAogCQkJCUE4QTQ3NDE1MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDE2MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJT
ZWVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3
UG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY4MjRBNjcxQjc0NDNBMDAwMkUzNDVEIC8q
IEJ5dGVMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxNzE1MUE4MjVCMDA0MTIzRkYg
LyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxODE1MUE4MjVCMDA0
MTIzRkYgLyogUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTkxNTFBODI1
QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY3LDYg
KzExODAsNyBAQAogCQkJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0RjNCMEY3MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0
ZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDY5NDE5NjE2RUFBRkY4MDAyNEUx
NDYgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgyNEE2OTFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MUYxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0MjAxNTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0MjIxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCBpbiBIZWFkZXJzICov
LApAQCAtMTMyNSw2ICsxMzM5LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCUE4QTQ3Mzg2MTUxQTgy
NUIwMDQxMjNGRiAvKiBBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDM1
MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY4MjRBNjYxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFp
bmVkUG9vbE1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTM0MCw2ICsxMzU1LDcgQEAKIAkJCQlB
OEE0NzM5QTE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzkxNTFBODI1QjAwNDEyM0ZGIC8qIENTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUMxNTFBODI1QjAwNDEyM0ZGIC8qIEN1
cnJlbnRUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1
RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RjQ2RjYwMUEyODQwRUUw
MENDQkYyMiAvKiBSZWZDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzlFMTUx
QTgyNUIwMDQxMjNGRiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0Ew
MTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0J5dGVMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9C
eXRlTG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnl0
ZUxvY2suaCIKKworI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKKworbmFtZXNwYWNlIFdURiB7CisK
K3ZvaWQgQnl0ZUxvY2s6OmxvY2tTbG93KCkKK3sKKyAgICB1bnNpZ25lZCBzcGluQ291bnQgPSAw
OworCisgICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMgb3V0IHRvIGJlIG9wdGltYWwgYmFz
ZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KKyAgICBjb25zdCB1bnNpZ25lZCBzcGlu
TGltaXQgPSA0MDsKKyAgICAKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVpbnQ4X3QgY3VycmVu
dEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisKKyAgICAgICAgLy8gV2UgYWxsb3cgb3Vyc2Vs
dmVzIHRvIGJhcmdlIGluLgorICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaXNIZWxk
Qml0KQorICAgICAgICAgICAgJiYgbV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5
dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJpdCkpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5IHBhcmtlZCBhbmQgd2UgaGF2ZW4n
dCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8gc3BpbiBhcm91bmQuCisgICAgICAg
IGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpICYmIHNwaW5Db3VudCA8IHNw
aW5MaW1pdCkgeworICAgICAgICAgICAgc3BpbkNvdW50Kys7CisgICAgICAgICAgICBzdGQ6OnRo
aXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMgYnkgc2V0dGluZyB0aGUgcGFya2Vk
IGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3BpbiBhcm91bmQKKyAgICAgICAgLy8g
aWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2UgZmFpbGVkIGF0IHNldHRpbmcgaXQu
CisgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAg
ICAgICAmJiAhbV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3Vy
cmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0byBiZSBpc0hlbGR8aGFzUGFya2Vk
LiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2FuIHBhcmsuCisgICAgICAgIFBhcmtp
bmdMb3Q6OnBhcmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKKworICAgICAg
ICAvLyBXZSBoYXZlIGF3YWtlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUg
dmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAorICAgICAgICAvLyBhcm91bmQgYW5k
IHRyeSBhZ2Fpbi4KKyAgICB9Cit9CisKK3ZvaWQgQnl0ZUxvY2s6OnVubG9ja1Nsb3coKQorewor
ICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgd2hpbGUgZmluZGluZyBvdXQgaWYgc29tZW9uZSBpcyBw
YXJrZWQuIE5vdGUgdGhhdCBhcyBzb29uIGFzIHdlIGRvIHRoaXMsCisgICAgLy8gc29tZW9uZSBt
aWdodCBiYXJnZSBpbi4KKyAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZTsKKyAgICBmb3IgKDs7KSB7
CisgICAgICAgIG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAgIEFTU0VSVChv
bGRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpOworICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsob2xkQnl0ZVZhbHVlLCAwKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIC8vIE5vdGUgdGhhdCBzb21lb25lIGNvdWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYg
dGhhdCBoYXBwZW5zLCB0aGV5IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5CisgICAgLy8gYmVjYXVz
ZSBvdXIgcGFya2luZyBwcmVkaWNhdGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFz
UGFya2VkQml0LCBidXQgd2UndmUgYWxyZWFkeSBzZXQKKyAgICAvLyBtX2J5dGUgPSAwLgorCisg
ICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhl
bS4gVGhpcyBjYXVzZXMgYSB0aHVuZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQorICAgIC8vIHRoYXQg
aXMgdGhlb3JldGljYWxseSBzY2FyeSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1
c2Ugd2UgdXN1YWxseSBkb24ndCBoYXZlIGVub3VnaAorICAgIC8vIHRocmVhZHMgZm9yIHRoaXMg
dG8gbWF0dGVyLgorICAgIGlmIChvbGRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAg
IFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV9ieXRlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQnl0ZUxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVM
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJ5dGVMb2NrX2gKKyNkZWZpbmUg
Qnl0ZUxvY2tfaAorCisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK2NsYXNzIEJ5dGVMb2NrIHsKK3B1YmxpYzoKKyAgICBCeXRlTG9jaygpCisgICAgeworICAg
ICAgICBtX2J5dGUuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5j
b21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWly
ZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgbG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVu
bG9jaygpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VX
ZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAg
ICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisg
ICAgYm9vbCBpc0hlbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2Fk
KHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKworICAgIGJv
b2wgaXNMb2NrZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOwor
ICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDE7CisKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHVubG9ja1Nsb3coKTsKKworICAgIEF0b21pYzx1aW50OF90PiBtX2J5dGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEJ5dGVMb2NrX2gKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvUGFya2luZ0xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFy
a2luZ0xvdC5oIgorCisjaW5jbHVkZSAiTG9jay5oIgorI2luY2x1ZGUgIlRocmVhZFNwZWNpZmlj
LmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgorI2luY2x1ZGUgPG11dGV4Pgor
I2luY2x1ZGUgPHRocmVhZD4KKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSB7CisKK3N0
cnVjdCBUaHJlYWREYXRhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICAKKyAgICBUaHJlYWREYXRhKCk7CisgICAgflRocmVhZERhdGEoKTsKKyAgICAKKyAgICBi
b29sIHNob3VsZFBhcmsgeyBmYWxzZSB9OworICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7Cisg
ICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgcGFya2luZ0NvbmRpdGlvbjsKKworICAgIHZvaWQq
IGFkZHJlc3M7CisgICAgVGhyZWFkRGF0YSogbmV4dEluUXVldWUgeyBudWxscHRyIH07Cit9Owor
CitlbnVtIGNsYXNzIERlcXVldWVSZXN1bHQgeworICAgIElnbm9yZSwKKyAgICBSZW1vdmVBbmRD
b250aW51ZSwKKyAgICBSZW1vdmVBbmRTdG9wCit9OworCitzdHJ1Y3QgQnVja2V0IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB2b2lkIGVucXVldWUoVGhyZWFk
RGF0YSogZGF0YSkKKyAgICB7CisgICAgICAgIEFTU0VSVChkYXRhLT5hZGRyZXNzKTsKKyAgICAg
ICAgQVNTRVJUKCFkYXRhLT5uZXh0SW5RdWV1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAocXVl
dWVUYWlsKSB7CisgICAgICAgICAgICBxdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0gZGF0YTsKKyAg
ICAgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBxdWV1ZUhlYWQgPSBkYXRhOworICAgICAgICBxdWV1ZVRhaWwgPSBkYXRh
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBnZW5l
cmljRGVxdWV1ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaWYgKCFx
dWV1ZUhlYWQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYm9vbCBzaG91bGRDb250
aW51ZSA9IHRydWU7CisgICAgICAgIGZvciAoCisgICAgICAgICAgICBUaHJlYWREYXRhKiogY3Vy
cmVudFB0ciA9ICZxdWV1ZUhlYWQ7CisgICAgICAgICAgICBzaG91bGRDb250aW51ZSAmJiAqY3Vy
cmVudFB0cjsKKyAgICAgICAgICAgIGN1cnJlbnRQdHIgPSAmKCgqY3VycmVudFB0ciktPm5leHRJ
blF1ZXVlKSkgeworICAgICAgICAgICAgCisgICAgICAgICAgICBUaHJlYWREYXRhKiBjdXJyZW50
ID0gKmN1cnJlbnRQdHI7CisgICAgICAgICAgICBEZXF1ZXVlUmVzdWx0IHJlc3VsdCA9IGZ1bmN0
b3IoY3VycmVudCk7CisgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICAgICAg
Y2FzZSBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgorICAgICAgICAg
ICAgICAgICpjdXJyZW50UHRyID0gY3VycmVudC0+bmV4dEluUXVldWU7CisgICAgICAgICAgICAg
ICAgY3VycmVudC0+bmV4dEluUXVldWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOgorICAgICAg
ICAgICAgICAgICpjdXJyZW50UHRyID0gY3VycmVudC0+bmV4dEluUXVldWU7CisgICAgICAgICAg
ICAgICAgY3VycmVudC0+bmV4dEluUXVldWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIHNo
b3VsZENvbnRpbnVlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXF1ZXVlSGVhZCkKKyAgICAgICAgICAgIHF1
ZXVlVGFpbCA9IG51bGxwdHI7CisgICAgfQorICAgIAorICAgIFRocmVhZERhdGEqIGRlcXVldWUo
KQorICAgIHsKKyAgICAgICAgVGhyZWFkRGF0YSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAg
Z2VuZXJpY0RlcXVldWUoCisgICAgICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQpIC0+
IERlcXVldWVSZXN1bHQgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBUaHJlYWREYXRh
KiBxdWV1ZUhlYWQgeyBudWxscHRyIH07CisgICAgVGhyZWFkRGF0YSogcXVldWVUYWlsIHsgbnVs
bHB0ciB9OworCisgICAgLy8gVGhpcyBsb2NrIHByb3RlY3RzIHRoZSBlbnRpcmUgYnVja2V0LiBU
aG91IHNoYWxsIG5vdCBtYWtlIGNoYW5nZXMgdG8gQnVja2V0IHdpdGhvdXQgaG9sZGluZworICAg
IC8vIHRoaXMgbG9jay4KKyAgICBMb2NrIGxvY2s7CisKKyAgICAvLyBQdXQgc29tZSBkaXN0YW5l
IGJldHdlZW4gYnVja2V0cyBpbiBtZW1vcnkuIFRoaXMgaXMgb25lIG9mIHNldmVyYWwgbWl0aWdh
dGlvbnMgYWdhaW5zdCBmYWxzZQorICAgIC8vIHNoYXJpbmcuCisgICAgY2hhciBwYWRkaW5nWzY0
XTsKK307CisKK3N0cnVjdCBIYXNodGFibGUgeworICAgIHVuc2lnbmVkIHNpemU7CisgICAgQXRv
bWljPEJ1Y2tldCo+IGRhdGFbMV07CisKKyAgICBIYXNodGFibGUqIGNyZWF0ZSh1bnNpZ25lZCBz
aXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemUgPj0gMSk7CisgICAgICAgIAorICAgICAg
ICBIYXNodGFibGUqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEhhc2h0YWJsZSo+KAorICAgICAgICAg
ICAgZmFzdFplcm9lZE1hbGxvYyhzaXplb2YoSGFzaHRhYmxlKSArIHNpemVvZihBdG9taWM8QnVj
a2V0Kj4pICogKHNpemUgLSAxKSkpOworICAgICAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZvaWQgZGVzdHJveShIYXNodGFibGUq
IGhhc2h0YWJsZSkKKyAgICB7CisgICAgICAgIGZhc3RGcmVlKGhhc2h0YWJsZSk7CisgICAgfQor
fTsKKworVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4qIHRocmVhZERhdGE7CitBdG9taWM8SGFz
aHRhYmxlKj4gaGFzaHRhYmxlOworQXRvbWljPHVuc2lnbmVkPiBudW1UaHJlYWRzOworCisvLyBX
aXRoIDY0IGJ5dGVzIG9mIHBhZGRpbmcgcGVyIGJ1Y2tldCwgYXNzdW1pbmcgYSBoYXNodGFibGUg
aXMgZnVsbHkgcG9wdWxhdGVkIHdpdGggYnVja2V0cywgdGhlCisvLyBtZW1vcnkgdXNhZ2UgcGVy
IHRocmVhZCB3aWxsIHN0aWxsIGJlIGxlc3MgdGhhbiAxS0IuCitjb25zdCB1bnNpZ25lZCBtYXhM
b2FkRmFjdG9yID0gMTA7CisKK2NvbnN0IHVuc2lnbmVkIGdyb3d0aEZhY3RvciA9IDI7CisKK3Vu
c2lnbmVkIGhhc2hBZGRyZXNzKHZvaWQqIGFkZHJlc3MpCit7CisgICAgcmV0dXJuIFdURjo6UHRy
SGFzaDx2b2lkKj46Omhhc2goYWRkcmVzcyk7Cit9CisKK1RocmVhZERhdGE6OlRocmVhZERhdGEo
KQoreworICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOworICAgIGZvciAoOzspIHsKKyAg
ICAgICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVhZHMubG9hZCgpOworICAgICAg
ICBjdXJyZW50TnVtVGhyZWFkcyA9IG9sZE51bVRocmVhZHMgKyAxOworICAgICAgICBpZiAobnVt
VGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMsIGN1cnJlbnROdW1UaHJl
YWRzKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFdlIHRyeSB0byBlbnN1
cmUgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlIHVzZWQgZm9yIHRocmVhZCBxdWV1ZXMg
aXMgYWx3YXlzIGxhcmdlIGVub3VnaAorICAgIC8vIHRvIGF2b2lkIGNvbGxpc2lvbnMuIFNvLCBz
aW5jZSB3ZSBzdGFydGVkIGEgbmV3IHRocmVhZCwgd2UgbWF5IG5lZWQgdG8gaW5jcmVhc2UgdGhl
IHNpemUgb2YgdGhlCisgICAgLy8gaGFzaHRhYmxlLiBUaGlzIGxvb3AgZG9lcyBqdXN0IHRoYXQu
IEl0J3MgYSBjb21wbGljYXRlZCBhbGdvcml0aG0gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZQor
ICAgIC8vIG5vdGlvbiBvZiBsb2NraW5nIHRoZSBoYXNodGFibGUuIEluc3RlYWQsIG9ubHkgaW5k
aXZpZHVhbCBidWNrZXRzIGFyZSBsb2NrZWQuIFNvLCB0byByZWhhc2gsIHdlCisgICAgLy8gZmly
c3QgbG9jayBhbGwgYnVja2V0cyB0byBwcmV2ZW50IGFueSB0aHJlYWQgZnJvbSBtYWtpbmcgYW55
IGNoYW5nZXMsIGFuZCB0aGVuIHdlIHJlYWxsb2NhdGUKKyAgICAvLyB0aGUgaGFzaHRhYmxlIHNw
aW5lICh0aGUgYXJyYXkgdGhhdCBwb2ludHMgdG8gdGhlIGJ1Y2tldHMpLiBXZSBuZXZlciBmcmVl
IHRoZSBvbGQgc3BpbmUsIHNpbmNlCisgICAgLy8gd2UgbmV2ZXIgbG9jayBhcm91bmQgc3BpbmUg
YWNjZXNzZXMgKGkuZS4gdGhlICJoYXNodGFibGUiIGdsb2JhbCB2YXJpYWJsZSkuCisgICAgZm9y
ICg7OykgeworICAgICAgICBIYXNodGFibGUqIG9sZEhhc2h0YWJsZTsKKyAgICAgICAgCisgICAg
ICAgIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIGlmICghb2xkSGFz
aHRhYmxlKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8gYmUgdGhlIGZpcnN0IHRvIGNyZWF0ZSB0
aGUgaGFzaHRhYmxlLgorICAgICAgICAgICAgSGFzaHRhYmxlKiBuZXdIYXNodGFibGUgPSBIYXNo
dGFibGU6OmNyZWF0ZShtYXhMb2FkRmFjdG9yKTsKKyAgICAgICAgICAgIGlmIChoYXNodGFibGUu
Y29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBuZXdIYXNodGFibGUpKQorICAgICAgICAgICAg
ICAgIGJyZWFrOworCisgICAgICAgICAgICBIYXNodGFibGU6OmRlc3Ryb3kobmV3SGFzaHRhYmxl
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihvbGRIYXNodGFibGUtPnNpemUpIC8gc3RhdGljX2Nhc3Q8
ZG91YmxlPihjdXJyZW50TnVtVGhyZWFkcykgPD0gbWF4TG9hZEZhY3RvcikKKyAgICAgICAgICAg
IGJyZWFrOworCisgICAgICAgIC8vIE5lZWQgdG8gZmlyc3QgcHJldmVudCBhbnlvbmUgZnJvbSBt
dWNraW5nIHdpdGggdGhlIGV4aXN0aW5nIGhhc2h0YWJsZS4gVGhpcyBpcyBzb21ld2hhdAorICAg
ICAgICAvLyBjaGFsbGVuZ2luZy4gV2UgZG8gaXQgYnkgbG9ja2luZyBhbGwgYnVja2V0cy4gQnV0
IGlmIGEgYnVja2V0IGlzIGJsYW5rLCB0aGVuIGl0J3MgcG9zc2libGUKKyAgICAgICAgLy8gZm9y
IHNvbWUgdGhyZWFkIHRvIENBUyBpbiBhIG5ldyBidWNrZXQgb24gdGhlIG9sZCBoYXNodGFibGUu
IFdlIHByZXZlbnQgdGhpcyBieSBmb3JjaW5nCisgICAgICAgIC8vIGFsbG9jYXRpb24gb2YgYWxs
IGJ1Y2tldHMuCisgICAgICAgIFZlY3RvcjxCdWNrZXQqPiByZXVzYWJsZUJ1Y2tldHM7CisgICAg
ICAgIFZlY3RvcjxCdWNrZXQqPiBidWNrZXRzVG9VbmxvY2s7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG9sZEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykgeworICAgICAgICAgICAgQXRvbWljPEJ1
Y2tldCo+JiBidWNrZXRQb2ludGVyID0gb2xkSGFzaHRhYmxlLT5kYXRhW2ldOworCisgICAgICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgQnVja2V0KiBidWNrZXQgPSBidWNrZXRQ
b2ludGVyLmxvYWQoKTsKKworICAgICAgICAgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAg
ICAgICAgICAgICAgIGJ1Y2tldCA9IG5ldyBCdWNrZXQoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFidWNrZXRQb2ludGVyLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgYnVja2V0KSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGJ1Y2tldDsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgYnVja2V0LT5sb2NrLmxvY2soKTsKKyAgICAgICAgICAg
ICAgICByZXVzYWJsZUJ1Y2tldHMuYXBwZW5kKGJ1Y2tldCk7CisgICAgICAgICAgICAgICAgYnVj
a2V0c1RvVW5sb2NrLmFwcGVuZChidWNrZXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IGFsbCBidWNrZXRzIGFyZSBs
b2NrZWQuIFJlbG9hZCB0aGUgaGFzaHRhYmxlIGFuZCBzZWUgaWYgaXQncyBzdGlsbCB0aGUgc2Ft
ZSBhbmQgaWYgaXQncworICAgICAgICAvLyBzdGlsbCB0b28gc21hbGwuCisgICAgICAgIEhhc2h0
YWJsZSogbmV3T2xkSGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICAgICAgaWYgKG5l
d09sZEhhc2h0YWJsZSAhPSBvbGRIYXNodGFibGUpIHsKKyAgICAgICAgICAgIC8vIFVubG9jayBh
bGwgb2YgdGhlIGJ1Y2tldHMuCisgICAgICAgICAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDogYnVj
a2V0c1RvVW5sb2NrKQorICAgICAgICAgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyBoYXNodGFibGUgaXMgYmlnIGVu
b3VnaCwgdGhlbiB3ZSdyZSBkb25lLgorICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJs
ZT4obmV3T2xkSGFzaHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY3VycmVudE51
bVRocmVhZHMpIDw9IG1heExvYWRGYWN0b3IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UganVzdCBuZWVkIHRvIHRyeSBhZ2Fpbi4KKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT0ssIHdlJ3ZlIGxvY2tl
ZCBhbGwgYnVja2V0cyBhbmQgdGhlIG9sZCBoYXNodGFibGUgaXMgc3RpbGwgdGhlIHZhbGlkIG9u
ZS4gVGhpcyBpcyB0aGUgY2FzZQorICAgICAgICAvLyB3aGVyZSB3ZSBjYW4gYWN0dWFsbHkgZG8g
dGhlIHJlc2l6aW5nLgorCisgICAgICAgIC8vIFRoZXNlIHRocmVhZCBkYXRhcyBhcmUgcGxhY2Vk
IGludG8gdGhlIHZlY3RvciBpbiBxdWV1ZSBvcmRlci4KKyAgICAgICAgVmVjdG9yPFRocmVhZERh
dGEqPiB0aHJlYWREYXRhczsKKyAgICAgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IHJldXNhYmxl
QnVja2V0cykgeworICAgICAgICAgICAgd2hpbGUgKFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBi
dWNrZXQtPmRlcXVldWUoKSkKKyAgICAgICAgICAgICAgICB0aHJlYWREYXRhcy5hcHBlbmQodGhy
ZWFkRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNodGFibGUqIG5ld0hhc2h0YWJsZSA9
IEhhc2h0YWJsZTo6Y3JlYXRlKGN1cnJlbnROdW1UaHJlYWRzICogZ3Jvd3RoRmFjdG9yICogbWF4
TG9hZEZhY3Rvcik7CisgICAgICAgIGZvciAoVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA6IHRocmVh
ZERhdGFzKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3ModGhyZWFk
RGF0YS0+YWRkcmVzcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBuZXdI
YXNodGFibGUtPnNpemU7CisgICAgICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG5ld0hhc2h0YWJs
ZS0+ZGF0YVtpbmRleF0ubG9hZCgpOworICAgICAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocmV1c2FibGVCdWNrZXRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgYnVja2V0ID0gcmV1c2FibGVCdWNrZXRzLnRha2VMYXN0KCk7CisgICAg
ICAgICAgICAgICAgbmV3SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5zdG9yZShidWNrZXQpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBidWNrZXQtPmVucXVldWUodGhyZWFkRGF0YSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZXJlIG1heSBiZSBzb21lIGJ1
Y2tldHMgbGVmdCB1bnJldXNlZC4gVGhpcyBjb3VsZCBlYXNpbHkgaGFwcGVuIGlmIHRoZQorICAg
ICAgICAvLyBudW1iZXIgb2YgZW5xdWV1ZWQgdGhyZWFkcyByaWdodCBub3cgaXMgbG93IGJ1dCB0
aGUgaGlnaCB3YXRlcm1hcmsgb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzCisgICAgICAgIC8vIGVu
cXVldWVkIHdhcyBoaWdoLiBXZSBwbGFjZSB0aGVzZSBidWNrZXRzIGludG8gdGhlIGhhc2h0YWJs
ZSBiYXNpY2FsbHkgYXQgcmFuZG9tLCBqdXN0IHRvCisgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBk
b24ndCBsZWFrIHRoZW0uCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdIYXNo
dGFibGUtPnNpemUgJiYgIXJldXNhYmxlQnVja2V0cy5pc0VtcHR5KCk7ICsraSkgeworICAgICAg
ICAgICAgQXRvbWljPEJ1Y2tldCo+IGJ1Y2tldFB0ciA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpbmRl
eF07CisgICAgICAgICAgICBpZiAoYnVja2V0UHRyLmxvYWQoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGJ1Y2tldFB0ci5zdG9yZShyZXVzYWJsZUJ1Y2tldHMudGFr
ZUxhc3QoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW5jZSB3ZSBpbmNyZWFzZWQgdGhl
IHNpemUgb2YgdGhlIGhhc2h0YWJsZSwgd2Ugc2hvdWxkIGhhdmUgZXhoYXVzdGVkIG91ciBwcmVh
bGxvY2F0ZWQKKyAgICAgICAgLy8gYnVja2V0cyBieSBub3cuCisgICAgICAgIEFTU0VSVChyZXVz
YWJsZUJ1Y2tldHMuaXNFbXB0eSgpKTsKKworICAgICAgICAvLyBPSywgcmlnaHQgbm93IHRoZSBv
bGQgaGFzaHRhYmxlIGlzIGxvY2tlZCB1cCBhbmQgdGhlIG5ldyBoYXNodGFibGUgaXMgcmVhZHkg
dG8gcm9jayBhbmQKKyAgICAgICAgLy8gcm9sbC4gQWZ0ZXIgd2UgaW5zdGFsbCB0aGUgbmV3IGhh
c2h0YWJsZSwgd2UgY2FuIHJlbGVhc2UgYWxsIGJ1Y2tldCBsb2Nrcy4KKworICAgICAgICBib29s
IHJlc3VsdCA9IGhhc2h0YWJsZS5jb21wYXJlRXhjaGFuZ2VTdHJvbmcob2xkSGFzaHRhYmxlLCBu
ZXdIYXNodGFibGUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworCisgICAgICAg
IGZvciAoQnVja2V0KiBidWNrZXQgOiBidWNrZXRzVG9VbmxvY2spCisgICAgICAgICAgICBidWNr
ZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworVGhyZWFkRGF0
YTo6flRocmVhZERhdGEoKQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgdW5zaWduZWQgb2xk
TnVtVGhyZWFkcyA9IG51bVRocmVhZHMubG9hZCgpOworICAgICAgICBpZiAobnVtVGhyZWFkcy5j
b21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMsIG9sZE51bVRocmVhZHMgLSAxKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworVGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkK
K3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CisgICAgc3RkOjpj
YWxsX29uY2UoCisgICAgICAgIGluaXRpYWxpemVPbmNlLAorICAgICAgICBbXXsKKyAgICAgICAg
ICAgIHRocmVhZERhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4oKTsKKyAgICAg
ICAgfSk7CisKKyAgICByZXR1cm4gKnRocmVhZERhdGE7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+Citib29sIGVucXVldWUodm9pZCogYWRkcmVzcywgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKK3sKKyAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3MoYWRkcmVzcyk7CisKKyAg
ICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSogbXlIYXNodGFibGUgPSBoYXNodGFibGUu
bG9hZCgpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBteUhhc2h0YWJsZS0+c2l6
ZTsKKyAgICAgICAgQXRvbWljPEJ1Y2tldD4mIGJ1Y2tldFBvaW50ZXIgPSBteUhhc2h0YWJsZS0+
ZGF0YVtpbmRleF07CisgICAgICAgIEJ1Y2tldCogYnVja2V0OworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBidWNrZXQgPSBidWNrZXRQb2ludGVyLmxvYWQoKTsKKyAgICAgICAgICAg
IGlmICghYnVja2V0KSB7CisgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOwor
ICAgICAgICAgICAgICAgIGlmICghYnVja2V0UG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG51
bGxwdHIsIGJ1Y2tldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGJ1Y2tldDsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIg
dXMuCisgICAgICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAg
ICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBmdW5jdG9yKCk7Cisg
ICAgICAgIGJvb2wgcmVzdWx0OworICAgICAgICBpZiAodGhyZWFkRGF0YSkgeworICAgICAgICAg
ICAgYnVja2V0LT5lbnF1ZXVlKHRocmVhZERhdGEpOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1
ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAg
YnVja2V0LT5sb2NrLnVubG9jaygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2Jvb2wgZGVxdWV1ZSh2b2lkKiBhZGRyZXNz
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRk
cmVzcyh0aHJlYWREYXRhLT5hZGRyZXNzKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFz
aHRhYmxlKiBteUhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gaGFzaCAmIG15SGFzaHRhYmxlLT5zaXplOworICAgICAgICBCdWNrZXQqIGJ1Y2tl
dCA9IG15SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5sb2FkKCk7CisgICAgICAgIGlmICghYnVja2V0
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2Nr
KCk7CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUg
cmVoYXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFz
aHRhYmxlKSB7CisgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJ1Y2tldC0+Z2VuZXJpY0RlcXVldWUo
ZnVuY3Rvcik7CisgICAgICAgIGJvb2wgcmVzdWx0ID0gISFidWNrZXQtPnF1ZXVlSGVhZDsKKyAg
ICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK2Jvb2wgUGFya2luZ0xvdDo6cGFy
ayhjb25zdCB2b2lkKiBhZGRyZXNzLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFsaWRhdGlvbikK
K3sKKyAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOworCisgICAgQVNTRVJUKCFt
ZS0+c2hvdWxkUGFyayk7CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBlbnF1ZXVlKAorICAgICAg
ICBhZGRyZXNzLAorICAgICAgICBbJl0gKCkgLT4gVGhyZWFkRGF0YSogeworICAgICAgICAgICAg
aWYgKCF2YWxpZGF0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgICAgIG1lLT5hZGRyZXNzID0gYWRkcmVzczsKKyAgICAgICAgICAgIG1lLT5zaG91bGRQ
YXJrID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBtZTsKKyAgICAgICAgfSk7CisKKyAgICBp
ZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgeworICAgICAgICBzdGQ6
OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2luZ0xvY2spOworICAgICAg
ICB3aGlsZSAobWUtPnNob3VsZFBhcmspCisgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlv
bi53YWl0KGxvY2tlcik7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBhcmtp
bmdMb3Q6OnVucGFya09uZShjb25zdCB2b2lkKiBhZGRyZXNzKQoreworICAgIFRocmVhZERhdGEq
IHRocmVhZERhdGE7CisgICAgYm9vbCByZXN1bHQgPSBkZXF1ZXVlKAorICAgICAgICBhZGRyZXNz
LAorICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChl
bGVtZW50LT5hZGRyZXNzICE9IGFkZHJlc3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlcXVl
dWVSZXN1bHQ6Oklnbm9yZTsKKyAgICAgICAgICAgIHRocmVhZERhdGEgPSBlbGVtZW50OworICAg
ICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A7CisgICAgICAgIH0p
OworCisgICAgQVNTRVJUKHRocmVhZERhdGEtPnNob3VsZFBhcmspOworCisgICAgeworICAgICAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5n
TG9jayk7CisgICAgICAgIHRocmVhZERhdGEtPnNob3VsZFBhcmsgPSBmYWxzZTsKKyAgICAgICAg
dGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQYXJraW5nTG90Ojp1bnBhcmtBbGwoY29uc3Qgdm9p
ZCogYWRkcmVzcykKK3sKKyAgICBWZWN0b3I8VGhyZWFkRGF0YSosIDg+IHRocmVhZERhdGFzOwor
ICAgIGRlcXVldWUoCisgICAgICAgIGFkZHJlc3MsCisgICAgICAgIFsmXSAoVGhyZWFkRGF0YSog
ZWxlbWVudCkgeworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmFkZHJlc3MgIT0gYWRkcmVzcykK
KyAgICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6SWdub3JlOworICAgICAgICAg
ICAgdGhyZWFkRGF0YXMuYXBwZW5kKGVsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIERlcXVl
dWVSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOworICAgICAgICB9KTsKKworICAgIGZvciAoVGhy
ZWFkRGF0YSogdGhyZWFkRGF0YSA6IHRocmVhZERhdGFzKSB7CisgICAgICAgIEFTU0VSVCh0aHJl
YWREYXRhLT5zaG91bGRQYXJrKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4
PiBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICB0aHJlYWREYXRhLT5z
aG91bGRQYXJrID0gZmFsc2U7CisgICAgICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24u
bm90aWZ5X2FsbCgpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
YXJraW5nTG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9QYXJraW5nTG90X2gKKyNkZWZpbmUg
V1RGX1BhcmtpbmdMb3RfaAorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUGFya2luZ0xvdCB7
CisgICAgUGFya2luZ0xvdCgpID0gZGVsZXRlOworICAgIFBhcmtpbmdMb3QoY29uc3QgUGFya2lu
Z0xvdCYpID0gZGVsZXRlOworCitwdWJsaWM6CisgICAgLy8gUGFya3MgdGhlIHRocmVhZCBpbiBh
IHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90IGJl
IG51bGwuIFRoZQorICAgIC8vIHBhcmtpbmcgb25seSBzdWNjZWVkcyBpZiB0aGUgdmFsaWRhdGlv
biBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgaGVsZC4KKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcGFyayhjb25zdCB2b2lkKiBhZGRyZXNz
LCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFsaWRhdGlvbik7CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHN0YXRpYyBib29sIHBhcmsoY29uc3QgQXRvbWljPFQ+KiBhZGRyZXNzLCBU
IGV4cGVjdGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhcmsoYWRkcmVzcywgW2FkZHJlc3Ms
IGV4cGVjdGVkXSAoKSAtPiBib29sIHsgcmV0dXJuIGFkZHJlc3MtPmxvYWQoKSA9PSBleHBlY3Rl
ZDsgfSk7CisgICAgfQorCisgICAgLy8gVW5wYXJrcyBvbmUgdGhyZWFkIGZyb20gdGhlIHF1ZXVl
IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51bGwu
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZXJlIG1heSBzdGlsbCBiZSBvdGhlciB0aHJlYWRz
IG9uIHRoYXQgcXVldWUsIG9yIGZhbHNlIGlmIHRoZXJlIGRlZmluaXRlbHkKKyAgICAvLyBhcmUg
bm8gbW9yZSB0aHJlYWRzIG9uIHRoZSBxdWV1ZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIGJvb2wgdW5wYXJrT25lKGNvbnN0IHZvaWQqIGFkZHJlc3MpOworCisgICAgLy8gVW5wYXJr
cyBldmVyeSB0aHJlYWQgZnJvbSB0aGUgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBh
ZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgdW5wYXJrQWxsKGNvbnN0IHZvaWQqIGFkZHJlc3MpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UGFya2luZ0xvdDsKKworI2VuZGlmIC8vIFdURl9QYXJr
aW5nTG90X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258454</attachid>
            <date>2015-08-06 22:00:09 -0700</date>
            <delta_ts>2015-08-06 22:59:13 -0700</delta_ts>
            <desc>it does things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33500</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTg4MTAwKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsMTAgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEw
IC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZB
NjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUz
RiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBB
N0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07
CisJCTBGODI0QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0
NUQgLyogQnl0ZUxvY2suY3BwICovOyB9OworCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyog
Qnl0ZUxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OworCQkwRjgyNEE2
ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5jcHAgKi87IH07CisJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5n
TG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgy
NEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2
NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50
ZXIuaCAqLzsgfTsKIAkJMEY4ODVFMEYxODQ1QUVBOTAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVF
MEUxODQ1QUU5RjAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjhGMkI5
MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAv
KiBDb21waWxhdGlvblRocmVhZC5oICovOyB9OwpAQCAtMzA3LDYgKzMxMSwxMCBAQAogCQkwRjJC
NjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFC
NDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0
ZUxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MzFCNzQ0M0Ew
MDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZUxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjQxQjc0NDNB
MDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
ODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTcxNiw2ICs3MjQsOCBAQAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEw
MDQxMjNGRiAvKiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZG
IC8qIEJsb29tRmlsdGVyLmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1
bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCisJCQkJMEY4MjRBNjIxQjc0NDNBMDAwMkUzNDVEIC8q
IEJ5dGVMb2NrLmNwcCAqLywKKwkJCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxv
Y2suaCAqLywKIAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8s
CiAJCQkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovLAogCQkJ
CUE4QTQ3MjZBMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLApAQCAt
ODEwLDYgKzgyMCw4IEBACiAJCQkJQThBNDcyRTUxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VSZXNl
cnZhdGlvbi5oICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpv
YnMuaCAqLywKIAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGli
ZGlzcGF0Y2guaCAqLywKKwkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xv
dC5jcHAgKi8sCisJCQkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAq
LywKIAkJCQlBOEE0NzJFRDE1MUE4MjVCMDA0MTIzRkYgLyogUGFzc1JlZlB0ci5oICovLAogCQkJ
CUE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTBGOUQzMzVE
MTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCkBAIC0xMTU2LDYgKzExNjgs
NyBAQAogCQkJCUE4QTQ3NDE1MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDE2MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJT
ZWVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3
UG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY4MjRBNjcxQjc0NDNBMDAwMkUzNDVEIC8q
IEJ5dGVMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxNzE1MUE4MjVCMDA0MTIzRkYg
LyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxODE1MUE4MjVCMDA0
MTIzRkYgLyogUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTkxNTFBODI1
QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY3LDYg
KzExODAsNyBAQAogCQkJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0RjNCMEY3MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0
ZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDY5NDE5NjE2RUFBRkY4MDAyNEUx
NDYgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgyNEE2OTFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MUYxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0MjAxNTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0MjIxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCBpbiBIZWFkZXJzICov
LApAQCAtMTMyNSw2ICsxMzM5LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCUE4QTQ3Mzg2MTUxQTgy
NUIwMDQxMjNGRiAvKiBBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDM1
MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY4MjRBNjYxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFp
bmVkUG9vbE1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTM0MCw2ICsxMzU1LDcgQEAKIAkJCQlB
OEE0NzM5QTE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzkxNTFBODI1QjAwNDEyM0ZGIC8qIENTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUMxNTFBODI1QjAwNDEyM0ZGIC8qIEN1
cnJlbnRUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1
RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RjQ2RjYwMUEyODQwRUUw
MENDQkYyMiAvKiBSZWZDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzlFMTUx
QTgyNUIwMDQxMjNGRiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0Ew
MTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDE4ODEwMCkKKysr
IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KQEAg
LTQzLDcgKzQ0LDcgQEAgdW5zaWduZWQgbnVtSXRlcmF0aW9uczsKICAgICAKIHZvaWQgdXNhZ2Uo
KQogewotICAgIHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xtdXRl
eHxhbGwgPG51bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29yayBw
ZXIgY3JpdGljYWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+
XG4iKTsKKyAgICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0
ZWxvY2t8bXV0ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91
cD4gPHdvcmsgcGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBp
dGVyYXRpb25zPlxuIik7CiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTI1LDYgKzEyNiwxMCBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxMb2Nr
PigiV1RGIExvY2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKCFz
dHJjbXAoYXJndlsxXSwgImJ5dGVsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsK
KyAgICAgICAgcnVuQmVuY2htYXJrPEJ5dGVMb2NrPigiV1RGIEJ5dGVMb2NrIik7CisgICAgICAg
IGRpZFJ1biA9IHRydWU7CisgICAgfQogICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRleCIp
IHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CiAgICAgICAgIHJ1bkJlbmNobWFyazxNdXRl
eD4oIlBsYXRmb3JtIE11dGV4Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0
ZUxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5dGVM
b2NrLmgiCisKKyNpbmNsdWRlICJQYXJraW5nTG90LmgiCisjaW5jbHVkZSA8dGhyZWFkPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBCeXRlTG9jazo6bG9ja1Nsb3coKQoreworICAgIHVuc2ln
bmVkIHNwaW5Db3VudCA9IDA7CisKKyAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQg
dG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNv
bnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9IDQwOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAg
ICAgdWludDhfdCBjdXJyZW50Qnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKKworICAgICAgICAv
LyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmFyZ2UgaW4uCisgICAgICAgIGlmICghKGN1cnJlbnRC
eXRlVmFsdWUgJiBpc0hlbGRCaXQpCisgICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hh
bmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFy
a2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGlu
IGFyb3VuZC4KKyAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkg
JiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0KSB7CisgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAg
ICAgICAgICAgIHN0ZDo6dGhpc190aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBz
ZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFy
b3VuZAorICAgICAgICAvLyBpZiB0aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWls
ZWQgYXQgc2V0dGluZyBpdC4KKyAgICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1Bh
cmtlZEJpdCkKKyAgICAgICAgICAgICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJy
ZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJl
IGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFy
ay4KKyAgICAgICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0ZSwgaXNIZWxkQml0
IHwgaGFzUGFya2VkQml0KTsKKworICAgICAgICAvLyBXZSBoYXZlIGF3YWtlbiwgb3Igd2UgbmV2
ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2Ug
bG9vcAorICAgICAgICAvLyBhcm91bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICB9Cit9CisKK3ZvaWQg
Qnl0ZUxvY2s6OnVubG9ja1Nsb3coKQoreworICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgd2hpbGUg
ZmluZGluZyBvdXQgaWYgc29tZW9uZSBpcyBwYXJrZWQuIE5vdGUgdGhhdCBhcyBzb29uIGFzIHdl
IGRvIHRoaXMsCisgICAgLy8gc29tZW9uZSBtaWdodCBiYXJnZSBpbi4KKyAgICB1aW50OF90IG9s
ZEJ5dGVWYWx1ZTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIG9sZEJ5dGVWYWx1ZSA9IG1fYnl0
ZS5sb2FkKCk7CisgICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpOworICAg
ICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVlLCAwKSkKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCBzb21lb25lIGNvdWxk
IHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5zLCB0aGV5IHdpbGwgcmV0dXJu
IGltbWVkaWF0ZWx5CisgICAgLy8gYmVjYXVzZSBvdXIgcGFya2luZyBwcmVkaWNhdGUgaXMgdGhh
dCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0LCBidXQgd2UndmUgYWxyZWFkeSBz
ZXQKKyAgICAvLyBtX2J5dGUgPSAwLgorCisgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gdGhyZWFk
cyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVzZXMgYSB0aHVuZGVyaW5nIGhl
cmQsIGJ1dCB3aGlsZQorICAgIC8vIHRoYXQgaXMgdGhlb3JldGljYWxseSBzY2FyeSwgaXQncyB0
b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxseSBkb24ndCBoYXZlIGVub3Vn
aAorICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgorICAgIGlmIChvbGRCeXRlVmFs
dWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya0FsbCgmbV9ieXRl
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J5dGVM
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0ZUxvY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEJ5dGVMb2NrX2gKKyNkZWZpbmUgQnl0ZUxvY2tfaAorCisjaW5jbHVkZSA8d3RmL0F0
b21pY3MuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIEJ5dGVMb2NrIHsKK3B1YmxpYzoK
KyAgICBCeXRlTG9jaygpCisgICAgeworICAgICAgICBtX2J5dGUuc3RvcmUoMCwgc3RkOjptZW1v
cnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygpCisgICAgewor
ICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAsIGlzSGVsZEJp
dCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIGFj
cXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbG9ja1Ns
b3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBpZiAoTElL
RUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3RkOjptZW1vcnlf
b3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2VkIGFuZCBub2Jv
ZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpICYg
aXNIZWxkQml0OworICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29u
c3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGhhc1Bh
cmtlZEJpdCA9IDI7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2NrU2xvdygpOwor
ICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKKworICAgIEF0b21pYzx1
aW50OF90PiBtX2J5dGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpC
eXRlTG9jazsKKworI2VuZGlmIC8vIEJ5dGVMb2NrX2gKKwpJbmRleDogU291cmNlL1dURi93dGYv
UGFya2luZ0xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFya2luZ0xv
dC5oIgorCisjaW5jbHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkxvY2suaCIKKyNp
bmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMu
aCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0aHJl
YWQ+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgVGhyZWFkRGF0
YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgCisgICAgVGhy
ZWFkRGF0YSgpOworICAgIH5UaHJlYWREYXRhKCk7CisgICAgCisgICAgYm9vbCBzaG91bGRQYXJr
IHsgZmFsc2UgfTsKKyAgICBzdGQ6Om11dGV4IHBhcmtpbmdMb2NrOworICAgIHN0ZDo6Y29uZGl0
aW9uX3ZhcmlhYmxlIHBhcmtpbmdDb25kaXRpb247CisKKyAgICBjb25zdCB2b2lkKiBhZGRyZXNz
OworICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0ciB9OworfTsKKworZW51bSBj
bGFzcyBEZXF1ZXVlUmVzdWx0IHsKKyAgICBJZ25vcmUsCisgICAgUmVtb3ZlQW5kQ29udGludWUs
CisgICAgUmVtb3ZlQW5kU3RvcAorfTsKKworc3RydWN0IEJ1Y2tldCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBlbnF1ZXVlKFRocmVhZERhdGEqIGRh
dGEpCisgICAgeworICAgICAgICBBU1NFUlQoZGF0YS0+YWRkcmVzcyk7CisgICAgICAgIEFTU0VS
VCghZGF0YS0+bmV4dEluUXVldWUpOworICAgICAgICAKKyAgICAgICAgaWYgKHF1ZXVlVGFpbCkg
eworICAgICAgICAgICAgcXVldWVUYWlsLT5uZXh0SW5RdWV1ZSA9IGRhdGE7CisgICAgICAgICAg
ICBxdWV1ZVRhaWwgPSBkYXRhOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgcXVldWVIZWFkID0gZGF0YTsKKyAgICAgICAgcXVldWVUYWlsID0gZGF0YTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZ2VuZXJpY0RlcXVl
dWUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlmICghcXVldWVIZWFk
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0
cnVlOworICAgICAgICBmb3IgKAorICAgICAgICAgICAgVGhyZWFkRGF0YSoqIGN1cnJlbnRQdHIg
PSAmcXVldWVIZWFkOworICAgICAgICAgICAgc2hvdWxkQ29udGludWUgJiYgKmN1cnJlbnRQdHI7
CisgICAgICAgICAgICBjdXJyZW50UHRyID0gJigoKmN1cnJlbnRQdHIpLT5uZXh0SW5RdWV1ZSkp
IHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVGhyZWFkRGF0YSogY3VycmVudCA9ICpjdXJy
ZW50UHRyOworICAgICAgICAgICAgRGVxdWV1ZVJlc3VsdCByZXN1bHQgPSBmdW5jdG9yKGN1cnJl
bnQpOworICAgICAgICAgICAgc3dpdGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgIGNhc2UgRGVx
dWV1ZVJlc3VsdDo6SWdub3JlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKKyAgICAgICAgICAgICAgICAq
Y3VycmVudFB0ciA9IGN1cnJlbnQtPm5leHRJblF1ZXVlOworICAgICAgICAgICAgICAgIGN1cnJl
bnQtPm5leHRJblF1ZXVlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcDoKKyAgICAgICAgICAgICAg
ICAqY3VycmVudFB0ciA9IGN1cnJlbnQtPm5leHRJblF1ZXVlOworICAgICAgICAgICAgICAgIGN1
cnJlbnQtPm5leHRJblF1ZXVlID0gbnVsbHB0cjsKKyAgICAgICAgICAgICAgICBzaG91bGRDb250
aW51ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFxdWV1ZUhlYWQpCisgICAgICAgICAgICBxdWV1ZVRhaWwg
PSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBUaHJlYWREYXRhKiBkZXF1ZXVlKCkKKyAgICB7
CisgICAgICAgIFRocmVhZERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGdlbmVyaWNE
ZXF1ZXVlKAorICAgICAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50KSAtPiBEZXF1ZXVl
UmVzdWx0IHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBlbGVtZW50OworICAgICAgICAgICAg
ICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOworICAgICAgICAgICAgfSk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgVGhyZWFkRGF0YSogcXVldWVI
ZWFkIHsgbnVsbHB0ciB9OworICAgIFRocmVhZERhdGEqIHF1ZXVlVGFpbCB7IG51bGxwdHIgfTsK
KworICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyB0aGUgZW50aXJlIGJ1Y2tldC4gVGhvdSBzaGFs
bCBub3QgbWFrZSBjaGFuZ2VzIHRvIEJ1Y2tldCB3aXRob3V0IGhvbGRpbmcKKyAgICAvLyB0aGlz
IGxvY2suCisgICAgTG9jayBsb2NrOworCisgICAgLy8gUHV0IHNvbWUgZGlzdGFuZSBiZXR3ZWVu
IGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9uZSBvZiBzZXZlcmFsIG1pdGlnYXRpb25zIGFn
YWluc3QgZmFsc2UKKyAgICAvLyBzaGFyaW5nLgorICAgIGNoYXIgcGFkZGluZ1s2NF07Cit9Owor
CitzdHJ1Y3QgSGFzaHRhYmxlIHsKKyAgICB1bnNpZ25lZCBzaXplOworICAgIEF0b21pYzxCdWNr
ZXQqPiBkYXRhWzFdOworCisgICAgc3RhdGljIEhhc2h0YWJsZSogY3JlYXRlKHVuc2lnbmVkIHNp
emUpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZSA+PSAxKTsKKyAgICAgICAgCisgICAgICAg
IEhhc2h0YWJsZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SGFzaHRhYmxlKj4oCisgICAgICAgICAg
ICBmYXN0WmVyb2VkTWFsbG9jKHNpemVvZihIYXNodGFibGUpICsgc2l6ZW9mKEF0b21pYzxCdWNr
ZXQqPikgKiAoc2l6ZSAtIDEpKSk7CisgICAgICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShIYXNo
dGFibGUqIGhhc2h0YWJsZSkKKyAgICB7CisgICAgICAgIGZhc3RGcmVlKGhhc2h0YWJsZSk7Cisg
ICAgfQorfTsKKworVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4qIHRocmVhZERhdGE7CitBdG9t
aWM8SGFzaHRhYmxlKj4gaGFzaHRhYmxlOworQXRvbWljPHVuc2lnbmVkPiBudW1UaHJlYWRzOwor
CisvLyBXaXRoIDY0IGJ5dGVzIG9mIHBhZGRpbmcgcGVyIGJ1Y2tldCwgYXNzdW1pbmcgYSBoYXNo
dGFibGUgaXMgZnVsbHkgcG9wdWxhdGVkIHdpdGggYnVja2V0cywgdGhlCisvLyBtZW1vcnkgdXNh
Z2UgcGVyIHRocmVhZCB3aWxsIHN0aWxsIGJlIGxlc3MgdGhhbiAxS0IuCitjb25zdCB1bnNpZ25l
ZCBtYXhMb2FkRmFjdG9yID0gMTA7CisKK2NvbnN0IHVuc2lnbmVkIGdyb3d0aEZhY3RvciA9IDI7
CisKK3Vuc2lnbmVkIGhhc2hBZGRyZXNzKGNvbnN0IHZvaWQqIGFkZHJlc3MpCit7CisgICAgcmV0
dXJuIFdURjo6UHRySGFzaDxjb25zdCB2b2lkKj46Omhhc2goYWRkcmVzcyk7Cit9CisKK1RocmVh
ZERhdGE6OlRocmVhZERhdGEoKQoreworICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOwor
ICAgIGZvciAoOzspIHsKKyAgICAgICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVh
ZHMubG9hZCgpOworICAgICAgICBjdXJyZW50TnVtVGhyZWFkcyA9IG9sZE51bVRocmVhZHMgKyAx
OworICAgICAgICBpZiAobnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVh
ZHMsIGN1cnJlbnROdW1UaHJlYWRzKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IC8vIFdlIHRyeSB0byBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlIHVzZWQg
Zm9yIHRocmVhZCBxdWV1ZXMgaXMgYWx3YXlzIGxhcmdlIGVub3VnaAorICAgIC8vIHRvIGF2b2lk
IGNvbGxpc2lvbnMuIFNvLCBzaW5jZSB3ZSBzdGFydGVkIGEgbmV3IHRocmVhZCwgd2UgbWF5IG5l
ZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlCisgICAgLy8gaGFzaHRhYmxlLiBUaGlzIGxv
b3AgZG9lcyBqdXN0IHRoYXQuIEl0J3MgYSBjb21wbGljYXRlZCBhbGdvcml0aG0gYmVjYXVzZSB3
ZSBkb24ndCBoYXZlIHRoZQorICAgIC8vIG5vdGlvbiBvZiBsb2NraW5nIHRoZSBoYXNodGFibGUu
IEluc3RlYWQsIG9ubHkgaW5kaXZpZHVhbCBidWNrZXRzIGFyZSBsb2NrZWQuIFNvLCB0byByZWhh
c2gsIHdlCisgICAgLy8gZmlyc3QgbG9jayBhbGwgYnVja2V0cyB0byBwcmV2ZW50IGFueSB0aHJl
YWQgZnJvbSBtYWtpbmcgYW55IGNoYW5nZXMsIGFuZCB0aGVuIHdlIHJlYWxsb2NhdGUKKyAgICAv
LyB0aGUgaGFzaHRhYmxlIHNwaW5lICh0aGUgYXJyYXkgdGhhdCBwb2ludHMgdG8gdGhlIGJ1Y2tl
dHMpLiBXZSBuZXZlciBmcmVlIHRoZSBvbGQgc3BpbmUsIHNpbmNlCisgICAgLy8gd2UgbmV2ZXIg
bG9jayBhcm91bmQgc3BpbmUgYWNjZXNzZXMgKGkuZS4gdGhlICJoYXNodGFibGUiIGdsb2JhbCB2
YXJpYWJsZSkuCisgICAgZm9yICg7OykgeworICAgICAgICBIYXNodGFibGUqIG9sZEhhc2h0YWJs
ZTsKKyAgICAgICAgCisgICAgICAgIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7Cisg
ICAgICAgIGlmICghb2xkSGFzaHRhYmxlKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8gYmUgdGhl
IGZpcnN0IHRvIGNyZWF0ZSB0aGUgaGFzaHRhYmxlLgorICAgICAgICAgICAgSGFzaHRhYmxlKiBu
ZXdIYXNodGFibGUgPSBIYXNodGFibGU6OmNyZWF0ZShtYXhMb2FkRmFjdG9yKTsKKyAgICAgICAg
ICAgIGlmIChoYXNodGFibGUuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBuZXdIYXNodGFi
bGUpKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBIYXNodGFibGU6OmRl
c3Ryb3kobmV3SGFzaHRhYmxlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihvbGRIYXNodGFibGUtPnNp
emUpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjdXJyZW50TnVtVGhyZWFkcykgPD0gbWF4TG9hZEZh
Y3RvcikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8vIE5lZWQgdG8gZmlyc3QgcHJl
dmVudCBhbnlvbmUgZnJvbSBtdWNraW5nIHdpdGggdGhlIGV4aXN0aW5nIGhhc2h0YWJsZS4gVGhp
cyBpcyBzb21ld2hhdAorICAgICAgICAvLyBjaGFsbGVuZ2luZy4gV2UgZG8gaXQgYnkgbG9ja2lu
ZyBhbGwgYnVja2V0cy4gQnV0IGlmIGEgYnVja2V0IGlzIGJsYW5rLCB0aGVuIGl0J3MgcG9zc2li
bGUKKyAgICAgICAgLy8gZm9yIHNvbWUgdGhyZWFkIHRvIENBUyBpbiBhIG5ldyBidWNrZXQgb24g
dGhlIG9sZCBoYXNodGFibGUuIFdlIHByZXZlbnQgdGhpcyBieSBmb3JjaW5nCisgICAgICAgIC8v
IGFsbG9jYXRpb24gb2YgYWxsIGJ1Y2tldHMuCisgICAgICAgIFZlY3RvcjxCdWNrZXQqPiByZXVz
YWJsZUJ1Y2tldHM7CisgICAgICAgIFZlY3RvcjxCdWNrZXQqPiBidWNrZXRzVG9VbmxvY2s7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG9sZEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykgeworICAg
ICAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQb2ludGVyID0gb2xkSGFzaHRhYmxlLT5k
YXRhW2ldOworCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgQnVja2V0
KiBidWNrZXQgPSBidWNrZXRQb2ludGVyLmxvYWQoKTsKKworICAgICAgICAgICAgICAgIGlmICgh
YnVja2V0KSB7CisgICAgICAgICAgICAgICAgICAgIGJ1Y2tldCA9IG5ldyBCdWNrZXQoKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFidWNrZXRQb2ludGVyLmNvbXBhcmVFeGNoYW5nZVdlYWso
bnVsbHB0ciwgYnVja2V0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGJ1Y2tl
dDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYnVja2V0LT5sb2NrLmxv
Y2soKTsKKyAgICAgICAgICAgICAgICByZXVzYWJsZUJ1Y2tldHMuYXBwZW5kKGJ1Y2tldCk7Cisg
ICAgICAgICAgICAgICAgYnVja2V0c1RvVW5sb2NrLmFwcGVuZChidWNrZXQpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm93
IGFsbCBidWNrZXRzIGFyZSBsb2NrZWQuIFJlbG9hZCB0aGUgaGFzaHRhYmxlIGFuZCBzZWUgaWYg
aXQncyBzdGlsbCB0aGUgc2FtZSBhbmQgaWYgaXQncworICAgICAgICAvLyBzdGlsbCB0b28gc21h
bGwuCisgICAgICAgIEhhc2h0YWJsZSogbmV3T2xkSGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQo
KTsKKyAgICAgICAgaWYgKG5ld09sZEhhc2h0YWJsZSAhPSBvbGRIYXNodGFibGUpIHsKKyAgICAg
ICAgICAgIC8vIFVubG9jayBhbGwgb2YgdGhlIGJ1Y2tldHMuCisgICAgICAgICAgICBmb3IgKEJ1
Y2tldCogYnVja2V0IDogYnVja2V0c1RvVW5sb2NrKQorICAgICAgICAgICAgICAgIGJ1Y2tldC0+
bG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyBo
YXNodGFibGUgaXMgYmlnIGVub3VnaCwgdGhlbiB3ZSdyZSBkb25lLgorICAgICAgICAgICAgaWYg
KHN0YXRpY19jYXN0PGRvdWJsZT4obmV3T2xkSGFzaHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0
PGRvdWJsZT4oY3VycmVudE51bVRocmVhZHMpIDw9IG1heExvYWRGYWN0b3IpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgd2UganVzdCBuZWVkIHRv
IHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gT0ssIHdlJ3ZlIGxvY2tlZCBhbGwgYnVja2V0cyBhbmQgdGhlIG9sZCBoYXNodGFibGUgaXMg
c3RpbGwgdGhlIHZhbGlkIG9uZS4gVGhpcyBpcyB0aGUgY2FzZQorICAgICAgICAvLyB3aGVyZSB3
ZSBjYW4gYWN0dWFsbHkgZG8gdGhlIHJlc2l6aW5nLgorCisgICAgICAgIC8vIFRoZXNlIHRocmVh
ZCBkYXRhcyBhcmUgcGxhY2VkIGludG8gdGhlIHZlY3RvciBpbiBxdWV1ZSBvcmRlci4KKyAgICAg
ICAgVmVjdG9yPFRocmVhZERhdGEqPiB0aHJlYWREYXRhczsKKyAgICAgICAgZm9yIChCdWNrZXQq
IGJ1Y2tldCA6IHJldXNhYmxlQnVja2V0cykgeworICAgICAgICAgICAgd2hpbGUgKFRocmVhZERh
dGEqIHRocmVhZERhdGEgPSBidWNrZXQtPmRlcXVldWUoKSkKKyAgICAgICAgICAgICAgICB0aHJl
YWREYXRhcy5hcHBlbmQodGhyZWFkRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNodGFi
bGUqIG5ld0hhc2h0YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKGN1cnJlbnROdW1UaHJlYWRzICog
Z3Jvd3RoRmFjdG9yICogbWF4TG9hZEZhY3Rvcik7CisgICAgICAgIGZvciAoVGhyZWFkRGF0YSog
dGhyZWFkRGF0YSA6IHRocmVhZERhdGFzKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBoYXNoID0g
aGFzaEFkZHJlc3ModGhyZWFkRGF0YS0+YWRkcmVzcyk7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bmRleCA9IGhhc2ggJSBuZXdIYXNodGFibGUtPnNpemU7CisgICAgICAgICAgICBCdWNrZXQqIGJ1
Y2tldCA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpbmRleF0ubG9hZCgpOworICAgICAgICAgICAgaWYg
KCFidWNrZXQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV1c2FibGVCdWNrZXRzLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnVja2V0ID0gcmV1c2FibGVCdWNrZXRz
LnRha2VMYXN0KCk7CisgICAgICAgICAgICAgICAgbmV3SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5z
dG9yZShidWNrZXQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBidWNrZXQtPmVucXVl
dWUodGhyZWFkRGF0YSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRo
ZXJlIG1heSBiZSBzb21lIGJ1Y2tldHMgbGVmdCB1bnJldXNlZC4gVGhpcyBjb3VsZCBlYXNpbHkg
aGFwcGVuIGlmIHRoZQorICAgICAgICAvLyBudW1iZXIgb2YgZW5xdWV1ZWQgdGhyZWFkcyByaWdo
dCBub3cgaXMgbG93IGJ1dCB0aGUgaGlnaCB3YXRlcm1hcmsgb2YgdGhlIG51bWJlciBvZiB0aHJl
YWRzCisgICAgICAgIC8vIGVucXVldWVkIHdhcyBoaWdoLiBXZSBwbGFjZSB0aGVzZSBidWNrZXRz
IGludG8gdGhlIGhhc2h0YWJsZSBiYXNpY2FsbHkgYXQgcmFuZG9tLCBqdXN0IHRvCisgICAgICAg
IC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBsZWFrIHRoZW0uCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBuZXdIYXNodGFibGUtPnNpemUgJiYgIXJldXNhYmxlQnVja2V0cy5pc0VtcHR5
KCk7ICsraSkgeworICAgICAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQdHIgPSBuZXdI
YXNodGFibGUtPmRhdGFbaV07CisgICAgICAgICAgICBpZiAoYnVja2V0UHRyLmxvYWQoKSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJ1Y2tldFB0ci5zdG9yZShyZXVz
YWJsZUJ1Y2tldHMudGFrZUxhc3QoKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBTaW5jZSB3
ZSBpbmNyZWFzZWQgdGhlIHNpemUgb2YgdGhlIGhhc2h0YWJsZSwgd2Ugc2hvdWxkIGhhdmUgZXho
YXVzdGVkIG91ciBwcmVhbGxvY2F0ZWQKKyAgICAgICAgLy8gYnVja2V0cyBieSBub3cuCisgICAg
ICAgIEFTU0VSVChyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpKTsKKworICAgICAgICAvLyBPSywg
cmlnaHQgbm93IHRoZSBvbGQgaGFzaHRhYmxlIGlzIGxvY2tlZCB1cCBhbmQgdGhlIG5ldyBoYXNo
dGFibGUgaXMgcmVhZHkgdG8gcm9jayBhbmQKKyAgICAgICAgLy8gcm9sbC4gQWZ0ZXIgd2UgaW5z
dGFsbCB0aGUgbmV3IGhhc2h0YWJsZSwgd2UgY2FuIHJlbGVhc2UgYWxsIGJ1Y2tldCBsb2Nrcy4K
KworICAgICAgICBib29sIHJlc3VsdCA9IGhhc2h0YWJsZS5jb21wYXJlRXhjaGFuZ2VTdHJvbmco
b2xkSGFzaHRhYmxlLCBuZXdIYXNodGFibGUpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQpOworCisgICAgICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiBidWNrZXRzVG9VbmxvY2spCisg
ICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworVGhyZWFkRGF0YTo6flRocmVhZERhdGEoKQoreworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVhZHMubG9hZCgpOworICAgICAgICBp
ZiAobnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMsIG9sZE51bVRo
cmVhZHMgLSAxKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworVGhyZWFkRGF0YSog
bXlUaHJlYWREYXRhKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgaW5pdGlhbGl6ZU9u
Y2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIGluaXRpYWxpemVPbmNlLAorICAgICAg
ICBbXXsKKyAgICAgICAgICAgIHRocmVhZERhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFk
RGF0YT4oKTsKKyAgICAgICAgfSk7CisKKyAgICByZXR1cm4gKnRocmVhZERhdGE7Cit9CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Citib29sIGVucXVldWUoY29uc3Qgdm9pZCogYWRkcmVz
cywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFk
ZHJlc3MoYWRkcmVzcyk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSogbXlI
YXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhh
c2ggJSBteUhhc2h0YWJsZS0+c2l6ZTsKKyAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQ
b2ludGVyID0gbXlIYXNodGFibGUtPmRhdGFbaW5kZXhdOworICAgICAgICBCdWNrZXQqIGJ1Y2tl
dDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0UG9pbnRl
ci5sb2FkKCk7CisgICAgICAgICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgICAgIGJ1
Y2tldCA9IG5ldyBCdWNrZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWJ1Y2tldFBvaW50ZXIu
Y29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBidWNrZXQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRlbGV0ZSBidWNrZXQ7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlm
IChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBidWNrZXQt
PmxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBmdW5jdG9yKCk7CisgICAgICAgIGJvb2wgcmVz
dWx0OworICAgICAgICBpZiAodGhyZWFkRGF0YSkgeworICAgICAgICAgICAgYnVja2V0LT5lbnF1
ZXVlKHRocmVhZERhdGEpOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgYnVja2V0LT5sb2NrLnVu
bG9jaygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KK2Jvb2wgZGVxdWV1ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQoreworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyhhZGRy
ZXNzKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRhYmxlKiBteUhhc2h0YWJsZSA9
IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIGlmICghbXlIYXNodGFibGUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAmIG15SGFzaHRh
YmxlLT5zaXplOworICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG15SGFzaHRhYmxlLT5kYXRhW2lu
ZGV4XS5sb2FkKCk7CisgICAgICAgIGlmICghYnVja2V0KQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCisgICAg
ICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBi
dWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGJ1Y2tldC0+Z2VuZXJpY0RlcXVldWUoZnVuY3Rvcik7CisgICAgICAgIGJvb2wg
cmVzdWx0ID0gISFidWNrZXQtPnF1ZXVlSGVhZDsKKyAgICAgICAgYnVja2V0LT5sb2NrLnVubG9j
aygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMg
bmFtZXNwYWNlCisKK2Jvb2wgUGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkoY29uc3Qgdm9p
ZCogYWRkcmVzcywgc3RkOjpmdW5jdGlvbjxib29sKCk+IHZhbGlkYXRpb24pCit7CisgICAgVGhy
ZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsKKworICAgIEFTU0VSVCghbWUtPnNob3VsZFBh
cmspOworICAgIAorICAgIGJvb2wgcmVzdWx0ID0gZW5xdWV1ZSgKKyAgICAgICAgYWRkcmVzcywK
KyAgICAgICAgWyZdICgpIC0+IFRocmVhZERhdGEqIHsKKyAgICAgICAgICAgIGlmICghdmFsaWRh
dGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBt
ZS0+YWRkcmVzcyA9IGFkZHJlc3M7CisgICAgICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gbWU7CisgICAgICAgIH0pOworCisgICAgaWYgKCFyZXN1bHQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9j
azxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgd2hpbGUgKG1l
LT5zaG91bGRQYXJrKQorICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2Nr
ZXIpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYXJraW5nTG90Ojp1bnBh
cmtPbmUoY29uc3Qgdm9pZCogYWRkcmVzcykKK3sKKyAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRh
OworICAgIGJvb2wgcmVzdWx0ID0gZGVxdWV1ZSgKKyAgICAgICAgYWRkcmVzcywKKyAgICAgICAg
WyZdIChUaHJlYWREYXRhKiBlbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+YWRk
cmVzcyAhPSBhZGRyZXNzKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpJ
Z25vcmU7CisgICAgICAgICAgICB0aHJlYWREYXRhID0gZWxlbWVudDsKKyAgICAgICAgICAgIHJl
dHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOworICAgICAgICB9KTsKKworICAgIEFT
U0VSVCh0aHJlYWREYXRhLT5zaG91bGRQYXJrKTsKKworICAgIHsKKyAgICAgICAgc3RkOjp1bmlx
dWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAg
ICAgICB0aHJlYWREYXRhLT5zaG91bGRQYXJrID0gZmFsc2U7CisgICAgICAgIHRocmVhZERhdGEt
PnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X2FsbCgpOworICAgIH0KKworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZvaWQqIGFkZHJlc3Mp
Cit7CisgICAgVmVjdG9yPFRocmVhZERhdGEqLCA4PiB0aHJlYWREYXRhczsKKyAgICBkZXF1ZXVl
KAorICAgICAgICBhZGRyZXNzLAorICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQpIHsK
KyAgICAgICAgICAgIGlmIChlbGVtZW50LT5hZGRyZXNzICE9IGFkZHJlc3MpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6Oklnbm9yZTsKKyAgICAgICAgICAgIHRocmVhZERh
dGFzLmFwcGVuZChlbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpS
ZW1vdmVBbmRDb250aW51ZTsKKyAgICAgICAgfSk7CisKKyAgICBmb3IgKFRocmVhZERhdGEqIHRo
cmVhZERhdGEgOiB0aHJlYWREYXRhcykgeworICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+c2hv
dWxkUGFyayk7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRo
cmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9
IGZhbHNlOworICAgICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9hbGwo
KTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QYXJraW5nTG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBXVEZfUGFya2luZ0xvdF9oCisjZGVmaW5lIFdURl9QYXJraW5n
TG90X2gKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4K
KyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUGFy
a2luZ0xvdCB7CisgICAgUGFya2luZ0xvdCgpID0gZGVsZXRlOworICAgIFBhcmtpbmdMb3QoY29u
c3QgUGFya2luZ0xvdCYpID0gZGVsZXRlOworCitwdWJsaWM6CisgICAgLy8gUGFya3MgdGhlIHRo
cmVhZCBpbiBhIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2gg
Y2Fubm90IGJlIG51bGwuIFRoZQorICAgIC8vIHBhcmtpbmcgb25seSBzdWNjZWVkcyBpZiB0aGUg
dmFsaWRhdGlvbiBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMg
aGVsZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcGFya0NvbmRpdGlvbmFs
bHkoY29uc3Qgdm9pZCogYWRkcmVzcywgc3RkOjpmdW5jdGlvbjxib29sKCk+IHZhbGlkYXRpb24p
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgYm9v
bCBjb21wYXJlQW5kUGFyayhjb25zdCBBdG9taWM8VD4qIGFkZHJlc3MsIFUgZXhwZWN0ZWQpCisg
ICAgeworICAgICAgICByZXR1cm4gcGFya0NvbmRpdGlvbmFsbHkoCisgICAgICAgICAgICBhZGRy
ZXNzLAorICAgICAgICAgICAgW2FkZHJlc3MsIGV4cGVjdGVkXSAoKSAtPiBib29sIHsKKyAgICAg
ICAgICAgICAgICBVIHZhbHVlID0gYWRkcmVzcy0+bG9hZCgpOworICAgICAgICAgICAgICAgIGRh
dGFMb2coInZhbHVlID0gIiwgdmFsdWUsICIsIGV4cGVjdGVkID0gIiwgZXhwZWN0ZWQsICJcbiIp
OworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZDsKKyAgICAgICAgICAg
IH0pOworICAgIH0KKworICAgIC8vIFVucGFya3Mgb25lIHRocmVhZCBmcm9tIHRoZSBxdWV1ZSBh
c3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLgor
ICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBtYXkgc3RpbGwgYmUgb3RoZXIgdGhyZWFkcyBv
biB0aGF0IHF1ZXVlLCBvciBmYWxzZSBpZiB0aGVyZSBkZWZpbml0ZWx5CisgICAgLy8gYXJlIG5v
IG1vcmUgdGhyZWFkcyBvbiB0aGUgcXVldWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBib29sIHVucGFya09uZShjb25zdCB2b2lkKiBhZGRyZXNzKTsKKworICAgIC8vIFVucGFya3Mg
ZXZlcnkgdGhyZWFkIGZyb20gdGhlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRk
cmVzcywgd2hpY2ggY2Fubm90IGJlIG51bGwuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyB2b2lkIHVucGFya0FsbChjb25zdCB2b2lkKiBhZGRyZXNzKTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OlBhcmtpbmdMb3Q7CisKKyNlbmRpZiAvLyBXVEZfUGFya2lu
Z0xvdF9oCisKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCShyZXZp
c2lvbiAxODgxMDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTcsNCArOTcsMzQgQEAgVEVTVChXVEZfTG9jaywgTWFueUNvbnRl
bnRlZExvbmdTZWN0aW9ucwogICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAwMDAsIDIw
MDApOwogfQogCitURVNUKFdURl9CeXRlTG9jaywgVW5jb250ZW50ZWRTaG9ydFNlY3Rpb24pCit7
CisgICAgcnVuQnl0ZUxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxLCAxLCAxMDAwMDAwMCk7Cit9CisK
K1RFU1QoV1RGX0J5dGVMb2NrLCBVbmNvbnRlbnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkJ5
dGVMb2NrVGVzdDxCeXRlTG9jaz4oMSwgMSwgMTAwMDAsIDEwMDApOworfQorCitURVNUKFdURl9C
eXRlTG9jaywgQ29udGVudGVkU2hvcnRTZWN0aW9uKQoreworICAgIHJ1bkJ5dGVMb2NrVGVzdDxC
eXRlTG9jaz4oMSwgMTAsIDEsIDEwMDAwMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIENv
bnRlbnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkJ5dGVMb2NrVGVzdDxCeXRlTG9jaz4oMSwg
MTAsIDEwMDAwLCAxMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBNYW55Q29udGVudGVk
U2hvcnRTZWN0aW9ucykKK3sKKyAgICBydW5CeXRlTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEwLCAxMCwg
MSwgNTAwMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIE1hbnlDb250ZW50ZWRMb25nU2Vj
dGlvbnMpCit7CisgICAgcnVuQnl0ZUxvY2tUZXN0PEJ5dGVMb2NrPigxMCwgMTAsIDEwMDAwLCAy
MDAwKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258459</attachid>
            <date>2015-08-06 22:59:13 -0700</date>
            <delta_ts>2015-08-07 21:58:10 -0700</delta_ts>
            <desc>passing tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37514</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTg4MTAwKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsMTAgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEw
IC8qIE5vTG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYwRDg1QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZB
NjE3QjZCNEZCMDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUz
RiAvKiBEZWZlcnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBB
N0FFM0YgLyogRmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07
CisJCTBGODI0QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0
NUQgLyogQnl0ZUxvY2suY3BwICovOyB9OworCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyog
Qnl0ZUxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OworCQkwRjgyNEE2
ODFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFy
a2luZ0xvdC5jcHAgKi87IH07CisJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5n
TG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgy
NEE2NTFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2
NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50
ZXIuaCAqLzsgfTsKIAkJMEY4ODVFMEYxODQ1QUVBOTAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVF
MEUxODQ1QUU5RjAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjhGMkI5
MTE3MkUwMEZDMDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAv
KiBDb21waWxhdGlvblRocmVhZC5oICovOyB9OwpAQCAtMzA3LDYgKzMxMSwxMCBAQAogCQkwRjJC
NjZBNDE3QjZCNEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRGVmZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEYyQjY2QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBGbGlwQnl0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFC
NDhCNDAwQTZENzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0
ZUxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MzFCNzQ0M0Ew
MDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qnl0ZUxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjQxQjc0NDNB
MDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
ODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTcxNiw2ICs3MjQsOCBAQAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEw
MDQxMjNGRiAvKiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZG
IC8qIEJsb29tRmlsdGVyLmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1
bXBQb2ludGVyQWxsb2NhdG9yLmggKi8sCisJCQkJMEY4MjRBNjIxQjc0NDNBMDAwMkUzNDVEIC8q
IEJ5dGVMb2NrLmNwcCAqLywKKwkJCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxv
Y2suaCAqLywKIAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8s
CiAJCQkJMEZFQzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovLAogCQkJ
CUE4QTQ3MjZBMTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLApAQCAt
ODEwLDYgKzgyMCw4IEBACiAJCQkJQThBNDcyRTUxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VSZXNl
cnZhdGlvbi5oICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpv
YnMuaCAqLywKIAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGli
ZGlzcGF0Y2guaCAqLywKKwkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xv
dC5jcHAgKi8sCisJCQkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAq
LywKIAkJCQlBOEE0NzJFRDE1MUE4MjVCMDA0MTIzRkYgLyogUGFzc1JlZlB0ci5oICovLAogCQkJ
CUE4NzZEQkQ3MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTBGOUQzMzVE
MTY1REJBNzMwMDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCkBAIC0xMTU2LDYgKzExNjgs
NyBAQAogCQkJCUE4QTQ3NDE1MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDE2MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJT
ZWVkLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3
UG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY4MjRBNjcxQjc0NDNBMDAwMkUzNDVEIC8q
IEJ5dGVMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxNzE1MUE4MjVCMDA0MTIzRkYg
LyogUmVkQmxhY2tUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxODE1MUE4MjVCMDA0
MTIzRkYgLyogUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTkxNTFBODI1
QjAwNDEyM0ZGIC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY3LDYg
KzExODAsNyBAQAogCQkJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0RjNCMEY3MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0
ZWRBcml0aG1ldGljLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDY5NDE5NjE2RUFBRkY4MDAyNEUx
NDYgLyogU2NoZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgyNEE2OTFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MUYxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0MjAxNTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0MjIxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCBpbiBIZWFkZXJzICov
LApAQCAtMTMyNSw2ICsxMzM5LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCUE4QTQ3Mzg2MTUxQTgy
NUIwMDQxMjNGRiAvKiBBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDM1
MTUxQTgyNUIwMDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEY4MjRBNjYxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTlCQzcwRjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2OTQxOUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFp
bmVkUG9vbE1hYy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTM0MCw2ICsxMzU1LDcgQEAKIAkJCQlB
OEE0NzM5QTE1MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzkxNTFBODI1QjAwNDEyM0ZGIC8qIENTdHJp
bmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUMxNTFBODI1QjAwNDEyM0ZGIC8qIEN1
cnJlbnRUaW1lLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1
RCAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RjQ2RjYwMUEyODQwRUUw
MENDQkYyMiAvKiBSZWZDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzlFMTUx
QTgyNUIwMDQxMjNGRiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0Ew
MTUxQTgyNUIwMDQxMjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNv
dXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL2JlbmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDE4ODEwMCkKKysr
IFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8dW5pc3Rk
Lmg+CisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1l
Lmg+CiAjaW5jbHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KQEAg
LTQzLDcgKzQ0LDcgQEAgdW5zaWduZWQgbnVtSXRlcmF0aW9uczsKICAgICAKIHZvaWQgdXNhZ2Uo
KQogewotICAgIHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xtdXRl
eHxhbGwgPG51bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29yayBw
ZXIgY3JpdGljYWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+
XG4iKTsKKyAgICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0
ZWxvY2t8bXV0ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91
cD4gPHdvcmsgcGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBp
dGVyYXRpb25zPlxuIik7CiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTI1LDYgKzEyNiwxMCBAQCBp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxMb2Nr
PigiV1RGIExvY2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKCFz
dHJjbXAoYXJndlsxXSwgImJ5dGVsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsK
KyAgICAgICAgcnVuQmVuY2htYXJrPEJ5dGVMb2NrPigiV1RGIEJ5dGVMb2NrIik7CisgICAgICAg
IGRpZFJ1biA9IHRydWU7CisgICAgfQogICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRleCIp
IHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CiAgICAgICAgIHJ1bkJlbmNobWFyazxNdXRl
eD4oIlBsYXRmb3JtIE11dGV4Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0
ZUxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCeXRl
TG9jay5oIgorCisjaW5jbHVkZSAiUGFya2luZ0xvdC5oIgorI2luY2x1ZGUgPHRocmVhZD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKwordm9pZCBC
eXRlTG9jazo6bG9ja1Nsb3coKQoreworICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisKKyAg
ICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBvbiBw
YXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1pdCA9
IDQwOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0ZVZh
bHVlID0gbV9ieXRlLmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1cnJl
bnRCeXRlVmFsdWUsICJcbiIpKTsKKworICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMgdG8g
YmFyZ2UgaW4uCisgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpCisg
ICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVl
LCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNwdW4g
dG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KKyAgICAgICAgaWYgKCEo
Y3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3BpbkxpbWl0
KSB7CisgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190aHJl
YWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0IGZp
cnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAorICAgICAgICAvLyBpZiB0aGUg
cGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAgICAg
ICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAgICAgICAgICYm
ICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50Qnl0
ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNvIGxv
bmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KKyAgICAgICAgUGFya2luZ0xvdDo6
Y29tcGFyZUFuZFBhcmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKKworICAg
ICAgICAvLyBXZSBoYXZlIGF3YWtlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhlIGJ5
dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAorICAgICAgICAvLyBhcm91bmQg
YW5kIHRyeSBhZ2Fpbi4KKyAgICB9Cit9CisKK3ZvaWQgQnl0ZUxvY2s6OnVubG9ja1Nsb3coKQor
eworICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgd2hpbGUgZmluZGluZyBvdXQgaWYgc29tZW9uZSBp
cyBwYXJrZWQuIE5vdGUgdGhhdCBhcyBzb29uIGFzIHdlIGRvIHRoaXMsCisgICAgLy8gc29tZW9u
ZSBtaWdodCBiYXJnZSBpbi4KKyAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZTsKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IHVubG9ja2luZyB3aXRoICIsIG9sZEJ5dGVWYWx1ZSwgIlxuIikpOworICAgICAgICBBU1NFUlQo
b2xkQnl0ZVZhbHVlICYgaXNIZWxkQml0KTsKKyAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJlRXhj
aGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgMCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICAvLyBOb3RlIHRoYXQgc29tZW9uZSBjb3VsZCB0cnkgdG8gcGFyayByaWdodCBub3cuIElm
IHRoYXQgaGFwcGVucywgdGhleSB3aWxsIHJldHVybiBpbW1lZGlhdGVseQorICAgIC8vIGJlY2F1
c2Ugb3VyIHBhcmtpbmcgcHJlZGljYXRlIGlzIHRoYXQgbV9ieXRlID09IGlzSGVsZEJpdCB8IGhh
c1BhcmtlZEJpdCwgYnV0IHdlJ3ZlIGFscmVhZHkgc2V0CisgICAgLy8gbV9ieXRlID0gMC4KKwor
ICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIHRocmVhZHMgcGFya2VkLCB1bnBhcmsgYWxsIG9mIHRo
ZW0uIFRoaXMgY2F1c2VzIGEgdGh1bmRlcmluZyBoZXJkLCBidXQgd2hpbGUKKyAgICAvLyB0aGF0
IGlzIHRoZW9yZXRpY2FsbHkgc2NhcnksIGl0J3MgdG90YWxseSBmaW5lIGluIFdlYktpdCBiZWNh
dXNlIHdlIHVzdWFsbHkgZG9uJ3QgaGF2ZSBlbm91Z2gKKyAgICAvLyB0aHJlYWRzIGZvciB0aGlz
IHRvIG1hdHRlci4KKyAgICBpZiAob2xkQnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAg
ICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fYnl0ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRl
TG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeXRlTG9ja19oCisjZGVmaW5l
IEJ5dGVMb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBCeXRlTG9jayB7CitwdWJsaWM6CisgICAgQnl0ZUxvY2soKQorICAgIHsKKyAg
ICAgICAgbV9ieXRlLnN0b3JlKDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX2J5dGUu
Y29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVp
cmUpKSkgeworICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJlZCEKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGxvY2tTbG93KCk7CisgICAgfQorCisgICAgdm9pZCB1
bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdl
V2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVyX3JlbGVhc2UpKSkgeworICAgICAg
ICAgICAgLy8gTG9jayByZWxlYXNlZCBhbmQgbm9ib2R5IHdhcyB3YWl0aW5nIQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5sb2NrU2xvdygpOworICAgIH0KKwor
ICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2J5dGUubG9h
ZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVsZEJpdDsKKyAgICB9CisKKyAgICBi
b29sIGlzTG9ja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0hlbGQoKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVpbnQ4X3QgaXNIZWxkQml0ID0gMTsK
KyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJrZWRCaXQgPSAyOworCisgICAgV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCB1bmxvY2tTbG93KCk7CisKKyAgICBBdG9taWM8dWludDhfdD4gbV9ieXRlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qnl0ZUxvY2s7CisKKyNlbmRpZiAvLyBCeXRl
TG9ja19oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlBhcmtpbmdMb3QuaCIKKworI2luY2x1ZGUgIkhhc2hGdW5j
dGlvbnMuaCIKKyNpbmNsdWRlICJMb2NrLmgiCisjaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0u
aCIKKyNpbmNsdWRlICJUaHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1p
dGl2ZXMuaCIKKyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRl
IDx0aHJlYWQ+CisKK25hbWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJv
c2UgPSBmYWxzZTsKKworc3RydWN0IFRocmVhZERhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIAorICAgIFRocmVhZERhdGEoKTsKKyAgICB+VGhyZWFkRGF0
YSgpOworICAgIAorICAgIGJvb2wgc2hvdWxkUGFyayB7IGZhbHNlIH07CisgICAgc3RkOjptdXRl
eCBwYXJraW5nTG9jazsKKyAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBwYXJraW5nQ29uZGl0
aW9uOworCisgICAgY29uc3Qgdm9pZCogYWRkcmVzczsKKyAgICBUaHJlYWREYXRhKiBuZXh0SW5R
dWV1ZSB7IG51bGxwdHIgfTsKK307CisKK2VudW0gY2xhc3MgRGVxdWV1ZVJlc3VsdCB7CisgICAg
SWdub3JlLAorICAgIFJlbW92ZUFuZENvbnRpbnVlLAorICAgIFJlbW92ZUFuZFN0b3AKK307CisK
K3N0cnVjdCBCdWNrZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHZvaWQgZW5xdWV1ZShUaHJlYWREYXRhKiBkYXRhKQorICAgIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
ZXF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoZGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9p
bnRlcihkYXRhLT5hZGRyZXNzKSwgIiBvbnRvICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsK
KyAgICAgICAgQVNTRVJUKGRhdGEtPmFkZHJlc3MpOworICAgICAgICBBU1NFUlQoIWRhdGEtPm5l
eHRJblF1ZXVlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChxdWV1ZVRhaWwpIHsKKyAgICAgICAg
ICAgIHF1ZXVlVGFpbC0+bmV4dEluUXVldWUgPSBkYXRhOworICAgICAgICAgICAgcXVldWVUYWls
ID0gZGF0YTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHF1ZXVl
SGVhZCA9IGRhdGE7CisgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGdlbmVyaWNEZXF1ZXVlKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nIGZyb20gYnVj
a2V0IGF0ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgCisgICAgICAgIGlm
ICghcXVldWVIZWFkKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW1wdHkuXG4iKSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBib29sIHNob3VsZENvbnRpbnVl
ID0gdHJ1ZTsKKyAgICAgICAgVGhyZWFkRGF0YSoqIGN1cnJlbnRQdHIgPSAmcXVldWVIZWFkOwor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBUaHJlYWREYXRhKiBjdXJyZW50ID0gKmN1
cnJlbnRQdHI7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRh
TG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZ290IHRocmVhZCAiLCBSYXdQb2ludGVy
KGN1cnJlbnQpLCAiXG4iKSk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBEZXF1ZXVlUmVzdWx0IHJlc3VsdCA9IGZ1bmN0b3Io
Y3VycmVudCk7CisgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICAgICAgY2Fz
ZSBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU6CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBj
dXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcihjdXJyZW50UHRyKSwgIiwgKmN1cnJlbnRQdHIgPSAi
LCBSYXdQb2ludGVyKCpjdXJyZW50UHRyKSwgIlxuIikpOworICAgICAgICAgICAgICAgIGN1cnJl
bnRQdHIgPSAmKCpjdXJyZW50UHRyKS0+bmV4dEluUXVldWU7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgor
ICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOgorICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KGN1cnJlbnRUaHJlYWQoKSwgIjogZGVxdWV1ZWluZyAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAi
IGZyb20gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOworICAgICAgICAgICAgICAgICpjdXJy
ZW50UHRyID0gY3VycmVudC0+bmV4dEluUXVldWU7CisgICAgICAgICAgICAgICAgY3VycmVudC0+
bmV4dEluUXVldWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVx
dWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcCkKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ29u
dGludWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCFxdWV1ZUhlYWQpCisgICAgICAgICAgICBxdWV1ZVRh
aWwgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBUaHJlYWREYXRhKiBkZXF1ZXVlKCkKKyAg
ICB7CisgICAgICAgIFRocmVhZERhdGEqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgICAgIGdlbmVy
aWNEZXF1ZXVlKAorICAgICAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50KSAtPiBEZXF1
ZXVlUmVzdWx0IHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBlbGVtZW50OworICAgICAgICAg
ICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOworICAgICAgICAgICAg
fSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgVGhyZWFkRGF0YSogcXVl
dWVIZWFkIHsgbnVsbHB0ciB9OworICAgIFRocmVhZERhdGEqIHF1ZXVlVGFpbCB7IG51bGxwdHIg
fTsKKworICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyB0aGUgZW50aXJlIGJ1Y2tldC4gVGhvdSBz
aGFsbCBub3QgbWFrZSBjaGFuZ2VzIHRvIEJ1Y2tldCB3aXRob3V0IGhvbGRpbmcKKyAgICAvLyB0
aGlzIGxvY2suCisgICAgTG9jayBsb2NrOworCisgICAgLy8gUHV0IHNvbWUgZGlzdGFuZSBiZXR3
ZWVuIGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9uZSBvZiBzZXZlcmFsIG1pdGlnYXRpb25z
IGFnYWluc3QgZmFsc2UKKyAgICAvLyBzaGFyaW5nLgorICAgIGNoYXIgcGFkZGluZ1s2NF07Cit9
OworCitzdHJ1Y3QgSGFzaHRhYmxlIHsKKyAgICB1bnNpZ25lZCBzaXplOworICAgIEF0b21pYzxC
dWNrZXQqPiBkYXRhWzFdOworCisgICAgc3RhdGljIEhhc2h0YWJsZSogY3JlYXRlKHVuc2lnbmVk
IHNpemUpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZSA+PSAxKTsKKyAgICAgICAgCisgICAg
ICAgIEhhc2h0YWJsZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SGFzaHRhYmxlKj4oCisgICAgICAg
ICAgICBmYXN0WmVyb2VkTWFsbG9jKHNpemVvZihIYXNodGFibGUpICsgc2l6ZW9mKEF0b21pYzxC
dWNrZXQqPikgKiAoc2l6ZSAtIDEpKSk7CisgICAgICAgIHJlc3VsdC0+c2l6ZSA9IHNpemU7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZGVzdHJveShI
YXNodGFibGUqIGhhc2h0YWJsZSkKKyAgICB7CisgICAgICAgIGZhc3RGcmVlKGhhc2h0YWJsZSk7
CisgICAgfQorfTsKKworVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4qIHRocmVhZERhdGE7CitB
dG9taWM8SGFzaHRhYmxlKj4gaGFzaHRhYmxlOworQXRvbWljPHVuc2lnbmVkPiBudW1UaHJlYWRz
OworCisvLyBXaXRoIDY0IGJ5dGVzIG9mIHBhZGRpbmcgcGVyIGJ1Y2tldCwgYXNzdW1pbmcgYSBo
YXNodGFibGUgaXMgZnVsbHkgcG9wdWxhdGVkIHdpdGggYnVja2V0cywgdGhlCisvLyBtZW1vcnkg
dXNhZ2UgcGVyIHRocmVhZCB3aWxsIHN0aWxsIGJlIGxlc3MgdGhhbiAxS0IuCitjb25zdCB1bnNp
Z25lZCBtYXhMb2FkRmFjdG9yID0gMTA7CisKK2NvbnN0IHVuc2lnbmVkIGdyb3d0aEZhY3RvciA9
IDI7CisKK3Vuc2lnbmVkIGhhc2hBZGRyZXNzKGNvbnN0IHZvaWQqIGFkZHJlc3MpCit7CisgICAg
cmV0dXJuIFdURjo6UHRySGFzaDxjb25zdCB2b2lkKj46Omhhc2goYWRkcmVzcyk7Cit9CisKK1Ro
cmVhZERhdGE6OlRocmVhZERhdGEoKQoreworICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRz
OworICAgIGZvciAoOzspIHsKKyAgICAgICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRo
cmVhZHMubG9hZCgpOworICAgICAgICBjdXJyZW50TnVtVGhyZWFkcyA9IG9sZE51bVRocmVhZHMg
KyAxOworICAgICAgICBpZiAobnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRo
cmVhZHMsIGN1cnJlbnROdW1UaHJlYWRzKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIC8vIFdlIHRyeSB0byBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlIHVz
ZWQgZm9yIHRocmVhZCBxdWV1ZXMgaXMgYWx3YXlzIGxhcmdlIGVub3VnaAorICAgIC8vIHRvIGF2
b2lkIGNvbGxpc2lvbnMuIFNvLCBzaW5jZSB3ZSBzdGFydGVkIGEgbmV3IHRocmVhZCwgd2UgbWF5
IG5lZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlCisgICAgLy8gaGFzaHRhYmxlLiBUaGlz
IGxvb3AgZG9lcyBqdXN0IHRoYXQuIEl0J3MgYSBjb21wbGljYXRlZCBhbGdvcml0aG0gYmVjYXVz
ZSB3ZSBkb24ndCBoYXZlIHRoZQorICAgIC8vIG5vdGlvbiBvZiBsb2NraW5nIHRoZSBoYXNodGFi
bGUuIEluc3RlYWQsIG9ubHkgaW5kaXZpZHVhbCBidWNrZXRzIGFyZSBsb2NrZWQuIFNvLCB0byBy
ZWhhc2gsIHdlCisgICAgLy8gZmlyc3QgbG9jayBhbGwgYnVja2V0cyB0byBwcmV2ZW50IGFueSB0
aHJlYWQgZnJvbSBtYWtpbmcgYW55IGNoYW5nZXMsIGFuZCB0aGVuIHdlIHJlYWxsb2NhdGUKKyAg
ICAvLyB0aGUgaGFzaHRhYmxlIHNwaW5lICh0aGUgYXJyYXkgdGhhdCBwb2ludHMgdG8gdGhlIGJ1
Y2tldHMpLiBXZSBuZXZlciBmcmVlIHRoZSBvbGQgc3BpbmUsIHNpbmNlCisgICAgLy8gd2UgbmV2
ZXIgbG9jayBhcm91bmQgc3BpbmUgYWNjZXNzZXMgKGkuZS4gdGhlICJoYXNodGFibGUiIGdsb2Jh
bCB2YXJpYWJsZSkuCisgICAgZm9yICg7OykgeworICAgICAgICBIYXNodGFibGUqIG9sZEhhc2h0
YWJsZTsKKyAgICAgICAgCisgICAgICAgIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7
CisgICAgICAgIGlmICghb2xkSGFzaHRhYmxlKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8gYmUg
dGhlIGZpcnN0IHRvIGNyZWF0ZSB0aGUgaGFzaHRhYmxlLgorICAgICAgICAgICAgSGFzaHRhYmxl
KiBuZXdIYXNodGFibGUgPSBIYXNodGFibGU6OmNyZWF0ZShtYXhMb2FkRmFjdG9yKTsKKyAgICAg
ICAgICAgIGlmIChoYXNodGFibGUuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBuZXdIYXNo
dGFibGUpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBjcmVhdGVkIGluaXRpYWwg
aGFzaHRhYmxlICIsIFJhd1BvaW50ZXIobmV3SGFzaHRhYmxlKSwgIlxuIikpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBIYXNodGFibGU6OmRl
c3Ryb3kobmV3SGFzaHRhYmxlKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAodHJ1ZSB8fCBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0
YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KGN1cnJlbnROdW1UaHJlYWRzKSA+PSBt
YXhMb2FkRmFjdG9yKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbm8gbmVlZCB0byByZWhhc2gg
YmVjYXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUsICIgLyAiLCBjdXJyZW50TnVtVGhyZWFkcywg
IiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIE5lZWQgdG8gZmlyc3QgcHJldmVudCBhbnlvbmUgZnJvbSBtdWNr
aW5nIHdpdGggdGhlIGV4aXN0aW5nIGhhc2h0YWJsZS4gVGhpcyBpcyBzb21ld2hhdAorICAgICAg
ICAvLyBjaGFsbGVuZ2luZy4gV2UgZG8gaXQgYnkgbG9ja2luZyBhbGwgYnVja2V0cy4gQnV0IGlm
IGEgYnVja2V0IGlzIGJsYW5rLCB0aGVuIGl0J3MgcG9zc2libGUKKyAgICAgICAgLy8gZm9yIHNv
bWUgdGhyZWFkIHRvIENBUyBpbiBhIG5ldyBidWNrZXQgb24gdGhlIG9sZCBoYXNodGFibGUuIFdl
IHByZXZlbnQgdGhpcyBieSBmb3JjaW5nCisgICAgICAgIC8vIGFsbG9jYXRpb24gb2YgYWxsIGJ1
Y2tldHMuCisgICAgICAgIFZlY3RvcjxCdWNrZXQqPiByZXVzYWJsZUJ1Y2tldHM7CisgICAgICAg
IFZlY3RvcjxCdWNrZXQqPiBidWNrZXRzVG9VbmxvY2s7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG9sZEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykgeworICAgICAgICAgICAgQXRvbWljPEJ1Y2tl
dCo+JiBidWNrZXRQb2ludGVyID0gb2xkSGFzaHRhYmxlLT5kYXRhW2ldOworCisgICAgICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgQnVja2V0KiBidWNrZXQgPSBidWNrZXRQb2lu
dGVyLmxvYWQoKTsKKworICAgICAgICAgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGJ1Y2tldCA9IG5ldyBCdWNrZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFidWNrZXRQb2ludGVyLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgYnVja2V0KSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGJ1Y2tldDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgYnVja2V0LT5sb2NrLmxvY2soKTsKKyAgICAgICAgICAgICAg
ICByZXVzYWJsZUJ1Y2tldHMuYXBwZW5kKGJ1Y2tldCk7CisgICAgICAgICAgICAgICAgYnVja2V0
c1RvVW5sb2NrLmFwcGVuZChidWNrZXQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IGFsbCBidWNrZXRzIGFyZSBsb2Nr
ZWQuIFJlbG9hZCB0aGUgaGFzaHRhYmxlIGFuZCBzZWUgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSBh
bmQgaWYgaXQncworICAgICAgICAvLyBzdGlsbCB0b28gc21hbGwuCisgICAgICAgIEhhc2h0YWJs
ZSogbmV3T2xkSGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICAgICAgaWYgKG5ld09s
ZEhhc2h0YWJsZSAhPSBvbGRIYXNodGFibGUpIHsKKyAgICAgICAgICAgIC8vIFVubG9jayBhbGwg
b2YgdGhlIGJ1Y2tldHMuCisgICAgICAgICAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDogYnVja2V0
c1RvVW5sb2NrKQorICAgICAgICAgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIG5ldyBoYXNodGFibGUgaXMgYmlnIGVub3Vn
aCwgdGhlbiB3ZSdyZSBkb25lLgorICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4o
bmV3T2xkSGFzaHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY3VycmVudE51bVRo
cmVhZHMpIDw9IG1heExvYWRGYWN0b3IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgICAgIC8vIE90aGVyd2lzZSwgd2UganVzdCBuZWVkIHRvIHRyeSBhZ2Fpbi4KKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gT0ssIHdlJ3ZlIGxvY2tlZCBh
bGwgYnVja2V0cyBhbmQgdGhlIG9sZCBoYXNodGFibGUgaXMgc3RpbGwgdGhlIHZhbGlkIG9uZS4g
VGhpcyBpcyB0aGUgY2FzZQorICAgICAgICAvLyB3aGVyZSB3ZSBjYW4gYWN0dWFsbHkgZG8gdGhl
IHJlc2l6aW5nLgorCisgICAgICAgIC8vIFRoZXNlIHRocmVhZCBkYXRhcyBhcmUgcGxhY2VkIGlu
dG8gdGhlIHZlY3RvciBpbiBxdWV1ZSBvcmRlci4KKyAgICAgICAgVmVjdG9yPFRocmVhZERhdGEq
PiB0aHJlYWREYXRhczsKKyAgICAgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IHJldXNhYmxlQnVj
a2V0cykgeworICAgICAgICAgICAgd2hpbGUgKFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBidWNr
ZXQtPmRlcXVldWUoKSkKKyAgICAgICAgICAgICAgICB0aHJlYWREYXRhcy5hcHBlbmQodGhyZWFk
RGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNodGFibGUqIG5ld0hhc2h0YWJsZSA9IEhh
c2h0YWJsZTo6Y3JlYXRlKGN1cnJlbnROdW1UaHJlYWRzICogZ3Jvd3RoRmFjdG9yICogbWF4TG9h
ZEZhY3Rvcik7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgbmV3IGhhc2h0YWJsZTogIiwgUmF3UG9p
bnRlcihuZXdIYXNodGFibGUpLCAiXG4iKSk7CisgICAgICAgIGZvciAoVGhyZWFkRGF0YSogdGhy
ZWFkRGF0YSA6IHRocmVhZERhdGFzKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcmVoYXNoaW5n
IHRocmVhZCBkYXRhICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICIgd2l0aCBhZGRyZXNzID0g
IiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICAgICAg
dW5zaWduZWQgaGFzaCA9IGhhc2hBZGRyZXNzKHRocmVhZERhdGEtPmFkZHJlc3MpOworICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSBoYXNoICUgbmV3SGFzaHRhYmxlLT5zaXplOworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJy
ZW50VGhyZWFkKCksICI6IGluZGV4ID0gIiwgaW5kZXgsICJcbiIpKTsKKyAgICAgICAgICAgIEJ1
Y2tldCogYnVja2V0ID0gbmV3SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5sb2FkKCk7CisgICAgICAg
ICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgICAgIGlmIChyZXVzYWJsZUJ1Y2tldHMu
aXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSByZXVzYWJs
ZUJ1Y2tldHMudGFrZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBuZXdIYXNodGFibGUtPmRhdGFb
aW5kZXhdLnN0b3JlKGJ1Y2tldCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1Y2tl
dC0+ZW5xdWV1ZSh0aHJlYWREYXRhKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEF0IHRoaXMg
cG9pbnQgdGhlcmUgbWF5IGJlIHNvbWUgYnVja2V0cyBsZWZ0IHVucmV1c2VkLiBUaGlzIGNvdWxk
IGVhc2lseSBoYXBwZW4gaWYgdGhlCisgICAgICAgIC8vIG51bWJlciBvZiBlbnF1ZXVlZCB0aHJl
YWRzIHJpZ2h0IG5vdyBpcyBsb3cgYnV0IHRoZSBoaWdoIHdhdGVybWFyayBvZiB0aGUgbnVtYmVy
IG9mIHRocmVhZHMKKyAgICAgICAgLy8gZW5xdWV1ZWQgd2FzIGhpZ2guIFdlIHBsYWNlIHRoZXNl
IGJ1Y2tldHMgaW50byB0aGUgaGFzaHRhYmxlIGJhc2ljYWxseSBhdCByYW5kb20sIGp1c3QgdG8K
KyAgICAgICAgLy8gbWFrZSBzdXJlIHdlIGRvbid0IGxlYWsgdGhlbS4KKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG5ld0hhc2h0YWJsZS0+c2l6ZSAmJiAhcmV1c2FibGVCdWNrZXRz
LmlzRW1wdHkoKTsgKytpKSB7CisgICAgICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFB0
ciA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpXTsKKyAgICAgICAgICAgIGlmIChidWNrZXRQdHIubG9h
ZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYnVja2V0UHRyLnN0
b3JlKHJldXNhYmxlQnVja2V0cy50YWtlTGFzdCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IFNpbmNlIHdlIGluY3JlYXNlZCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlLCB3ZSBzaG91bGQg
aGF2ZSBleGhhdXN0ZWQgb3VyIHByZWFsbG9jYXRlZAorICAgICAgICAvLyBidWNrZXRzIGJ5IG5v
dy4KKyAgICAgICAgQVNTRVJUKHJldXNhYmxlQnVja2V0cy5pc0VtcHR5KCkpOworCisgICAgICAg
IC8vIE9LLCByaWdodCBub3cgdGhlIG9sZCBoYXNodGFibGUgaXMgbG9ja2VkIHVwIGFuZCB0aGUg
bmV3IGhhc2h0YWJsZSBpcyByZWFkeSB0byByb2NrIGFuZAorICAgICAgICAvLyByb2xsLiBBZnRl
ciB3ZSBpbnN0YWxsIHRoZSBuZXcgaGFzaHRhYmxlLCB3ZSBjYW4gcmVsZWFzZSBhbGwgYnVja2V0
IGxvY2tzLgorCisgICAgICAgIGJvb2wgcmVzdWx0ID0gaGFzaHRhYmxlLmNvbXBhcmVFeGNoYW5n
ZVN0cm9uZyhvbGRIYXNodGFibGUsIG5ld0hhc2h0YWJsZSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlc3VsdCk7CisKKyAgICAgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IGJ1Y2tldHNUb1Vu
bG9jaykKKyAgICAgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSgpCit7CisgICAgZm9yICg7Oykg
eworICAgICAgICB1bnNpZ25lZCBvbGROdW1UaHJlYWRzID0gbnVtVGhyZWFkcy5sb2FkKCk7Cisg
ICAgICAgIGlmIChudW1UaHJlYWRzLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkTnVtVGhyZWFkcywg
b2xkTnVtVGhyZWFkcyAtIDEpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCitUaHJl
YWREYXRhKiBteVRocmVhZERhdGEoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0
aWFsaXplT25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgaW5pdGlhbGl6ZU9uY2Us
CisgICAgICAgIFtdeworICAgICAgICAgICAgdGhyZWFkRGF0YSA9IG5ldyBUaHJlYWRTcGVjaWZp
YzxUaHJlYWREYXRhPigpOworICAgICAgICB9KTsKKworICAgIHJldHVybiAqdGhyZWFkRGF0YTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2Jvb2wgZW5xdWV1ZShjb25zdCB2b2lk
KiBhZGRyZXNzLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIHVuc2lnbmVkIGhhc2gg
PSBoYXNoQWRkcmVzcyhhZGRyZXNzKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRh
YmxlKiBteUhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4ID0gaGFzaCAlIG15SGFzaHRhYmxlLT5zaXplOworICAgICAgICBBdG9taWM8QnVja2V0Kj4m
IGJ1Y2tldFBvaW50ZXIgPSBteUhhc2h0YWJsZS0+ZGF0YVtpbmRleF07CisgICAgICAgIEJ1Y2tl
dCogYnVja2V0OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBidWNrZXQgPSBidWNr
ZXRQb2ludGVyLmxvYWQoKTsKKyAgICAgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAg
ICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOworICAgICAgICAgICAgICAgIGlmICghYnVja2V0
UG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIGJ1Y2tldCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZGVsZXRlIGJ1Y2tldDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW5xdWV1ZWluZyBvbnRvIGJ1Y2tldCAiLCBSYXdQb2lu
dGVyKGJ1Y2tldCksICIgd2l0aCBpbmRleCAiLCBpbmRleCwgIiBmb3IgYWRkcmVzcyAiLCBSYXdQ
b2ludGVyKGFkZHJlc3MpLCAiIHdpdGggaGFzaCAiLCBoYXNoLCAiXG4iKSk7CisgICAgICAgIGJ1
Y2tldC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRh
YmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlmIChoYXNodGFibGUu
bG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2Nr
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRocmVhZERh
dGEqIHRocmVhZERhdGEgPSBmdW5jdG9yKCk7CisgICAgICAgIGJvb2wgcmVzdWx0OworICAgICAg
ICBpZiAodGhyZWFkRGF0YSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHByb2NlZWRpbmcgdG8g
ZW5xdWV1ZSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiXG4iKSk7CisgICAgICAgICAgICBi
dWNrZXQtPmVucXVldWUodGhyZWFkRGF0YSk7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBidWNr
ZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorYm9vbCBkZXF1ZXVlKGNvbnN0IHZvaWQqIGFkZHJl
c3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nIGFkZHJlc3Mg
IiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIlxuIikpOworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNo
QWRkcmVzcyhhZGRyZXNzKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGhhc2ggPSAiLCBoYXNoLCAiXG4iKSk7CisKKyAgICBm
b3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSogbXlIYXNodGFibGUgPSBoYXNodGFibGUubG9h
ZCgpOworICAgICAgICBpZiAoIW15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
bm8gaGFzaHRhYmxlLlxuIikpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG15SGFzaHRhYmxlLT5zaXplOworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiBpbmRleCA9ICIsIGluZGV4LCAiXG4iKSk7CisgICAgICAgIEJ1Y2tldCogYnVj
a2V0ID0gbXlIYXNodGFibGUtPmRhdGFbaW5kZXhdLmxvYWQoKTsKKyAgICAgICAgaWYgKCFidWNr
ZXQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBubyBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihi
dWNrZXQpLCAiLlxuIikpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogbG9ja2luZyBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAi
XG4iKSk7CisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGxvY2tl
ZCBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiXG4iKSk7CisKKyAgICAgICAgLy8g
QXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMu
CisgICAgICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogaGFzaHRhYmxlIGNoYW5nZWQuXG4iKSk7CisgICAgICAgICAgICBidWNr
ZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50
VGhyZWFkKCksICI6IGZvdW5kIGJ1Y2tldC5cbiIpKTsKKyAgICAgICAgYnVja2V0LT5nZW5lcmlj
RGVxdWV1ZShmdW5jdG9yKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhIWJ1Y2tldC0+cXVldWVI
ZWFkOworICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBQYXJraW5n
TG90OjpwYXJrQ29uZGl0aW9uYWxseShjb25zdCB2b2lkKiBhZGRyZXNzLCBzdGQ6OmZ1bmN0aW9u
PGJvb2woKT4gdmFsaWRhdGlvbikKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHBhcmtpbmcuXG4iKSk7CisgICAgCisgICAg
VGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsKKworICAgIEFTU0VSVCghbWUtPnNob3Vs
ZFBhcmspOworICAgIAorICAgIGJvb2wgcmVzdWx0ID0gZW5xdWV1ZSgKKyAgICAgICAgYWRkcmVz
cywKKyAgICAgICAgWyZdICgpIC0+IFRocmVhZERhdGEqIHsKKyAgICAgICAgICAgIGlmICghdmFs
aWRhdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAg
ICBtZS0+YWRkcmVzcyA9IGFkZHJlc3M7CisgICAgICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRy
dWU7CisgICAgICAgICAgICByZXR1cm4gbWU7CisgICAgICAgIH0pOworCisgICAgaWYgKCFyZXN1
bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZyBzZWxmOiAiLCBSYXdQ
b2ludGVyKG1lKSwgIlxuIikpOworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6
Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgd2hpbGUgKG1lLT5zaG91
bGRQYXJrKQorICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOwor
ICAgIH0KKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50
VGhyZWFkKCksICI6IHVucGFya2VkIHNlbGY6ICIsIFJhd1BvaW50ZXIobWUpLCAiXG4iKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgUGFya2luZ0xvdDo6dW5wYXJrT25lKGNvbnN0IHZv
aWQqIGFkZHJlc3MpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgb25lLlxuIikpOworCisgICAgVGhyZWFk
RGF0YSogdGhyZWFkRGF0YTsKKyAgICBib29sIHJlc3VsdCA9IGRlcXVldWUoCisgICAgICAgIGFk
ZHJlc3MsCisgICAgICAgIFsmXSAoVGhyZWFkRGF0YSogZWxlbWVudCkgeworICAgICAgICAgICAg
aWYgKGVsZW1lbnQtPmFkZHJlc3MgIT0gYWRkcmVzcykKKyAgICAgICAgICAgICAgICByZXR1cm4g
RGVxdWV1ZVJlc3VsdDo6SWdub3JlOworICAgICAgICAgICAgdGhyZWFkRGF0YSA9IGVsZW1lbnQ7
CisgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcDsKKyAgICAg
ICAgfSk7CisKKyAgICBBU1NFUlQodGhyZWFkRGF0YS0+c2hvdWxkUGFyayk7CisKKyAgICB7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBh
cmtpbmdMb2NrKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9IGZhbHNlOworICAg
ICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBhcmtpbmdMb3Q6OnVucGFya0FsbChjb25z
dCB2b2lkKiBhZGRyZXNzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIGFsbCBmcm9tICIsIFJhd1BvaW50
ZXIoYWRkcmVzcyksICIuXG4iKSk7CisgICAgCisgICAgVmVjdG9yPFRocmVhZERhdGEqLCA4PiB0
aHJlYWREYXRhczsKKyAgICBkZXF1ZXVlKAorICAgICAgICBhZGRyZXNzLAorICAgICAgICBbJl0g
KFRocmVhZERhdGEqIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBPYnNlcnZpbmcg
ZWxlbWVudCB3aXRoIGFkZHJlc3MgPSAiLCBSYXdQb2ludGVyKGVsZW1lbnQtPmFkZHJlc3MpLCAi
XG4iKSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBhZGRyZXNzKQorICAg
ICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7CisgICAgICAgICAgICB0
aHJlYWREYXRhcy5hcHBlbmQoZWxlbWVudCk7CisgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJl
c3VsdDo6UmVtb3ZlQW5kQ29udGludWU7CisgICAgICAgIH0pOworCisgICAgZm9yIChUaHJlYWRE
YXRhKiB0aHJlYWREYXRhIDogdGhyZWFkRGF0YXMpIHsKKyAgICAgICAgQVNTRVJUKHRocmVhZERh
dGEtPnNob3VsZFBhcmspOworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxv
Y2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIHRocmVhZERhdGEtPnNob3Vs
ZFBhcmsgPSBmYWxzZTsKKyAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5ub3Rp
ZnlfYWxsKCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkb25lIHVucGFya2luZy5cbiIpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFdURl9QYXJraW5nTG90X2gKKyNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAorCisjaW5jbHVkZSA8
ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9EYXRh
TG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUGFya2luZ0xvdCB7Cisg
ICAgUGFya2luZ0xvdCgpID0gZGVsZXRlOworICAgIFBhcmtpbmdMb3QoY29uc3QgUGFya2luZ0xv
dCYpID0gZGVsZXRlOworCitwdWJsaWM6CisgICAgLy8gUGFya3MgdGhlIHRocmVhZCBpbiBhIHF1
ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51
bGwuIFRoZQorICAgIC8vIHBhcmtpbmcgb25seSBzdWNjZWVkcyBpZiB0aGUgdmFsaWRhdGlvbiBm
dW5jdGlvbiByZXR1cm5zIHRydWUgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMgaGVsZC4KKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcGFya0NvbmRpdGlvbmFsbHkoY29uc3Qgdm9p
ZCogYWRkcmVzcywgc3RkOjpmdW5jdGlvbjxib29sKCk+IHZhbGlkYXRpb24pOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKyAgICBzdGF0aWMgYm9vbCBjb21wYXJlQW5k
UGFyayhjb25zdCBBdG9taWM8VD4qIGFkZHJlc3MsIFUgZXhwZWN0ZWQpCisgICAgeworICAgICAg
ICByZXR1cm4gcGFya0NvbmRpdGlvbmFsbHkoCisgICAgICAgICAgICBhZGRyZXNzLAorICAgICAg
ICAgICAgW2FkZHJlc3MsIGV4cGVjdGVkXSAoKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBV
IHZhbHVlID0gYWRkcmVzcy0+bG9hZCgpOworICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9
PSBleHBlY3RlZDsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIFVucGFya3Mgb25l
IHRocmVhZCBmcm9tIHRoZSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3Ms
IHdoaWNoIGNhbm5vdCBiZSBudWxsLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBtYXkg
c3RpbGwgYmUgb3RoZXIgdGhyZWFkcyBvbiB0aGF0IHF1ZXVlLCBvciBmYWxzZSBpZiB0aGVyZSBk
ZWZpbml0ZWx5CisgICAgLy8gYXJlIG5vIG1vcmUgdGhyZWFkcyBvbiB0aGUgcXVldWUuCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHVucGFya09uZShjb25zdCB2b2lkKiBhZGRy
ZXNzKTsKKworICAgIC8vIFVucGFya3MgZXZlcnkgdGhyZWFkIGZyb20gdGhlIHF1ZXVlIGFzc29j
aWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51bGwuCisgICAg
V1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVucGFya0FsbChjb25zdCB2b2lkKiBhZGRy
ZXNzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlBhcmtpbmdMb3Q7
CisKKyNlbmRpZiAvLyBXVEZfUGFya2luZ0xvdF9oCisKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0xvY2suY3BwCShyZXZpc2lvbiAxODgxMDApCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNCArOTcsMzQgQEAg
VEVTVChXVEZfTG9jaywgTWFueUNvbnRlbnRlZExvbmdTZWN0aW9ucwogICAgIHJ1bkxvY2tUZXN0
PExvY2s+KDEwLCAxMCwgMTAwMDAsIDIwMDApOwogfQogCitURVNUKFdURl9CeXRlTG9jaywgVW5j
b250ZW50ZWRTaG9ydFNlY3Rpb24pCit7CisgICAgcnVuQnl0ZUxvY2tUZXN0PEJ5dGVMb2NrPigx
LCAxLCAxLCAxMDAwMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBVbmNvbnRlbnRlZExv
bmdTZWN0aW9uKQoreworICAgIHJ1bkJ5dGVMb2NrVGVzdDxCeXRlTG9jaz4oMSwgMSwgMTAwMDAs
IDEwMDApOworfQorCitURVNUKFdURl9CeXRlTG9jaywgQ29udGVudGVkU2hvcnRTZWN0aW9uKQor
eworICAgIHJ1bkJ5dGVMb2NrVGVzdDxCeXRlTG9jaz4oMSwgMTAsIDEsIDEwMDAwMDAwKTsKK30K
KworVEVTVChXVEZfQnl0ZUxvY2ssIENvbnRlbnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkJ5
dGVMb2NrVGVzdDxCeXRlTG9jaz4oMSwgMTAsIDEwMDAwLCAxMDAwMCk7Cit9CisKK1RFU1QoV1RG
X0J5dGVMb2NrLCBNYW55Q29udGVudGVkU2hvcnRTZWN0aW9ucykKK3sKKyAgICBydW5CeXRlTG9j
a1Rlc3Q8Qnl0ZUxvY2s+KDEwLCAxMCwgMSwgNTAwMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxv
Y2ssIE1hbnlDb250ZW50ZWRMb25nU2VjdGlvbnMpCit7CisgICAgcnVuQnl0ZUxvY2tUZXN0PEJ5
dGVMb2NrPigxMCwgMTAsIDEwMDAwLCAyMDAwKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdl
YktpdEFQSQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258560</attachid>
            <date>2015-08-07 21:58:10 -0700</date>
            <delta_ts>2015-08-08 11:21:27 -0700</delta_ts>
            <desc>might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41331</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJ
VExvY2suaAkocmV2aXNpb24gMTg4MDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE0IEBA
CiAjZGVmaW5lIENvbmN1cnJlbnRKSVRMb2NrX2gKIAogI2luY2x1ZGUgIkRlZmVyR0MuaCIKLSNp
bmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAj
aW5jbHVkZSA8d3RmL05vTG9jay5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShD
T05DVVJSRU5UX0pJVCkKLXR5cGVkZWYgQnl0ZVNwaW5Mb2NrIENvbmN1cnJlbnRKSVRMb2NrOwot
dHlwZWRlZiBCeXRlU3BpbkxvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKK3R5cGVkZWYg
Qnl0ZUxvY2sgQ29uY3VycmVudEpJVExvY2s7Cit0eXBlZGVmIEJ5dGVMb2NrZXIgQ29uY3VycmVu
dEpJVExvY2tlckltcGw7CiAjZWxzZQogdHlwZWRlZiBOb0xvY2sgQ29uY3VycmVudEpJVExvY2s7
CiB0eXBlZGVmIE5vTG9ja0xvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg4MTAwKQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjQsNiArMjQsMTAgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZC
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CisJCTBGODI0
QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0
ZUxvY2suY3BwICovOyB9OworCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTYz
MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OworCQkwRjgyNEE2ODFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi87IH07CisJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsg
fTsKIAkJMEY4ODVFMEYxODQ1QUVBOTAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMEUxODQ1QUU5
RjAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjhGMkI5MTE3MkUwMEZD
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxh
dGlvblRocmVhZC5oICovOyB9OwpAQCAtMzA3LDYgKzMxMSwxMCBAQAogCQkwRjJCNjZBNDE3QjZC
NEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2
QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZE
NzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZUxvY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVE
IC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODI0QTY1MUI3
NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEw
NTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTcxNiw2ICs3MjQsOCBAQAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAv
KiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29t
RmlsdGVyLmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVy
QWxsb2NhdG9yLmggKi8sCisJCQkJMEY4MjRBNjIxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2Nr
LmNwcCAqLywKKwkJCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLywK
IAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJMEZF
QzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovLAogCQkJCUE4QTQ3MjZB
MTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLApAQCAtODEwLDYgKzgy
MCw4IEBACiAJCQkJQThBNDcyRTUxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VSZXNlcnZhdGlvbi5o
ICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnMuaCAqLywK
IAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2gu
aCAqLywKKwkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8s
CisJCQkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLywKIAkJCQlB
OEE0NzJFRDE1MUE4MjVCMDA0MTIzRkYgLyogUGFzc1JlZlB0ci5oICovLAogCQkJCUE4NzZEQkQ3
MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTBGOUQzMzVEMTY1REJBNzMw
MDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCkBAIC0xMTU2LDYgKzExNjgsNyBAQAogCQkJ
CUE4QTQ3NDE1MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDE2MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJTZWVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY4MjRBNjcxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2Nr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxNzE1MUE4MjVCMDA0MTIzRkYgLyogUmVkQmxh
Y2tUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxODE1MUE4MjVCMDA0MTIzRkYgLyog
UmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTkxNTFBODI1QjAwNDEyM0ZG
IC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY3LDYgKzExODAsNyBA
QAogCQkJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RjNCMEY3MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1l
dGljLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDY5NDE5NjE2RUFBRkY4MDAyNEUxNDYgLyogU2No
ZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgyNEE2OTFCNzQ0M0EwMDAyRTM0NUQg
LyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MUYxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0MjIxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCBpbiBIZWFkZXJzICovLApAQCAtMTMy
NSw2ICsxMzM5LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCUE4QTQ3Mzg2MTUxQTgyNUIwMDQxMjNG
RiAvKiBBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDM1MTUxQTgyNUIw
MDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4MjRBNjYx
Qjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCQzcw
RjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ2OTQxOUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbE1h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTM0MCw2ICsxMzU1LDcgQEAKIAkJCQlBOEE0NzM5QTE1
MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0MzkxNTFBODI1QjAwNDEyM0ZGIC8qIENTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUMxNTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1l
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RjQ2RjYwMUEyODQwRUUwMENDQkYyMiAv
KiBSZWZDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzlFMTUxQTgyNUIwMDQx
MjNGRiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EwMTUxQTgyNUIw
MDQxMjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYv
YmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL2Jl
bmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDE4ODEwMCkKKysrIFNvdXJjZS9X
VEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KQEAgLTQzLDcgKzQ0
LDcgQEAgdW5zaWduZWQgbnVtSXRlcmF0aW9uczsKICAgICAKIHZvaWQgdXNhZ2UoKQogewotICAg
IHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xtdXRleHxhbGwgPG51
bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29yayBwZXIgY3JpdGlj
YWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+XG4iKTsKKyAg
ICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0ZWxvY2t8bXV0
ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91cD4gPHdvcmsg
cGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBpdGVyYXRpb25z
PlxuIik7CiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTI1LDYgKzEyNiwxMCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxMb2NrPigiV1RGIExv
Y2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKCFzdHJjbXAoYXJn
dlsxXSwgImJ5dGVsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAg
cnVuQmVuY2htYXJrPEJ5dGVMb2NrPigiV1RGIEJ5dGVMb2NrIik7CisgICAgICAgIGRpZFJ1biA9
IHRydWU7CisgICAgfQogICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRleCIpIHx8ICFzdHJj
bXAoYXJndlsxXSwgImFsbCIpKSB7CiAgICAgICAgIHJ1bkJlbmNobWFyazxNdXRleD4oIlBsYXRm
b3JtIE11dGV4Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZp
c2lvbiAxODgwOTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDEyICs5MSwxOCBAQCBzdHJ1Y3QgQXRvbWljIHsKIAogICAgIGJvb2wgY29tcGFyZUV4
Y2hhbmdlV2VhayhUIGV4cGVjdGVkLCBUIGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAg
ICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0OworI2VuZGlmCiAgICAgICAg
IFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVkOwogICAgICAgICByZXR1cm4gdmFsdWUuY29t
cGFyZV9leGNoYW5nZV93ZWFrKGV4cGVjdGVkT3JBY3R1YWwsIGRlc2lyZWQsIG9yZGVyKTsKICAg
ICB9CiAKICAgICBib29sIGNvbXBhcmVFeGNoYW5nZVN0cm9uZyhUIGV4cGVjdGVkLCBUIGRlc2ly
ZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkK
ICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRl
cl9zZXFfY3N0OworI2VuZGlmCiAgICAgICAgIFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVk
OwogICAgICAgICByZXR1cm4gdmFsdWUuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0ZWRP
ckFjdHVhbCwgZGVzaXJlZCwgb3JkZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J5
dGVMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5dGVMb2NrLmgiCisKKyNp
bmNsdWRlICJQYXJraW5nTG90LmgiCisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgV1RG
IHsKKworc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCit2b2lkIEJ5dGVMb2NrOjpsb2Nr
U2xvdygpCit7CisgICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKKworICAgIC8vIFRoaXMgbWFn
aWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0g
ZXhwZXJpbWVudHMuCisgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisg
ICAgZm9yICg7OykgeworICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUu
bG9hZCgpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwg
IlxuIikpOworCisgICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICYm
IG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2Ug
Y2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgorICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZh
bHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAg
ICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBw
YXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVu
IHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdh
c24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgorICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQ
YXJrZWRCaXQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGV4
cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3Mg
dGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFy
aygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworCisgICAgICAgIC8vIFdlIGhh
dmUgYXdha2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFu
Z2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWlu
LgorICAgIH0KK30KKwordm9pZCBCeXRlTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAgLy8gUmVs
ZWFzZSB0aGUgbG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtlZC4gTm90
ZSB0aGF0IGFzIHNvb24gYXMgd2UgZG8gdGhpcywKKyAgICAvLyBzb21lb25lIG1pZ2h0IGJhcmdl
IGluLgorICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOworICAgIGZvciAoOzspIHsKKyAgICAgICAg
b2xkQnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5sb2NraW5nIHdp
dGggIiwgb2xkQnl0ZVZhbHVlLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUg
JiBpc0hlbGRCaXQpOworICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xk
Qnl0ZVZhbHVlLCAwKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE5vdGUg
dGhhdCBzb21lb25lIGNvdWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5z
LCB0aGV5IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5CisgICAgLy8gYmVjYXVzZSBvdXIgcGFya2lu
ZyBwcmVkaWNhdGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0LCBi
dXQgd2UndmUgYWxyZWFkeSBzZXQKKyAgICAvLyBtX2J5dGUgPSAwLgorCisgICAgLy8gSWYgdGhl
cmUgaGFkIGJlZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVz
ZXMgYSB0aHVuZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQorICAgIC8vIHRoYXQgaXMgdGhlb3JldGlj
YWxseSBzY2FyeSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxs
eSBkb24ndCBoYXZlIGVub3VnaAorICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgor
ICAgIGlmIChvbGRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgIFBhcmtpbmdMb3Q6
OnVucGFya0FsbCgmbV9ieXRlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0
ZUxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeXRlTG9ja19oCisjZGVmaW5lIEJ5dGVMb2NrX2gK
KworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBp
cyBsaWtlIExvY2ssIGJ1dCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBpbnN0ZWFkIG9mIHNpemVvZih2
b2lkKikgc3RvcmFnZS4gVGhlIGRvd25zaWRlIGlzIHRoYXQKKy8vIGl0IGlzIHNsb3dlciBvbiB0
aGUgc2xvdyBwYXRoIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24gaW52b2x2aW5nIG1hbnkgdGhyZWFk
cyBiZWNhdXNlIGl0IGlzCisvLyBzdXNjZXB0aWJsZSB0byB0aGUgInRodW5kZXJpbmcgaGVyZCIg
cHJvYmxlbTogaXQgZG9lc24ndCBoYXZlIGVub3VnaCBzdGF0ZSB0byB0cmFjayBob3cgbWFueQor
Ly8gdGhyZWFkcyBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2ssIHNvIHdoZW4gdW5sb2NrIGRldGVj
dHMgdGhhdCBhbnkgdGhyZWFkIGlzIHdhaXRpbmcsIHRoZW4gaXQgd2FrZXMKKy8vIGFsbCBvZiB0
aGUgd2FpdGluZyB0aHJlYWRzLiBBbGwgb2YgdGhvc2UgdGhyZWFkcyB3aWxsIHBpbGUgb250byB0
aGUgbG9jazsgb25lIHdpbGwgc3VjY2VlZCBhbmQgdGFrZQorLy8gaXQgd2hpbGUgdGhlIG90aGVy
cyB3aWxsIGdvIGJhY2sgdG8gc2xlZXAuIFRoZSBzbG93LWRvd24gaXMgc21hbGwuIFRlbiB0aHJl
YWRzIHJlcGVhdGVkbHkKKy8vIGNvbnRlbmRpbmcgZm9yIHRoZSBzYW1lIH4xLTEwdXMgbG9uZyBj
cml0aWNhbCBzZWN0aW9uIHdpbGwgcnVuIDclIHNsb3dlciBvbiBteSBtYWNoaW5lLiBJZiBJIG1l
c3MKKy8vIHdpdGggYW55IG9mIHRoZSBwYXJhbWV0ZXJzIC0gY2hhbmdlIHRoZSBudW1iZXIgb2Yg
dGhyZWFkcyBvciBjaGFuZ2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gZHVyYXRpb24gLQorLy8gdGhl
biBCeXRlTG9jayByZWFjaGVzIHBhcml0eSB3aXRoIExvY2ssIGFuZCBzb21ldGltZXMgb3V0cGVy
Zm9ybXMgaXQuIFBlcmhhcHMgbW9zdCBzdXJwcmlzaW5nbHksCisvLyB0aGUgc2xvdy1kb3duIGdv
ZXMgYXdheSBldmVuIHdoZW4geW91IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4gQnl0
ZUxvY2sgYXBwZWFycyB0byBzb21ldGltZXMKKy8vIGJlIGZhc3RlciB1bmRlciBtaWNyb2NvbnRl
bnRpb24sIHBlcmhhcHMgYmVjYXVzZSBhIGNvbnRlbnRpb3VzIDgtYml0IENBUyBpcyBjaGVhcGVy
IHRoYW4gYQorLy8gY29udGVudGlvdXMgNjQtYml0IENBUy4gTm90ZSB0aGF0IHVuY29udGVuZGVk
IGxvY2tpbmcgaXMgZXF1YWxseSBmYXN0IHdpdGggQnl0ZUxvY2sgYXMgd2l0aCBMb2NrLgorLy8g
SW4gYWxsLCBMb2NrIGFuZCBCeXRlTG9jayBoYXZlIHNpbWlsYXIgcGVyZm9ybWFuY2UgdW5kZXIg
Y29udHJvbGxlZCBtaWNyb2JlbmNobWFya3MsIGJ1dCBMb2NrIGlzCisvLyB0aGVvcmV0aWNhbGx5
IHNhZmVyIGJlY2F1c2Ugb2YgdGhlIHRodW5kZXJpbmcgaGVyZCBpc3N1ZS4gSXQncyBwcm9iYWJs
eSBiZXN0IHRvIHVzZSBCeXRlTG9jayBvbmx5CisvLyB3aGVuIHlvdSByZWFsbHkgY2FyZSBhYm91
dCBzcGFjZSBhbmQgeW91IGRvbid0IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhhdCBhIGxhcmdl
IG51bWJlciBvZgorLy8gdGhyZWFkcyB3b3VsZCBldmVyIHBpbGUgb250byB0aGUgc2FtZSBsb2Nr
LgorY2xhc3MgQnl0ZUxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVMb2NrKTsK
K3B1YmxpYzoKKyAgICBCeXRlTG9jaygpCisgICAgeworICAgICAgICBtX2J5dGUuc3RvcmUoMCwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygp
CisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAs
IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAv
LyBMb2NrIGFjcXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgbG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAg
ICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2Vk
IGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50
OF90IGhhc1BhcmtlZEJpdCA9IDI7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2Nr
U2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKKworICAg
IEF0b21pYzx1aW50OF90PiBtX2J5dGU7Cit9OworCit0eXBlZGVmIExvY2tlcjxCeXRlTG9jaz4g
Qnl0ZUxvY2tlcjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qnl0ZUxvY2s7
Cit1c2luZyBXVEY6OkJ5dGVMb2NrZXI7CisKKyNlbmRpZiAvLyBCeXRlTG9ja19oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1BhcmtpbmdMb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBhcmtpbmdMb3QuaCIKKworI2luY2x1ZGUgIkhhc2hGdW5jdGlvbnMuaCIKKyNpbmNs
dWRlICJMb2NrLmgiCisjaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJU
aHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKKyNpbmNs
dWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKK25h
bWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKwor
c3RydWN0IFRocmVhZERhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIAorICAgIFRocmVhZERhdGEoKTsKKyAgICB+VGhyZWFkRGF0YSgpOworICAgIAorICAg
IGJvb2wgc2hvdWxkUGFyayB7IGZhbHNlIH07CisgICAgc3RkOjptdXRleCBwYXJraW5nTG9jazsK
KyAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJsZSBwYXJraW5nQ29uZGl0aW9uOworCisgICAgY29u
c3Qgdm9pZCogYWRkcmVzczsKKyAgICBUaHJlYWREYXRhKiBuZXh0SW5RdWV1ZSB7IG51bGxwdHIg
fTsKK307CisKK2VudW0gY2xhc3MgRGVxdWV1ZVJlc3VsdCB7CisgICAgSWdub3JlLAorICAgIFJl
bW92ZUFuZENvbnRpbnVlLAorICAgIFJlbW92ZUFuZFN0b3AKK307CisKK3N0cnVjdCBCdWNrZXQg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZvaWQgZW5xdWV1
ZShUaHJlYWREYXRhKiBkYXRhKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW5xdWV1ZWluZyAiLCBS
YXdQb2ludGVyKGRhdGEpLCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIoZGF0YS0+YWRk
cmVzcyksICIgb250byAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgIEFTU0VS
VChkYXRhLT5hZGRyZXNzKTsKKyAgICAgICAgQVNTRVJUKCFkYXRhLT5uZXh0SW5RdWV1ZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocXVldWVUYWlsKSB7CisgICAgICAgICAgICBxdWV1ZVRhaWwt
Pm5leHRJblF1ZXVlID0gZGF0YTsKKyAgICAgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBxdWV1ZUhlYWQgPSBkYXRhOwor
ICAgICAgICBxdWV1ZVRhaWwgPSBkYXRhOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBnZW5lcmljRGVxdWV1ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZGVxdWV1ZWluZyBmcm9tIGJ1Y2tldCBhdCAiLCBSYXdQ
b2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXF1ZXVlSGVhZCkg
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGVtcHR5LlxuIikpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CisgICAg
ICAgIFRocmVhZERhdGEqKiBjdXJyZW50UHRyID0gJnF1ZXVlSGVhZDsKKyAgICAgICAgVGhyZWFk
RGF0YSogcHJldmlvdXMgPSBudWxscHRyOworICAgICAgICB3aGlsZSAoc2hvdWxkQ29udGludWUp
IHsKKyAgICAgICAgICAgIFRocmVhZERhdGEqIGN1cnJlbnQgPSAqY3VycmVudFB0cjsKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBnb3QgdGhyZWFkICIsIFJhd1BvaW50ZXIoY3VycmVudCksICJcbiIp
KTsKKyAgICAgICAgICAgIGlmICghY3VycmVudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIERlcXVldWVSZXN1bHQgcmVzdWx0ID0gZnVuY3RvcihjdXJyZW50KTsKKyAgICAg
ICAgICAgIHN3aXRjaCAocmVzdWx0KSB7CisgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6
Oklnbm9yZToKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGN1cnJlbnRQdHIgPSAiLCBS
YXdQb2ludGVyKGN1cnJlbnRQdHIpLCAiLCAqY3VycmVudFB0ciA9ICIsIFJhd1BvaW50ZXIoKmN1
cnJlbnRQdHIpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50Owor
ICAgICAgICAgICAgICAgIGN1cnJlbnRQdHIgPSAmKCpjdXJyZW50UHRyKS0+bmV4dEluUXVldWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6
OlJlbW92ZUFuZENvbnRpbnVlOgorICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpSZW1v
dmVBbmRTdG9wOgorICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZGVxdWV1ZWluZyAiLCBS
YXdQb2ludGVyKGN1cnJlbnQpLCAiIGZyb20gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOwor
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50ID09IHF1ZXVlVGFpbCkKKyAgICAgICAgICAgICAg
ICAgICAgcXVldWVUYWlsID0gcHJldmlvdXM7CisgICAgICAgICAgICAgICAgKmN1cnJlbnRQdHIg
PSBjdXJyZW50LT5uZXh0SW5RdWV1ZTsKKyAgICAgICAgICAgICAgICBjdXJyZW50LT5uZXh0SW5R
dWV1ZSA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEZXF1ZXVlUmVz
dWx0OjpSZW1vdmVBbmRTdG9wKQorICAgICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9
IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgQVNTRVJUKCEhcXVldWVIZWFkID09ICEhcXVldWVUYWlsKTsKKyAgICB9Cisg
ICAgCisgICAgVGhyZWFkRGF0YSogZGVxdWV1ZSgpCisgICAgeworICAgICAgICBUaHJlYWREYXRh
KiByZXN1bHQgPSBudWxscHRyOworICAgICAgICBnZW5lcmljRGVxdWV1ZSgKKyAgICAgICAgICAg
IFsmXSAoVGhyZWFkRGF0YSogZWxlbWVudCkgLT4gRGVxdWV1ZVJlc3VsdCB7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gZWxlbWVudDsKKyAgICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJl
c3VsdDo6UmVtb3ZlQW5kU3RvcDsKKyAgICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIFRocmVhZERhdGEqIHF1ZXVlSGVhZCB7IG51bGxwdHIgfTsKKyAg
ICBUaHJlYWREYXRhKiBxdWV1ZVRhaWwgeyBudWxscHRyIH07CisKKyAgICAvLyBUaGlzIGxvY2sg
cHJvdGVjdHMgdGhlIGVudGlyZSBidWNrZXQuIFRob3Ugc2hhbGwgbm90IG1ha2UgY2hhbmdlcyB0
byBCdWNrZXQgd2l0aG91dCBob2xkaW5nCisgICAgLy8gdGhpcyBsb2NrLgorICAgIExvY2sgbG9j
azsKKworICAgIC8vIFB1dCBzb21lIGRpc3RhbmUgYmV0d2VlbiBidWNrZXRzIGluIG1lbW9yeS4g
VGhpcyBpcyBvbmUgb2Ygc2V2ZXJhbCBtaXRpZ2F0aW9ucyBhZ2FpbnN0IGZhbHNlCisgICAgLy8g
c2hhcmluZy4KKyAgICBjaGFyIHBhZGRpbmdbNjRdOworfTsKKworc3RydWN0IEhhc2h0YWJsZSB7
CisgICAgdW5zaWduZWQgc2l6ZTsKKyAgICBBdG9taWM8QnVja2V0Kj4gZGF0YVsxXTsKKworICAg
IHN0YXRpYyBIYXNodGFibGUqIGNyZWF0ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHNpemUgPj0gMSk7CisgICAgICAgIAorICAgICAgICBIYXNodGFibGUqIHJlc3VsdCA9
IHN0YXRpY19jYXN0PEhhc2h0YWJsZSo+KAorICAgICAgICAgICAgZmFzdFplcm9lZE1hbGxvYyhz
aXplb2YoSGFzaHRhYmxlKSArIHNpemVvZihBdG9taWM8QnVja2V0Kj4pICogKHNpemUgLSAxKSkp
OworICAgICAgICByZXN1bHQtPnNpemUgPSBzaXplOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSGFzaHRhYmxlKiBoYXNodGFibGUpCisg
ICAgeworICAgICAgICBmYXN0RnJlZShoYXNodGFibGUpOworICAgIH0KK307CisKK1RocmVhZFNw
ZWNpZmljPFRocmVhZERhdGE+KiB0aHJlYWREYXRhOworQXRvbWljPEhhc2h0YWJsZSo+IGhhc2h0
YWJsZTsKK0F0b21pYzx1bnNpZ25lZD4gbnVtVGhyZWFkczsKKworLy8gV2l0aCA2NCBieXRlcyBv
ZiBwYWRkaW5nIHBlciBidWNrZXQsIGFzc3VtaW5nIGEgaGFzaHRhYmxlIGlzIGZ1bGx5IHBvcHVs
YXRlZCB3aXRoIGJ1Y2tldHMsIHRoZQorLy8gbWVtb3J5IHVzYWdlIHBlciB0aHJlYWQgd2lsbCBz
dGlsbCBiZSBsZXNzIHRoYW4gMUtCLgorY29uc3QgdW5zaWduZWQgbWF4TG9hZEZhY3RvciA9IDM7
CisKK2NvbnN0IHVuc2lnbmVkIGdyb3d0aEZhY3RvciA9IDI7CisKK3Vuc2lnbmVkIGhhc2hBZGRy
ZXNzKGNvbnN0IHZvaWQqIGFkZHJlc3MpCit7CisgICAgcmV0dXJuIFdURjo6UHRySGFzaDxjb25z
dCB2b2lkKj46Omhhc2goYWRkcmVzcyk7Cit9CisKK1RocmVhZERhdGE6OlRocmVhZERhdGEoKQor
eworICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVhZHMubG9hZCgpOworICAgICAgICBj
dXJyZW50TnVtVGhyZWFkcyA9IG9sZE51bVRocmVhZHMgKyAxOworICAgICAgICBpZiAobnVtVGhy
ZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMsIGN1cnJlbnROdW1UaHJlYWRz
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIFdlIHRyeSB0byBlbnN1cmUg
dGhhdCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlIHVzZWQgZm9yIHRocmVhZCBxdWV1ZXMgaXMg
YWx3YXlzIGxhcmdlIGVub3VnaAorICAgIC8vIHRvIGF2b2lkIGNvbGxpc2lvbnMuIFNvLCBzaW5j
ZSB3ZSBzdGFydGVkIGEgbmV3IHRocmVhZCwgd2UgbWF5IG5lZWQgdG8gaW5jcmVhc2UgdGhlIHNp
emUgb2YgdGhlCisgICAgLy8gaGFzaHRhYmxlLiBUaGlzIGxvb3AgZG9lcyBqdXN0IHRoYXQuIEl0
J3MgYSBjb21wbGljYXRlZCBhbGdvcml0aG0gYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRoZQorICAg
IC8vIG5vdGlvbiBvZiBsb2NraW5nIHRoZSBoYXNodGFibGUuIEluc3RlYWQsIG9ubHkgaW5kaXZp
ZHVhbCBidWNrZXRzIGFyZSBsb2NrZWQuIFNvLCB0byByZWhhc2gsIHdlCisgICAgLy8gZmlyc3Qg
bG9jayBhbGwgYnVja2V0cyB0byBwcmV2ZW50IGFueSB0aHJlYWQgZnJvbSBtYWtpbmcgYW55IGNo
YW5nZXMsIGFuZCB0aGVuIHdlIHJlYWxsb2NhdGUKKyAgICAvLyB0aGUgaGFzaHRhYmxlIHNwaW5l
ICh0aGUgYXJyYXkgdGhhdCBwb2ludHMgdG8gdGhlIGJ1Y2tldHMpLiBXZSBuZXZlciBmcmVlIHRo
ZSBvbGQgc3BpbmUsIHNpbmNlCisgICAgLy8gd2UgbmV2ZXIgbG9jayBhcm91bmQgc3BpbmUgYWNj
ZXNzZXMgKGkuZS4gdGhlICJoYXNodGFibGUiIGdsb2JhbCB2YXJpYWJsZSkuCisgICAgZm9yICg7
OykgeworICAgICAgICBIYXNodGFibGUqIG9sZEhhc2h0YWJsZTsKKyAgICAgICAgCisgICAgICAg
IG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIGlmICghb2xkSGFzaHRh
YmxlKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8gYmUgdGhlIGZpcnN0IHRvIGNyZWF0ZSB0aGUg
aGFzaHRhYmxlLgorICAgICAgICAgICAgSGFzaHRhYmxlKiBuZXdIYXNodGFibGUgPSBIYXNodGFi
bGU6OmNyZWF0ZShtYXhMb2FkRmFjdG9yKTsKKyAgICAgICAgICAgIGlmIChoYXNodGFibGUuY29t
cGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBuZXdIYXNodGFibGUpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBjcmVhdGVkIGluaXRpYWwgaGFzaHRhYmxlICIsIFJhd1BvaW50ZXIo
bmV3SGFzaHRhYmxlKSwgIlxuIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBIYXNodGFibGU6OmRlc3Ryb3kobmV3SGFzaHRhYmxlKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihvbGRIYXNodGFibGUtPnNpemUpIC8gc3RhdGljX2Nhc3Q8ZG91Ymxl
PihjdXJyZW50TnVtVGhyZWFkcykgPj0gbWF4TG9hZEZhY3RvcikgeworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IG5vIG5lZWQgdG8gcmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAi
IC8gIiwgY3VycmVudE51bVRocmVhZHMsICIgPj0gIiwgbWF4TG9hZEZhY3RvciwgIlxuIikpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBOZWVkIHRvIGZpcnN0
IHByZXZlbnQgYW55b25lIGZyb20gbXVja2luZyB3aXRoIHRoZSBleGlzdGluZyBoYXNodGFibGUu
IFRoaXMgaXMgc29tZXdoYXQKKyAgICAgICAgLy8gY2hhbGxlbmdpbmcuIFdlIGRvIGl0IGJ5IGxv
Y2tpbmcgYWxsIGJ1Y2tldHMuIEJ1dCBpZiBhIGJ1Y2tldCBpcyBibGFuaywgdGhlbiBpdCdzIHBv
c3NpYmxlCisgICAgICAgIC8vIGZvciBzb21lIHRocmVhZCB0byBDQVMgaW4gYSBuZXcgYnVja2V0
IG9uIHRoZSBvbGQgaGFzaHRhYmxlLiBXZSBwcmV2ZW50IHRoaXMgYnkgZm9yY2luZworICAgICAg
ICAvLyBhbGxvY2F0aW9uIG9mIGFsbCBidWNrZXRzLgorICAgICAgICBWZWN0b3I8QnVja2V0Kj4g
cmV1c2FibGVCdWNrZXRzOworICAgICAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0c1RvTG9jazsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gb2xkSGFzaHRhYmxlLT5zaXplOyBpLS07KSB7Cisg
ICAgICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFBvaW50ZXIgPSBvbGRIYXNodGFibGUt
PmRhdGFbaV07CisKKyAgICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBCdWNr
ZXQqIGJ1Y2tldCA9IGJ1Y2tldFBvaW50ZXIubG9hZCgpOworCisgICAgICAgICAgICAgICAgaWYg
KCFidWNrZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1Y2tldFBvaW50ZXIuY29tcGFyZUV4Y2hhbmdlV2Vh
ayhudWxscHRyLCBidWNrZXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYnVj
a2V0OworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXVzYWJsZUJ1Y2tl
dHMuYXBwZW5kKGJ1Y2tldCk7CisgICAgICAgICAgICAgICAgYnVja2V0c1RvTG9jay5hcHBlbmQo
YnVja2V0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHN0ZDo6c29ydChidWNrZXRzVG9Mb2NrLmJlZ2luKCksIGJ1Y2tldHNUb0xv
Y2suZW5kKCkpOworICAgICAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDogYnVja2V0c1RvTG9jaykK
KyAgICAgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAgLy8gTm93IGFsbCBi
dWNrZXRzIGFyZSBsb2NrZWQuIFJlbG9hZCB0aGUgaGFzaHRhYmxlIGFuZCBzZWUgaWYgaXQncyBz
dGlsbCB0aGUgc2FtZSBhbmQgaWYgaXQncworICAgICAgICAvLyBzdGlsbCB0b28gc21hbGwuCisg
ICAgICAgIEhhc2h0YWJsZSogbmV3T2xkSGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAg
ICAgICAgaWYgKG5ld09sZEhhc2h0YWJsZSAhPSBvbGRIYXNodGFibGUpIHsKKyAgICAgICAgICAg
IC8vIFVubG9jayBhbGwgb2YgdGhlIGJ1Y2tldHMuCisgICAgICAgICAgICBmb3IgKEJ1Y2tldCog
YnVja2V0IDogYnVja2V0c1RvTG9jaykKKyAgICAgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5s
b2NrKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHRoZSBuZXcgaGFzaHRhYmxl
IGlzIGJpZyBlbm91Z2gsIHRoZW4gd2UncmUgZG9uZS4KKyAgICAgICAgICAgIGlmIChzdGF0aWNf
Y2FzdDxkb3VibGU+KG5ld09sZEhhc2h0YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+
KGN1cnJlbnROdW1UaHJlYWRzKSA8PSBtYXhMb2FkRmFjdG9yKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlIGp1c3QgbmVlZCB0byB0cnkgYWdh
aW4uCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE9LLCB3
ZSd2ZSBsb2NrZWQgYWxsIGJ1Y2tldHMgYW5kIHRoZSBvbGQgaGFzaHRhYmxlIGlzIHN0aWxsIHRo
ZSB2YWxpZCBvbmUuIFRoaXMgaXMgdGhlIGNhc2UKKyAgICAgICAgLy8gd2hlcmUgd2UgY2FuIGFj
dHVhbGx5IGRvIHRoZSByZXNpemluZy4KKworICAgICAgICAvLyBUaGVzZSB0aHJlYWQgZGF0YXMg
YXJlIHBsYWNlZCBpbnRvIHRoZSB2ZWN0b3IgaW4gcXVldWUgb3JkZXIuCisgICAgICAgIFZlY3Rv
cjxUaHJlYWREYXRhKj4gdGhyZWFkRGF0YXM7CisgICAgICAgIGZvciAoQnVja2V0KiBidWNrZXQg
OiByZXVzYWJsZUJ1Y2tldHMpIHsKKyAgICAgICAgICAgIHdoaWxlIChUaHJlYWREYXRhKiB0aHJl
YWREYXRhID0gYnVja2V0LT5kZXF1ZXVlKCkpCisgICAgICAgICAgICAgICAgdGhyZWFkRGF0YXMu
YXBwZW5kKHRocmVhZERhdGEpOworICAgICAgICB9CisKKyAgICAgICAgSGFzaHRhYmxlKiBuZXdI
YXNodGFibGUgPSBIYXNodGFibGU6OmNyZWF0ZShjdXJyZW50TnVtVGhyZWFkcyAqIGdyb3d0aEZh
Y3RvciAqIG1heExvYWRGYWN0b3IpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBjcmVhdGVkIG5ldyBoYXNodGFi
bGU6ICIsIFJhd1BvaW50ZXIobmV3SGFzaHRhYmxlKSwgIlxuIikpOworICAgICAgICBmb3IgKFRo
cmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IHJlaGFzaGluZyB0aHJlYWQgZGF0YSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiIHdp
dGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyh0aHJlYWREYXRhLT5hZGRy
ZXNzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG5ld0hhc2h0YWJsZS0+
c2l6ZTsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBpbmRleCA9ICIsIGluZGV4LCAiXG4iKSk7Cisg
ICAgICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpbmRleF0ubG9h
ZCgpOworICAgICAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgICAgICBpZiAocmV1
c2FibGVCdWNrZXRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3
IEJ1Y2tldCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYnVj
a2V0ID0gcmV1c2FibGVCdWNrZXRzLnRha2VMYXN0KCk7CisgICAgICAgICAgICAgICAgbmV3SGFz
aHRhYmxlLT5kYXRhW2luZGV4XS5zdG9yZShidWNrZXQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBidWNrZXQtPmVucXVldWUodGhyZWFkRGF0YSk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50IHRoZXJlIG1heSBiZSBzb21lIGJ1Y2tldHMgbGVmdCB1bnJldXNl
ZC4gVGhpcyBjb3VsZCBlYXNpbHkgaGFwcGVuIGlmIHRoZQorICAgICAgICAvLyBudW1iZXIgb2Yg
ZW5xdWV1ZWQgdGhyZWFkcyByaWdodCBub3cgaXMgbG93IGJ1dCB0aGUgaGlnaCB3YXRlcm1hcmsg
b2YgdGhlIG51bWJlciBvZiB0aHJlYWRzCisgICAgICAgIC8vIGVucXVldWVkIHdhcyBoaWdoLiBX
ZSBwbGFjZSB0aGVzZSBidWNrZXRzIGludG8gdGhlIGhhc2h0YWJsZSBiYXNpY2FsbHkgYXQgcmFu
ZG9tLCBqdXN0IHRvCisgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBsZWFrIHRoZW0uCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdIYXNodGFibGUtPnNpemUgJiYgIXJl
dXNhYmxlQnVja2V0cy5pc0VtcHR5KCk7ICsraSkgeworICAgICAgICAgICAgQXRvbWljPEJ1Y2tl
dCo+JiBidWNrZXRQdHIgPSBuZXdIYXNodGFibGUtPmRhdGFbaV07CisgICAgICAgICAgICBpZiAo
YnVja2V0UHRyLmxvYWQoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGJ1Y2tldFB0ci5zdG9yZShyZXVzYWJsZUJ1Y2tldHMudGFrZUxhc3QoKSk7CisgICAgICAgIH0K
KworICAgICAgICAvLyBTaW5jZSB3ZSBpbmNyZWFzZWQgdGhlIHNpemUgb2YgdGhlIGhhc2h0YWJs
ZSwgd2Ugc2hvdWxkIGhhdmUgZXhoYXVzdGVkIG91ciBwcmVhbGxvY2F0ZWQKKyAgICAgICAgLy8g
YnVja2V0cyBieSBub3cuCisgICAgICAgIEFTU0VSVChyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgp
KTsKKworICAgICAgICAvLyBPSywgcmlnaHQgbm93IHRoZSBvbGQgaGFzaHRhYmxlIGlzIGxvY2tl
ZCB1cCBhbmQgdGhlIG5ldyBoYXNodGFibGUgaXMgcmVhZHkgdG8gcm9jayBhbmQKKyAgICAgICAg
Ly8gcm9sbC4gQWZ0ZXIgd2UgaW5zdGFsbCB0aGUgbmV3IGhhc2h0YWJsZSwgd2UgY2FuIHJlbGVh
c2UgYWxsIGJ1Y2tldCBsb2Nrcy4KKworICAgICAgICBib29sIHJlc3VsdCA9IGhhc2h0YWJsZS5j
b21wYXJlRXhjaGFuZ2VTdHJvbmcob2xkSGFzaHRhYmxlLCBuZXdIYXNodGFibGUpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworCisgICAgICAgIGZvciAoQnVja2V0KiBidWNrZXQg
OiBidWNrZXRzVG9Mb2NrKQorICAgICAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK1RocmVhZERhdGE6On5UaHJlYWREYXRhKCkKK3sKKyAg
ICBmb3IgKDs7KSB7CisgICAgICAgIHVuc2lnbmVkIG9sZE51bVRocmVhZHMgPSBudW1UaHJlYWRz
LmxvYWQoKTsKKyAgICAgICAgaWYgKG51bVRocmVhZHMuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRO
dW1UaHJlYWRzLCBvbGROdW1UaHJlYWRzIC0gMSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK1RocmVhZERhdGEqIG15VGhyZWFkRGF0YSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIGluaXRpYWxpemVPbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBpbml0
aWFsaXplT25jZSwKKyAgICAgICAgW117CisgICAgICAgICAgICB0aHJlYWREYXRhID0gbmV3IFRo
cmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7CisgICAgICAgIH0pOworCisgICAgcmV0dXJuICp0
aHJlYWREYXRhOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorYm9vbCBlbnF1ZXVl
KGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgdW5z
aWduZWQgaGFzaCA9IGhhc2hBZGRyZXNzKGFkZHJlc3MpOworCisgICAgZm9yICg7OykgeworICAg
ICAgICBIYXNodGFibGUqIG15SGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICAgICAg
dW5zaWduZWQgaW5kZXggPSBoYXNoICUgbXlIYXNodGFibGUtPnNpemU7CisgICAgICAgIEF0b21p
YzxCdWNrZXQqPiYgYnVja2V0UG9pbnRlciA9IG15SGFzaHRhYmxlLT5kYXRhW2luZGV4XTsKKyAg
ICAgICAgQnVja2V0KiBidWNrZXQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGJ1
Y2tldCA9IGJ1Y2tldFBvaW50ZXIubG9hZCgpOworICAgICAgICAgICAgaWYgKCFidWNrZXQpIHsK
KyAgICAgICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7CisgICAgICAgICAgICAgICAg
aWYgKCFidWNrZXRQb2ludGVyLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgYnVja2V0KSkg
eworICAgICAgICAgICAgICAgICAgICBkZWxldGUgYnVja2V0OworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nIG9udG8gYnVja2V0
ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIiB3aXRoIGluZGV4ICIsIGluZGV4LCAiIGZvciBhZGRy
ZXNzICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIgd2l0aCBoYXNoICIsIGhhc2gsICJcbiIpKTsK
KyAgICAgICAgYnVja2V0LT5sb2NrLmxvY2soKTsKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50
IHRoZSBoYXNodGFibGUgY291bGQgaGF2ZSByZWhhc2hlZCB1bmRlciB1cy4KKyAgICAgICAgaWYg
KGhhc2h0YWJsZS5sb2FkKCkgIT0gbXlIYXNodGFibGUpIHsKKyAgICAgICAgICAgIGJ1Y2tldC0+
bG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGZ1bmN0b3IoKTsKKyAgICAgICAgYm9vbCByZXN1
bHQ7CisgICAgICAgIGlmICh0aHJlYWREYXRhKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcHJv
Y2VlZGluZyB0byBlbnF1ZXVlICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICJcbiIpKTsKKyAg
ICAgICAgICAgIGJ1Y2tldC0+ZW5xdWV1ZSh0aHJlYWREYXRhKTsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7Cisg
ICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Citib29sIGRlcXVldWUoY29uc3Qg
dm9pZCogYWRkcmVzcywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRlcXVldWVp
bmcgYWRkcmVzcyAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiXG4iKSk7CisgICAgdW5zaWduZWQg
aGFzaCA9IGhhc2hBZGRyZXNzKGFkZHJlc3MpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaGFzaCA9ICIsIGhhc2gsICJcbiIp
KTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRhYmxlKiBteUhhc2h0YWJsZSA9IGhh
c2h0YWJsZS5sb2FkKCk7CisgICAgICAgIGlmICghbXlIYXNodGFibGUpIHsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiBubyBoYXNodGFibGUuXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBoYXNoICUgbXlIYXNodGFibGUt
PnNpemU7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IGluZGV4ID0gIiwgaW5kZXgsICJcbiIpKTsKKyAgICAgICAg
QnVja2V0KiBidWNrZXQgPSBteUhhc2h0YWJsZS0+ZGF0YVtpbmRleF0ubG9hZCgpOworICAgICAg
ICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IG5vIGJ1Y2tldCBhdCAiLCBS
YXdQb2ludGVyKGJ1Y2tldCksICIuXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIGJ1Y2tldCBhdCAiLCBSYXdQb2ludGVy
KGJ1Y2tldCksICJcbiIpKTsKKyAgICAgICAgYnVja2V0LT5sb2NrLmxvY2soKTsKKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQo
KSwgIjogbG9ja2VkIGJ1Y2tldCBhdCAiLCBSYXdQb2ludGVyKGJ1Y2tldCksICJcbiIpKTsKKwor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBoYXNodGFibGUgY291bGQgaGF2ZSByZWhhc2hl
ZCB1bmRlciB1cy4KKyAgICAgICAgaWYgKGhhc2h0YWJsZS5sb2FkKCkgIT0gbXlIYXNodGFibGUp
IHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBoYXNodGFibGUgY2hhbmdlZC5cbiIpKTsKKyAgICAg
ICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZm91bmQgYnVja2V0LlxuIikpOworICAgICAgICBidWNr
ZXQtPmdlbmVyaWNEZXF1ZXVlKGZ1bmN0b3IpOworICAgICAgICBib29sIHJlc3VsdCA9ICEhYnVj
a2V0LT5xdWV1ZUhlYWQ7CisgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiti
b29sIFBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHN0
ZDo6ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0aW9uKQoreworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZy5cbiIpKTsK
KyAgICAKKyAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOworCisgICAgQVNTRVJU
KCFtZS0+c2hvdWxkUGFyayk7CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBlbnF1ZXVlKAorICAg
ICAgICBhZGRyZXNzLAorICAgICAgICBbJl0gKCkgLT4gVGhyZWFkRGF0YSogeworICAgICAgICAg
ICAgaWYgKCF2YWxpZGF0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICAgICAgICAgIG1lLT5hZGRyZXNzID0gYWRkcmVzczsKKyAgICAgICAgICAgIG1lLT5zaG91
bGRQYXJrID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBtZTsKKyAgICAgICAgfSk7CisKKyAg
ICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBwYXJraW5nIHNl
bGY6ICIsIFJhd1BvaW50ZXIobWUpLCAiXG4iKSk7CisgICAgeworICAgICAgICBzdGQ6OnVuaXF1
ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2luZ0xvY2spOworICAgICAgICB3aGls
ZSAobWUtPnNob3VsZFBhcmspCisgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53YWl0
KGxvY2tlcik7CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJrZWQgc2VsZjogIiwgUmF3UG9pbnRlcihtZSks
ICJcbiIpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYXJraW5nTG90Ojp1bnBhcmtP
bmUoY29uc3Qgdm9pZCogYWRkcmVzcykKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBvbmUuXG4iKSk7CisK
KyAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRhOworICAgIGJvb2wgcmVzdWx0ID0gZGVxdWV1ZSgK
KyAgICAgICAgYWRkcmVzcywKKyAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50KSB7Cisg
ICAgICAgICAgICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBhZGRyZXNzKQorICAgICAgICAgICAg
ICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7CisgICAgICAgICAgICB0aHJlYWREYXRh
ID0gZWxlbWVudDsKKyAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRT
dG9wOworICAgICAgICB9KTsKKworICAgIEFTU0VSVCh0aHJlYWREYXRhLT5zaG91bGRQYXJrKTsK
KworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIodGhy
ZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICB0aHJlYWREYXRhLT5zaG91bGRQYXJrID0g
ZmFsc2U7CisgICAgICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X2FsbCgp
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGFya2luZ0xvdDo6dW5w
YXJrQWxsKGNvbnN0IHZvaWQqIGFkZHJlc3MpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgYWxsIGZyb20g
IiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIi5cbiIpKTsKKyAgICAKKyAgICBWZWN0b3I8VGhyZWFk
RGF0YSosIDg+IHRocmVhZERhdGFzOworICAgIGRlcXVldWUoCisgICAgICAgIGFkZHJlc3MsCisg
ICAgICAgIFsmXSAoVGhyZWFkRGF0YSogZWxlbWVudCkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IE9ic2VydmluZyBlbGVtZW50IHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIoZWxlbWVudC0+
YWRkcmVzcyksICJcbiIpKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5hZGRyZXNzICE9IGFk
ZHJlc3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6Oklnbm9yZTsKKyAg
ICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZChlbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVy
biBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZTsKKyAgICAgICAgfSk7CisKKyAgICBm
b3IgKFRocmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgeworICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAi
OiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIiB3aXRoIGFkZHJlc3MgIiwg
UmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICBBU1NFUlQo
dGhyZWFkRGF0YS0+c2hvdWxkUGFyayk7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjpt
dXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgdGhyZWFkRGF0
YS0+c2hvdWxkUGFyayA9IGZhbHNlOworICAgICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0
aW9uLm5vdGlmeV9hbGwoKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRvbmUgdW5wYXJraW5nLlxuIikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvUGFya2luZ0xv
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgV1RGX1BhcmtpbmdMb3RfaAorI2RlZmluZSBXVEZfUGFya2luZ0xvdF9oCisKKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQYXJraW5n
TG90IHsKKyAgICBQYXJraW5nTG90KCkgPSBkZWxldGU7CisgICAgUGFya2luZ0xvdChjb25zdCBQ
YXJraW5nTG90JikgPSBkZWxldGU7CisKK3B1YmxpYzoKKyAgICAvLyBQYXJrcyB0aGUgdGhyZWFk
IGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5u
b3QgYmUgbnVsbC4gVGhlCisgICAgLy8gcGFya2luZyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxp
ZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGlsZSB0aGUgcXVldWUgbG9jayBpcyBoZWxk
LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwYXJrQ29uZGl0aW9uYWxseShj
b25zdCB2b2lkKiBhZGRyZXNzLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFsaWRhdGlvbik7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBib29sIGNv
bXBhcmVBbmRQYXJrKGNvbnN0IEF0b21pYzxUPiogYWRkcmVzcywgVSBleHBlY3RlZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseSgKKyAgICAgICAgICAgIGFkZHJlc3Ms
CisgICAgICAgICAgICBbYWRkcmVzcywgZXhwZWN0ZWRdICgpIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgIFUgdmFsdWUgPSBhZGRyZXNzLT5sb2FkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlID09IGV4cGVjdGVkOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVW5w
YXJrcyBvbmUgdGhyZWFkIGZyb20gdGhlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4g
YWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51bGwuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIG1heSBzdGlsbCBiZSBvdGhlciB0aHJlYWRzIG9uIHRoYXQgcXVldWUsIG9yIGZhbHNlIGlm
IHRoZXJlIGRlZmluaXRlbHkKKyAgICAvLyBhcmUgbm8gbW9yZSB0aHJlYWRzIG9uIHRoZSBxdWV1
ZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgdW5wYXJrT25lKGNvbnN0IHZv
aWQqIGFkZHJlc3MpOworCisgICAgLy8gVW5wYXJrcyBldmVyeSB0aHJlYWQgZnJvbSB0aGUgcXVl
dWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVs
bC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrQWxsKGNvbnN0IHZv
aWQqIGFkZHJlc3MpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6UGFy
a2luZ0xvdDsKKworI2VuZGlmIC8vIFdURl9QYXJraW5nTG90X2gKKwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAJKHJldmlzaW9uIDE4ODEwMCkKKysrIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw0ICs5
NywzOSBAQCBURVNUKFdURl9Mb2NrLCBNYW55Q29udGVudGVkTG9uZ1NlY3Rpb25zCiAgICAgcnVu
TG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxMDAwMCwgMjAwMCk7CiB9CiAKK1RFU1QoV1RGX0J5dGVM
b2NrLCBVbmNvbnRlbnRlZFNob3J0U2VjdGlvbikKK3sKKyAgICBydW5CeXRlTG9ja1Rlc3Q8Qnl0
ZUxvY2s+KDEsIDEsIDEsIDEwMDAwMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIFVuY29u
dGVudGVkTG9uZ1NlY3Rpb24pCit7CisgICAgcnVuQnl0ZUxvY2tUZXN0PEJ5dGVMb2NrPigxLCAx
LCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBDb250ZW50ZWRTaG9ydFNl
Y3Rpb24pCit7CisgICAgcnVuQnl0ZUxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxMCwgMSwgMTAwMDAw
MDApOworfQorCitURVNUKFdURl9CeXRlTG9jaywgQ29udGVudGVkTG9uZ1NlY3Rpb24pCit7Cisg
ICAgcnVuQnl0ZUxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKK30KKwor
VEVTVChXVEZfQnl0ZUxvY2ssIE1hbnlDb250ZW50ZWRTaG9ydFNlY3Rpb25zKQoreworICAgIHJ1
bkJ5dGVMb2NrVGVzdDxCeXRlTG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworfQorCitURVNUKFdU
Rl9CeXRlTG9jaywgTWFueUNvbnRlbnRlZExvbmdTZWN0aW9ucykKK3sKKyAgICBydW5CeXRlTG9j
a1Rlc3Q8Qnl0ZUxvY2s+KDEwLCAxMCwgMTAwMDAsIDIwMDApOworfQorCitURVNUKFdURl9CeXRl
TG9jaywgU2VjdGlvbkFkZHJlc3NDb2xsaXNpb24pCit7CisgICAgcnVuQnl0ZUxvY2tUZXN0PEJ5
dGVMb2NrPig0LCAyLCAxMDAwMCwgMjAwMCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJL
aXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258569</attachid>
            <date>2015-08-08 11:21:27 -0700</date>
            <delta_ts>2015-08-08 20:31:41 -0700</delta_ts>
            <desc>writing more tests and stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44970</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJ
VExvY2suaAkocmV2aXNpb24gMTg4MDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE0IEBA
CiAjZGVmaW5lIENvbmN1cnJlbnRKSVRMb2NrX2gKIAogI2luY2x1ZGUgIkRlZmVyR0MuaCIKLSNp
bmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAj
aW5jbHVkZSA8d3RmL05vTG9jay5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShD
T05DVVJSRU5UX0pJVCkKLXR5cGVkZWYgQnl0ZVNwaW5Mb2NrIENvbmN1cnJlbnRKSVRMb2NrOwot
dHlwZWRlZiBCeXRlU3BpbkxvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKK3R5cGVkZWYg
Qnl0ZUxvY2sgQ29uY3VycmVudEpJVExvY2s7Cit0eXBlZGVmIEJ5dGVMb2NrZXIgQ29uY3VycmVu
dEpJVExvY2tlckltcGw7CiAjZWxzZQogdHlwZWRlZiBOb0xvY2sgQ29uY3VycmVudEpJVExvY2s7
CiB0eXBlZGVmIE5vTG9ja0xvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg4MTAwKQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjQsNiArMjQsMTAgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZC
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CisJCTBGODI0
QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0
ZUxvY2suY3BwICovOyB9OworCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTYz
MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OworCQkwRjgyNEE2ODFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi87IH07CisJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsg
fTsKIAkJMEY4ODVFMEYxODQ1QUVBOTAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMEUxODQ1QUU5
RjAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjhGMkI5MTE3MkUwMEZD
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxh
dGlvblRocmVhZC5oICovOyB9OwpAQCAtMzA3LDYgKzMxMSwxMCBAQAogCQkwRjJCNjZBNDE3QjZC
NEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2
QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZE
NzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZUxvY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVE
IC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODI0QTY1MUI3
NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEw
NTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTcxNiw2ICs3MjQsOCBAQAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAv
KiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29t
RmlsdGVyLmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVy
QWxsb2NhdG9yLmggKi8sCisJCQkJMEY4MjRBNjIxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2Nr
LmNwcCAqLywKKwkJCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLywK
IAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJMEZF
QzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovLAogCQkJCUE4QTQ3MjZB
MTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLApAQCAtODEwLDYgKzgy
MCw4IEBACiAJCQkJQThBNDcyRTUxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VSZXNlcnZhdGlvbi5o
ICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnMuaCAqLywK
IAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2gu
aCAqLywKKwkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8s
CisJCQkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLywKIAkJCQlB
OEE0NzJFRDE1MUE4MjVCMDA0MTIzRkYgLyogUGFzc1JlZlB0ci5oICovLAogCQkJCUE4NzZEQkQ3
MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTBGOUQzMzVEMTY1REJBNzMw
MDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCkBAIC0xMTU2LDYgKzExNjgsNyBAQAogCQkJ
CUE4QTQ3NDE1MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDE2MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJTZWVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY4MjRBNjcxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2Nr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxNzE1MUE4MjVCMDA0MTIzRkYgLyogUmVkQmxh
Y2tUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxODE1MUE4MjVCMDA0MTIzRkYgLyog
UmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTkxNTFBODI1QjAwNDEyM0ZG
IC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY3LDYgKzExODAsNyBA
QAogCQkJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RjNCMEY3MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1l
dGljLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDY5NDE5NjE2RUFBRkY4MDAyNEUxNDYgLyogU2No
ZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgyNEE2OTFCNzQ0M0EwMDAyRTM0NUQg
LyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MUYxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0MjIxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCBpbiBIZWFkZXJzICovLApAQCAtMTMy
NSw2ICsxMzM5LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCUE4QTQ3Mzg2MTUxQTgyNUIwMDQxMjNG
RiAvKiBBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDM1MTUxQTgyNUIw
MDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4MjRBNjYx
Qjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCQzcw
RjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ2OTQxOUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbE1h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTM0MCw2ICsxMzU1LDcgQEAKIAkJCQlBOEE0NzM5QTE1
MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0MzkxNTFBODI1QjAwNDEyM0ZGIC8qIENTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUMxNTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1l
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RjQ2RjYwMUEyODQwRUUwMENDQkYyMiAv
KiBSZWZDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzlFMTUxQTgyNUIwMDQx
MjNGRiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EwMTUxQTgyNUIw
MDQxMjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYv
YmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL2Jl
bmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDE4ODEwMCkKKysrIFNvdXJjZS9X
VEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KQEAgLTQzLDcgKzQ0
LDcgQEAgdW5zaWduZWQgbnVtSXRlcmF0aW9uczsKICAgICAKIHZvaWQgdXNhZ2UoKQogewotICAg
IHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xtdXRleHxhbGwgPG51
bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29yayBwZXIgY3JpdGlj
YWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+XG4iKTsKKyAg
ICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0ZWxvY2t8bXV0
ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91cD4gPHdvcmsg
cGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBpdGVyYXRpb25z
PlxuIik7CiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTI1LDYgKzEyNiwxMCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxMb2NrPigiV1RGIExv
Y2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKCFzdHJjbXAoYXJn
dlsxXSwgImJ5dGVsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAg
cnVuQmVuY2htYXJrPEJ5dGVMb2NrPigiV1RGIEJ5dGVMb2NrIik7CisgICAgICAgIGRpZFJ1biA9
IHRydWU7CisgICAgfQogICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRleCIpIHx8ICFzdHJj
bXAoYXJndlsxXSwgImFsbCIpKSB7CiAgICAgICAgIHJ1bkJlbmNobWFyazxNdXRleD4oIlBsYXRm
b3JtIE11dGV4Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZp
c2lvbiAxODgwOTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDEyICs5MSwxOCBAQCBzdHJ1Y3QgQXRvbWljIHsKIAogICAgIGJvb2wgY29tcGFyZUV4
Y2hhbmdlV2VhayhUIGV4cGVjdGVkLCBUIGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAg
ICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0OworI2VuZGlmCiAgICAgICAg
IFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVkOwogICAgICAgICByZXR1cm4gdmFsdWUuY29t
cGFyZV9leGNoYW5nZV93ZWFrKGV4cGVjdGVkT3JBY3R1YWwsIGRlc2lyZWQsIG9yZGVyKTsKICAg
ICB9CiAKICAgICBib29sIGNvbXBhcmVFeGNoYW5nZVN0cm9uZyhUIGV4cGVjdGVkLCBUIGRlc2ly
ZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkK
ICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRl
cl9zZXFfY3N0OworI2VuZGlmCiAgICAgICAgIFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVk
OwogICAgICAgICByZXR1cm4gdmFsdWUuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0ZWRP
ckFjdHVhbCwgZGVzaXJlZCwgb3JkZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J5
dGVMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5dGVMb2NrLmgiCisKKyNp
bmNsdWRlICJQYXJraW5nTG90LmgiCisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgV1RG
IHsKKworc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCit2b2lkIEJ5dGVMb2NrOjpsb2Nr
U2xvdygpCit7CisgICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKKworICAgIC8vIFRoaXMgbWFn
aWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0g
ZXhwZXJpbWVudHMuCisgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisg
ICAgZm9yICg7OykgeworICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUu
bG9hZCgpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwg
IlxuIikpOworCisgICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICYm
IG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2Ug
Y2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgorICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZh
bHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAg
ICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBw
YXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVu
IHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdh
c24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgorICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQ
YXJrZWRCaXQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGV4
cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3Mg
dGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFy
aygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworCisgICAgICAgIC8vIFdlIGhh
dmUgYXdha2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFu
Z2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWlu
LgorICAgIH0KK30KKwordm9pZCBCeXRlTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAgLy8gUmVs
ZWFzZSB0aGUgbG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtlZC4gTm90
ZSB0aGF0IGFzIHNvb24gYXMgd2UgZG8gdGhpcywKKyAgICAvLyBzb21lb25lIG1pZ2h0IGJhcmdl
IGluLgorICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOworICAgIGZvciAoOzspIHsKKyAgICAgICAg
b2xkQnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5sb2NraW5nIHdp
dGggIiwgb2xkQnl0ZVZhbHVlLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUg
JiBpc0hlbGRCaXQpOworICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xk
Qnl0ZVZhbHVlLCAwKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE5vdGUg
dGhhdCBzb21lb25lIGNvdWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5z
LCB0aGV5IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5CisgICAgLy8gYmVjYXVzZSBvdXIgcGFya2lu
ZyBwcmVkaWNhdGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0LCBi
dXQgd2UndmUgYWxyZWFkeSBzZXQKKyAgICAvLyBtX2J5dGUgPSAwLgorCisgICAgLy8gSWYgdGhl
cmUgaGFkIGJlZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVz
ZXMgYSB0aHVuZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQorICAgIC8vIHRoYXQgaXMgdGhlb3JldGlj
YWxseSBzY2FyeSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxs
eSBkb24ndCBoYXZlIGVub3VnaAorICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgor
ICAgIGlmIChvbGRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgIFBhcmtpbmdMb3Q6
OnVucGFya0FsbCgmbV9ieXRlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0
ZUxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeXRlTG9ja19oCisjZGVmaW5lIEJ5dGVMb2NrX2gK
KworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBp
cyBsaWtlIExvY2ssIGJ1dCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBpbnN0ZWFkIG9mIHNpemVvZih2
b2lkKikgc3RvcmFnZS4gVGhlIGRvd25zaWRlIGlzIHRoYXQKKy8vIGl0IGlzIHNsb3dlciBvbiB0
aGUgc2xvdyBwYXRoIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24gaW52b2x2aW5nIG1hbnkgdGhyZWFk
cyBiZWNhdXNlIGl0IGlzCisvLyBzdXNjZXB0aWJsZSB0byB0aGUgInRodW5kZXJpbmcgaGVyZCIg
cHJvYmxlbTogaXQgZG9lc24ndCBoYXZlIGVub3VnaCBzdGF0ZSB0byB0cmFjayBob3cgbWFueQor
Ly8gdGhyZWFkcyBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2ssIHNvIHdoZW4gdW5sb2NrIGRldGVj
dHMgdGhhdCBhbnkgdGhyZWFkIGlzIHdhaXRpbmcsIHRoZW4gaXQgd2FrZXMKKy8vIGFsbCBvZiB0
aGUgd2FpdGluZyB0aHJlYWRzLiBBbGwgb2YgdGhvc2UgdGhyZWFkcyB3aWxsIHBpbGUgb250byB0
aGUgbG9jazsgb25lIHdpbGwgc3VjY2VlZCBhbmQgdGFrZQorLy8gaXQgd2hpbGUgdGhlIG90aGVy
cyB3aWxsIGdvIGJhY2sgdG8gc2xlZXAuIFRoZSBzbG93LWRvd24gaXMgc21hbGwuIFRlbiB0aHJl
YWRzIHJlcGVhdGVkbHkKKy8vIGNvbnRlbmRpbmcgZm9yIHRoZSBzYW1lIH4xLTEwdXMgbG9uZyBj
cml0aWNhbCBzZWN0aW9uIHdpbGwgcnVuIDclIHNsb3dlciBvbiBteSBtYWNoaW5lLiBJZiBJIG1l
c3MKKy8vIHdpdGggYW55IG9mIHRoZSBwYXJhbWV0ZXJzIC0gY2hhbmdlIHRoZSBudW1iZXIgb2Yg
dGhyZWFkcyBvciBjaGFuZ2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gZHVyYXRpb24gLQorLy8gdGhl
biBCeXRlTG9jayByZWFjaGVzIHBhcml0eSB3aXRoIExvY2ssIGFuZCBzb21ldGltZXMgb3V0cGVy
Zm9ybXMgaXQuIFBlcmhhcHMgbW9zdCBzdXJwcmlzaW5nbHksCisvLyB0aGUgc2xvdy1kb3duIGdv
ZXMgYXdheSBldmVuIHdoZW4geW91IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4gQnl0
ZUxvY2sgYXBwZWFycyB0byBzb21ldGltZXMKKy8vIGJlIGZhc3RlciB1bmRlciBtaWNyb2NvbnRl
bnRpb24sIHBlcmhhcHMgYmVjYXVzZSBhIGNvbnRlbnRpb3VzIDgtYml0IENBUyBpcyBjaGVhcGVy
IHRoYW4gYQorLy8gY29udGVudGlvdXMgNjQtYml0IENBUy4gTm90ZSB0aGF0IHVuY29udGVuZGVk
IGxvY2tpbmcgaXMgZXF1YWxseSBmYXN0IHdpdGggQnl0ZUxvY2sgYXMgd2l0aCBMb2NrLgorLy8g
SW4gYWxsLCBMb2NrIGFuZCBCeXRlTG9jayBoYXZlIHNpbWlsYXIgcGVyZm9ybWFuY2UgdW5kZXIg
Y29udHJvbGxlZCBtaWNyb2JlbmNobWFya3MsIGJ1dCBMb2NrIGlzCisvLyB0aGVvcmV0aWNhbGx5
IHNhZmVyIGJlY2F1c2Ugb2YgdGhlIHRodW5kZXJpbmcgaGVyZCBpc3N1ZS4gSXQncyBwcm9iYWJs
eSBiZXN0IHRvIHVzZSBCeXRlTG9jayBvbmx5CisvLyB3aGVuIHlvdSByZWFsbHkgY2FyZSBhYm91
dCBzcGFjZSBhbmQgeW91IGRvbid0IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhhdCBhIGxhcmdl
IG51bWJlciBvZgorLy8gdGhyZWFkcyB3b3VsZCBldmVyIHBpbGUgb250byB0aGUgc2FtZSBsb2Nr
LgorY2xhc3MgQnl0ZUxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVMb2NrKTsK
K3B1YmxpYzoKKyAgICBCeXRlTG9jaygpCisgICAgeworICAgICAgICBtX2J5dGUuc3RvcmUoMCwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygp
CisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAs
IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAv
LyBMb2NrIGFjcXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgbG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAg
ICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2Vk
IGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50
OF90IGhhc1BhcmtlZEJpdCA9IDI7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2Nr
U2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKKworICAg
IEF0b21pYzx1aW50OF90PiBtX2J5dGU7Cit9OworCit0eXBlZGVmIExvY2tlcjxCeXRlTG9jaz4g
Qnl0ZUxvY2tlcjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qnl0ZUxvY2s7
Cit1c2luZyBXVEY6OkJ5dGVMb2NrZXI7CisKKyNlbmRpZiAvLyBCeXRlTG9ja19oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1BhcmtpbmdMb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBhcmtpbmdMb3QuaCIKKworI2luY2x1ZGUgIkhhc2hGdW5jdGlvbnMuaCIKKyNpbmNs
dWRlICJMb2NrLmgiCisjaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJU
aHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKKyNpbmNs
dWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKK25h
bWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKwor
c3RydWN0IFRocmVhZERhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIAorICAgIFRocmVhZERhdGEoKTsKKyAgICB+VGhyZWFkRGF0YSgpOworCisgICAgVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOworICAgIAorICAgIGJvb2wgc2hvdWxkUGFy
ayB7IGZhbHNlIH07CisgICAgc3RkOjptdXRleCBwYXJraW5nTG9jazsKKyAgICBzdGQ6OmNvbmRp
dGlvbl92YXJpYWJsZSBwYXJraW5nQ29uZGl0aW9uOworCisgICAgY29uc3Qgdm9pZCogYWRkcmVz
czsKKyAgICBUaHJlYWREYXRhKiBuZXh0SW5RdWV1ZSB7IG51bGxwdHIgfTsKK307CisKK2VudW0g
Y2xhc3MgRGVxdWV1ZVJlc3VsdCB7CisgICAgSWdub3JlLAorICAgIFJlbW92ZUFuZENvbnRpbnVl
LAorICAgIFJlbW92ZUFuZFN0b3AKK307CisKK3N0cnVjdCBCdWNrZXQgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZvaWQgZW5xdWV1ZShUaHJlYWREYXRhKiBk
YXRhKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW5xdWV1ZWluZyAiLCBSYXdQb2ludGVyKGRhdGEp
LCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIoZGF0YS0+YWRkcmVzcyksICIgb250byAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVChkYXRhLT5hZGRyZXNz
KTsKKyAgICAgICAgQVNTRVJUKCFkYXRhLT5uZXh0SW5RdWV1ZSk7CisgICAgICAgIAorICAgICAg
ICBpZiAocXVldWVUYWlsKSB7CisgICAgICAgICAgICBxdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0g
ZGF0YTsKKyAgICAgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBxdWV1ZUhlYWQgPSBkYXRhOworICAgICAgICBxdWV1ZVRh
aWwgPSBkYXRhOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBnZW5lcmljRGVxdWV1ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogZGVxdWV1ZWluZyBmcm9tIGJ1Y2tldCBhdCAiLCBSYXdQb2ludGVyKHRoaXMpLCAi
XG4iKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXF1ZXVlSGVhZCkgeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhy
ZWFkKCksICI6IGVtcHR5LlxuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVGhpcyBsb29wIGlzIGEgdmVyeSBjbGV2ZXIgYWJvbWluYXRpb24uIFRoZSBp
bmR1Y3Rpb24gdmFyaWFibGVzIGFyZSB0aGUgcG9pbnRlciB0byB0aGUKKyAgICAgICAgLy8gcG9p
bnRlciB0byB0aGUgY3VycmVudCBub2RlLCBhbmQgdGhlIHBvaW50ZXIgdG8gdGhlIHByZXZpb3Vz
IG5vZGUuIFRoaXMgZ2l2ZXMgdXMgZXZlcnl0aGluZworICAgICAgICAvLyB3ZSBuZWVkIHRvIGJv
dGggcHJvY2VlZCBmb3J3YXJkIHRvIHRoZSBuZXh0IG5vZGUsIGFuZCB0byByZW1vdmUgbm9kZXMg
d2hpbGUgbWFpbnRhaW5pbmcgdGhlCisgICAgICAgIC8vIHF1ZXVlSGVhZC9xdWV1ZVRhaWwgYW5k
IGFsbCBvZiB0aGUgbmV4dEluUXVldWUgbGlua3MuIEZvciBleGFtcGxlLCB3aGVuIHdlIGFyZSBh
dCB0aGUgaGVhZAorICAgICAgICAvLyBlbGVtZW50LCB0aGVuIHJlbW92YWwgbWVhbnMgcmV3aXJp
bmcgcXVldWVIZWFkLCBhbmQgaWYgaXQgd2FzIGFsc28gZXF1YWwgdG8gcXVldWVUYWlsLCB0aGVu
CisgICAgICAgIC8vIHdlJ2Qgd2FudCBxdWV1ZVRhaWwgdG8gYmUgc2V0IHRvIG51bGxwdHIuIFRo
aXMgd29ya3MgYmVjYXVzZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIGN1cnJlbnRQdHIg
PT0gJnF1ZXVlSGVhZAorICAgICAgICAvLyAgICAgcHJldmlvdXMgPT0gbnVsbHB0cgorICAgICAg
ICAvLworICAgICAgICAvLyBXZSByZW1vdmUgYnkgc2V0dGluZyAqY3VycmVudFB0ciA9ICgqY3Vy
cmVudFB0ciktPm5leHRJblF1ZXVlLCBpLmUuIGNoYW5naW5nIHRoZSBwb2ludGVyCisgICAgICAg
IC8vIHRoYXQgdXNlZCB0byBwb2ludCB0byB0aGlzIG5vZGUgdG8gaW5zdGVhZCBwb2ludCB0byB0
aGlzIG5vZGUncyBzdWNjZXNzb3IuIEFub3RoZXIgZXhhbXBsZToKKyAgICAgICAgLy8gaWYgd2Ug
d2VyZSBhdCB0aGUgc2Vjb25kIG5vZGUgaW4gdGhlIHF1ZXVlLCB0aGVuIHdlJ2QgaGF2ZToKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAgIGN1cnJlbnRQdHIgPT0gJnF1ZXVlSGVhZC0+bmV4dElu
UXVldWUKKyAgICAgICAgLy8gICAgIHByZXZpb3VzID09IHF1ZXVlSGVhZAorICAgICAgICAvLwor
ICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaXMgbm90IGVxdWFsIHRvIHF1ZXVlVGFpbCwgdGhlbiBy
ZW1vdmluZyBpdCBzaW1wbHkgbWVhbnMgbWFraW5nCisgICAgICAgIC8vIHF1ZXVlSGVhZC0+bmV4
dEluUXVldWUgcG9pbnQgdG8gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZS0+bmV4dEluUXVldWUgKHdo
aWNoIHRoZSBhbGdvcml0aG0KKyAgICAgICAgLy8gYWNoaWV2ZXMgYnkgbXV0YXRpbmcgKmN1cnJl
bnRQdHIpLiBJZiB0aGlzIG5vZGUgaXMgZXF1YWwgdG8gcXVldWVUYWlsLCB0aGVuIHdlIHdhbnQg
dG8gc2V0CisgICAgICAgIC8vIHF1ZXVlVGFpbCB0byBwcmV2aW91cywgd2hpY2ggaW4gdGhpcyBj
YXNlIGlzIHF1ZXVlSGVhZCAtIHRodXMgbWFraW5nIHRoZSBxdWV1ZSBsb29rIGxpa2UgYQorICAg
ICAgICAvLyBwcm9wZXIgb25lLWVsZW1lbnQgcXVldWUgd2l0aCBxdWV1ZUhlYWQgPT0gcXVldWVU
YWlsLgorICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKKyAgICAgICAgVGhyZWFk
RGF0YSoqIGN1cnJlbnRQdHIgPSAmcXVldWVIZWFkOworICAgICAgICBUaHJlYWREYXRhKiBwcmV2
aW91cyA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlIChzaG91bGRDb250aW51ZSkgeworICAgICAg
ICAgICAgVGhyZWFkRGF0YSogY3VycmVudCA9ICpjdXJyZW50UHRyOworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IGdvdCB0aHJlYWQgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIlxuIikpOworICAgICAg
ICAgICAgaWYgKCFjdXJyZW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
RGVxdWV1ZVJlc3VsdCByZXN1bHQgPSBmdW5jdG9yKGN1cnJlbnQpOworICAgICAgICAgICAgc3dp
dGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6SWdub3JlOgor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogY3VycmVudFB0ciA9ICIsIFJhd1BvaW50ZXIo
Y3VycmVudFB0ciksICIsICpjdXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcigqY3VycmVudFB0ciks
ICJcbiIpKTsKKyAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgICAg
ICAgICAgY3VycmVudFB0ciA9ICYoKmN1cnJlbnRQdHIpLT5uZXh0SW5RdWV1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5k
Q29udGludWU6CisgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A6
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nICIsIFJhd1BvaW50ZXIo
Y3VycmVudCksICIgZnJvbSAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnQgPT0gcXVldWVUYWlsKQorICAgICAgICAgICAgICAgICAgICBxdWV1
ZVRhaWwgPSBwcmV2aW91czsKKyAgICAgICAgICAgICAgICAqY3VycmVudFB0ciA9IGN1cnJlbnQt
Pm5leHRJblF1ZXVlOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHRJblF1ZXVlID0gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IERlcXVldWVSZXN1bHQ6OlJlbW92
ZUFuZFN0b3ApCisgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBBU1NFUlQoISFxdWV1ZUhlYWQgPT0gISFxdWV1ZVRhaWwpOworICAgIH0KKyAgICAKKyAgICBU
aHJlYWREYXRhKiBkZXF1ZXVlKCkKKyAgICB7CisgICAgICAgIFRocmVhZERhdGEqIHJlc3VsdCA9
IG51bGxwdHI7CisgICAgICAgIGdlbmVyaWNEZXF1ZXVlKAorICAgICAgICAgICAgWyZdIChUaHJl
YWREYXRhKiBlbGVtZW50KSAtPiBEZXF1ZXVlUmVzdWx0IHsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBlbGVtZW50OworICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1v
dmVBbmRTdG9wOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkIHsgbnVsbHB0ciB9OworICAgIFRocmVhZERh
dGEqIHF1ZXVlVGFpbCB7IG51bGxwdHIgfTsKKworICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyB0
aGUgZW50aXJlIGJ1Y2tldC4gVGhvdSBzaGFsbCBub3QgbWFrZSBjaGFuZ2VzIHRvIEJ1Y2tldCB3
aXRob3V0IGhvbGRpbmcKKyAgICAvLyB0aGlzIGxvY2suCisgICAgTG9jayBsb2NrOworCisgICAg
Ly8gUHV0IHNvbWUgZGlzdGFuZSBiZXR3ZWVuIGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9u
ZSBvZiBzZXZlcmFsIG1pdGlnYXRpb25zIGFnYWluc3QgZmFsc2UKKyAgICAvLyBzaGFyaW5nLgor
ICAgIGNoYXIgcGFkZGluZ1s2NF07Cit9OworCitzdHJ1Y3QgSGFzaHRhYmxlIHsKKyAgICB1bnNp
Z25lZCBzaXplOworICAgIEF0b21pYzxCdWNrZXQqPiBkYXRhWzFdOworCisgICAgc3RhdGljIEhh
c2h0YWJsZSogY3JlYXRlKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6
ZSA+PSAxKTsKKyAgICAgICAgCisgICAgICAgIEhhc2h0YWJsZSogcmVzdWx0ID0gc3RhdGljX2Nh
c3Q8SGFzaHRhYmxlKj4oCisgICAgICAgICAgICBmYXN0WmVyb2VkTWFsbG9jKHNpemVvZihIYXNo
dGFibGUpICsgc2l6ZW9mKEF0b21pYzxCdWNrZXQqPikgKiAoc2l6ZSAtIDEpKSk7CisgICAgICAg
IHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShIYXNodGFibGUqIGhhc2h0YWJsZSkKKyAgICB7CisgICAg
ICAgIGZhc3RGcmVlKGhhc2h0YWJsZSk7CisgICAgfQorfTsKKworVGhyZWFkU3BlY2lmaWM8VGhy
ZWFkRGF0YT4qIHRocmVhZERhdGE7CitBdG9taWM8SGFzaHRhYmxlKj4gaGFzaHRhYmxlOworQXRv
bWljPHVuc2lnbmVkPiBudW1UaHJlYWRzOworCisvLyBXaXRoIDY0IGJ5dGVzIG9mIHBhZGRpbmcg
cGVyIGJ1Y2tldCwgYXNzdW1pbmcgYSBoYXNodGFibGUgaXMgZnVsbHkgcG9wdWxhdGVkIHdpdGgg
YnVja2V0cywgdGhlCisvLyBtZW1vcnkgdXNhZ2UgcGVyIHRocmVhZCB3aWxsIHN0aWxsIGJlIGxl
c3MgdGhhbiAxS0IuCitjb25zdCB1bnNpZ25lZCBtYXhMb2FkRmFjdG9yID0gMzsKKworY29uc3Qg
dW5zaWduZWQgZ3Jvd3RoRmFjdG9yID0gMjsKKwordW5zaWduZWQgaGFzaEFkZHJlc3MoY29uc3Qg
dm9pZCogYWRkcmVzcykKK3sKKyAgICByZXR1cm4gV1RGOjpQdHJIYXNoPGNvbnN0IHZvaWQqPjo6
aGFzaChhZGRyZXNzKTsKK30KKworLy8gTG9ja3MgdGhlIGhhc2h0YWJsZS4gVGhpcyByZWxvb3Bz
IGluIGNhc2Ugb2YgcmVoYXNoaW5nLCBzbyB0aGUgY3VycmVudCBoYXNodGFibGUgbWF5IGJlIGRp
ZmZlcmVudAorLy8gYWZ0ZXIgdGhpcyByZXR1cm5zIHRoYW4gd2hlbiB5b3UgY2FsbGVkIGl0LiBH
dWFyYW50ZWVzIHRoYXQgdGhlcmUgaXMgYSBoYXNodGFibGUuIFRoaXMgaXMgcHJldHR5CisvLyBz
bG93IGFuZCBub3Qgc2NhbGFibGUsIHNvIGl0J3Mgb25seSB1c2VkIGR1cmluZyB0aHJlYWQgY3Jl
YXRpb24gYW5kIGZvciBkZWJ1Z2dpbmcvdGVzdGluZy4KK1ZlY3RvcjxCdWNrZXQqPiBsb2NrSGFz
aHRhYmxlKCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSogY3VycmVudEhh
c2h0YWJsZTsKKworICAgICAgICBjdXJyZW50SGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50SGFzaHRhYmxlKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8g
YmUgdGhlIGZpcnN0IHRvIGNyZWF0ZSB0aGUgaGFzaHRhYmxlLgorICAgICAgICAgICAgY3VycmVu
dEhhc2h0YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG1heExvYWRGYWN0b3IpOworICAgICAgICAg
ICAgaWYgKCFoYXNodGFibGUuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBjdXJyZW50SGFz
aHRhYmxlKSkgeworICAgICAgICAgICAgICAgIEhhc2h0YWJsZTo6ZGVzdHJveShjdXJyZW50SGFz
aHRhYmxlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBjcmVhdGVkIGluaXRpYWwgaGFzaHRhYmxlICIsIFJhd1BvaW50ZXIo
Y3VycmVudEhhc2h0YWJsZSksICJcbiIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBm
aW5kIGFsbCBvZiB0aGUgYnVja2V0cy4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGhhc2h0YWJs
ZSBpcyBmdWxsIG9mIGJ1Y2tldHMgc28gdGhhdAorICAgICAgICAvLyB3ZSBjYW4gbG9jayBhbGwg
b2YgdGhlIGJ1Y2tldHMsIG5vdCBqdXN0IHRoZSBvbmVzIHRoYXQgYXJlIG1hdGVyaWFsaXplZC4K
KyAgICAgICAgVmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHM7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGN1cnJlbnRIYXNodGFibGUtPnNpemU7IGktLTspIHsKKyAgICAgICAgICAgIEF0b21pYzxC
dWNrZXQqPiYgYnVja2V0UG9pbnRlciA9IGN1cnJlbnRIYXNodGFibGUtPmRhdGFbaV07CisKKyAg
ICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IGJ1
Y2tldFBvaW50ZXIubG9hZCgpOworCisgICAgICAgICAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWJ1Y2tldFBvaW50ZXIuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBidWNr
ZXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYnVja2V0OworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBidWNrZXRzLmFwcGVuZChidWNrZXQpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gTm93IGxvY2sgdGhlIGJ1Y2tldHMgaW4gdGhlIHJpZ2h0IG9yZGVyLgorICAgICAgICBzdGQ6
OnNvcnQoYnVja2V0cy5iZWdpbigpLCBidWNrZXRzLmVuZCgpKTsKKyAgICAgICAgZm9yIChCdWNr
ZXQqIGJ1Y2tldCA6IGJ1Y2tldHMpCisgICAgICAgICAgICBidWNrZXQtPmxvY2subG9jaygpOwor
CisgICAgICAgIC8vIElmIHRoZSBoYXNodGFibGUgZGlkbid0IGNoYW5nZSAod2Fzbid0IHJlaGFz
aGVkKSB3aGlsZSB3ZSB3ZXJlIGxvY2tpbmcgaXQsIHRoZW4gd2Ugb3duIGl0CisgICAgICAgIC8v
IG5vdy4KKyAgICAgICAgaWYgKGhhc2h0YWJsZS5sb2FkKCkgPT0gY3VycmVudEhhc2h0YWJsZSkK
KyAgICAgICAgICAgIHJldHVybiBidWNrZXRzOworCisgICAgICAgIC8vIFRoZSBoYXNodGFibGUg
cmVoYXNoZWQuIFVubG9jayBldmVyeXRoaW5nIGFuZCB0cnkgYWdhaW4uCisgICAgICAgIGZvciAo
QnVja2V0KiBidWNrZXQgOiBidWNrZXRzKQorICAgICAgICAgICAgYnVja2V0LT5sb2NrLnVubG9j
aygpOworICAgIH0KK30KKwordm9pZCB1bmxvY2tIYXNodGFibGUoY29uc3QgVmVjdG9yPEJ1Y2tl
dCo+JiBidWNrZXRzKQoreworICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiBidWNrZXRzKQorICAg
ICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7Cit9CisKKy8vIFJlaGFzaCB0aGUgaGFzaHRhYmxl
IHRvIGhhbmRsZSBudW1UaHJlYWRzIHRocmVhZHMuCit2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUo
dW5zaWduZWQgbnVtVGhyZWFkcykKK3sKKyAgICAvLyBXZSB0cnkgdG8gZW5zdXJlIHRoYXQgdGhl
IHNpemUgb2YgdGhlIGhhc2h0YWJsZSB1c2VkIGZvciB0aHJlYWQgcXVldWVzIGlzIGFsd2F5cyBs
YXJnZSBlbm91Z2gKKyAgICAvLyB0byBhdm9pZCBjb2xsaXNpb25zLiBTbywgc2luY2Ugd2Ugc3Rh
cnRlZCBhIG5ldyB0aHJlYWQsIHdlIG1heSBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRo
ZQorICAgIC8vIGhhc2h0YWJsZS4gVGhpcyBkb2VzIGp1c3QgdGhhdC4gTm90ZSB0aGF0IHdlIG5l
dmVyIGZyZWUgdGhlIG9sZCBzcGluZSwgc2luY2Ugd2UgbmV2ZXIgbG9jaworICAgIC8vIGFyb3Vu
ZCBzcGluZSBhY2Nlc3NlcyAoaS5lLiB0aGUgImhhc2h0YWJsZSIgZ2xvYmFsIHZhcmlhYmxlKS4K
KworICAgIC8vIEZpcnN0IGRvIGEgZmFzdCBjaGVjayB0byBzZWUgaWYgcmVoYXNoaW5nIGlzIG5l
ZWRlZC4KKyAgICBIYXNodGFibGUqIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7Cisg
ICAgaWYgKG9sZEhhc2h0YWJsZSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0YWJsZS0+
c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bVRocmVhZHMpID49IG1heExvYWRGYWN0b3Ip
IHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogbm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFi
bGUtPnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlZW1zIGxpa2Ugd2UgKm1pZ2h0
KiBoYXZlIHRvIHJlaGFzaCwgc28gbG9jayB0aGUgaGFzaHRhYmxlIGFuZCB0cnkgYWdhaW4uCisg
ICAgVmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKKwor
ICAgIC8vIENoZWNrIGFnYWluLCBzaW5jZSB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNo
ZWQgd2hpbGUgd2Ugd2VyZSBsb2NraW5nIGl0LiBBbHNvLAorICAgIC8vIGxvY2tIYXNodGFibGUo
KSBjcmVhdGVzIGFuIGluaXRpYWwgaGFzaHRhYmxlIGZvciB1cy4KKyAgICBvbGRIYXNodGFibGUg
PSBoYXNodGFibGUubG9hZCgpOworICAgIGlmIChvbGRIYXNodGFibGUgJiYgc3RhdGljX2Nhc3Q8
ZG91YmxlPihvbGRIYXNodGFibGUtPnNpemUpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihudW1UaHJl
YWRzKSA+PSBtYXhMb2FkRmFjdG9yKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGFmdGVyIGxvY2tpbmcsIG5v
IG5lZWQgdG8gcmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8gIiwgbnVt
VGhyZWFkcywgIiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CisgICAgICAgIHVubG9ja0hh
c2h0YWJsZShidWNrZXRzVG9VbmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
VmVjdG9yPEJ1Y2tldCo+IHJldXNhYmxlQnVja2V0cyA9IGJ1Y2tldHNUb1VubG9jazsKKworICAg
IC8vIE9LLCBub3cgd2UgcmVzaXplLiBGaXJzdCB3ZSBnYXRoZXIgYWxsIHRocmVhZCBkYXRhcyBm
cm9tIHRoZSBvbGQgaGFzaHRhYmxlLiBUaGVzZSB0aHJlYWQgZGF0YXMKKyAgICAvLyBhcmUgcGxh
Y2VkIGludG8gdGhlIHZlY3RvciBpbiBxdWV1ZSBvcmRlci4KKyAgICBWZWN0b3I8VGhyZWFkRGF0
YSo+IHRocmVhZERhdGFzOworICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiByZXVzYWJsZUJ1Y2tl
dHMpIHsKKyAgICAgICAgd2hpbGUgKFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBidWNrZXQtPmRl
cXVldWUoKSkKKyAgICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZCh0aHJlYWREYXRhKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBuZXdTaXplID0gbnVtVGhyZWFkcyAqIGdyb3d0aEZhY3RvciAq
IG1heExvYWRGYWN0b3I7CisgICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IG9sZEhhc2h0YWJs
ZS0+c2l6ZSk7CisgICAgCisgICAgSGFzaHRhYmxlKiBuZXdIYXNodGFibGUgPSBIYXNodGFibGU6
OmNyZWF0ZShuZXdTaXplKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgbmV3IGhhc2h0YWJsZTogIiwgUmF3UG9p
bnRlcihuZXdIYXNodGFibGUpLCAiXG4iKSk7CisgICAgZm9yIChUaHJlYWREYXRhKiB0aHJlYWRE
YXRhIDogdGhyZWFkRGF0YXMpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcmVoYXNoaW5nIHRocmVhZCBkYXRh
ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRl
cih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICB1bnNpZ25lZCBoYXNoID0g
aGFzaEFkZHJlc3ModGhyZWFkRGF0YS0+YWRkcmVzcyk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gaGFzaCAlIG5ld0hhc2h0YWJsZS0+c2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaW5kZXggPSAiLCBp
bmRleCwgIlxuIikpOworICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG5ld0hhc2h0YWJsZS0+ZGF0
YVtpbmRleF0ubG9hZCgpOworICAgICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgaWYg
KHJldXNhYmxlQnVja2V0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3
IEJ1Y2tldCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1Y2tldCA9IHJl
dXNhYmxlQnVja2V0cy50YWtlTGFzdCgpOworICAgICAgICAgICAgbmV3SGFzaHRhYmxlLT5kYXRh
W2luZGV4XS5zdG9yZShidWNrZXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBidWNr
ZXQtPmVucXVldWUodGhyZWFkRGF0YSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9p
bnQgdGhlcmUgbWF5IGJlIHNvbWUgYnVja2V0cyBsZWZ0IHVucmV1c2VkLiBUaGlzIGNvdWxkIGVh
c2lseSBoYXBwZW4gaWYgdGhlCisgICAgLy8gbnVtYmVyIG9mIGVucXVldWVkIHRocmVhZHMgcmln
aHQgbm93IGlzIGxvdyBidXQgdGhlIGhpZ2ggd2F0ZXJtYXJrIG9mIHRoZSBudW1iZXIgb2YgdGhy
ZWFkcworICAgIC8vIGVucXVldWVkIHdhcyBoaWdoLiBXZSBwbGFjZSB0aGVzZSBidWNrZXRzIGlu
dG8gdGhlIGhhc2h0YWJsZSBiYXNpY2FsbHkgYXQgcmFuZG9tLCBqdXN0IHRvCisgICAgLy8gbWFr
ZSBzdXJlIHdlIGRvbid0IGxlYWsgdGhlbS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bmV3SGFzaHRhYmxlLT5zaXplICYmICFyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpOyArK2kpIHsK
KyAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQdHIgPSBuZXdIYXNodGFibGUtPmRhdGFb
aV07CisgICAgICAgIGlmIChidWNrZXRQdHIubG9hZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGJ1Y2tldFB0ci5zdG9yZShyZXVzYWJsZUJ1Y2tldHMudGFrZUxhc3QoKSk7Cisg
ICAgfQorICAgIAorICAgIC8vIFNpbmNlIHdlIGluY3JlYXNlZCB0aGUgc2l6ZSBvZiB0aGUgaGFz
aHRhYmxlLCB3ZSBzaG91bGQgaGF2ZSBleGhhdXN0ZWQgb3VyIHByZWFsbG9jYXRlZAorICAgIC8v
IGJ1Y2tldHMgYnkgbm93LgorICAgIEFTU0VSVChyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpKTsK
KyAgICAKKyAgICAvLyBPSywgcmlnaHQgbm93IHRoZSBvbGQgaGFzaHRhYmxlIGlzIGxvY2tlZCB1
cCBhbmQgdGhlIG5ldyBoYXNodGFibGUgaXMgcmVhZHkgdG8gcm9jayBhbmQKKyAgICAvLyByb2xs
LiBBZnRlciB3ZSBpbnN0YWxsIHRoZSBuZXcgaGFzaHRhYmxlLCB3ZSBjYW4gcmVsZWFzZSBhbGwg
YnVja2V0IGxvY2tzLgorICAgIAorICAgIGJvb2wgcmVzdWx0ID0gaGFzaHRhYmxlLmNvbXBhcmVF
eGNoYW5nZVN0cm9uZyhvbGRIYXNodGFibGUsIG5ld0hhc2h0YWJsZSk7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0KTsKKworICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwor
fQorCitUaHJlYWREYXRhOjpUaHJlYWREYXRhKCkKKyAgICA6IHRocmVhZElkZW50aWZpZXIoY3Vy
cmVudFRocmVhZCgpKQoreworICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOworICAgIGZv
ciAoOzspIHsKKyAgICAgICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVhZHMubG9h
ZCgpOworICAgICAgICBjdXJyZW50TnVtVGhyZWFkcyA9IG9sZE51bVRocmVhZHMgKyAxOworICAg
ICAgICBpZiAobnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMsIGN1
cnJlbnROdW1UaHJlYWRzKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGVuc3Vy
ZUhhc2h0YWJsZVNpemUoY3VycmVudE51bVRocmVhZHMpOworfQorCitUaHJlYWREYXRhOjp+VGhy
ZWFkRGF0YSgpCit7CisgICAgZm9yICg7OykgeworICAgICAgICB1bnNpZ25lZCBvbGROdW1UaHJl
YWRzID0gbnVtVGhyZWFkcy5sb2FkKCk7CisgICAgICAgIGlmIChudW1UaHJlYWRzLmNvbXBhcmVF
eGNoYW5nZVdlYWsob2xkTnVtVGhyZWFkcywgb2xkTnVtVGhyZWFkcyAtIDEpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitUaHJlYWREYXRhKiBteVRocmVhZERhdGEoKQoreworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKKyAgICBzdGQ6OmNhbGxfb25j
ZSgKKyAgICAgICAgaW5pdGlhbGl6ZU9uY2UsCisgICAgICAgIFtdeworICAgICAgICAgICAgdGhy
ZWFkRGF0YSA9IG5ldyBUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPigpOworICAgICAgICB9KTsK
KworICAgIHJldHVybiAqdGhyZWFkRGF0YTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KK2Jvb2wgZW5xdWV1ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQoreworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyhhZGRyZXNzKTsKKworICAg
IGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRhYmxlKiBteUhhc2h0YWJsZSA9IGhhc2h0YWJsZS5s
b2FkKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG15SGFzaHRhYmxlLT5zaXpl
OworICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFBvaW50ZXIgPSBteUhhc2h0YWJsZS0+
ZGF0YVtpbmRleF07CisgICAgICAgIEJ1Y2tldCogYnVja2V0OworICAgICAgICBmb3IgKDs7KSB7
CisgICAgICAgICAgICBidWNrZXQgPSBidWNrZXRQb2ludGVyLmxvYWQoKTsKKyAgICAgICAgICAg
IGlmICghYnVja2V0KSB7CisgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOwor
ICAgICAgICAgICAgICAgIGlmICghYnVja2V0UG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG51
bGxwdHIsIGJ1Y2tldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGJ1Y2tldDsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW5xdWV1
ZWluZyBvbnRvIGJ1Y2tldCAiLCBSYXdQb2ludGVyKGJ1Y2tldCksICIgd2l0aCBpbmRleCAiLCBp
bmRleCwgIiBmb3IgYWRkcmVzcyAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiIHdpdGggaGFzaCAi
LCBoYXNoLCAiXG4iKSk7CisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAg
Ly8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIg
dXMuCisgICAgICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAg
ICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBmdW5jdG9yKCk7Cisg
ICAgICAgIGJvb2wgcmVzdWx0OworICAgICAgICBpZiAodGhyZWFkRGF0YSkgeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50
VGhyZWFkKCksICI6IHByb2NlZWRpbmcgdG8gZW5xdWV1ZSAiLCBSYXdQb2ludGVyKHRocmVhZERh
dGEpLCAiXG4iKSk7CisgICAgICAgICAgICBidWNrZXQtPmVucXVldWUodGhyZWFkRGF0YSk7Cisg
ICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJl
c3VsdCA9IGZhbHNlOworICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorYm9v
bCBkZXF1ZXVlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7
CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVh
ZCgpLCAiOiBkZXF1ZXVlaW5nIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIlxuIikp
OworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyhhZGRyZXNzKTsKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGhhc2gg
PSAiLCBoYXNoLCAiXG4iKSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSog
bXlIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOworICAgICAgICBpZiAoIW15SGFzaHRhYmxl
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbm8gaGFzaHRhYmxlLlxuIikpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFz
aCAlIG15SGFzaHRhYmxlLT5zaXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBpbmRleCA9ICIsIGluZGV4LCAi
XG4iKSk7CisgICAgICAgIEJ1Y2tldCogYnVja2V0ID0gbXlIYXNodGFibGUtPmRhdGFbaW5kZXhd
LmxvYWQoKTsKKyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBu
byBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiLlxuIikpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyBidWNrZXQg
YXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiXG4iKSk7CisgICAgICAgIGJ1Y2tldC0+bG9jay5s
b2NrKCk7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IGxvY2tlZCBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNr
ZXQpLCAiXG4iKSk7CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNv
dWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlmIChoYXNodGFibGUubG9hZCgp
ICE9IG15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaGFzaHRhYmxlIGNoYW5n
ZWQuXG4iKSk7CisgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGZvdW5kIGJ1Y2tldC5cbiIp
KTsKKyAgICAgICAgYnVja2V0LT5nZW5lcmljRGVxdWV1ZShmdW5jdG9yKTsKKyAgICAgICAgYm9v
bCByZXN1bHQgPSAhIWJ1Y2tldC0+cXVldWVIZWFkOworICAgICAgICBidWNrZXQtPmxvY2sudW5s
b2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKworYm9vbCBQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseShjb25zdCB2
b2lkKiBhZGRyZXNzLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFsaWRhdGlvbikKK3sKKyAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IHBhcmtpbmcuXG4iKSk7CisgICAgCisgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEo
KTsKKworICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOworICAgIAorICAgIGJvb2wgcmVzdWx0
ID0gZW5xdWV1ZSgKKyAgICAgICAgYWRkcmVzcywKKyAgICAgICAgWyZdICgpIC0+IFRocmVhZERh
dGEqIHsKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGlvbigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgICAgICBtZS0+YWRkcmVzcyA9IGFkZHJlc3M7CisgICAg
ICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbWU7Cisg
ICAgICAgIH0pOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQo
KSwgIjogcGFya2luZyBzZWxmOiAiLCBSYXdQb2ludGVyKG1lKSwgIlxuIikpOworICAgIHsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2Nr
KTsKKyAgICAgICAgd2hpbGUgKG1lLT5zaG91bGRQYXJrKQorICAgICAgICAgICAgbWUtPnBhcmtp
bmdDb25kaXRpb24ud2FpdChsb2NrZXIpOworCisgICAgICAgIG1lLT5hZGRyZXNzID0gbnVsbHB0
cjsKKyAgICB9CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiB1bnBhcmtlZCBzZWxmOiAiLCBSYXdQb2ludGVyKG1lKSwgIlxuIikp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBhcmtpbmdMb3Q6OnVucGFya09uZShjb25z
dCB2b2lkKiBhZGRyZXNzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIG9uZS5cbiIpKTsKKworICAgIFRo
cmVhZERhdGEqIHRocmVhZERhdGE7CisgICAgYm9vbCByZXN1bHQgPSBkZXF1ZXVlKAorICAgICAg
ICBhZGRyZXNzLAorICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQpIHsKKyAgICAgICAg
ICAgIGlmIChlbGVtZW50LT5hZGRyZXNzICE9IGFkZHJlc3MpCisgICAgICAgICAgICAgICAgcmV0
dXJuIERlcXVldWVSZXN1bHQ6Oklnbm9yZTsKKyAgICAgICAgICAgIHRocmVhZERhdGEgPSBlbGVt
ZW50OworICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A7Cisg
ICAgICAgIH0pOworCisgICAgQVNTRVJUKHRocmVhZERhdGEtPnNob3VsZFBhcmspOworCisgICAg
eworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRh
LT5wYXJraW5nTG9jayk7CisgICAgICAgIHRocmVhZERhdGEtPnNob3VsZFBhcmsgPSBmYWxzZTsK
KyAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQYXJraW5nTG90Ojp1bnBhcmtBbGwo
Y29uc3Qgdm9pZCogYWRkcmVzcykKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBhbGwgZnJvbSAiLCBSYXdQ
b2ludGVyKGFkZHJlc3MpLCAiLlxuIikpOworICAgIAorICAgIFZlY3RvcjxUaHJlYWREYXRhKiwg
OD4gdGhyZWFkRGF0YXM7CisgICAgZGVxdWV1ZSgKKyAgICAgICAgYWRkcmVzcywKKyAgICAgICAg
WyZdIChUaHJlYWREYXRhKiBlbGVtZW50KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogT2JzZXJ2
aW5nIGVsZW1lbnQgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihlbGVtZW50LT5hZGRyZXNz
KSwgIlxuIikpOworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmFkZHJlc3MgIT0gYWRkcmVzcykK
KyAgICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6SWdub3JlOworICAgICAgICAg
ICAgdGhyZWFkRGF0YXMuYXBwZW5kKGVsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIERlcXVl
dWVSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOworICAgICAgICB9KTsKKworICAgIGZvciAoVGhy
ZWFkRGF0YSogdGhyZWFkRGF0YSA6IHRocmVhZERhdGFzKSB7CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFy
a2luZyAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiIHdpdGggYWRkcmVzcyAiLCBSYXdQb2lu
dGVyKHRocmVhZERhdGEtPmFkZHJlc3MpLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVCh0aHJlYWRE
YXRhLT5zaG91bGRQYXJrKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBs
b2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICB0aHJlYWREYXRhLT5zaG91
bGRQYXJrID0gZmFsc2U7CisgICAgICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90
aWZ5X2FsbCgpOworICAgIH0KKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZG9uZSB1bnBhcmtpbmcuXG4iKSk7Cit9CisKK3Zv
aWQgUGFya2luZ0xvdDo6Zm9yRWFjaChzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkSWRlbnRpZmll
ciwgY29uc3Qgdm9pZCopPiBjYWxsYmFjaykKK3sKKyAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0
c1RvVW5sb2NrID0gbG9ja0hhc2h0YWJsZSgpOworCisgICAgSGFzaHRhYmxlKiBjdXJyZW50SGFz
aHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50
SGFzaHRhYmxlLT5zaXplOyBpLS07KSB7CisgICAgICAgIEJ1Y2tldCogYnVja2V0ID0gY3VycmVu
dEhhc2h0YWJsZS0+ZGF0YVtpXS5sb2FkKCk7CisgICAgICAgIGlmICghYnVja2V0KQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGZvciAoVGhyZWFkRGF0YSogY3VycmVudFRocmVhZERh
dGEgPSBidWNrZXQtPnF1ZXVlSGVhZDsgY3VycmVudFRocmVhZERhdGE7IGN1cnJlbnRUaHJlYWRE
YXRhID0gY3VycmVudFRocmVhZERhdGEtPm5leHRJblF1ZXVlKQorICAgICAgICAgICAgY2FsbGJh
Y2soY3VycmVudFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIsIGN1cnJlbnRUaHJlYWREYXRh
LT5hZGRyZXNzKTsKKyAgICB9CisgICAgCisgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1Vu
bG9jayk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Q
YXJraW5nTG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBXVEZfUGFya2luZ0xvdF9oCisjZGVmaW5lIFdURl9QYXJraW5nTG90
X2gKKworI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFBhcmtpbmdMb3QgeworICAgIFBhcmtpbmdMb3QoKSA9IGRlbGV0ZTsKKyAgICBQYXJraW5nTG90
KGNvbnN0IFBhcmtpbmdMb3QmKSA9IGRlbGV0ZTsKKworcHVibGljOgorICAgIC8vIFBhcmtzIHRo
ZSB0aHJlYWQgaW4gYSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdo
aWNoIGNhbm5vdCBiZSBudWxsLiBUaGUKKyAgICAvLyBwYXJraW5nIG9ubHkgc3VjY2VlZHMgaWYg
dGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoaWxlIHRoZSBxdWV1ZSBsb2Nr
IGlzIGhlbGQuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHBhcmtDb25kaXRp
b25hbGx5KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHN0ZDo6ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0
aW9uKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+CisgICAgc3RhdGlj
IGJvb2wgY29tcGFyZUFuZFBhcmsoY29uc3QgQXRvbWljPFQ+KiBhZGRyZXNzLCBVIGV4cGVjdGVk
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhcmtDb25kaXRpb25hbGx5KAorICAgICAgICAgICAg
YWRkcmVzcywKKyAgICAgICAgICAgIFthZGRyZXNzLCBleHBlY3RlZF0gKCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgVSB2YWx1ZSA9IGFkZHJlc3MtPmxvYWQoKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdmFsdWUgPT0gZXhwZWN0ZWQ7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICAvLyBVbnBhcmtzIG9uZSB0aHJlYWQgZnJvbSB0aGUgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRo
ZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4KKyAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgdGhlcmUgbWF5IHN0aWxsIGJlIG90aGVyIHRocmVhZHMgb24gdGhhdCBxdWV1ZSwgb3Ig
ZmFsc2UgaWYgdGhlcmUgZGVmaW5pdGVseQorICAgIC8vIGFyZSBubyBtb3JlIHRocmVhZHMgb24g
dGhlIHF1ZXVlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCB1bnBhcmtPbmUo
Y29uc3Qgdm9pZCogYWRkcmVzcyk7CisKKyAgICAvLyBVbnBhcmtzIGV2ZXJ5IHRocmVhZCBmcm9t
IHRoZSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5v
dCBiZSBudWxsLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB1bnBhcmtBbGwo
Y29uc3Qgdm9pZCogYWRkcmVzcyk7CisKKyAgICAvLyBMb2NrcyB0aGUgcGFya2luZyBsb3QgYW5k
IHdhbGtzIGFsbCBvZiB0aGUgcGFya2VkIHRocmVhZHMgYW5kIHRoZSBhZGRyZXNzZXMgdGhleSBh
cmUgd2FpdGluZworICAgIC8vIG9uLiBUaHJlYWRzIHRoYXQgYXJlIG9uIHRoZSBzYW1lIHF1ZXVl
IGFyZSBndWFyYW50ZWVkIHRvIGJlIHdhbGtlZCBmcm9tIGZpcnN0IHRvIGxhc3QsIGJ1dCB0aGUK
KyAgICAvLyBxdWV1ZXMgbWF5IGJlIHJhbmRvbWx5IGludGVybGVhdmVkLiBGb3IgZXhhbXBsZSwg
aWYgdGhlIHF1ZXVlIGZvciBhZGRyZXNzIEExIGhhcyBUMSBhbmQgVDIgYW5kCisgICAgLy8gdGhl
IHF1ZXVlIGZvciBhZGRyZXNzIEEyIGhhcyBUMyBhbmQgVDQsIHRoZW4geW91IG1pZ2h0IHNlZSBp
dGVyYXRpb24gb3JkZXJzIGxpa2U6CisgICAgLy8KKyAgICAvLyBBMSxUMSBBMSxUMiBBMixUMyBB
MixUNAorICAgIC8vIEEyLFQzIEEyLFQ0IEExLFQxIEExLFQyCisgICAgLy8gQTEsVDEgQTIsVDMg
QTEsVDIgQTIsVDQKKyAgICAvLyBBMSxUMSBBMixUMyBBMixUNCBBMSxUMgorICAgIC8vCisgICAg
Ly8gVGhpcyBtZXRob2QgaXMgdXNlZnVsIHByaW1hcmlseSBmb3IgZGVidWdnaW5nLiBJdCdzIGFs
c28gdXNlZCBieSB1bml0IHRlc3RzLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBmb3JFYWNoKHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lk
Kik+KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlBhcmtpbmdMb3Q7
CisKKyNlbmRpZiAvLyBXVEZfUGFya2luZ0xvdF9oCisKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0xvY2suY3BwCShyZXZpc2lvbiAxODgxMDApCisrKyBUb29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAog
ICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KICNp
bmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRl
IDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgpAQCAtOTQsNyArOTUsNDIgQEAgVEVTVChXVEZf
TG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbgogCiBURVNUKFdURl9Mb2NrLCBNYW55Q29u
dGVudGVkTG9uZ1NlY3Rpb25zKQogewotICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAw
MDAsIDIwMDApOworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAwMDAsIDEwMDApOwor
fQorCitURVNUKFdURl9CeXRlTG9jaywgVW5jb250ZW50ZWRTaG9ydFNlY3Rpb24pCit7CisgICAg
cnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEsIDEsIDEwMDAwMDAwKTsKK30KKworVEVTVChXVEZf
Qnl0ZUxvY2ssIFVuY29udGVudGVkTG9uZ1NlY3Rpb24pCit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0
ZUxvY2s+KDEsIDEsIDEwMDAwLCAxMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIENvbnRl
bnRlZFNob3J0U2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMSwgMTAsIDEs
IDEwMDAwMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIENvbnRlbnRlZExvbmdTZWN0aW9u
KQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKK30K
KworVEVTVChXVEZfQnl0ZUxvY2ssIE1hbnlDb250ZW50ZWRTaG9ydFNlY3Rpb25zKQoreworICAg
IHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxMCwgMTAsIDEsIDUwMDAwMCk7Cit9CisKK1RFU1QoV1RG
X0J5dGVMb2NrLCBNYW55Q29udGVudGVkTG9uZ1NlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0
PEJ5dGVMb2NrPigxMCwgMTAsIDEwMDAwLCAxMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ss
IFNlY3Rpb25BZGRyZXNzQ29sbGlzaW9uKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPig0
LCAyLCAxMDAwMCwgMjAwMCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258588</attachid>
            <date>2015-08-08 20:31:41 -0700</date>
            <delta_ts>2015-08-08 20:42:42 -0700</delta_ts>
            <desc>wrote more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56678</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJ
VExvY2suaAkocmV2aXNpb24gMTg4MDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE0IEBA
CiAjZGVmaW5lIENvbmN1cnJlbnRKSVRMb2NrX2gKIAogI2luY2x1ZGUgIkRlZmVyR0MuaCIKLSNp
bmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAj
aW5jbHVkZSA8d3RmL05vTG9jay5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShD
T05DVVJSRU5UX0pJVCkKLXR5cGVkZWYgQnl0ZVNwaW5Mb2NrIENvbmN1cnJlbnRKSVRMb2NrOwot
dHlwZWRlZiBCeXRlU3BpbkxvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKK3R5cGVkZWYg
Qnl0ZUxvY2sgQ29uY3VycmVudEpJVExvY2s7Cit0eXBlZGVmIEJ5dGVMb2NrZXIgQ29uY3VycmVu
dEpJVExvY2tlckltcGw7CiAjZWxzZQogdHlwZWRlZiBOb0xvY2sgQ29uY3VycmVudEpJVExvY2s7
CiB0eXBlZGVmIE5vTG9ja0xvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg4MTAwKQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjQsNiArMjQsMTAgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZC
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CisJCTBGODI0
QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0
ZUxvY2suY3BwICovOyB9OworCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTYz
MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OworCQkwRjgyNEE2ODFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi87IH07CisJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsg
fTsKIAkJMEY4ODVFMEYxODQ1QUVBOTAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMEUxODQ1QUU5
RjAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjhGMkI5MTE3MkUwMEZD
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxh
dGlvblRocmVhZC5oICovOyB9OwpAQCAtMzA3LDYgKzMxMSwxMCBAQAogCQkwRjJCNjZBNDE3QjZC
NEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2
QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZE
NzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZUxvY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVE
IC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODI0QTY1MUI3
NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEw
NTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTcxNiw2ICs3MjQsOCBAQAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAv
KiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29t
RmlsdGVyLmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVy
QWxsb2NhdG9yLmggKi8sCisJCQkJMEY4MjRBNjIxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2Nr
LmNwcCAqLywKKwkJCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLywK
IAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJMEZF
QzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovLAogCQkJCUE4QTQ3MjZB
MTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLApAQCAtODEwLDYgKzgy
MCw4IEBACiAJCQkJQThBNDcyRTUxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VSZXNlcnZhdGlvbi5o
ICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnMuaCAqLywK
IAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2gu
aCAqLywKKwkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8s
CisJCQkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLywKIAkJCQlB
OEE0NzJFRDE1MUE4MjVCMDA0MTIzRkYgLyogUGFzc1JlZlB0ci5oICovLAogCQkJCUE4NzZEQkQ3
MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTBGOUQzMzVEMTY1REJBNzMw
MDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCkBAIC0xMTU2LDYgKzExNjgsNyBAQAogCQkJ
CUE4QTQ3NDE1MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDE2MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJTZWVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY4MjRBNjcxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2Nr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxNzE1MUE4MjVCMDA0MTIzRkYgLyogUmVkQmxh
Y2tUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxODE1MUE4MjVCMDA0MTIzRkYgLyog
UmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTkxNTFBODI1QjAwNDEyM0ZG
IC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY3LDYgKzExODAsNyBA
QAogCQkJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RjNCMEY3MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1l
dGljLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDY5NDE5NjE2RUFBRkY4MDAyNEUxNDYgLyogU2No
ZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgyNEE2OTFCNzQ0M0EwMDAyRTM0NUQg
LyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MUYxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0MjIxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCBpbiBIZWFkZXJzICovLApAQCAtMTMy
NSw2ICsxMzM5LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCUE4QTQ3Mzg2MTUxQTgyNUIwMDQxMjNG
RiAvKiBBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDM1MTUxQTgyNUIw
MDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4MjRBNjYx
Qjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCQzcw
RjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ2OTQxOUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbE1h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTM0MCw2ICsxMzU1LDcgQEAKIAkJCQlBOEE0NzM5QTE1
MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0MzkxNTFBODI1QjAwNDEyM0ZGIC8qIENTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUMxNTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1l
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RjQ2RjYwMUEyODQwRUUwMENDQkYyMiAv
KiBSZWZDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzlFMTUxQTgyNUIwMDQx
MjNGRiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EwMTUxQTgyNUIw
MDQxMjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYv
YmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL2Jl
bmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDE4ODEwMCkKKysrIFNvdXJjZS9X
VEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KQEAgLTQzLDcgKzQ0
LDcgQEAgdW5zaWduZWQgbnVtSXRlcmF0aW9uczsKICAgICAKIHZvaWQgdXNhZ2UoKQogewotICAg
IHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xtdXRleHxhbGwgPG51
bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29yayBwZXIgY3JpdGlj
YWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+XG4iKTsKKyAg
ICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0ZWxvY2t8bXV0
ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91cD4gPHdvcmsg
cGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBpdGVyYXRpb25z
PlxuIik7CiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTI1LDYgKzEyNiwxMCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxMb2NrPigiV1RGIExv
Y2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKCFzdHJjbXAoYXJn
dlsxXSwgImJ5dGVsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAg
cnVuQmVuY2htYXJrPEJ5dGVMb2NrPigiV1RGIEJ5dGVMb2NrIik7CisgICAgICAgIGRpZFJ1biA9
IHRydWU7CisgICAgfQogICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRleCIpIHx8ICFzdHJj
bXAoYXJndlsxXSwgImFsbCIpKSB7CiAgICAgICAgIHJ1bkJlbmNobWFyazxNdXRleD4oIlBsYXRm
b3JtIE11dGV4Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZp
c2lvbiAxODgwOTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDEyICs5MSwxOCBAQCBzdHJ1Y3QgQXRvbWljIHsKIAogICAgIGJvb2wgY29tcGFyZUV4
Y2hhbmdlV2VhayhUIGV4cGVjdGVkLCBUIGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAg
ICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0OworI2VuZGlmCiAgICAgICAg
IFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVkOwogICAgICAgICByZXR1cm4gdmFsdWUuY29t
cGFyZV9leGNoYW5nZV93ZWFrKGV4cGVjdGVkT3JBY3R1YWwsIGRlc2lyZWQsIG9yZGVyKTsKICAg
ICB9CiAKICAgICBib29sIGNvbXBhcmVFeGNoYW5nZVN0cm9uZyhUIGV4cGVjdGVkLCBUIGRlc2ly
ZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkK
ICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRl
cl9zZXFfY3N0OworI2VuZGlmCiAgICAgICAgIFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVk
OwogICAgICAgICByZXR1cm4gdmFsdWUuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0ZWRP
ckFjdHVhbCwgZGVzaXJlZCwgb3JkZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J5
dGVMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5dGVMb2NrLmgiCisKKyNp
bmNsdWRlICJQYXJraW5nTG90LmgiCisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgV1RG
IHsKKworc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCit2b2lkIEJ5dGVMb2NrOjpsb2Nr
U2xvdygpCit7CisgICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKKworICAgIC8vIFRoaXMgbWFn
aWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0g
ZXhwZXJpbWVudHMuCisgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisg
ICAgZm9yICg7OykgeworICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUu
bG9hZCgpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwg
IlxuIikpOworCisgICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICYm
IG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2Ug
Y2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgorICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZh
bHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAg
ICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBw
YXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVu
IHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdh
c24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgorICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQ
YXJrZWRCaXQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGV4
cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3Mg
dGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFy
aygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworCisgICAgICAgIC8vIFdlIGhh
dmUgYXdha2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFu
Z2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWlu
LgorICAgIH0KK30KKwordm9pZCBCeXRlTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAgLy8gUmVs
ZWFzZSB0aGUgbG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtlZC4gTm90
ZSB0aGF0IGFzIHNvb24gYXMgd2UgZG8gdGhpcywKKyAgICAvLyBzb21lb25lIG1pZ2h0IGJhcmdl
IGluLgorICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOworICAgIGZvciAoOzspIHsKKyAgICAgICAg
b2xkQnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5sb2NraW5nIHdp
dGggIiwgb2xkQnl0ZVZhbHVlLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUg
JiBpc0hlbGRCaXQpOworICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xk
Qnl0ZVZhbHVlLCAwKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE5vdGUg
dGhhdCBzb21lb25lIGNvdWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5z
LCB0aGV5IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5CisgICAgLy8gYmVjYXVzZSBvdXIgcGFya2lu
ZyBwcmVkaWNhdGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0LCBi
dXQgd2UndmUgYWxyZWFkeSBzZXQKKyAgICAvLyBtX2J5dGUgPSAwLgorCisgICAgLy8gSWYgdGhl
cmUgaGFkIGJlZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVz
ZXMgYSB0aHVuZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQorICAgIC8vIHRoYXQgaXMgdGhlb3JldGlj
YWxseSBzY2FyeSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxs
eSBkb24ndCBoYXZlIGVub3VnaAorICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgor
ICAgIGlmIChvbGRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgIFBhcmtpbmdMb3Q6
OnVucGFya0FsbCgmbV9ieXRlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0
ZUxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeXRlTG9ja19oCisjZGVmaW5lIEJ5dGVMb2NrX2gK
KworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBp
cyBsaWtlIExvY2ssIGJ1dCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBpbnN0ZWFkIG9mIHNpemVvZih2
b2lkKikgc3RvcmFnZS4gVGhlIGRvd25zaWRlIGlzIHRoYXQKKy8vIGl0IGlzIHNsb3dlciBvbiB0
aGUgc2xvdyBwYXRoIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24gaW52b2x2aW5nIG1hbnkgdGhyZWFk
cyBiZWNhdXNlIGl0IGlzCisvLyBzdXNjZXB0aWJsZSB0byB0aGUgInRodW5kZXJpbmcgaGVyZCIg
cHJvYmxlbTogaXQgZG9lc24ndCBoYXZlIGVub3VnaCBzdGF0ZSB0byB0cmFjayBob3cgbWFueQor
Ly8gdGhyZWFkcyBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2ssIHNvIHdoZW4gdW5sb2NrIGRldGVj
dHMgdGhhdCBhbnkgdGhyZWFkIGlzIHdhaXRpbmcsIHRoZW4gaXQgd2FrZXMKKy8vIGFsbCBvZiB0
aGUgd2FpdGluZyB0aHJlYWRzLiBBbGwgb2YgdGhvc2UgdGhyZWFkcyB3aWxsIHBpbGUgb250byB0
aGUgbG9jazsgb25lIHdpbGwgc3VjY2VlZCBhbmQgdGFrZQorLy8gaXQgd2hpbGUgdGhlIG90aGVy
cyB3aWxsIGdvIGJhY2sgdG8gc2xlZXAuIFRoZSBzbG93LWRvd24gaXMgc21hbGwuIFRlbiB0aHJl
YWRzIHJlcGVhdGVkbHkKKy8vIGNvbnRlbmRpbmcgZm9yIHRoZSBzYW1lIH4xLTEwdXMgbG9uZyBj
cml0aWNhbCBzZWN0aW9uIHdpbGwgcnVuIDclIHNsb3dlciBvbiBteSBtYWNoaW5lLiBJZiBJIG1l
c3MKKy8vIHdpdGggYW55IG9mIHRoZSBwYXJhbWV0ZXJzIC0gY2hhbmdlIHRoZSBudW1iZXIgb2Yg
dGhyZWFkcyBvciBjaGFuZ2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gZHVyYXRpb24gLQorLy8gdGhl
biBCeXRlTG9jayByZWFjaGVzIHBhcml0eSB3aXRoIExvY2ssIGFuZCBzb21ldGltZXMgb3V0cGVy
Zm9ybXMgaXQuIFBlcmhhcHMgbW9zdCBzdXJwcmlzaW5nbHksCisvLyB0aGUgc2xvdy1kb3duIGdv
ZXMgYXdheSBldmVuIHdoZW4geW91IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4gQnl0
ZUxvY2sgYXBwZWFycyB0byBzb21ldGltZXMKKy8vIGJlIGZhc3RlciB1bmRlciBtaWNyb2NvbnRl
bnRpb24sIHBlcmhhcHMgYmVjYXVzZSBhIGNvbnRlbnRpb3VzIDgtYml0IENBUyBpcyBjaGVhcGVy
IHRoYW4gYQorLy8gY29udGVudGlvdXMgNjQtYml0IENBUy4gTm90ZSB0aGF0IHVuY29udGVuZGVk
IGxvY2tpbmcgaXMgZXF1YWxseSBmYXN0IHdpdGggQnl0ZUxvY2sgYXMgd2l0aCBMb2NrLgorLy8g
SW4gYWxsLCBMb2NrIGFuZCBCeXRlTG9jayBoYXZlIHNpbWlsYXIgcGVyZm9ybWFuY2UgdW5kZXIg
Y29udHJvbGxlZCBtaWNyb2JlbmNobWFya3MsIGJ1dCBMb2NrIGlzCisvLyB0aGVvcmV0aWNhbGx5
IHNhZmVyIGJlY2F1c2Ugb2YgdGhlIHRodW5kZXJpbmcgaGVyZCBpc3N1ZS4gSXQncyBwcm9iYWJs
eSBiZXN0IHRvIHVzZSBCeXRlTG9jayBvbmx5CisvLyB3aGVuIHlvdSByZWFsbHkgY2FyZSBhYm91
dCBzcGFjZSBhbmQgeW91IGRvbid0IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhhdCBhIGxhcmdl
IG51bWJlciBvZgorLy8gdGhyZWFkcyB3b3VsZCBldmVyIHBpbGUgb250byB0aGUgc2FtZSBsb2Nr
LgorY2xhc3MgQnl0ZUxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVMb2NrKTsK
K3B1YmxpYzoKKyAgICBCeXRlTG9jaygpCisgICAgeworICAgICAgICBtX2J5dGUuc3RvcmUoMCwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygp
CisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAs
IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAv
LyBMb2NrIGFjcXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgbG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAg
ICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2Vk
IGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50
OF90IGhhc1BhcmtlZEJpdCA9IDI7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2Nr
U2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKKworICAg
IEF0b21pYzx1aW50OF90PiBtX2J5dGU7Cit9OworCit0eXBlZGVmIExvY2tlcjxCeXRlTG9jaz4g
Qnl0ZUxvY2tlcjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qnl0ZUxvY2s7
Cit1c2luZyBXVEY6OkJ5dGVMb2NrZXI7CisKKyNlbmRpZiAvLyBCeXRlTG9ja19oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL1BhcmtpbmdMb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvUGFya2lu
Z0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlBhcmtpbmdMb3QuaCIKKworI2luY2x1ZGUgIkhhc2hGdW5jdGlvbnMuaCIKKyNpbmNs
dWRlICJMb2NrLmgiCisjaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJU
aHJlYWRTcGVjaWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKKyNpbmNs
dWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKK25h
bWVzcGFjZSBXVEYgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKwor
c3RydWN0IFRocmVhZERhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIAorICAgIFRocmVhZERhdGEoKTsKKyAgICB+VGhyZWFkRGF0YSgpOworCisgICAgVGhy
ZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyOworICAgIAorICAgIGJvb2wgc2hvdWxkUGFy
ayB7IGZhbHNlIH07CisgICAgc3RkOjptdXRleCBwYXJraW5nTG9jazsKKyAgICBzdGQ6OmNvbmRp
dGlvbl92YXJpYWJsZSBwYXJraW5nQ29uZGl0aW9uOworCisgICAgY29uc3Qgdm9pZCogYWRkcmVz
czsKKyAgICBUaHJlYWREYXRhKiBuZXh0SW5RdWV1ZSB7IG51bGxwdHIgfTsKK307CisKK2VudW0g
Y2xhc3MgRGVxdWV1ZVJlc3VsdCB7CisgICAgSWdub3JlLAorICAgIFJlbW92ZUFuZENvbnRpbnVl
LAorICAgIFJlbW92ZUFuZFN0b3AKK307CisKK3N0cnVjdCBCdWNrZXQgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHZvaWQgZW5xdWV1ZShUaHJlYWREYXRhKiBk
YXRhKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW5xdWV1ZWluZyAiLCBSYXdQb2ludGVyKGRhdGEp
LCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIoZGF0YS0+YWRkcmVzcyksICIgb250byAi
LCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVChkYXRhLT5hZGRyZXNz
KTsKKyAgICAgICAgQVNTRVJUKCFkYXRhLT5uZXh0SW5RdWV1ZSk7CisgICAgICAgIAorICAgICAg
ICBpZiAocXVldWVUYWlsKSB7CisgICAgICAgICAgICBxdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0g
ZGF0YTsKKyAgICAgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBxdWV1ZUhlYWQgPSBkYXRhOworICAgICAgICBxdWV1ZVRh
aWwgPSBkYXRhOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBnZW5lcmljRGVxdWV1ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogZGVxdWV1ZWluZyBmcm9tIGJ1Y2tldCBhdCAiLCBSYXdQb2ludGVyKHRoaXMpLCAi
XG4iKSk7CisgICAgICAgIAorICAgICAgICBpZiAoIXF1ZXVlSGVhZCkgeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhy
ZWFkKCksICI6IGVtcHR5LlxuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgLy8gVGhpcyBsb29wIGlzIGEgdmVyeSBjbGV2ZXIgYWJvbWluYXRpb24uIFRoZSBp
bmR1Y3Rpb24gdmFyaWFibGVzIGFyZSB0aGUgcG9pbnRlciB0byB0aGUKKyAgICAgICAgLy8gcG9p
bnRlciB0byB0aGUgY3VycmVudCBub2RlLCBhbmQgdGhlIHBvaW50ZXIgdG8gdGhlIHByZXZpb3Vz
IG5vZGUuIFRoaXMgZ2l2ZXMgdXMgZXZlcnl0aGluZworICAgICAgICAvLyB3ZSBuZWVkIHRvIGJv
dGggcHJvY2VlZCBmb3J3YXJkIHRvIHRoZSBuZXh0IG5vZGUsIGFuZCB0byByZW1vdmUgbm9kZXMg
d2hpbGUgbWFpbnRhaW5pbmcgdGhlCisgICAgICAgIC8vIHF1ZXVlSGVhZC9xdWV1ZVRhaWwgYW5k
IGFsbCBvZiB0aGUgbmV4dEluUXVldWUgbGlua3MuIEZvciBleGFtcGxlLCB3aGVuIHdlIGFyZSBh
dCB0aGUgaGVhZAorICAgICAgICAvLyBlbGVtZW50LCB0aGVuIHJlbW92YWwgbWVhbnMgcmV3aXJp
bmcgcXVldWVIZWFkLCBhbmQgaWYgaXQgd2FzIGFsc28gZXF1YWwgdG8gcXVldWVUYWlsLCB0aGVu
CisgICAgICAgIC8vIHdlJ2Qgd2FudCBxdWV1ZVRhaWwgdG8gYmUgc2V0IHRvIG51bGxwdHIuIFRo
aXMgd29ya3MgYmVjYXVzZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIGN1cnJlbnRQdHIg
PT0gJnF1ZXVlSGVhZAorICAgICAgICAvLyAgICAgcHJldmlvdXMgPT0gbnVsbHB0cgorICAgICAg
ICAvLworICAgICAgICAvLyBXZSByZW1vdmUgYnkgc2V0dGluZyAqY3VycmVudFB0ciA9ICgqY3Vy
cmVudFB0ciktPm5leHRJblF1ZXVlLCBpLmUuIGNoYW5naW5nIHRoZSBwb2ludGVyCisgICAgICAg
IC8vIHRoYXQgdXNlZCB0byBwb2ludCB0byB0aGlzIG5vZGUgdG8gaW5zdGVhZCBwb2ludCB0byB0
aGlzIG5vZGUncyBzdWNjZXNzb3IuIEFub3RoZXIgZXhhbXBsZToKKyAgICAgICAgLy8gaWYgd2Ug
d2VyZSBhdCB0aGUgc2Vjb25kIG5vZGUgaW4gdGhlIHF1ZXVlLCB0aGVuIHdlJ2QgaGF2ZToKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAgIGN1cnJlbnRQdHIgPT0gJnF1ZXVlSGVhZC0+bmV4dElu
UXVldWUKKyAgICAgICAgLy8gICAgIHByZXZpb3VzID09IHF1ZXVlSGVhZAorICAgICAgICAvLwor
ICAgICAgICAvLyBJZiB0aGlzIG5vZGUgaXMgbm90IGVxdWFsIHRvIHF1ZXVlVGFpbCwgdGhlbiBy
ZW1vdmluZyBpdCBzaW1wbHkgbWVhbnMgbWFraW5nCisgICAgICAgIC8vIHF1ZXVlSGVhZC0+bmV4
dEluUXVldWUgcG9pbnQgdG8gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZS0+bmV4dEluUXVldWUgKHdo
aWNoIHRoZSBhbGdvcml0aG0KKyAgICAgICAgLy8gYWNoaWV2ZXMgYnkgbXV0YXRpbmcgKmN1cnJl
bnRQdHIpLiBJZiB0aGlzIG5vZGUgaXMgZXF1YWwgdG8gcXVldWVUYWlsLCB0aGVuIHdlIHdhbnQg
dG8gc2V0CisgICAgICAgIC8vIHF1ZXVlVGFpbCB0byBwcmV2aW91cywgd2hpY2ggaW4gdGhpcyBj
YXNlIGlzIHF1ZXVlSGVhZCAtIHRodXMgbWFraW5nIHRoZSBxdWV1ZSBsb29rIGxpa2UgYQorICAg
ICAgICAvLyBwcm9wZXIgb25lLWVsZW1lbnQgcXVldWUgd2l0aCBxdWV1ZUhlYWQgPT0gcXVldWVU
YWlsLgorICAgICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKKyAgICAgICAgVGhyZWFk
RGF0YSoqIGN1cnJlbnRQdHIgPSAmcXVldWVIZWFkOworICAgICAgICBUaHJlYWREYXRhKiBwcmV2
aW91cyA9IG51bGxwdHI7CisgICAgICAgIHdoaWxlIChzaG91bGRDb250aW51ZSkgeworICAgICAg
ICAgICAgVGhyZWFkRGF0YSogY3VycmVudCA9ICpjdXJyZW50UHRyOworICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IGdvdCB0aHJlYWQgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIlxuIikpOworICAgICAg
ICAgICAgaWYgKCFjdXJyZW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
RGVxdWV1ZVJlc3VsdCByZXN1bHQgPSBmdW5jdG9yKGN1cnJlbnQpOworICAgICAgICAgICAgc3dp
dGNoIChyZXN1bHQpIHsKKyAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6SWdub3JlOgor
ICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogY3VycmVudFB0ciA9ICIsIFJhd1BvaW50ZXIo
Y3VycmVudFB0ciksICIsICpjdXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcigqY3VycmVudFB0ciks
ICJcbiIpKTsKKyAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgICAg
ICAgICAgY3VycmVudFB0ciA9ICYoKmN1cnJlbnRQdHIpLT5uZXh0SW5RdWV1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5k
Q29udGludWU6CisgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A6
CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nICIsIFJhd1BvaW50ZXIo
Y3VycmVudCksICIgZnJvbSAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgICAg
ICAgICAgaWYgKGN1cnJlbnQgPT0gcXVldWVUYWlsKQorICAgICAgICAgICAgICAgICAgICBxdWV1
ZVRhaWwgPSBwcmV2aW91czsKKyAgICAgICAgICAgICAgICAqY3VycmVudFB0ciA9IGN1cnJlbnQt
Pm5leHRJblF1ZXVlOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHRJblF1ZXVlID0gbnVs
bHB0cjsKKyAgICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IERlcXVldWVSZXN1bHQ6OlJlbW92
ZUFuZFN0b3ApCisgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBBU1NFUlQoISFxdWV1ZUhlYWQgPT0gISFxdWV1ZVRhaWwpOworICAgIH0KKyAgICAKKyAgICBU
aHJlYWREYXRhKiBkZXF1ZXVlKCkKKyAgICB7CisgICAgICAgIFRocmVhZERhdGEqIHJlc3VsdCA9
IG51bGxwdHI7CisgICAgICAgIGdlbmVyaWNEZXF1ZXVlKAorICAgICAgICAgICAgWyZdIChUaHJl
YWREYXRhKiBlbGVtZW50KSAtPiBEZXF1ZXVlUmVzdWx0IHsKKyAgICAgICAgICAgICAgICByZXN1
bHQgPSBlbGVtZW50OworICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1v
dmVBbmRTdG9wOworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgVGhyZWFkRGF0YSogcXVldWVIZWFkIHsgbnVsbHB0ciB9OworICAgIFRocmVhZERh
dGEqIHF1ZXVlVGFpbCB7IG51bGxwdHIgfTsKKworICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyB0
aGUgZW50aXJlIGJ1Y2tldC4gVGhvdSBzaGFsbCBub3QgbWFrZSBjaGFuZ2VzIHRvIEJ1Y2tldCB3
aXRob3V0IGhvbGRpbmcKKyAgICAvLyB0aGlzIGxvY2suCisgICAgTG9jayBsb2NrOworCisgICAg
Ly8gUHV0IHNvbWUgZGlzdGFuZSBiZXR3ZWVuIGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9u
ZSBvZiBzZXZlcmFsIG1pdGlnYXRpb25zIGFnYWluc3QgZmFsc2UKKyAgICAvLyBzaGFyaW5nLgor
ICAgIGNoYXIgcGFkZGluZ1s2NF07Cit9OworCitzdHJ1Y3QgSGFzaHRhYmxlIHsKKyAgICB1bnNp
Z25lZCBzaXplOworICAgIEF0b21pYzxCdWNrZXQqPiBkYXRhWzFdOworCisgICAgc3RhdGljIEhh
c2h0YWJsZSogY3JlYXRlKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6
ZSA+PSAxKTsKKyAgICAgICAgCisgICAgICAgIEhhc2h0YWJsZSogcmVzdWx0ID0gc3RhdGljX2Nh
c3Q8SGFzaHRhYmxlKj4oCisgICAgICAgICAgICBmYXN0WmVyb2VkTWFsbG9jKHNpemVvZihIYXNo
dGFibGUpICsgc2l6ZW9mKEF0b21pYzxCdWNrZXQqPikgKiAoc2l6ZSAtIDEpKSk7CisgICAgICAg
IHJlc3VsdC0+c2l6ZSA9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIHZvaWQgZGVzdHJveShIYXNodGFibGUqIGhhc2h0YWJsZSkKKyAgICB7CisgICAg
ICAgIGZhc3RGcmVlKGhhc2h0YWJsZSk7CisgICAgfQorfTsKKworVGhyZWFkU3BlY2lmaWM8VGhy
ZWFkRGF0YT4qIHRocmVhZERhdGE7CitBdG9taWM8SGFzaHRhYmxlKj4gaGFzaHRhYmxlOworQXRv
bWljPHVuc2lnbmVkPiBudW1UaHJlYWRzOworCisvLyBXaXRoIDY0IGJ5dGVzIG9mIHBhZGRpbmcg
cGVyIGJ1Y2tldCwgYXNzdW1pbmcgYSBoYXNodGFibGUgaXMgZnVsbHkgcG9wdWxhdGVkIHdpdGgg
YnVja2V0cywgdGhlCisvLyBtZW1vcnkgdXNhZ2UgcGVyIHRocmVhZCB3aWxsIHN0aWxsIGJlIGxl
c3MgdGhhbiAxS0IuCitjb25zdCB1bnNpZ25lZCBtYXhMb2FkRmFjdG9yID0gMzsKKworY29uc3Qg
dW5zaWduZWQgZ3Jvd3RoRmFjdG9yID0gMjsKKwordW5zaWduZWQgaGFzaEFkZHJlc3MoY29uc3Qg
dm9pZCogYWRkcmVzcykKK3sKKyAgICByZXR1cm4gV1RGOjpQdHJIYXNoPGNvbnN0IHZvaWQqPjo6
aGFzaChhZGRyZXNzKTsKK30KKworLy8gTG9ja3MgdGhlIGhhc2h0YWJsZS4gVGhpcyByZWxvb3Bz
IGluIGNhc2Ugb2YgcmVoYXNoaW5nLCBzbyB0aGUgY3VycmVudCBoYXNodGFibGUgbWF5IGJlIGRp
ZmZlcmVudAorLy8gYWZ0ZXIgdGhpcyByZXR1cm5zIHRoYW4gd2hlbiB5b3UgY2FsbGVkIGl0LiBH
dWFyYW50ZWVzIHRoYXQgdGhlcmUgaXMgYSBoYXNodGFibGUuIFRoaXMgaXMgcHJldHR5CisvLyBz
bG93IGFuZCBub3Qgc2NhbGFibGUsIHNvIGl0J3Mgb25seSB1c2VkIGR1cmluZyB0aHJlYWQgY3Jl
YXRpb24gYW5kIGZvciBkZWJ1Z2dpbmcvdGVzdGluZy4KK1ZlY3RvcjxCdWNrZXQqPiBsb2NrSGFz
aHRhYmxlKCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSogY3VycmVudEhh
c2h0YWJsZTsKKworICAgICAgICBjdXJyZW50SGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsK
KyAgICAgICAgaWYgKCFjdXJyZW50SGFzaHRhYmxlKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8g
YmUgdGhlIGZpcnN0IHRvIGNyZWF0ZSB0aGUgaGFzaHRhYmxlLgorICAgICAgICAgICAgY3VycmVu
dEhhc2h0YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG1heExvYWRGYWN0b3IpOworICAgICAgICAg
ICAgaWYgKCFoYXNodGFibGUuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBjdXJyZW50SGFz
aHRhYmxlKSkgeworICAgICAgICAgICAgICAgIEhhc2h0YWJsZTo6ZGVzdHJveShjdXJyZW50SGFz
aHRhYmxlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBjcmVhdGVkIGluaXRpYWwgaGFzaHRhYmxlICIsIFJhd1BvaW50ZXIo
Y3VycmVudEhhc2h0YWJsZSksICJcbiIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBm
aW5kIGFsbCBvZiB0aGUgYnVja2V0cy4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGhhc2h0YWJs
ZSBpcyBmdWxsIG9mIGJ1Y2tldHMgc28gdGhhdAorICAgICAgICAvLyB3ZSBjYW4gbG9jayBhbGwg
b2YgdGhlIGJ1Y2tldHMsIG5vdCBqdXN0IHRoZSBvbmVzIHRoYXQgYXJlIG1hdGVyaWFsaXplZC4K
KyAgICAgICAgVmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHM7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGN1cnJlbnRIYXNodGFibGUtPnNpemU7IGktLTspIHsKKyAgICAgICAgICAgIEF0b21pYzxC
dWNrZXQqPiYgYnVja2V0UG9pbnRlciA9IGN1cnJlbnRIYXNodGFibGUtPmRhdGFbaV07CisKKyAg
ICAgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IGJ1
Y2tldFBvaW50ZXIubG9hZCgpOworCisgICAgICAgICAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWJ1Y2tldFBvaW50ZXIuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBidWNr
ZXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYnVja2V0OworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBidWNrZXRzLmFwcGVuZChidWNrZXQpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
Ly8gTm93IGxvY2sgdGhlIGJ1Y2tldHMgaW4gdGhlIHJpZ2h0IG9yZGVyLgorICAgICAgICBzdGQ6
OnNvcnQoYnVja2V0cy5iZWdpbigpLCBidWNrZXRzLmVuZCgpKTsKKyAgICAgICAgZm9yIChCdWNr
ZXQqIGJ1Y2tldCA6IGJ1Y2tldHMpCisgICAgICAgICAgICBidWNrZXQtPmxvY2subG9jaygpOwor
CisgICAgICAgIC8vIElmIHRoZSBoYXNodGFibGUgZGlkbid0IGNoYW5nZSAod2Fzbid0IHJlaGFz
aGVkKSB3aGlsZSB3ZSB3ZXJlIGxvY2tpbmcgaXQsIHRoZW4gd2Ugb3duIGl0CisgICAgICAgIC8v
IG5vdy4KKyAgICAgICAgaWYgKGhhc2h0YWJsZS5sb2FkKCkgPT0gY3VycmVudEhhc2h0YWJsZSkK
KyAgICAgICAgICAgIHJldHVybiBidWNrZXRzOworCisgICAgICAgIC8vIFRoZSBoYXNodGFibGUg
cmVoYXNoZWQuIFVubG9jayBldmVyeXRoaW5nIGFuZCB0cnkgYWdhaW4uCisgICAgICAgIGZvciAo
QnVja2V0KiBidWNrZXQgOiBidWNrZXRzKQorICAgICAgICAgICAgYnVja2V0LT5sb2NrLnVubG9j
aygpOworICAgIH0KK30KKwordm9pZCB1bmxvY2tIYXNodGFibGUoY29uc3QgVmVjdG9yPEJ1Y2tl
dCo+JiBidWNrZXRzKQoreworICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiBidWNrZXRzKQorICAg
ICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7Cit9CisKKy8vIFJlaGFzaCB0aGUgaGFzaHRhYmxl
IHRvIGhhbmRsZSBudW1UaHJlYWRzIHRocmVhZHMuCit2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUo
dW5zaWduZWQgbnVtVGhyZWFkcykKK3sKKyAgICAvLyBXZSB0cnkgdG8gZW5zdXJlIHRoYXQgdGhl
IHNpemUgb2YgdGhlIGhhc2h0YWJsZSB1c2VkIGZvciB0aHJlYWQgcXVldWVzIGlzIGFsd2F5cyBs
YXJnZSBlbm91Z2gKKyAgICAvLyB0byBhdm9pZCBjb2xsaXNpb25zLiBTbywgc2luY2Ugd2Ugc3Rh
cnRlZCBhIG5ldyB0aHJlYWQsIHdlIG1heSBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRo
ZQorICAgIC8vIGhhc2h0YWJsZS4gVGhpcyBkb2VzIGp1c3QgdGhhdC4gTm90ZSB0aGF0IHdlIG5l
dmVyIGZyZWUgdGhlIG9sZCBzcGluZSwgc2luY2Ugd2UgbmV2ZXIgbG9jaworICAgIC8vIGFyb3Vu
ZCBzcGluZSBhY2Nlc3NlcyAoaS5lLiB0aGUgImhhc2h0YWJsZSIgZ2xvYmFsIHZhcmlhYmxlKS4K
KworICAgIC8vIEZpcnN0IGRvIGEgZmFzdCBjaGVjayB0byBzZWUgaWYgcmVoYXNoaW5nIGlzIG5l
ZWRlZC4KKyAgICBIYXNodGFibGUqIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7Cisg
ICAgaWYgKG9sZEhhc2h0YWJsZSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0YWJsZS0+
c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bVRocmVhZHMpID49IG1heExvYWRGYWN0b3Ip
IHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogbm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFi
bGUtPnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlZW1zIGxpa2Ugd2UgKm1pZ2h0
KiBoYXZlIHRvIHJlaGFzaCwgc28gbG9jayB0aGUgaGFzaHRhYmxlIGFuZCB0cnkgYWdhaW4uCisg
ICAgVmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKKwor
ICAgIC8vIENoZWNrIGFnYWluLCBzaW5jZSB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNo
ZWQgd2hpbGUgd2Ugd2VyZSBsb2NraW5nIGl0LiBBbHNvLAorICAgIC8vIGxvY2tIYXNodGFibGUo
KSBjcmVhdGVzIGFuIGluaXRpYWwgaGFzaHRhYmxlIGZvciB1cy4KKyAgICBvbGRIYXNodGFibGUg
PSBoYXNodGFibGUubG9hZCgpOworICAgIGlmIChvbGRIYXNodGFibGUgJiYgc3RhdGljX2Nhc3Q8
ZG91YmxlPihvbGRIYXNodGFibGUtPnNpemUpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihudW1UaHJl
YWRzKSA+PSBtYXhMb2FkRmFjdG9yKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGFmdGVyIGxvY2tpbmcsIG5v
IG5lZWQgdG8gcmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8gIiwgbnVt
VGhyZWFkcywgIiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CisgICAgICAgIHVubG9ja0hh
c2h0YWJsZShidWNrZXRzVG9VbmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
VmVjdG9yPEJ1Y2tldCo+IHJldXNhYmxlQnVja2V0cyA9IGJ1Y2tldHNUb1VubG9jazsKKworICAg
IC8vIE9LLCBub3cgd2UgcmVzaXplLiBGaXJzdCB3ZSBnYXRoZXIgYWxsIHRocmVhZCBkYXRhcyBm
cm9tIHRoZSBvbGQgaGFzaHRhYmxlLiBUaGVzZSB0aHJlYWQgZGF0YXMKKyAgICAvLyBhcmUgcGxh
Y2VkIGludG8gdGhlIHZlY3RvciBpbiBxdWV1ZSBvcmRlci4KKyAgICBWZWN0b3I8VGhyZWFkRGF0
YSo+IHRocmVhZERhdGFzOworICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiByZXVzYWJsZUJ1Y2tl
dHMpIHsKKyAgICAgICAgd2hpbGUgKFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBidWNrZXQtPmRl
cXVldWUoKSkKKyAgICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZCh0aHJlYWREYXRhKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBuZXdTaXplID0gbnVtVGhyZWFkcyAqIGdyb3d0aEZhY3RvciAq
IG1heExvYWRGYWN0b3I7CisgICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IG9sZEhhc2h0YWJs
ZS0+c2l6ZSk7CisgICAgCisgICAgSGFzaHRhYmxlKiBuZXdIYXNodGFibGUgPSBIYXNodGFibGU6
OmNyZWF0ZShuZXdTaXplKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgbmV3IGhhc2h0YWJsZTogIiwgUmF3UG9p
bnRlcihuZXdIYXNodGFibGUpLCAiXG4iKSk7CisgICAgZm9yIChUaHJlYWREYXRhKiB0aHJlYWRE
YXRhIDogdGhyZWFkRGF0YXMpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcmVoYXNoaW5nIHRocmVhZCBkYXRh
ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRl
cih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICB1bnNpZ25lZCBoYXNoID0g
aGFzaEFkZHJlc3ModGhyZWFkRGF0YS0+YWRkcmVzcyk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4
ID0gaGFzaCAlIG5ld0hhc2h0YWJsZS0+c2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaW5kZXggPSAiLCBp
bmRleCwgIlxuIikpOworICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG5ld0hhc2h0YWJsZS0+ZGF0
YVtpbmRleF0ubG9hZCgpOworICAgICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgaWYg
KHJldXNhYmxlQnVja2V0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3
IEJ1Y2tldCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1Y2tldCA9IHJl
dXNhYmxlQnVja2V0cy50YWtlTGFzdCgpOworICAgICAgICAgICAgbmV3SGFzaHRhYmxlLT5kYXRh
W2luZGV4XS5zdG9yZShidWNrZXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBidWNr
ZXQtPmVucXVldWUodGhyZWFkRGF0YSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9p
bnQgdGhlcmUgbWF5IGJlIHNvbWUgYnVja2V0cyBsZWZ0IHVucmV1c2VkLiBUaGlzIGNvdWxkIGVh
c2lseSBoYXBwZW4gaWYgdGhlCisgICAgLy8gbnVtYmVyIG9mIGVucXVldWVkIHRocmVhZHMgcmln
aHQgbm93IGlzIGxvdyBidXQgdGhlIGhpZ2ggd2F0ZXJtYXJrIG9mIHRoZSBudW1iZXIgb2YgdGhy
ZWFkcworICAgIC8vIGVucXVldWVkIHdhcyBoaWdoLiBXZSBwbGFjZSB0aGVzZSBidWNrZXRzIGlu
dG8gdGhlIGhhc2h0YWJsZSBiYXNpY2FsbHkgYXQgcmFuZG9tLCBqdXN0IHRvCisgICAgLy8gbWFr
ZSBzdXJlIHdlIGRvbid0IGxlYWsgdGhlbS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bmV3SGFzaHRhYmxlLT5zaXplICYmICFyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpOyArK2kpIHsK
KyAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQdHIgPSBuZXdIYXNodGFibGUtPmRhdGFb
aV07CisgICAgICAgIGlmIChidWNrZXRQdHIubG9hZCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGJ1Y2tldFB0ci5zdG9yZShyZXVzYWJsZUJ1Y2tldHMudGFrZUxhc3QoKSk7Cisg
ICAgfQorICAgIAorICAgIC8vIFNpbmNlIHdlIGluY3JlYXNlZCB0aGUgc2l6ZSBvZiB0aGUgaGFz
aHRhYmxlLCB3ZSBzaG91bGQgaGF2ZSBleGhhdXN0ZWQgb3VyIHByZWFsbG9jYXRlZAorICAgIC8v
IGJ1Y2tldHMgYnkgbm93LgorICAgIEFTU0VSVChyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpKTsK
KyAgICAKKyAgICAvLyBPSywgcmlnaHQgbm93IHRoZSBvbGQgaGFzaHRhYmxlIGlzIGxvY2tlZCB1
cCBhbmQgdGhlIG5ldyBoYXNodGFibGUgaXMgcmVhZHkgdG8gcm9jayBhbmQKKyAgICAvLyByb2xs
LiBBZnRlciB3ZSBpbnN0YWxsIHRoZSBuZXcgaGFzaHRhYmxlLCB3ZSBjYW4gcmVsZWFzZSBhbGwg
YnVja2V0IGxvY2tzLgorICAgIAorICAgIGJvb2wgcmVzdWx0ID0gaGFzaHRhYmxlLmNvbXBhcmVF
eGNoYW5nZVN0cm9uZyhvbGRIYXNodGFibGUsIG5ld0hhc2h0YWJsZSk7CisgICAgUkVMRUFTRV9B
U1NFUlQocmVzdWx0KTsKKworICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwor
fQorCitUaHJlYWREYXRhOjpUaHJlYWREYXRhKCkKKyAgICA6IHRocmVhZElkZW50aWZpZXIoY3Vy
cmVudFRocmVhZCgpKQoreworICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOworICAgIGZv
ciAoOzspIHsKKyAgICAgICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVhZHMubG9h
ZCgpOworICAgICAgICBjdXJyZW50TnVtVGhyZWFkcyA9IG9sZE51bVRocmVhZHMgKyAxOworICAg
ICAgICBpZiAobnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMsIGN1
cnJlbnROdW1UaHJlYWRzKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGVuc3Vy
ZUhhc2h0YWJsZVNpemUoY3VycmVudE51bVRocmVhZHMpOworfQorCitUaHJlYWREYXRhOjp+VGhy
ZWFkRGF0YSgpCit7CisgICAgZm9yICg7OykgeworICAgICAgICB1bnNpZ25lZCBvbGROdW1UaHJl
YWRzID0gbnVtVGhyZWFkcy5sb2FkKCk7CisgICAgICAgIGlmIChudW1UaHJlYWRzLmNvbXBhcmVF
eGNoYW5nZVdlYWsob2xkTnVtVGhyZWFkcywgb2xkTnVtVGhyZWFkcyAtIDEpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCitUaHJlYWREYXRhKiBteVRocmVhZERhdGEoKQoreworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKKyAgICBzdGQ6OmNhbGxfb25j
ZSgKKyAgICAgICAgaW5pdGlhbGl6ZU9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHRo
cmVhZERhdGEgPSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4oKTsKKyAgICAgICAgfSk7
CisKKyAgICByZXR1cm4gKnRocmVhZERhdGE7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+Citib29sIGVucXVldWUoY29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKK3sKKyAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3MoYWRkcmVzcyk7CisKKyAg
ICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSogbXlIYXNodGFibGUgPSBoYXNodGFibGUu
bG9hZCgpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBteUhhc2h0YWJsZS0+c2l6
ZTsKKyAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQb2ludGVyID0gbXlIYXNodGFibGUt
PmRhdGFbaW5kZXhdOworICAgICAgICBCdWNrZXQqIGJ1Y2tldDsKKyAgICAgICAgZm9yICg7Oykg
eworICAgICAgICAgICAgYnVja2V0ID0gYnVja2V0UG9pbnRlci5sb2FkKCk7CisgICAgICAgICAg
ICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgICAgIGJ1Y2tldCA9IG5ldyBCdWNrZXQoKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWJ1Y2tldFBvaW50ZXIuY29tcGFyZUV4Y2hhbmdlV2Vhayhu
dWxscHRyLCBidWNrZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBidWNrZXQ7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGVucXVl
dWVpbmcgb250byBidWNrZXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiIHdpdGggaW5kZXggIiwg
aW5kZXgsICIgZm9yIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIiB3aXRoIGhhc2gg
IiwgaGFzaCwgIlxuIikpOworICAgICAgICBidWNrZXQtPmxvY2subG9jaygpOworCisgICAgICAg
IC8vIEF0IHRoaXMgcG9pbnQgdGhlIGhhc2h0YWJsZSBjb3VsZCBoYXZlIHJlaGFzaGVkIHVuZGVy
IHVzLgorICAgICAgICBpZiAoaGFzaHRhYmxlLmxvYWQoKSAhPSBteUhhc2h0YWJsZSkgeworICAg
ICAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOworICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIH0KKworICAgICAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRhID0gZnVuY3RvcigpOwor
ICAgICAgICBib29sIHJlc3VsdDsKKyAgICAgICAgaWYgKHRocmVhZERhdGEpIHsKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBwcm9jZWVkaW5nIHRvIGVucXVldWUgIiwgUmF3UG9pbnRlcih0aHJlYWRE
YXRhKSwgIlxuIikpOworICAgICAgICAgICAgYnVja2V0LT5lbnF1ZXVlKHRocmVhZERhdGEpOwor
ICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBy
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2Jv
b2wgZGVxdWV1ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
eworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogZGVxdWV1ZWluZyBhZGRyZXNzICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICJcbiIp
KTsKKyAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3MoYWRkcmVzcyk7CisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBoYXNo
ID0gIiwgaGFzaCwgIlxuIikpOworCisgICAgZm9yICg7OykgeworICAgICAgICBIYXNodGFibGUq
IG15SGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICAgICAgaWYgKCFteUhhc2h0YWJs
ZSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0
b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IG5vIGhhc2h0YWJsZS5cbiIpKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhh
c2ggJSBteUhhc2h0YWJsZS0+c2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaW5kZXggPSAiLCBpbmRleCwg
IlxuIikpOworICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG15SGFzaHRhYmxlLT5kYXRhW2luZGV4
XS5sb2FkKCk7CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
bm8gYnVja2V0IGF0ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIi5cbiIpKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGxvY2tpbmcgYnVja2V0
IGF0ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIlxuIikpOworICAgICAgICBidWNrZXQtPmxvY2su
bG9jaygpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NrZWQgYnVja2V0IGF0ICIsIFJhd1BvaW50ZXIoYnVj
a2V0KSwgIlxuIikpOworCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGhhc2h0YWJsZSBj
b3VsZCBoYXZlIHJlaGFzaGVkIHVuZGVyIHVzLgorICAgICAgICBpZiAoaGFzaHRhYmxlLmxvYWQo
KSAhPSBteUhhc2h0YWJsZSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGhhc2h0YWJsZSBjaGFu
Z2VkLlxuIikpOworICAgICAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBmb3VuZCBidWNrZXQuXG4i
KSk7CisgICAgICAgIGJ1Y2tldC0+Z2VuZXJpY0RlcXVldWUoZnVuY3Rvcik7CisgICAgICAgIGJv
b2wgcmVzdWx0ID0gISFidWNrZXQtPnF1ZXVlSGVhZDsKKyAgICAgICAgYnVja2V0LT5sb2NrLnVu
bG9jaygpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK2Jvb2wgUGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkoY29uc3Qg
dm9pZCogYWRkcmVzcywgc3RkOjpmdW5jdGlvbjxib29sKCk+IHZhbGlkYXRpb24pCit7CisgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAi
OiBwYXJraW5nLlxuIikpOworICAgIAorICAgIFRocmVhZERhdGEqIG1lID0gbXlUaHJlYWREYXRh
KCk7CisKKyAgICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAKKyAgICBib29sIHJlc3Vs
dCA9IGVucXVldWUoCisgICAgICAgIGFkZHJlc3MsCisgICAgICAgIFsmXSAoKSAtPiBUaHJlYWRE
YXRhKiB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRpb24oKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgbWUtPmFkZHJlc3MgPSBhZGRyZXNzOworICAg
ICAgICAgICAgbWUtPnNob3VsZFBhcmsgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG1lOwor
ICAgICAgICB9KTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IHBhcmtpbmcgc2VsZjogIiwgUmF3UG9pbnRlcihtZSksICJcbiIpKTsKKyAgICB7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9j
ayk7CisgICAgICAgIHdoaWxlIChtZS0+c2hvdWxkUGFyaykKKyAgICAgICAgICAgIG1lLT5wYXJr
aW5nQ29uZGl0aW9uLndhaXQobG9ja2VyKTsKKworICAgICAgICBtZS0+YWRkcmVzcyA9IG51bGxw
dHI7CisgICAgfQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJrZWQgc2VsZjogIiwgUmF3UG9pbnRlcihtZSksICJcbiIp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYXJraW5nTG90Ojp1bnBhcmtPbmUoY29u
c3Qgdm9pZCogYWRkcmVzcykKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0
b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBvbmUuXG4iKSk7CisKKyAgICBU
aHJlYWREYXRhKiB0aHJlYWREYXRhID0gbnVsbHB0cjsKKyAgICBib29sIHJlc3VsdCA9IGRlcXVl
dWUoCisgICAgICAgIGFkZHJlc3MsCisgICAgICAgIFsmXSAoVGhyZWFkRGF0YSogZWxlbWVudCkg
eworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmFkZHJlc3MgIT0gYWRkcmVzcykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6SWdub3JlOworICAgICAgICAgICAgdGhyZWFk
RGF0YSA9IGVsZW1lbnQ7CisgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6UmVtb3Zl
QW5kU3RvcDsKKyAgICAgICAgfSk7CisKKyAgICBpZiAoIXRocmVhZERhdGEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIEFTU0VSVCh0aHJlYWREYXRhLT5zaG91bGRQYXJrKTsKKyAgICAK
KyAgICB7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVh
ZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9IGZh
bHNlOworICAgICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9hbGwoKTsK
KyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBhcmtpbmdMb3Q6OnVucGFy
a0FsbChjb25zdCB2b2lkKiBhZGRyZXNzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIGFsbCBmcm9tICIs
IFJhd1BvaW50ZXIoYWRkcmVzcyksICIuXG4iKSk7CisgICAgCisgICAgVmVjdG9yPFRocmVhZERh
dGEqLCA4PiB0aHJlYWREYXRhczsKKyAgICBkZXF1ZXVlKAorICAgICAgICBhZGRyZXNzLAorICAg
ICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBP
YnNlcnZpbmcgZWxlbWVudCB3aXRoIGFkZHJlc3MgPSAiLCBSYXdQb2ludGVyKGVsZW1lbnQtPmFk
ZHJlc3MpLCAiXG4iKSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBhZGRy
ZXNzKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7CisgICAg
ICAgICAgICB0aHJlYWREYXRhcy5hcHBlbmQoZWxlbWVudCk7CisgICAgICAgICAgICByZXR1cm4g
RGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kQ29udGludWU7CisgICAgICAgIH0pOworCisgICAgZm9y
IChUaHJlYWREYXRhKiB0aHJlYWREYXRhIDogdGhyZWFkRGF0YXMpIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
dW5wYXJraW5nICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICIgd2l0aCBhZGRyZXNzICIsIFJh
d1BvaW50ZXIodGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsKKyAgICAgICAgQVNTRVJUKHRo
cmVhZERhdGEtPnNob3VsZFBhcmspOworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0
ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIHRocmVhZERhdGEt
PnNob3VsZFBhcmsgPSBmYWxzZTsKKyAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlv
bi5ub3RpZnlfYWxsKCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkb25lIHVucGFya2luZy5cbiIpKTsKK30K
Kwordm9pZCBQYXJraW5nTG90Ojpmb3JFYWNoKHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWRJZGVu
dGlmaWVyLCBjb25zdCB2b2lkKik+IGNhbGxiYWNrKQoreworICAgIFZlY3RvcjxCdWNrZXQqPiBi
dWNrZXRzVG9VbmxvY2sgPSBsb2NrSGFzaHRhYmxlKCk7CisKKyAgICBIYXNodGFibGUqIGN1cnJl
bnRIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGN1
cnJlbnRIYXNodGFibGUtPnNpemU7IGktLTspIHsKKyAgICAgICAgQnVja2V0KiBidWNrZXQgPSBj
dXJyZW50SGFzaHRhYmxlLT5kYXRhW2ldLmxvYWQoKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZm9yIChUaHJlYWREYXRhKiBjdXJyZW50VGhy
ZWFkRGF0YSA9IGJ1Y2tldC0+cXVldWVIZWFkOyBjdXJyZW50VGhyZWFkRGF0YTsgY3VycmVudFRo
cmVhZERhdGEgPSBjdXJyZW50VGhyZWFkRGF0YS0+bmV4dEluUXVldWUpCisgICAgICAgICAgICBj
YWxsYmFjayhjdXJyZW50VGhyZWFkRGF0YS0+dGhyZWFkSWRlbnRpZmllciwgY3VycmVudFRocmVh
ZERhdGEtPmFkZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB1bmxvY2tIYXNodGFibGUoYnVja2V0
c1RvVW5sb2NrKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1BhcmtpbmdMb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIFdURl9QYXJraW5nTG90X2gKKyNkZWZpbmUgV1RGX1Bhcmtp
bmdMb3RfaAorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5o
PgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
Y2xhc3MgUGFya2luZ0xvdCB7CisgICAgUGFya2luZ0xvdCgpID0gZGVsZXRlOworICAgIFBhcmtp
bmdMb3QoY29uc3QgUGFya2luZ0xvdCYpID0gZGVsZXRlOworCitwdWJsaWM6CisgICAgLy8gUGFy
a3MgdGhlIHRocmVhZCBpbiBhIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVz
cywgd2hpY2ggY2Fubm90IGJlIG51bGwuIFRoZQorICAgIC8vIHBhcmtpbmcgb25seSBzdWNjZWVk
cyBpZiB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hpbGUgdGhlIHF1ZXVl
IGxvY2sgaXMgaGVsZC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcGFya0Nv
bmRpdGlvbmFsbHkoY29uc3Qgdm9pZCogYWRkcmVzcywgc3RkOjpmdW5jdGlvbjxib29sKCk+IHZh
bGlkYXRpb24pOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKyAgICBz
dGF0aWMgYm9vbCBjb21wYXJlQW5kUGFyayhjb25zdCBBdG9taWM8VD4qIGFkZHJlc3MsIFUgZXhw
ZWN0ZWQpCisgICAgeworICAgICAgICByZXR1cm4gcGFya0NvbmRpdGlvbmFsbHkoCisgICAgICAg
ICAgICBhZGRyZXNzLAorICAgICAgICAgICAgW2FkZHJlc3MsIGV4cGVjdGVkXSAoKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICBVIHZhbHVlID0gYWRkcmVzcy0+bG9hZCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZDsKKyAgICAgICAgICAgIH0pOworICAgIH0K
KworICAgIC8vIFVucGFya3Mgb25lIHRocmVhZCBmcm9tIHRoZSBxdWV1ZSBhc3NvY2lhdGVkIHdp
dGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLgorICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGVyZSBtYXkgc3RpbGwgYmUgb3RoZXIgdGhyZWFkcyBvbiB0aGF0IHF1ZXVl
LCBvciBmYWxzZSBpZiB0aGVyZSBkZWZpbml0ZWx5CisgICAgLy8gYXJlIG5vIG1vcmUgdGhyZWFk
cyBvbiB0aGUgcXVldWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHVucGFy
a09uZShjb25zdCB2b2lkKiBhZGRyZXNzKTsKKworICAgIC8vIFVucGFya3MgZXZlcnkgdGhyZWFk
IGZyb20gdGhlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2gg
Y2Fubm90IGJlIG51bGwuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVucGFy
a0FsbChjb25zdCB2b2lkKiBhZGRyZXNzKTsKKworICAgIC8vIExvY2tzIHRoZSBwYXJraW5nIGxv
dCBhbmQgd2Fsa3MgYWxsIG9mIHRoZSBwYXJrZWQgdGhyZWFkcyBhbmQgdGhlIGFkZHJlc3NlcyB0
aGV5IGFyZSB3YWl0aW5nCisgICAgLy8gb24uIFRocmVhZHMgdGhhdCBhcmUgb24gdGhlIHNhbWUg
cXVldWUgYXJlIGd1YXJhbnRlZWQgdG8gYmUgd2Fsa2VkIGZyb20gZmlyc3QgdG8gbGFzdCwgYnV0
IHRoZQorICAgIC8vIHF1ZXVlcyBtYXkgYmUgcmFuZG9tbHkgaW50ZXJsZWF2ZWQuIEZvciBleGFt
cGxlLCBpZiB0aGUgcXVldWUgZm9yIGFkZHJlc3MgQTEgaGFzIFQxIGFuZCBUMiBhbmQKKyAgICAv
LyB0aGUgcXVldWUgZm9yIGFkZHJlc3MgQTIgaGFzIFQzIGFuZCBUNCwgdGhlbiB5b3UgbWlnaHQg
c2VlIGl0ZXJhdGlvbiBvcmRlcnMgbGlrZToKKyAgICAvLworICAgIC8vIEExLFQxIEExLFQyIEEy
LFQzIEEyLFQ0CisgICAgLy8gQTIsVDMgQTIsVDQgQTEsVDEgQTEsVDIKKyAgICAvLyBBMSxUMSBB
MixUMyBBMSxUMiBBMixUNAorICAgIC8vIEExLFQxIEEyLFQzIEEyLFQ0IEExLFQyCisgICAgLy8K
KyAgICAvLyBBcyB3ZWxsIGFzIG1hbnkgb3RoZXIgcG9zc2libGUgaW50ZXJsZWF2ZXMgdGhhdCBh
bGwgaGF2ZSBUMSBiZWZvcmUgVDIgYW5kIFQzIGJlZm9yZSBUNCBidXQgYXJlCisgICAgLy8gb3Ro
ZXJ3aXNlIHVuY29uc3RyYWluZWQuIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBwcmltYXJpbHkgZm9y
IGRlYnVnZ2luZy4gSXQncyBhbHNvIHVzZWQgYnkgdW5pdAorICAgIC8vIHRlc3RzLgorICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoKHN0ZDo6ZnVuY3Rpb248dm9pZChU
aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKik+KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCit1c2luZyBXVEY6OlBhcmtpbmdMb3Q7CisKKyNlbmRpZiAvLyBXVEZfUGFya2luZ0xvdF9o
CisKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktp
dEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODgxMDApCisrKyBUb29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAogCQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkw
RjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9y
bVV0aWxpdGllc0NvY29hLm1tICovOyB9OwogCQkwRjEzOUU3OTFBNDI0NTcwMDBGNTkwRjUgLyog
UGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tICovOyB9OwogCQkwRjNCOTRBNzFBNzcyNjc0MDBERTMyNzIgLyogV0tXZWJW
aWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1
YXRlSmF2YVNjcmlwdC5tbSAqLzsgfTsKKwkJMEZFNDQ3OTkxQjc2RjFFQjAwOTQ5OEVCIC8qIFBh
cmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwICovOyB9OwogCQkw
RkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9j
ay5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQwMEUzRjRCRCAvKiBmaW5kLmh0bWwgaW4g
Q29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwMkM4
NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAqLzsgfTsKIAkJMUE1MEFBMjAxQTJBNTFG
QzAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0bWwgaW4gQ29weSBS
ZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1MEFBMUYxQTJB
NEVBNTAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNyZWF0ZS1wYWdlLmh0bWwgKi87IH07
CkBAIC00MjksNiArNDMwLDcgQEAKIAkJMEYzQjk0QTUxQTc3MjY2QzAwREUzMjcyIC8qIFdLV2Vi
Vmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNw
cDsgcGF0aCA9IFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWRCbGFja1RyZWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkM2QzRDRTE0MTAzNEFEMDA1QjdGMEMg
LyogTWV0YUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZXRhQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNDQ3
OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAvKiBMb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDQ2NDAxMjE2N0E4MzA1MDAwQkQyMTggLyogTGF5b3V0VW5pdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRVbml0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGM0IxMTIxNUU0NUVBQjAwMjEwMDY5IC8qIFNhdHVyYXRl
ZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFNhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTExMDYsNiArMTEwOCw3IEBACiAJCQkJOTNBNDI3QUMxODBEQTYwRjAw
Q0QyNEQ3IC8qIE1vdmVPbmx5LmggKi8sCiAJCQkJRkVCNkY3NEUxQjJCQTQ0RTAwOUU0OTIyIC8q
IE5ha2VkUHRyLmNwcCAqLywKIAkJCQkxQUZERTY1NDE5NTNCMkMwMDBDNDhGRkEgLyogT3B0aW9u
YWwuY3BwICovLAorCQkJCTBGRTQ0Nzk3MUI3NkYxRTMwMDk0OThFQiAvKiBQYXJraW5nTG90LmNw
cCAqLywKIAkJCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAq
LywKIAkJCQk5M0E0MjdBQTE4MERBMjY0MDBDRDI0RDcgLyogUmVmLmNwcCAqLywKIAkJCQk4NkJE
MTk5NzFBMkRCMDVCMDA2RENGMEEgLyogUmVmQ291bnRlci5jcHAgKi8sCkBAIC0xNjI2LDYgKzE2
MjksNyBAQAogCQkJCTdDQ0U3RUQ3MUE0MTFBN0UwMDQ0N0M0QyAvKiBXaWxsUGVyZm9ybUNsaWVu
dFJlZGlyZWN0VG9VUkxDcmFzaC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjFDMUE0MTFB
RTYwMDQ0N0M0QyAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTdDQ0U3RUQ4MUE0MTFBN0UwMDQ0N0M0QyAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50Lm1tIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFNDQ3OTkxQjc2RjFFQjAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDkxQTQxMUE3RTAwNDQ3QzRDIC8qIFdpbmRvd2xl
c3NXZWJWaWV3V2l0aE1lZGlhLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMkUxQTQxMUIx
MDAwNDQ3QzRDIC8qIFdLQnJvd3NpbmdDb250ZXh0R3JvdXBUZXN0Lm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJN0NDRTdGMkYxQTQxMUIxMDAwNDQ3QzRDIC8qIFdLQnJvd3NpbmdDb250ZXh0TG9hZERl
bGVnYXRlVGVzdC5tbSBpbiBTb3VyY2VzICovLApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XVEYvTG9jay5jcHAJKHJldmlzaW9uIDE4ODEwMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV1RGL0xvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9CeXRlTG9jay5oPgogI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgogI2luY2x1ZGUgPHd0
Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CkBAIC05NCw3ICs5NSw0MiBAQCBURVNUKFdURl9Mb2Nr
LCBNYW55Q29udGVudGVkU2hvcnRTZWN0aW9uCiAKIFRFU1QoV1RGX0xvY2ssIE1hbnlDb250ZW50
ZWRMb25nU2VjdGlvbnMpCiB7Ci0gICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxMDAwMCwg
MjAwMCk7CisgICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxMDAwMCwgMTAwMCk7Cit9CisK
K1RFU1QoV1RGX0J5dGVMb2NrLCBVbmNvbnRlbnRlZFNob3J0U2VjdGlvbikKK3sKKyAgICBydW5M
b2NrVGVzdDxCeXRlTG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOworfQorCitURVNUKFdURl9CeXRl
TG9jaywgVW5jb250ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9j
az4oMSwgMSwgMTAwMDAsIDEwMDApOworfQorCitURVNUKFdURl9CeXRlTG9jaywgQ29udGVudGVk
U2hvcnRTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxMCwgMSwgMTAw
MDAwMDApOworfQorCitURVNUKFdURl9CeXRlTG9jaywgQ29udGVudGVkTG9uZ1NlY3Rpb24pCit7
CisgICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEwLCAxMDAwMCwgMTAwMDApOworfQorCitU
RVNUKFdURl9CeXRlTG9jaywgTWFueUNvbnRlbnRlZFNob3J0U2VjdGlvbnMpCit7CisgICAgcnVu
TG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEwLCAxMCwgMSwgNTAwMDAwKTsKK30KKworVEVTVChXVEZfQnl0
ZUxvY2ssIE1hbnlDb250ZW50ZWRMb25nU2VjdGlvbnMpCit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0
ZUxvY2s+KDEwLCAxMCwgMTAwMDAsIDEwMDApOworfQorCitURVNUKFdURl9CeXRlTG9jaywgU2Vj
dGlvbkFkZHJlc3NDb2xsaXNpb24pCit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDQsIDIs
IDEwMDAwLCAyMDAwKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQpJbmRleDog
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAJKHJldmlzaW9u
IDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlIDxjb25kaXRpb25fdmFyaWFibGU+CisjaW5jbHVkZSA8bXV0ZXg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvUGFya2luZ0xvdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZl
cy5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7
CisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBTaW5nbGVMYXRjaFRlc3QgeworICAgIHZvaWQgaW5p
dGlhbGl6ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQorICAgIHsKKyAgICAgICAgbGF0Y2guc3RvcmUo
MCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1UaHJlYWRzOyBpLS07
KSB7CisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBjcmVhdGVU
aHJlYWQoCisgICAgICAgICAgICAgICAgICAgICJQYXJraW5nIFRlc3QgVGhyZWFkIiwKKyAgICAg
ICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9O
RSgwdSwgY3VycmVudFRocmVhZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGN1cnJlbnRMYXRjaFZhbHVlID0gbGF0Y2gubG9hZCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50
TGF0Y2hWYWx1ZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxh
dGNoLmNvbXBhcmVFeGNoYW5nZVdlYWsoY3VycmVudExhdGNoVmFsdWUsIGN1cnJlbnRMYXRjaFZh
bHVlIC0gMSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZsYXRjaCwgY3VycmVu
dExhdGNoVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjpt
dXRleD4gbG9ja2VyKGxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEF3b2tlbiA9
IGN1cnJlbnRUaHJlYWQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF3YWtlLmFkZChjdXJy
ZW50VGhyZWFkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeV9v
bmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAgfQorCisgICAg
dm9pZCB1bnBhcmtPbmUodW5zaWduZWQgc2luZ2xlVW5wYXJrSW5kZXgpCisgICAgeworICAgICAg
ICAvLyBGaWd1cmUgb3V0IGlmIHRoZXJlIGlzIGEgdGhyZWFkIHdhaXRpbmcuIFdoYXRldmVyIHRo
cmVhZCBpcyB3YWl0aW5nIGZpcnN0IGlzIHRoZSBvbmUgdGhhdAorICAgICAgICAvLyBzaG91bGQg
d2FrZSB1cCBuZXh0LgorICAgICAgICBUaHJlYWRJZGVudGlmaWVyIGV4cGVjdGVkVG9XYWtlID0g
MDsKKyAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CisgICAgICAgIFBh
cmtpbmdMb3Q6OmZvckVhY2goCisgICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIgdGhy
ZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgICAgIGlm
IChhZGRyZXNzICE9ICZsYXRjaCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOworCisgICAgICAgICAgICAgICAgaWYg
KGV4cGVjdGVkVG9XYWtlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgICAgICBleHBlY3RlZFRvV2FrZSA9IHRocmVhZElkZW50aWZpZXI7CisgICAgICAgICAgICB9
KTsKKworICAgICAgICBFWFBFQ1RfTEUobnVtV2FpdGluZ09uQWRkcmVzcywgdGhyZWFkcy5zaXpl
KCkgLSBzaW5nbGVVbnBhcmtJbmRleCk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBsYXRjaC5s
b2FkKCkpOworICAgICAgICBsYXRjaC5zdG9yZSgxKTsKKyAgICAgICAgUGFya2luZ0xvdDo6dW5w
YXJrT25lKCZsYXRjaCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9j
azxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CisgICAgICAgICAgICB3aGlsZSAoYXdha2Uuc2l6
ZSgpIDwgc2luZ2xlVW5wYXJrSW5kZXggKyAxKQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53
YWl0KGxvY2tlcik7CisgICAgICAgICAgICBFWFBFQ1RfTkUoMHUsIGxhc3RBd29rZW4pOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGV4cGVjdGVkVG9XYWtlKQorICAgICAgICAgICAgRVhQRUNU
X0VRKGV4cGVjdGVkVG9XYWtlLCBsYXN0QXdva2VuKTsKKworICAgICAgICB7CisgICAgICAgICAg
ICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOworICAgICAgICAgICAg
bGFzdEF3b2tlbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaCh1bnNp
Z25lZCBudW1TaW5nbGVVbnBhcmtzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbnVtV2FpdGlu
Z09uQWRkcmVzcyA9IDA7CisgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCisgICAgICAgICAg
ICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYWRkcmVzcyAhPSAmbGF0Y2gpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNz
Kys7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9MRShudW1XYWl0
aW5nT25BZGRyZXNzLCB0aHJlYWRzLnNpemUoKSAtIG51bVNpbmdsZVVucGFya3MpOworICAgIAor
ICAgICAgICBFWFBFQ1RfRVEoMHUsIGxhdGNoLmxvYWQoKSk7CisgICAgICAgIGxhdGNoLnN0b3Jl
KHRocmVhZHMuc2l6ZSgpIC0gbnVtU2luZ2xlVW5wYXJrcyk7CisgICAgICAgIFBhcmtpbmdMb3Q6
OnVucGFya0FsbCgmbGF0Y2gpOworCisgICAgICAgIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOwor
ICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAorICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVu
dGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJl
c3MgIT0gJmxhdGNoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICBFWFBFQ1RfRVEoMHUsIG51bVdhaXRpbmdPbkFkZHJlc3MpOworICAgIAorICAg
ICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihs
b2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChhd2FrZS5zaXplKCkgPCB0aHJlYWRzLnNpemUoKSkK
KyAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOworICAgICAgICAgICAgaWYg
KG51bVNpbmdsZVVucGFya3MgPCB0aHJlYWRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICBFWFBF
Q1RfTkUoMHUsIGxhc3RBd29rZW4pOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChUaHJlYWRJ
ZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXIgOiB0aHJlYWRzKQorICAgICAgICAgICAgd2FpdEZv
clRocmVhZENvbXBsZXRpb24odGhyZWFkSWRlbnRpZmllcik7CisgICAgfQorICAgIAorICAgIEF0
b21pYzx1bnNpZ25lZD4gbGF0Y2g7CisgICAgc3RkOjptdXRleCBsb2NrOworICAgIHN0ZDo6Y29u
ZGl0aW9uX3ZhcmlhYmxlIGNvbmRpdGlvbjsKKyAgICBIYXNoU2V0PFRocmVhZElkZW50aWZpZXI+
IGF3YWtlOworICAgIFRocmVhZElkZW50aWZpZXIgbGFzdEF3b2tlbiB7IDAgfTsKKyAgICBWZWN0
b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKK307CisKK3ZvaWQgcnVuUGFya2luZ1Rlc3Qo
dW5zaWduZWQgbnVtTGF0Y2hlcywgdW5zaWduZWQgZGVsYXksIHVuc2lnbmVkIG51bVRocmVhZHMs
IHVuc2lnbmVkIG51bVNpbmdsZVVucGFya3MpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNpbmds
ZUxhdGNoVGVzdFtdPiB0ZXN0cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2luZ2xlTGF0Y2hUZXN0W10+
KG51bUxhdGNoZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBsYXRjaEluZGV4ID0gbnVtTGF0Y2hl
czsgbGF0Y2hJbmRleC0tOykKKyAgICAgICAgdGVzdHNbbGF0Y2hJbmRleF0uaW5pdGlhbGl6ZShu
dW1UaHJlYWRzKTsKKworICAgIGZvciAodW5zaWduZWQgdW5wYXJrSW5kZXggPSAwOyB1bnBhcmtJ
bmRleCA8IG51bVNpbmdsZVVucGFya3M7ICsrdW5wYXJrSW5kZXgpIHsKKyAgICAgICAgdXNsZWVw
KGRlbGF5KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXRjaEluZGV4ID0gbnVtTGF0Y2hlczsg
bGF0Y2hJbmRleC0tOykKKyAgICAgICAgICAgIHRlc3RzW2xhdGNoSW5kZXhdLnVucGFya09uZSh1
bnBhcmtJbmRleCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBsYXRjaEluZGV4ID0gbnVt
TGF0Y2hlczsgbGF0Y2hJbmRleC0tOykKKyAgICAgICAgdGVzdHNbbGF0Y2hJbmRleF0uZmluaXNo
KG51bVNpbmdsZVVucGFya3MpOworfQorCit2b2lkIHJlcGVhdFBhcmtpbmdUZXN0KHVuc2lnbmVk
IG51bVJlcGVhdHMsIHVuc2lnbmVkIG51bUxhdGNoZXMsIHVuc2lnbmVkIGRlbGF5LCB1bnNpZ25l
ZCBudW1UaHJlYWRzLCB1bnNpZ25lZCBudW1TaW5nbGVVbnBhcmtzKQoreworICAgIHdoaWxlIChu
dW1SZXBlYXRzLS0pCisgICAgICAgIHJ1blBhcmtpbmdUZXN0KG51bUxhdGNoZXMsIGRlbGF5LCBu
dW1UaHJlYWRzLCBudW1TaW5nbGVVbnBhcmtzKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya0FsbE9uZUZhc3QpCit7CisgICAgcmVw
ZWF0UGFya2luZ1Rlc3QoMTAwMDAsIDEsIDAsIDEsIDApOworfQorCitURVNUKFdURl9QYXJraW5n
TG90LCBVbnBhcmtBbGxIdW5kcmVkRmFzdCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxMDAw
LCAxLCAwLCAxMDAsIDApOworfQorCitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtPbmVPbmVG
YXN0KQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEwMDAsIDEsIDAsIDEsIDEpOworfQorCitU
RVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtPbmVIdW5kcmVkRmFzdCkKK3sKKyAgICByZXBlYXRQ
YXJraW5nVGVzdCgxMDAsIDEsIDAsIDEwMCwgMTAwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xv
dCwgVW5wYXJrT25lRmlmdHlUaGVuRmlmdHlBbGxGYXN0KQoreworICAgIHJlcGVhdFBhcmtpbmdU
ZXN0KDIwMCwgMSwgMCwgMTAwLCA1MCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFy
a0FsbE9uZSkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxMDAsIDEsIDEwMDAwLCAxLCAwKTsK
K30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJrQWxsSHVuZHJlZCkKK3sKKyAgICByZXBl
YXRQYXJraW5nVGVzdCgxMDAsIDEsIDEwMDAwLCAxMDAsIDApOworfQorCitURVNUKFdURl9QYXJr
aW5nTG90LCBVbnBhcmtPbmVPbmUpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAsIDEsIDEw
MDAwLCAxLCAxKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJrT25lSHVuZHJlZCkK
K3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxLCAxLCAxMDAwMCwgMTAwLCAxMDApOworfQorCitU
RVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtPbmVGaWZ0eVRoZW5GaWZ0eUFsbCkKK3sKKyAgICBy
ZXBlYXRQYXJraW5nVGVzdCgyLCAxLCAxMDAwMCwgMTAwLCA1MCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258589</attachid>
            <date>2015-08-08 20:42:42 -0700</date>
            <delta_ts>2015-08-10 14:12:48 -0700</delta_ts>
            <desc>it works</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>57103</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uY3VycmVudEpJ
VExvY2suaAkocmV2aXNpb24gMTg4MDk5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29uY3VycmVudEpJVExvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjcsMTQgKzI3LDE0IEBA
CiAjZGVmaW5lIENvbmN1cnJlbnRKSVRMb2NrX2gKIAogI2luY2x1ZGUgIkRlZmVyR0MuaCIKLSNp
bmNsdWRlIDx3dGYvQnl0ZVNwaW5Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAj
aW5jbHVkZSA8d3RmL05vTG9jay5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAogI2lmIEVOQUJMRShD
T05DVVJSRU5UX0pJVCkKLXR5cGVkZWYgQnl0ZVNwaW5Mb2NrIENvbmN1cnJlbnRKSVRMb2NrOwot
dHlwZWRlZiBCeXRlU3BpbkxvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKK3R5cGVkZWYg
Qnl0ZUxvY2sgQ29uY3VycmVudEpJVExvY2s7Cit0eXBlZGVmIEJ5dGVMb2NrZXIgQ29uY3VycmVu
dEpJVExvY2tlckltcGw7CiAjZWxzZQogdHlwZWRlZiBOb0xvY2sgQ29uY3VycmVudEpJVExvY2s7
CiB0eXBlZGVmIE5vTG9ja0xvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKSW5kZXg6IFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTg4MTAwKQor
KysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjQsNiArMjQsMTAgQEAKIAkJMEYwRDg1QjQxNzIzNENDMTAwMzM4MjEwIC8qIE5vTG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYwRDg1
QjMxNzIzNENCMTAwMzM4MjEwIC8qIE5vTG9jay5oICovOyB9OwogCQkwRjJCNjZBNjE3QjZCNEZC
MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oICovOyB9OwogCQkwRjJCNjZBNzE3QjZCNEZEMDBBN0FFM0YgLyog
RmxpcEJ5dGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCNjZBNTE3QjZCNEY3MDBBN0FFM0YgLyogRmxpcEJ5dGVzLmggKi87IH07CisJCTBGODI0
QTY2MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0
ZUxvY2suY3BwICovOyB9OworCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTYz
MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovOyB9OworCQkwRjgyNEE2ODFCNzQ0M0Ew
MDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi87IH07CisJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjgyNEE2NTFCNzQ0
M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovOyB9OwogCQkwRjg3MTA1QTE2NjQzRjE5MDA5
MEIwQUQgLyogUmF3UG9pbnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY4NzEwNTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLzsg
fTsKIAkJMEY4ODVFMEYxODQ1QUVBOTAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4ODVFMEUxODQ1QUU5
RjAwRjFFM0ZBIC8qIEZhc3RCaXRWZWN0b3IuY3BwICovOyB9OwogCQkwRjhGMkI5MTE3MkUwMEZD
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEYyQjkwMTcyRTAwRjAwMDdEQkRBNSAvKiBDb21waWxh
dGlvblRocmVhZC5oICovOyB9OwpAQCAtMzA3LDYgKzMxMSwxMCBAQAogCQkwRjJCNjZBNDE3QjZC
NEY3MDBBN0FFM0YgLyogRGVmZXJyYWJsZVJlZkNvdW50ZWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVm
ZXJyYWJsZVJlZkNvdW50ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjY2
QTUxN0I2QjRGNzAwQTdBRTNGIC8qIEZsaXBCeXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbGlwQnl0
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYzMDBCN0QxOEFCNDhCNDAwQTZE
NzJFIC8qIEhhc2hNZXRob2QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaE1ldGhvZC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQnl0ZUxvY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZUxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjQxQjc0NDNBMDAwMkUzNDVE
IC8qIFBhcmtpbmdMb3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFya2luZ0xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGODI0QTY1MUI3
NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBhcmtpbmdMb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4NzEw
NTkxNjY0M0YxOTAwOTBCMEFEIC8qIFJhd1BvaW50ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUmF3UG9pbnRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
Rjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGYXN0Qml0VmVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEY4RjJCOEYxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbXBpbGF0aW9uVGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTcxNiw2ICs3MjQsOCBAQAogCQkJCUE4QTQ3MjY0MTUxQTgyNUEwMDQxMjNGRiAv
KiBCbG9ja1N0YWNrLmggKi8sCiAJCQkJQThBNDcyNjUxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb29t
RmlsdGVyLmggKi8sCiAJCQkJQThBNDcyNjcxNTFBODI1QTAwNDEyM0ZGIC8qIEJ1bXBQb2ludGVy
QWxsb2NhdG9yLmggKi8sCisJCQkJMEY4MjRBNjIxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2Nr
LmNwcCAqLywKKwkJCQkwRjgyNEE2MzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCAqLywK
IAkJCQlFQjk1RTFFRjE2MUE3MjQxMDA4OUEyRjUgLyogQnl0ZU9yZGVyLmggKi8sCiAJCQkJMEZF
QzNFRTQxNzFCODM0NzAwRkRBQzhEIC8qIEJ5dGVTcGluTG9jay5oICovLAogCQkJCUE4QTQ3MjZB
MTUxQTgyNUEwMDQxMjNGRiAvKiBDaGVja2VkQXJpdGhtZXRpYy5oICovLApAQCAtODEwLDYgKzgy
MCw4IEBACiAJCQkJQThBNDcyRTUxNTFBODI1QjAwNDEyM0ZGIC8qIFBhZ2VSZXNlcnZhdGlvbi5o
ICovLAogCQkJCUE4QTQ3MkU2MTUxQTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnMuaCAqLywK
IAkJCQlBOEE0NzJFOTE1MUE4MjVCMDA0MTIzRkYgLyogUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2gu
aCAqLywKKwkJCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5jcHAgKi8s
CisJCQkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCAqLywKIAkJCQlB
OEE0NzJFRDE1MUE4MjVCMDA0MTIzRkYgLyogUGFzc1JlZlB0ci5oICovLAogCQkJCUE4NzZEQkQ3
MTUxODE2RTUwMERBREI5NSAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTBGOUQzMzVEMTY1REJBNzMw
MDVBRDM4NyAvKiBQcmludFN0cmVhbS5jcHAgKi8sCkBAIC0xMTU2LDYgKzExNjgsNyBAQAogCQkJ
CUE4QTQ3NDE1MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDE2MTUxQTgyNUIwMDQxMjNGRiAvKiBSYW5kb21OdW1iZXJTZWVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjg3MTA1QTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEY4MjRBNjcxQjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2Nr
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxNzE1MUE4MjVCMDA0MTIzRkYgLyogUmVkQmxh
Y2tUcmVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxODE1MUE4MjVCMDA0MTIzRkYgLyog
UmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTkxNTFBODI1QjAwNDEyM0ZG
IC8qIFJlZkNvdW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMTY3LDYgKzExODAsNyBA
QAogCQkJCTE0Njk0MTkyMTZFQUFGNkQwMDI0RTE0NiAvKiBSdW5Mb29wVGltZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RjNCMEY3MTVFNDVFNDYwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1l
dGljLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDY5NDE5NjE2RUFBRkY4MDAyNEUxNDYgLyogU2No
ZWR1bGVQYWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjgyNEE2OTFCNzQ0M0EwMDAyRTM0NUQg
LyogUGFya2luZ0xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MUYxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MjAxNTFB
ODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QThBNDc0MjIxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuaCBpbiBIZWFkZXJzICovLApAQCAtMTMy
NSw2ICsxMzM5LDcgQEAKIAkJCWZpbGVzID0gKAogCQkJCUE4QTQ3Mzg2MTUxQTgyNUIwMDQxMjNG
RiAvKiBBc3NlcnRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3NDM1MTUxQTgyNUIw
MDQxMjNGRiAvKiBBdG9taWNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY4MjRBNjYx
Qjc0NDNBMDAwMkUzNDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlCQzcw
RjA1MTc2QzM3OUQwMDEwMURFQyAvKiBBdG9taWNTdHJpbmdUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNUJBMTVGQjE4MjQzNUE2MDBBODJFNjkgLyogU3RyaW5nQ0YuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ2OTQxOUQxNkVBQjEwQTAwMjRFMTQ2IC8qIEF1dG9kcmFpbmVkUG9vbE1h
Yy5tbSBpbiBTb3VyY2VzICovLApAQCAtMTM0MCw2ICsxMzU1LDcgQEAKIAkJCQlBOEE0NzM5QTE1
MUE4MjVCMDA0MTIzRkYgLyogQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQThBNDc0MzkxNTFBODI1QjAwNDEyM0ZGIC8qIENTdHJpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUMxNTFBODI1QjAwNDEyM0ZGIC8qIEN1cnJlbnRUaW1l
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RjQ2RjYwMUEyODQwRUUwMENDQkYyMiAv
KiBSZWZDb3VudGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3MzlFMTUxQTgyNUIwMDQx
MjNGRiAvKiBEYXRhTG9nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4QTQ3M0EwMTUxQTgyNUIw
MDQxMjNGRiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XVEYv
YmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL2Jl
bmNobWFya3MvTG9ja1NwZWVkVGVzdC5jcHAJKHJldmlzaW9uIDE4ODEwMCkKKysrIFNvdXJjZS9X
VEYvYmVuY2htYXJrcy9Mb2NrU3BlZWRUZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5j
bHVkZSA8d3RmL0xvY2suaD4KICNpbmNsdWRlIDx3dGYvU3BpbkxvY2suaD4KQEAgLTQzLDcgKzQ0
LDcgQEAgdW5zaWduZWQgbnVtSXRlcmF0aW9uczsKICAgICAKIHZvaWQgdXNhZ2UoKQogewotICAg
IHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xtdXRleHxhbGwgPG51
bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29yayBwZXIgY3JpdGlj
YWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+XG4iKTsKKyAg
ICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8Ynl0ZWxvY2t8bXV0
ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBncm91cD4gPHdvcmsg
cGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51bSBpdGVyYXRpb25z
PlxuIik7CiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTI1LDYgKzEyNiwxMCBAQCBpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxMb2NrPigiV1RGIExv
Y2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CisgICAgaWYgKCFzdHJjbXAoYXJn
dlsxXSwgImJ5dGVsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikpIHsKKyAgICAgICAg
cnVuQmVuY2htYXJrPEJ5dGVMb2NrPigiV1RGIEJ5dGVMb2NrIik7CisgICAgICAgIGRpZFJ1biA9
IHRydWU7CisgICAgfQogICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRleCIpIHx8ICFzdHJj
bXAoYXJndlsxXSwgImFsbCIpKSB7CiAgICAgICAgIHJ1bkJlbmNobWFyazxNdXRleD4oIlBsYXRm
b3JtIE11dGV4Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9BdG9taWNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQXRvbWljcy5oCShyZXZp
c2lvbiAxODgwOTkpCisrKyBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTkxLDEyICs5MSwxOCBAQCBzdHJ1Y3QgQXRvbWljIHsKIAogICAgIGJvb2wgY29tcGFyZUV4
Y2hhbmdlV2VhayhUIGV4cGVjdGVkLCBUIGRlc2lyZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVy
ID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkKICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAg
ICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0OworI2VuZGlmCiAgICAgICAg
IFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVkOwogICAgICAgICByZXR1cm4gdmFsdWUuY29t
cGFyZV9leGNoYW5nZV93ZWFrKGV4cGVjdGVkT3JBY3R1YWwsIGRlc2lyZWQsIG9yZGVyKTsKICAg
ICB9CiAKICAgICBib29sIGNvbXBhcmVFeGNoYW5nZVN0cm9uZyhUIGV4cGVjdGVkLCBUIGRlc2ly
ZWQsIHN0ZDo6bWVtb3J5X29yZGVyIG9yZGVyID0gc3RkOjptZW1vcnlfb3JkZXJfc2VxX2NzdCkK
ICAgICB7CisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRl
cl9zZXFfY3N0OworI2VuZGlmCiAgICAgICAgIFQgZXhwZWN0ZWRPckFjdHVhbCA9IGV4cGVjdGVk
OwogICAgICAgICByZXR1cm4gdmFsdWUuY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoZXhwZWN0ZWRP
ckFjdHVhbCwgZGVzaXJlZCwgb3JkZXIpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J5
dGVMb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5dGVMb2NrLmgiCisKKyNp
bmNsdWRlICJQYXJraW5nTG90LmgiCisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgV1RG
IHsKKworc3RhdGljIGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCit2b2lkIEJ5dGVMb2NrOjpsb2Nr
U2xvdygpCit7CisgICAgdW5zaWduZWQgc3BpbkNvdW50ID0gMDsKKworICAgIC8vIFRoaXMgbWFn
aWMgbnVtYmVyIHR1cm5zIG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0g
ZXhwZXJpbWVudHMuCisgICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisg
ICAgZm9yICg7OykgeworICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUu
bG9hZCgpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwg
IlxuIikpOworCisgICAgICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICYm
IG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRl
VmFsdWUgfCBpc0hlbGRCaXQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElm
IHRoZXJlIGlzIG5vYm9keSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2Ug
Y2FuIGp1c3QgdHJ5IHRvIHNwaW4gYXJvdW5kLgorICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZh
bHVlICYgaGFzUGFya2VkQml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAg
ICAgIHNwaW5Db3VudCsrOworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBw
YXJrLiBXZSBkbyB0aGlzIGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVu
IHBhcmtpbmcuIFdlIHNwaW4gYXJvdW5kCisgICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdh
c24ndCBzZXQgYW5kIHdlIGZhaWxlZCBhdCBzZXR0aW5nIGl0LgorICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21w
YXJlRXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQ
YXJrZWRCaXQpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGV4
cGVjdCB0aGUgdmFsdWUgdG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3Mg
dGhlIGNhc2UsIHdlIGNhbiBwYXJrLgorICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFy
aygmbV9ieXRlLCBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQpOworCisgICAgICAgIC8vIFdlIGhh
dmUgYXdha2VuLCBvciB3ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFu
Z2VkLiBFaXRoZXIgd2F5LCB3ZSBsb29wCisgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWlu
LgorICAgIH0KK30KKwordm9pZCBCeXRlTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAgLy8gUmVs
ZWFzZSB0aGUgbG9jayB3aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtlZC4gTm90
ZSB0aGF0IGFzIHNvb24gYXMgd2UgZG8gdGhpcywKKyAgICAvLyBzb21lb25lIG1pZ2h0IGJhcmdl
IGluLgorICAgIHVpbnQ4X3Qgb2xkQnl0ZVZhbHVlOworICAgIGZvciAoOzspIHsKKyAgICAgICAg
b2xkQnl0ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5sb2NraW5nIHdp
dGggIiwgb2xkQnl0ZVZhbHVlLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUg
JiBpc0hlbGRCaXQpOworICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xk
Qnl0ZVZhbHVlLCAwKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE5vdGUg
dGhhdCBzb21lb25lIGNvdWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5z
LCB0aGV5IHdpbGwgcmV0dXJuIGltbWVkaWF0ZWx5CisgICAgLy8gYmVjYXVzZSBvdXIgcGFya2lu
ZyBwcmVkaWNhdGUgaXMgdGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0LCBi
dXQgd2UndmUgYWxyZWFkeSBzZXQKKyAgICAvLyBtX2J5dGUgPSAwLgorCisgICAgLy8gSWYgdGhl
cmUgaGFkIGJlZW4gdGhyZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVz
ZXMgYSB0aHVuZGVyaW5nIGhlcmQsIGJ1dCB3aGlsZQorICAgIC8vIHRoYXQgaXMgdGhlb3JldGlj
YWxseSBzY2FyeSwgaXQncyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxs
eSBkb24ndCBoYXZlIGVub3VnaAorICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgor
ICAgIGlmIChvbGRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgIFBhcmtpbmdMb3Q6
OnVucGFya0FsbCgmbV9ieXRlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQnl0
ZUxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeXRlTG9ja19oCisjZGVmaW5lIEJ5dGVMb2NrX2gK
KworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVGhpcyBp
cyBsaWtlIExvY2ssIGJ1dCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBpbnN0ZWFkIG9mIHNpemVvZih2
b2lkKikgc3RvcmFnZS4gVGhlIGRvd25zaWRlIGlzIHRoYXQKKy8vIGl0IGlzIHNsb3dlciBvbiB0
aGUgc2xvdyBwYXRoIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24gaW52b2x2aW5nIG1hbnkgdGhyZWFk
cyBiZWNhdXNlIGl0IGlzCisvLyBzdXNjZXB0aWJsZSB0byB0aGUgInRodW5kZXJpbmcgaGVyZCIg
cHJvYmxlbTogaXQgZG9lc24ndCBoYXZlIGVub3VnaCBzdGF0ZSB0byB0cmFjayBob3cgbWFueQor
Ly8gdGhyZWFkcyBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2ssIHNvIHdoZW4gdW5sb2NrIGRldGVj
dHMgdGhhdCBhbnkgdGhyZWFkIGlzIHdhaXRpbmcsIHRoZW4gaXQgd2FrZXMKKy8vIGFsbCBvZiB0
aGUgd2FpdGluZyB0aHJlYWRzLiBBbGwgb2YgdGhvc2UgdGhyZWFkcyB3aWxsIHBpbGUgb250byB0
aGUgbG9jazsgb25lIHdpbGwgc3VjY2VlZCBhbmQgdGFrZQorLy8gaXQgd2hpbGUgdGhlIG90aGVy
cyB3aWxsIGdvIGJhY2sgdG8gc2xlZXAuIFRoZSBzbG93LWRvd24gaXMgc21hbGwuIFRlbiB0aHJl
YWRzIHJlcGVhdGVkbHkKKy8vIGNvbnRlbmRpbmcgZm9yIHRoZSBzYW1lIH4xLTEwdXMgbG9uZyBj
cml0aWNhbCBzZWN0aW9uIHdpbGwgcnVuIDclIHNsb3dlciBvbiBteSBtYWNoaW5lLiBJZiBJIG1l
c3MKKy8vIHdpdGggYW55IG9mIHRoZSBwYXJhbWV0ZXJzIC0gY2hhbmdlIHRoZSBudW1iZXIgb2Yg
dGhyZWFkcyBvciBjaGFuZ2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gZHVyYXRpb24gLQorLy8gdGhl
biBCeXRlTG9jayByZWFjaGVzIHBhcml0eSB3aXRoIExvY2ssIGFuZCBzb21ldGltZXMgb3V0cGVy
Zm9ybXMgaXQuIFBlcmhhcHMgbW9zdCBzdXJwcmlzaW5nbHksCisvLyB0aGUgc2xvdy1kb3duIGdv
ZXMgYXdheSBldmVuIHdoZW4geW91IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgdGhyZWFkcy4gQnl0
ZUxvY2sgYXBwZWFycyB0byBzb21ldGltZXMKKy8vIGJlIGZhc3RlciB1bmRlciBtaWNyb2NvbnRl
bnRpb24sIHBlcmhhcHMgYmVjYXVzZSBhIGNvbnRlbnRpb3VzIDgtYml0IENBUyBpcyBjaGVhcGVy
IHRoYW4gYQorLy8gY29udGVudGlvdXMgNjQtYml0IENBUy4gTm90ZSB0aGF0IHVuY29udGVuZGVk
IGxvY2tpbmcgaXMgZXF1YWxseSBmYXN0IHdpdGggQnl0ZUxvY2sgYXMgd2l0aCBMb2NrLgorLy8g
SW4gYWxsLCBMb2NrIGFuZCBCeXRlTG9jayBoYXZlIHNpbWlsYXIgcGVyZm9ybWFuY2UgdW5kZXIg
Y29udHJvbGxlZCBtaWNyb2JlbmNobWFya3MsIGJ1dCBMb2NrIGlzCisvLyB0aGVvcmV0aWNhbGx5
IHNhZmVyIGJlY2F1c2Ugb2YgdGhlIHRodW5kZXJpbmcgaGVyZCBpc3N1ZS4gSXQncyBwcm9iYWJs
eSBiZXN0IHRvIHVzZSBCeXRlTG9jayBvbmx5CisvLyB3aGVuIHlvdSByZWFsbHkgY2FyZSBhYm91
dCBzcGFjZSBhbmQgeW91IGRvbid0IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhhdCBhIGxhcmdl
IG51bWJlciBvZgorLy8gdGhyZWFkcyB3b3VsZCBldmVyIHBpbGUgb250byB0aGUgc2FtZSBsb2Nr
LgorY2xhc3MgQnl0ZUxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVMb2NrKTsK
K3B1YmxpYzoKKyAgICBCeXRlTG9jaygpCisgICAgeworICAgICAgICBtX2J5dGUuc3RvcmUoMCwg
c3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9jaygp
CisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKDAs
IGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAv
LyBMb2NrIGFjcXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgbG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAg
ICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVsZEJpdCwgMCwgc3Rk
OjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIHJlbGVhc2Vk
IGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2Fj
cXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKworICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOworICAgIHN0YXRpYyBjb25zdCB1aW50
OF90IGhhc1BhcmtlZEJpdCA9IDI7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBsb2Nr
U2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Nsb3coKTsKKworICAg
IEF0b21pYzx1aW50OF90PiBtX2J5dGU7Cit9OworCit0eXBlZGVmIExvY2tlcjxCeXRlTG9jaz4g
Qnl0ZUxvY2tlcjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6Qnl0ZUxvY2s7
Cit1c2luZyBXVEY6OkJ5dGVMb2NrZXI7CisKKyNlbmRpZiAvLyBCeXRlTG9ja19oCisKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODgxMDApCisrKyBTb3VyY2UvV1RGL3d0Zi9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDcgQEAgc2V0KFdURl9IRUFE
RVJTCiAgICAgQml0VmVjdG9yLmgKICAgICBCaXRtYXAuaAogICAgIEJ1bXBQb2ludGVyQWxsb2Nh
dG9yLmgKKyAgICBCeXRlTG9jay5oCiAgICAgQnl0ZU9yZGVyLmgKICAgICBDb21waWxhdGlvblRo
cmVhZC5oCiAgICAgQ29tcGlsZXIuaApAQCAtNjIsNiArNjMsNyBAQCBzZXQoV1RGX0hFQURFUlMK
ICAgICBQYXJhbGxlbEpvYnNHZW5lcmljLmgKICAgICBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5o
CiAgICAgUGFyYWxsZWxKb2JzT3Blbk1QLmgKKyAgICBQYXJraW5nTG90LmgKICAgICBQYXNzUmVm
UHRyLmgKICAgICBQbGF0Zm9ybS5oCiAgICAgUHJpbnRTdHJlYW0uaApAQCAtMTQ0LDYgKzE0Niw3
IEBAIHNldChXVEZfU09VUkNFUwogICAgIEFzc2VydGlvbnMuY3BwCiAgICAgQXRvbWljcy5jcHAK
ICAgICBCaXRWZWN0b3IuY3BwCisgICAgQnl0ZUxvY2suY3BwCiAgICAgQ29tcGlsYXRpb25UaHJl
YWQuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAKICAgICBDcnlwdG9ncmFwaGlj
YWxseVJhbmRvbU51bWJlci5jcHAKQEAgLTE2Niw2ICsxNjksNyBAQCBzZXQoV1RGX1NPVVJDRVMK
ICAgICBPU1JhbmRvbVNvdXJjZS5jcHAKICAgICBQYWdlQmxvY2suY3BwCiAgICAgUGFyYWxsZWxK
b2JzR2VuZXJpYy5jcHAKKyAgICBQYXJraW5nTG90LmNwcAogICAgIFByaW50U3RyZWFtLmNwcAog
ICAgIFJBTVNpemUuY3BwCiAgICAgUmFuZG9tTnVtYmVyLmNwcApJbmRleDogU291cmNlL1dURi93
dGYvUGFya2luZ0xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xv
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFya2lu
Z0xvdC5oIgorCisjaW5jbHVkZSAiSGFzaEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIkxvY2suaCIK
KyNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgorI2luY2x1ZGUgIlRocmVhZFNwZWNpZmlj
LmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZlcy5oIgorI2luY2x1ZGUgIlZlY3Rvci5o
IgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRocmVhZD4KKworbmFtZXNwYWNlIFdURiB7
CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9IGZhbHNlOworCitzdHJ1Y3QgVGhyZWFk
RGF0YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgCisgICAg
VGhyZWFkRGF0YSgpOworICAgIH5UaHJlYWREYXRhKCk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVy
IHRocmVhZElkZW50aWZpZXI7CisgICAgCisgICAgYm9vbCBzaG91bGRQYXJrIHsgZmFsc2UgfTsK
KyAgICBzdGQ6Om11dGV4IHBhcmtpbmdMb2NrOworICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxl
IHBhcmtpbmdDb25kaXRpb247CisKKyAgICBjb25zdCB2b2lkKiBhZGRyZXNzOworICAgIFRocmVh
ZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0ciB9OworfTsKKworZW51bSBjbGFzcyBEZXF1ZXVl
UmVzdWx0IHsKKyAgICBJZ25vcmUsCisgICAgUmVtb3ZlQW5kQ29udGludWUsCisgICAgUmVtb3Zl
QW5kU3RvcAorfTsKKworc3RydWN0IEJ1Y2tldCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdm9pZCBlbnF1ZXVlKFRocmVhZERhdGEqIGRhdGEpCisgICAgewor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoZGF0YSksICIgd2l0aCBhZGRy
ZXNzID0gIiwgUmF3UG9pbnRlcihkYXRhLT5hZGRyZXNzKSwgIiBvbnRvICIsIFJhd1BvaW50ZXIo
dGhpcyksICJcbiIpKTsKKyAgICAgICAgQVNTRVJUKGRhdGEtPmFkZHJlc3MpOworICAgICAgICBB
U1NFUlQoIWRhdGEtPm5leHRJblF1ZXVlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChxdWV1ZVRh
aWwpIHsKKyAgICAgICAgICAgIHF1ZXVlVGFpbC0+bmV4dEluUXVldWUgPSBkYXRhOworICAgICAg
ICAgICAgcXVldWVUYWlsID0gZGF0YTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIHF1ZXVlSGVhZCA9IGRhdGE7CisgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGdlbmVyaWNE
ZXF1ZXVlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1
ZXVlaW5nIGZyb20gYnVja2V0IGF0ICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghcXVldWVIZWFkKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW1w
dHkuXG4iKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBU
aGlzIGxvb3AgaXMgYSB2ZXJ5IGNsZXZlciBhYm9taW5hdGlvbi4gVGhlIGluZHVjdGlvbiB2YXJp
YWJsZXMgYXJlIHRoZSBwb2ludGVyIHRvIHRoZQorICAgICAgICAvLyBwb2ludGVyIHRvIHRoZSBj
dXJyZW50IG5vZGUsIGFuZCB0aGUgcG9pbnRlciB0byB0aGUgcHJldmlvdXMgbm9kZS4gVGhpcyBn
aXZlcyB1cyBldmVyeXRoaW5nCisgICAgICAgIC8vIHdlIG5lZWQgdG8gYm90aCBwcm9jZWVkIGZv
cndhcmQgdG8gdGhlIG5leHQgbm9kZSwgYW5kIHRvIHJlbW92ZSBub2RlcyB3aGlsZSBtYWludGFp
bmluZyB0aGUKKyAgICAgICAgLy8gcXVldWVIZWFkL3F1ZXVlVGFpbCBhbmQgYWxsIG9mIHRoZSBu
ZXh0SW5RdWV1ZSBsaW5rcy4gRm9yIGV4YW1wbGUsIHdoZW4gd2UgYXJlIGF0IHRoZSBoZWFkCisg
ICAgICAgIC8vIGVsZW1lbnQsIHRoZW4gcmVtb3ZhbCBtZWFucyByZXdpcmluZyBxdWV1ZUhlYWQs
IGFuZCBpZiBpdCB3YXMgYWxzbyBlcXVhbCB0byBxdWV1ZVRhaWwsIHRoZW4KKyAgICAgICAgLy8g
d2UnZCB3YW50IHF1ZXVlVGFpbCB0byBiZSBzZXQgdG8gbnVsbHB0ci4gVGhpcyB3b3JrcyBiZWNh
dXNlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgY3VycmVudFB0ciA9PSAmcXVldWVIZWFk
CisgICAgICAgIC8vICAgICBwcmV2aW91cyA9PSBudWxscHRyCisgICAgICAgIC8vCisgICAgICAg
IC8vIFdlIHJlbW92ZSBieSBzZXR0aW5nICpjdXJyZW50UHRyID0gKCpjdXJyZW50UHRyKS0+bmV4
dEluUXVldWUsIGkuZS4gY2hhbmdpbmcgdGhlIHBvaW50ZXIKKyAgICAgICAgLy8gdGhhdCB1c2Vk
IHRvIHBvaW50IHRvIHRoaXMgbm9kZSB0byBpbnN0ZWFkIHBvaW50IHRvIHRoaXMgbm9kZSdzIHN1
Y2Nlc3Nvci4gQW5vdGhlciBleGFtcGxlOgorICAgICAgICAvLyBpZiB3ZSB3ZXJlIGF0IHRoZSBz
ZWNvbmQgbm9kZSBpbiB0aGUgcXVldWUsIHRoZW4gd2UnZCBoYXZlOgorICAgICAgICAvLworICAg
ICAgICAvLyAgICAgY3VycmVudFB0ciA9PSAmcXVldWVIZWFkLT5uZXh0SW5RdWV1ZQorICAgICAg
ICAvLyAgICAgcHJldmlvdXMgPT0gcXVldWVIZWFkCisgICAgICAgIC8vCisgICAgICAgIC8vIElm
IHRoaXMgbm9kZSBpcyBub3QgZXF1YWwgdG8gcXVldWVUYWlsLCB0aGVuIHJlbW92aW5nIGl0IHNp
bXBseSBtZWFucyBtYWtpbmcKKyAgICAgICAgLy8gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZSBwb2lu
dCB0byBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlLT5uZXh0SW5RdWV1ZSAod2hpY2ggdGhlIGFsZ29y
aXRobQorICAgICAgICAvLyBhY2hpZXZlcyBieSBtdXRhdGluZyAqY3VycmVudFB0cikuIElmIHRo
aXMgbm9kZSBpcyBlcXVhbCB0byBxdWV1ZVRhaWwsIHRoZW4gd2Ugd2FudCB0byBzZXQKKyAgICAg
ICAgLy8gcXVldWVUYWlsIHRvIHByZXZpb3VzLCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgcXVldWVI
ZWFkIC0gdGh1cyBtYWtpbmcgdGhlIHF1ZXVlIGxvb2sgbGlrZSBhCisgICAgICAgIC8vIHByb3Bl
ciBvbmUtZWxlbWVudCBxdWV1ZSB3aXRoIHF1ZXVlSGVhZCA9PSBxdWV1ZVRhaWwuCisgICAgICAg
IGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOworICAgICAgICBUaHJlYWREYXRhKiogY3VycmVu
dFB0ciA9ICZxdWV1ZUhlYWQ7CisgICAgICAgIFRocmVhZERhdGEqIHByZXZpb3VzID0gbnVsbHB0
cjsKKyAgICAgICAgd2hpbGUgKHNob3VsZENvbnRpbnVlKSB7CisgICAgICAgICAgICBUaHJlYWRE
YXRhKiBjdXJyZW50ID0gKmN1cnJlbnRQdHI7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZ290IHRo
cmVhZCAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiXG4iKSk7CisgICAgICAgICAgICBpZiAoIWN1
cnJlbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBEZXF1ZXVlUmVzdWx0
IHJlc3VsdCA9IGZ1bmN0b3IoY3VycmVudCk7CisgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkg
eworICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU6CisgICAgICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBjdXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcihjdXJyZW50UHRyKSwg
IiwgKmN1cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKCpjdXJyZW50UHRyKSwgIlxuIikpOworICAg
ICAgICAgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsKKyAgICAgICAgICAgICAgICBjdXJyZW50
UHRyID0gJigqY3VycmVudFB0ciktPm5leHRJblF1ZXVlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKKyAg
ICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcDoKKyAgICAgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhj
dXJyZW50VGhyZWFkKCksICI6IGRlcXVldWVpbmcgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIiBm
cm9tICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudCA9PSBxdWV1ZVRhaWwpCisgICAgICAgICAgICAgICAgICAgIHF1ZXVlVGFpbCA9IHByZXZp
b3VzOworICAgICAgICAgICAgICAgICpjdXJyZW50UHRyID0gY3VycmVudC0+bmV4dEluUXVldWU7
CisgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dEluUXVldWUgPSBudWxscHRyOworICAgICAg
ICAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcCkKKyAg
ICAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCghIXF1
ZXVlSGVhZCA9PSAhIXF1ZXVlVGFpbCk7CisgICAgfQorICAgIAorICAgIFRocmVhZERhdGEqIGRl
cXVldWUoKQorICAgIHsKKyAgICAgICAgVGhyZWFkRGF0YSogcmVzdWx0ID0gbnVsbHB0cjsKKyAg
ICAgICAgZ2VuZXJpY0RlcXVldWUoCisgICAgICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1l
bnQpIC0+IERlcXVldWVSZXN1bHQgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBUaHJl
YWREYXRhKiBxdWV1ZUhlYWQgeyBudWxscHRyIH07CisgICAgVGhyZWFkRGF0YSogcXVldWVUYWls
IHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhpcyBsb2NrIHByb3RlY3RzIHRoZSBlbnRpcmUgYnVj
a2V0LiBUaG91IHNoYWxsIG5vdCBtYWtlIGNoYW5nZXMgdG8gQnVja2V0IHdpdGhvdXQgaG9sZGlu
ZworICAgIC8vIHRoaXMgbG9jay4KKyAgICBMb2NrIGxvY2s7CisKKyAgICAvLyBQdXQgc29tZSBk
aXN0YW5lIGJldHdlZW4gYnVja2V0cyBpbiBtZW1vcnkuIFRoaXMgaXMgb25lIG9mIHNldmVyYWwg
bWl0aWdhdGlvbnMgYWdhaW5zdCBmYWxzZQorICAgIC8vIHNoYXJpbmcuCisgICAgY2hhciBwYWRk
aW5nWzY0XTsKK307CisKK3N0cnVjdCBIYXNodGFibGUgeworICAgIHVuc2lnbmVkIHNpemU7Cisg
ICAgQXRvbWljPEJ1Y2tldCo+IGRhdGFbMV07CisKKyAgICBzdGF0aWMgSGFzaHRhYmxlKiBjcmVh
dGUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChzaXplID49IDEpOworICAg
ICAgICAKKyAgICAgICAgSGFzaHRhYmxlKiByZXN1bHQgPSBzdGF0aWNfY2FzdDxIYXNodGFibGUq
PigKKyAgICAgICAgICAgIGZhc3RaZXJvZWRNYWxsb2Moc2l6ZW9mKEhhc2h0YWJsZSkgKyBzaXpl
b2YoQXRvbWljPEJ1Y2tldCo+KSAqIChzaXplIC0gMSkpKTsKKyAgICAgICAgcmVzdWx0LT5zaXpl
ID0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9p
ZCBkZXN0cm95KEhhc2h0YWJsZSogaGFzaHRhYmxlKQorICAgIHsKKyAgICAgICAgZmFzdEZyZWUo
aGFzaHRhYmxlKTsKKyAgICB9Cit9OworCitUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiogdGhy
ZWFkRGF0YTsKK0F0b21pYzxIYXNodGFibGUqPiBoYXNodGFibGU7CitBdG9taWM8dW5zaWduZWQ+
IG51bVRocmVhZHM7CisKKy8vIFdpdGggNjQgYnl0ZXMgb2YgcGFkZGluZyBwZXIgYnVja2V0LCBh
c3N1bWluZyBhIGhhc2h0YWJsZSBpcyBmdWxseSBwb3B1bGF0ZWQgd2l0aCBidWNrZXRzLCB0aGUK
Ky8vIG1lbW9yeSB1c2FnZSBwZXIgdGhyZWFkIHdpbGwgc3RpbGwgYmUgbGVzcyB0aGFuIDFLQi4K
K2NvbnN0IHVuc2lnbmVkIG1heExvYWRGYWN0b3IgPSAzOworCitjb25zdCB1bnNpZ25lZCBncm93
dGhGYWN0b3IgPSAyOworCit1bnNpZ25lZCBoYXNoQWRkcmVzcyhjb25zdCB2b2lkKiBhZGRyZXNz
KQoreworICAgIHJldHVybiBXVEY6OlB0ckhhc2g8Y29uc3Qgdm9pZCo+OjpoYXNoKGFkZHJlc3Mp
OworfQorCisvLyBMb2NrcyB0aGUgaGFzaHRhYmxlLiBUaGlzIHJlbG9vcHMgaW4gY2FzZSBvZiBy
ZWhhc2hpbmcsIHNvIHRoZSBjdXJyZW50IGhhc2h0YWJsZSBtYXkgYmUgZGlmZmVyZW50CisvLyBh
ZnRlciB0aGlzIHJldHVybnMgdGhhbiB3aGVuIHlvdSBjYWxsZWQgaXQuIEd1YXJhbnRlZXMgdGhh
dCB0aGVyZSBpcyBhIGhhc2h0YWJsZS4gVGhpcyBpcyBwcmV0dHkKKy8vIHNsb3cgYW5kIG5vdCBz
Y2FsYWJsZSwgc28gaXQncyBvbmx5IHVzZWQgZHVyaW5nIHRocmVhZCBjcmVhdGlvbiBhbmQgZm9y
IGRlYnVnZ2luZy90ZXN0aW5nLgorVmVjdG9yPEJ1Y2tldCo+IGxvY2tIYXNodGFibGUoKQorewor
ICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRhYmxlKiBjdXJyZW50SGFzaHRhYmxlOworCisg
ICAgICAgIGN1cnJlbnRIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOworICAgICAgICBpZiAo
IWN1cnJlbnRIYXNodGFibGUpIHsKKyAgICAgICAgICAgIC8vIFRyeSB0byBiZSB0aGUgZmlyc3Qg
dG8gY3JlYXRlIHRoZSBoYXNodGFibGUuCisgICAgICAgICAgICBjdXJyZW50SGFzaHRhYmxlID0g
SGFzaHRhYmxlOjpjcmVhdGUobWF4TG9hZEZhY3Rvcik7CisgICAgICAgICAgICBpZiAoIWhhc2h0
YWJsZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIGN1cnJlbnRIYXNodGFibGUpKSB7Cisg
ICAgICAgICAgICAgICAgSGFzaHRhYmxlOjpkZXN0cm95KGN1cnJlbnRIYXNodGFibGUpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IGNyZWF0ZWQgaW5pdGlhbCBoYXNodGFibGUgIiwgUmF3UG9pbnRlcihjdXJyZW50SGFzaHRh
YmxlKSwgIlxuIikpOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IGZpbmQgYWxsIG9mIHRo
ZSBidWNrZXRzLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgaGFzaHRhYmxlIGlzIGZ1bGwgb2Yg
YnVja2V0cyBzbyB0aGF0CisgICAgICAgIC8vIHdlIGNhbiBsb2NrIGFsbCBvZiB0aGUgYnVja2V0
cywgbm90IGp1c3QgdGhlIG9uZXMgdGhhdCBhcmUgbWF0ZXJpYWxpemVkLgorICAgICAgICBWZWN0
b3I8QnVja2V0Kj4gYnVja2V0czsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudEhh
c2h0YWJsZS0+c2l6ZTsgaS0tOykgeworICAgICAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNr
ZXRQb2ludGVyID0gY3VycmVudEhhc2h0YWJsZS0+ZGF0YVtpXTsKKworICAgICAgICAgICAgZm9y
ICg7OykgeworICAgICAgICAgICAgICAgIEJ1Y2tldCogYnVja2V0ID0gYnVja2V0UG9pbnRlci5s
b2FkKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgICAg
ICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghYnVj
a2V0UG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIGJ1Y2tldCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBidWNrZXQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIGJ1Y2tldHMuYXBwZW5kKGJ1Y2tldCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgbG9jayB0
aGUgYnVja2V0cyBpbiB0aGUgcmlnaHQgb3JkZXIuCisgICAgICAgIHN0ZDo6c29ydChidWNrZXRz
LmJlZ2luKCksIGJ1Y2tldHMuZW5kKCkpOworICAgICAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDog
YnVja2V0cykKKyAgICAgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAgLy8g
SWYgdGhlIGhhc2h0YWJsZSBkaWRuJ3QgY2hhbmdlICh3YXNuJ3QgcmVoYXNoZWQpIHdoaWxlIHdl
IHdlcmUgbG9ja2luZyBpdCwgdGhlbiB3ZSBvd24gaXQKKyAgICAgICAgLy8gbm93LgorICAgICAg
ICBpZiAoaGFzaHRhYmxlLmxvYWQoKSA9PSBjdXJyZW50SGFzaHRhYmxlKQorICAgICAgICAgICAg
cmV0dXJuIGJ1Y2tldHM7CisKKyAgICAgICAgLy8gVGhlIGhhc2h0YWJsZSByZWhhc2hlZC4gVW5s
b2NrIGV2ZXJ5dGhpbmcgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgZm9yIChCdWNrZXQqIGJ1Y2tl
dCA6IGJ1Y2tldHMpCisgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgfQor
fQorCit2b2lkIHVubG9ja0hhc2h0YWJsZShjb25zdCBWZWN0b3I8QnVja2V0Kj4mIGJ1Y2tldHMp
Cit7CisgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IGJ1Y2tldHMpCisgICAgICAgIGJ1Y2tldC0+
bG9jay51bmxvY2soKTsKK30KKworLy8gUmVoYXNoIHRoZSBoYXNodGFibGUgdG8gaGFuZGxlIG51
bVRocmVhZHMgdGhyZWFkcy4KK3ZvaWQgZW5zdXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1U
aHJlYWRzKQoreworICAgIC8vIFdlIHRyeSB0byBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBvZiB0aGUg
aGFzaHRhYmxlIHVzZWQgZm9yIHRocmVhZCBxdWV1ZXMgaXMgYWx3YXlzIGxhcmdlIGVub3VnaAor
ICAgIC8vIHRvIGF2b2lkIGNvbGxpc2lvbnMuIFNvLCBzaW5jZSB3ZSBzdGFydGVkIGEgbmV3IHRo
cmVhZCwgd2UgbWF5IG5lZWQgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlCisgICAgLy8gaGFz
aHRhYmxlLiBUaGlzIGRvZXMganVzdCB0aGF0LiBOb3RlIHRoYXQgd2UgbmV2ZXIgZnJlZSB0aGUg
b2xkIHNwaW5lLCBzaW5jZSB3ZSBuZXZlciBsb2NrCisgICAgLy8gYXJvdW5kIHNwaW5lIGFjY2Vz
c2VzIChpLmUuIHRoZSAiaGFzaHRhYmxlIiBnbG9iYWwgdmFyaWFibGUpLgorCisgICAgLy8gRmly
c3QgZG8gYSBmYXN0IGNoZWNrIHRvIHNlZSBpZiByZWhhc2hpbmcgaXMgbmVlZGVkLgorICAgIEhh
c2h0YWJsZSogb2xkSGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICBpZiAob2xkSGFz
aHRhYmxlICYmIHN0YXRpY19jYXN0PGRvdWJsZT4ob2xkSGFzaHRhYmxlLT5zaXplKSAvIHN0YXRp
Y19jYXN0PGRvdWJsZT4obnVtVGhyZWFkcykgPj0gbWF4TG9hZEZhY3RvcikgeworICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgp
LCAiOiBubyBuZWVkIHRvIHJlaGFzaCBiZWNhdXNlICIsIG9sZEhhc2h0YWJsZS0+c2l6ZSwgIiAv
ICIsIG51bVRocmVhZHMsICIgPj0gIiwgbWF4TG9hZEZhY3RvciwgIlxuIikpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gU2VlbXMgbGlrZSB3ZSAqbWlnaHQqIGhhdmUgdG8gcmVo
YXNoLCBzbyBsb2NrIHRoZSBoYXNodGFibGUgYW5kIHRyeSBhZ2Fpbi4KKyAgICBWZWN0b3I8QnVj
a2V0Kj4gYnVja2V0c1RvVW5sb2NrID0gbG9ja0hhc2h0YWJsZSgpOworCisgICAgLy8gQ2hlY2sg
YWdhaW4sIHNpbmNlIHRoZSBoYXNodGFibGUgY291bGQgaGF2ZSByZWhhc2hlZCB3aGlsZSB3ZSB3
ZXJlIGxvY2tpbmcgaXQuIEFsc28sCisgICAgLy8gbG9ja0hhc2h0YWJsZSgpIGNyZWF0ZXMgYW4g
aW5pdGlhbCBoYXNodGFibGUgZm9yIHVzLgorICAgIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5s
b2FkKCk7CisgICAgaWYgKG9sZEhhc2h0YWJsZSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhh
c2h0YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3VibGU+KG51bVRocmVhZHMpID49IG1heExv
YWRGYWN0b3IpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogYWZ0ZXIgbG9ja2luZywgbm8gbmVlZCB0byByZWhh
c2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49
ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsKKyAgICAgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tl
dHNUb1VubG9jayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBWZWN0b3I8QnVja2V0
Kj4gcmV1c2FibGVCdWNrZXRzID0gYnVja2V0c1RvVW5sb2NrOworCisgICAgLy8gT0ssIG5vdyB3
ZSByZXNpemUuIEZpcnN0IHdlIGdhdGhlciBhbGwgdGhyZWFkIGRhdGFzIGZyb20gdGhlIG9sZCBo
YXNodGFibGUuIFRoZXNlIHRocmVhZCBkYXRhcworICAgIC8vIGFyZSBwbGFjZWQgaW50byB0aGUg
dmVjdG9yIGluIHF1ZXVlIG9yZGVyLgorICAgIFZlY3RvcjxUaHJlYWREYXRhKj4gdGhyZWFkRGF0
YXM7CisgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IHJldXNhYmxlQnVja2V0cykgeworICAgICAg
ICB3aGlsZSAoVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGJ1Y2tldC0+ZGVxdWV1ZSgpKQorICAg
ICAgICAgICAgdGhyZWFkRGF0YXMuYXBwZW5kKHRocmVhZERhdGEpOworICAgIH0KKworICAgIHVu
c2lnbmVkIG5ld1NpemUgPSBudW1UaHJlYWRzICogZ3Jvd3RoRmFjdG9yICogbWF4TG9hZEZhY3Rv
cjsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4gb2xkSGFzaHRhYmxlLT5zaXplKTsKKyAg
ICAKKyAgICBIYXNodGFibGUqIG5ld0hhc2h0YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG5ld1Np
emUpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRU
aHJlYWQoKSwgIjogY3JlYXRlZCBuZXcgaGFzaHRhYmxlOiAiLCBSYXdQb2ludGVyKG5ld0hhc2h0
YWJsZSksICJcbiIpKTsKKyAgICBmb3IgKFRocmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWRE
YXRhcykgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiByZWhhc2hpbmcgdGhyZWFkIGRhdGEgIiwgUmF3UG9pbnRl
cih0aHJlYWREYXRhKSwgIiB3aXRoIGFkZHJlc3MgPSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEt
PmFkZHJlc3MpLCAiXG4iKSk7CisgICAgICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyh0
aHJlYWREYXRhLT5hZGRyZXNzKTsKKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBoYXNoICUgbmV3
SGFzaHRhYmxlLT5zaXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBpbmRleCA9ICIsIGluZGV4LCAiXG4iKSk7
CisgICAgICAgIEJ1Y2tldCogYnVja2V0ID0gbmV3SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5sb2Fk
KCk7CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBpZiAocmV1c2FibGVCdWNr
ZXRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnVja2V0ID0gcmV1c2FibGVCdWNrZXRz
LnRha2VMYXN0KCk7CisgICAgICAgICAgICBuZXdIYXNodGFibGUtPmRhdGFbaW5kZXhdLnN0b3Jl
KGJ1Y2tldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJ1Y2tldC0+ZW5xdWV1ZSh0
aHJlYWREYXRhKTsKKyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCB0aGVyZSBtYXkg
YmUgc29tZSBidWNrZXRzIGxlZnQgdW5yZXVzZWQuIFRoaXMgY291bGQgZWFzaWx5IGhhcHBlbiBp
ZiB0aGUKKyAgICAvLyBudW1iZXIgb2YgZW5xdWV1ZWQgdGhyZWFkcyByaWdodCBub3cgaXMgbG93
IGJ1dCB0aGUgaGlnaCB3YXRlcm1hcmsgb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzCisgICAgLy8g
ZW5xdWV1ZWQgd2FzIGhpZ2guIFdlIHBsYWNlIHRoZXNlIGJ1Y2tldHMgaW50byB0aGUgaGFzaHRh
YmxlIGJhc2ljYWxseSBhdCByYW5kb20sIGp1c3QgdG8KKyAgICAvLyBtYWtlIHN1cmUgd2UgZG9u
J3QgbGVhayB0aGVtLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBuZXdIYXNodGFibGUt
PnNpemUgJiYgIXJldXNhYmxlQnVja2V0cy5pc0VtcHR5KCk7ICsraSkgeworICAgICAgICBBdG9t
aWM8QnVja2V0Kj4mIGJ1Y2tldFB0ciA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpXTsKKyAgICAgICAg
aWYgKGJ1Y2tldFB0ci5sb2FkKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnVj
a2V0UHRyLnN0b3JlKHJldXNhYmxlQnVja2V0cy50YWtlTGFzdCgpKTsKKyAgICB9CisgICAgCisg
ICAgLy8gU2luY2Ugd2UgaW5jcmVhc2VkIHRoZSBzaXplIG9mIHRoZSBoYXNodGFibGUsIHdlIHNo
b3VsZCBoYXZlIGV4aGF1c3RlZCBvdXIgcHJlYWxsb2NhdGVkCisgICAgLy8gYnVja2V0cyBieSBu
b3cuCisgICAgQVNTRVJUKHJldXNhYmxlQnVja2V0cy5pc0VtcHR5KCkpOworICAgIAorICAgIC8v
IE9LLCByaWdodCBub3cgdGhlIG9sZCBoYXNodGFibGUgaXMgbG9ja2VkIHVwIGFuZCB0aGUgbmV3
IGhhc2h0YWJsZSBpcyByZWFkeSB0byByb2NrIGFuZAorICAgIC8vIHJvbGwuIEFmdGVyIHdlIGlu
c3RhbGwgdGhlIG5ldyBoYXNodGFibGUsIHdlIGNhbiByZWxlYXNlIGFsbCBidWNrZXQgbG9ja3Mu
CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBoYXNodGFibGUuY29tcGFyZUV4Y2hhbmdlU3Ryb25n
KG9sZEhhc2h0YWJsZSwgbmV3SGFzaHRhYmxlKTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQp
OworCisgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7Cit9CisKK1RocmVhZERh
dGE6OlRocmVhZERhdGEoKQorICAgIDogdGhyZWFkSWRlbnRpZmllcihjdXJyZW50VGhyZWFkKCkp
Cit7CisgICAgdW5zaWduZWQgY3VycmVudE51bVRocmVhZHM7CisgICAgZm9yICg7OykgeworICAg
ICAgICB1bnNpZ25lZCBvbGROdW1UaHJlYWRzID0gbnVtVGhyZWFkcy5sb2FkKCk7CisgICAgICAg
IGN1cnJlbnROdW1UaHJlYWRzID0gb2xkTnVtVGhyZWFkcyArIDE7CisgICAgICAgIGlmIChudW1U
aHJlYWRzLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkTnVtVGhyZWFkcywgY3VycmVudE51bVRocmVh
ZHMpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZW5zdXJlSGFzaHRhYmxlU2l6
ZShjdXJyZW50TnVtVGhyZWFkcyk7Cit9CisKK1RocmVhZERhdGE6On5UaHJlYWREYXRhKCkKK3sK
KyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVuc2lnbmVkIG9sZE51bVRocmVhZHMgPSBudW1UaHJl
YWRzLmxvYWQoKTsKKyAgICAgICAgaWYgKG51bVRocmVhZHMuY29tcGFyZUV4Y2hhbmdlV2Vhayhv
bGROdW1UaHJlYWRzLCBvbGROdW1UaHJlYWRzIC0gMSkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK1RocmVhZERhdGEqIG15VGhyZWFkRGF0YSgpCit7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBp
bml0aWFsaXplT25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgdGhyZWFkRGF0YSA9IG5l
dyBUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPigpOworICAgICAgICB9KTsKKworICAgIHJldHVy
biAqdGhyZWFkRGF0YTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2Jvb2wgZW5x
dWV1ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAg
IHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyhhZGRyZXNzKTsKKworICAgIGZvciAoOzspIHsK
KyAgICAgICAgSGFzaHRhYmxlKiBteUhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAg
ICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG15SGFzaHRhYmxlLT5zaXplOworICAgICAgICBB
dG9taWM8QnVja2V0Kj4mIGJ1Y2tldFBvaW50ZXIgPSBteUhhc2h0YWJsZS0+ZGF0YVtpbmRleF07
CisgICAgICAgIEJ1Y2tldCogYnVja2V0OworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAg
ICBidWNrZXQgPSBidWNrZXRQb2ludGVyLmxvYWQoKTsKKyAgICAgICAgICAgIGlmICghYnVja2V0
KSB7CisgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOworICAgICAgICAgICAg
ICAgIGlmICghYnVja2V0UG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIGJ1Y2tl
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGJ1Y2tldDsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW5xdWV1ZWluZyBvbnRvIGJ1
Y2tldCAiLCBSYXdQb2ludGVyKGJ1Y2tldCksICIgd2l0aCBpbmRleCAiLCBpbmRleCwgIiBmb3Ig
YWRkcmVzcyAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiIHdpdGggaGFzaCAiLCBoYXNoLCAiXG4i
KSk7CisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCisgICAgICAg
IGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBidWNr
ZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBmdW5jdG9yKCk7CisgICAgICAgIGJvb2wg
cmVzdWx0OworICAgICAgICBpZiAodGhyZWFkRGF0YSkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IHByb2NlZWRpbmcgdG8gZW5xdWV1ZSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEpLCAiXG4iKSk7
CisgICAgICAgICAgICBidWNrZXQtPmVucXVldWUodGhyZWFkRGF0YSk7CisgICAgICAgICAgICBy
ZXN1bHQgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNl
OworICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorYm9vbCBkZXF1ZXVlKGNv
bnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1
ZXVlaW5nIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIlxuIikpOworICAgIHVuc2ln
bmVkIGhhc2ggPSBoYXNoQWRkcmVzcyhhZGRyZXNzKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGhhc2ggPSAiLCBoYXNoLCAi
XG4iKSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSogbXlIYXNodGFibGUg
PSBoYXNodGFibGUubG9hZCgpOworICAgICAgICBpZiAoIW15SGFzaHRhYmxlKSB7CisgICAgICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogbm8gaGFzaHRhYmxlLlxuIikpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG15SGFzaHRh
YmxlLT5zaXplOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBpbmRleCA9ICIsIGluZGV4LCAiXG4iKSk7CisgICAg
ICAgIEJ1Y2tldCogYnVja2V0ID0gbXlIYXNodGFibGUtPmRhdGFbaW5kZXhdLmxvYWQoKTsKKyAg
ICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBubyBidWNrZXQgYXQg
IiwgUmF3UG9pbnRlcihidWNrZXQpLCAiLlxuIikpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyBidWNrZXQgYXQgIiwgUmF3UG9p
bnRlcihidWNrZXQpLCAiXG4iKSk7CisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhy
ZWFkKCksICI6IGxvY2tlZCBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiXG4iKSk7
CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVo
YXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRh
YmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaGFzaHRhYmxlIGNoYW5nZWQuXG4iKSk7Cisg
ICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0
b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGZvdW5kIGJ1Y2tldC5cbiIpKTsKKyAgICAgICAg
YnVja2V0LT5nZW5lcmljRGVxdWV1ZShmdW5jdG9yKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAh
IWJ1Y2tldC0+cXVldWVIZWFkOworICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworYm9vbCBQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseShjb25zdCB2b2lkKiBhZGRyZXNz
LCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFsaWRhdGlvbikKK3sKKyAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHBhcmtpbmcuXG4i
KSk7CisgICAgCisgICAgVGhyZWFkRGF0YSogbWUgPSBteVRocmVhZERhdGEoKTsKKworICAgIEFT
U0VSVCghbWUtPnNob3VsZFBhcmspOworICAgIAorICAgIGJvb2wgcmVzdWx0ID0gZW5xdWV1ZSgK
KyAgICAgICAgYWRkcmVzcywKKyAgICAgICAgWyZdICgpIC0+IFRocmVhZERhdGEqIHsKKyAgICAg
ICAgICAgIGlmICghdmFsaWRhdGlvbigpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgICAgICAgICBtZS0+YWRkcmVzcyA9IGFkZHJlc3M7CisgICAgICAgICAgICBtZS0+
c2hvdWxkUGFyayA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gbWU7CisgICAgICAgIH0pOwor
CisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2lu
ZyBzZWxmOiAiLCBSYXdQb2ludGVyKG1lKSwgIlxuIikpOworICAgIHsKKyAgICAgICAgc3RkOjp1
bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAg
d2hpbGUgKG1lLT5zaG91bGRQYXJrKQorICAgICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24u
d2FpdChsb2NrZXIpOworCisgICAgICAgIG1lLT5hZGRyZXNzID0gbnVsbHB0cjsKKyAgICB9Cisg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgp
LCAiOiB1bnBhcmtlZCBzZWxmOiAiLCBSYXdQb2ludGVyKG1lKSwgIlxuIikpOworICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFBhcmtpbmdMb3Q6OnVucGFya09uZShjb25zdCB2b2lkKiBhZGRy
ZXNzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJl
bnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIG9uZS5cbiIpKTsKKworICAgIFRocmVhZERhdGEqIHRo
cmVhZERhdGEgPSBudWxscHRyOworICAgIGJvb2wgcmVzdWx0ID0gZGVxdWV1ZSgKKyAgICAgICAg
YWRkcmVzcywKKyAgICAgICAgWyZdIChUaHJlYWREYXRhKiBlbGVtZW50KSB7CisgICAgICAgICAg
ICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBhZGRyZXNzKQorICAgICAgICAgICAgICAgIHJldHVy
biBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7CisgICAgICAgICAgICB0aHJlYWREYXRhID0gZWxlbWVu
dDsKKyAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOworICAg
ICAgICB9KTsKKworICAgIGlmICghdGhyZWFkRGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgQVNTRVJUKHRocmVhZERhdGEtPnNob3VsZFBhcmspOworICAgIAorICAgIHsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2lu
Z0xvY2spOworICAgICAgICB0aHJlYWREYXRhLT5zaG91bGRQYXJrID0gZmFsc2U7CisgICAgICAg
IHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X2FsbCgpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZv
aWQqIGFkZHJlc3MpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgYWxsIGZyb20gIiwgUmF3UG9pbnRlcihh
ZGRyZXNzKSwgIi5cbiIpKTsKKyAgICAKKyAgICBWZWN0b3I8VGhyZWFkRGF0YSosIDg+IHRocmVh
ZERhdGFzOworICAgIGRlcXVldWUoCisgICAgICAgIGFkZHJlc3MsCisgICAgICAgIFsmXSAoVGhy
ZWFkRGF0YSogZWxlbWVudCkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IE9ic2VydmluZyBlbGVt
ZW50IHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIoZWxlbWVudC0+YWRkcmVzcyksICJcbiIp
KTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5hZGRyZXNzICE9IGFkZHJlc3MpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6Oklnbm9yZTsKKyAgICAgICAgICAgIHRocmVh
ZERhdGFzLmFwcGVuZChlbGVtZW50KTsKKyAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0
OjpSZW1vdmVBbmRDb250aW51ZTsKKyAgICAgICAgfSk7CisKKyAgICBmb3IgKFRocmVhZERhdGEq
IHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwg
UmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIiB3aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJl
YWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+c2hv
dWxkUGFyayk7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRo
cmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9
IGZhbHNlOworICAgICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9hbGwo
KTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhj
dXJyZW50VGhyZWFkKCksICI6IGRvbmUgdW5wYXJraW5nLlxuIikpOworfQorCit2b2lkIFBhcmtp
bmdMb3Q6OmZvckVhY2goc3RkOjpmdW5jdGlvbjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0
IHZvaWQqKT4gY2FsbGJhY2spCit7CisgICAgVmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9j
ayA9IGxvY2tIYXNodGFibGUoKTsKKworICAgIEhhc2h0YWJsZSogY3VycmVudEhhc2h0YWJsZSA9
IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudEhhc2h0YWJs
ZS0+c2l6ZTsgaS0tOykgeworICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IGN1cnJlbnRIYXNodGFi
bGUtPmRhdGFbaV0ubG9hZCgpOworICAgICAgICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBmb3IgKFRocmVhZERhdGEqIGN1cnJlbnRUaHJlYWREYXRhID0gYnVj
a2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJlYWREYXRhOyBjdXJyZW50VGhyZWFkRGF0YSA9IGN1
cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1ZSkKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJl
bnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlmaWVyLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVz
cyk7CisgICAgfQorICAgIAorICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvUGFya2luZ0xv
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgV1RGX1BhcmtpbmdMb3RfaAorI2RlZmluZSBXVEZfUGFya2luZ0xvdF9oCisKKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNs
dWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQYXJraW5n
TG90IHsKKyAgICBQYXJraW5nTG90KCkgPSBkZWxldGU7CisgICAgUGFya2luZ0xvdChjb25zdCBQ
YXJraW5nTG90JikgPSBkZWxldGU7CisKK3B1YmxpYzoKKyAgICAvLyBQYXJrcyB0aGUgdGhyZWFk
IGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5u
b3QgYmUgbnVsbC4gVGhlCisgICAgLy8gcGFya2luZyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxp
ZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGlsZSB0aGUgcXVldWUgbG9jayBpcyBoZWxk
LgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwYXJrQ29uZGl0aW9uYWxseShj
b25zdCB2b2lkKiBhZGRyZXNzLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFsaWRhdGlvbik7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorICAgIHN0YXRpYyBib29sIGNv
bXBhcmVBbmRQYXJrKGNvbnN0IEF0b21pYzxUPiogYWRkcmVzcywgVSBleHBlY3RlZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseSgKKyAgICAgICAgICAgIGFkZHJlc3Ms
CisgICAgICAgICAgICBbYWRkcmVzcywgZXhwZWN0ZWRdICgpIC0+IGJvb2wgeworICAgICAgICAg
ICAgICAgIFUgdmFsdWUgPSBhZGRyZXNzLT5sb2FkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhbHVlID09IGV4cGVjdGVkOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVW5w
YXJrcyBvbmUgdGhyZWFkIGZyb20gdGhlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4g
YWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51bGwuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZXJlIG1heSBzdGlsbCBiZSBvdGhlciB0aHJlYWRzIG9uIHRoYXQgcXVldWUsIG9yIGZhbHNlIGlm
IHRoZXJlIGRlZmluaXRlbHkKKyAgICAvLyBhcmUgbm8gbW9yZSB0aHJlYWRzIG9uIHRoZSBxdWV1
ZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgdW5wYXJrT25lKGNvbnN0IHZv
aWQqIGFkZHJlc3MpOworCisgICAgLy8gVW5wYXJrcyBldmVyeSB0aHJlYWQgZnJvbSB0aGUgcXVl
dWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVs
bC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJrQWxsKGNvbnN0IHZv
aWQqIGFkZHJlc3MpOworCisgICAgLy8gTG9ja3MgdGhlIHBhcmtpbmcgbG90IGFuZCB3YWxrcyBh
bGwgb2YgdGhlIHBhcmtlZCB0aHJlYWRzIGFuZCB0aGUgYWRkcmVzc2VzIHRoZXkgYXJlIHdhaXRp
bmcKKyAgICAvLyBvbi4gVGhyZWFkcyB0aGF0IGFyZSBvbiB0aGUgc2FtZSBxdWV1ZSBhcmUgZ3Vh
cmFudGVlZCB0byBiZSB3YWxrZWQgZnJvbSBmaXJzdCB0byBsYXN0LCBidXQgdGhlCisgICAgLy8g
cXVldWVzIG1heSBiZSByYW5kb21seSBpbnRlcmxlYXZlZC4gRm9yIGV4YW1wbGUsIGlmIHRoZSBx
dWV1ZSBmb3IgYWRkcmVzcyBBMSBoYXMgVDEgYW5kIFQyIGFuZAorICAgIC8vIHRoZSBxdWV1ZSBm
b3IgYWRkcmVzcyBBMiBoYXMgVDMgYW5kIFQ0LCB0aGVuIHlvdSBtaWdodCBzZWUgaXRlcmF0aW9u
IG9yZGVycyBsaWtlOgorICAgIC8vCisgICAgLy8gQTEsVDEgQTEsVDIgQTIsVDMgQTIsVDQKKyAg
ICAvLyBBMixUMyBBMixUNCBBMSxUMSBBMSxUMgorICAgIC8vIEExLFQxIEEyLFQzIEExLFQyIEEy
LFQ0CisgICAgLy8gQTEsVDEgQTIsVDMgQTIsVDQgQTEsVDIKKyAgICAvLworICAgIC8vIEFzIHdl
bGwgYXMgbWFueSBvdGhlciBwb3NzaWJsZSBpbnRlcmxlYXZlcyB0aGF0IGFsbCBoYXZlIFQxIGJl
Zm9yZSBUMiBhbmQgVDMgYmVmb3JlIFQ0IGJ1dCBhcmUKKyAgICAvLyBvdGhlcndpc2UgdW5jb25z
dHJhaW5lZC4gVGhpcyBtZXRob2QgaXMgdXNlZnVsIHByaW1hcmlseSBmb3IgZGVidWdnaW5nLiBJ
dCdzIGFsc28gdXNlZCBieSB1bml0CisgICAgLy8gdGVzdHMuCisgICAgV1RGX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyB2b2lkIGZvckVhY2goc3RkOjpmdW5jdGlvbjx2b2lkKFRocmVhZElkZW50aWZp
ZXIsIGNvbnN0IHZvaWQqKT4pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6UGFya2luZ0xvdDsKKworI2VuZGlmIC8vIFdURl9QYXJraW5nTG90X2gKKwpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODEwMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xMSw2ICsxMSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9y
bVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29j
b2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0g
Ki87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUph
dmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0
Lm1tICovOyB9OworCQkwRkU0NDc5OTFCNzZGMUVCMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5NzFC
NzZGMUUzMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CiAJCTBGRkM0NUE2MUI3M0VC
RUIwMDg1QkQ2MiAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAvKiBMb2NrLmNwcCAqLzsgfTsK
IAkJMUEwMkM4NzAxMjVENENGRDAwRTNGNEJEIC8qIGZpbmQuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0QjEyNUQ0QTVFMDBF
M0Y0QkQgLyogZmluZC5odG1sICovOyB9OwogCQkxQTUwQUEyMDFBMkE1MUZDMDBGNEMzNDUgLyog
Y2xvc2UtZnJvbS13aXRoaW4tY3JlYXRlLXBhZ2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTUwQUExRjFBMkE0RUE1MDBGNEMzNDUg
LyogY2xvc2UtZnJvbS13aXRoaW4tY3JlYXRlLXBhZ2UuaHRtbCAqLzsgfTsKQEAgLTQyOSw2ICs0
MzAsNyBAQAogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVK
YXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tX
ZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU0NDc5NzFCNzZGMUUzMDA5
NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzQ1
QTQxQjczRUJFMjAwODVCRDYyIC8qIExvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDY0
MDEyMTY3QTgzMDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpY09w
ZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2F0dXJh
dGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTEwNiw2ICsxMTA4LDcgQEAKIAkJCQk5M0E0MjdBQzE4MERBNjBGMDBDRDI0RDcgLyogTW92
ZU9ubHkuaCAqLywKIAkJCQlGRUI2Rjc0RTFCMkJBNDRFMDA5RTQ5MjIgLyogTmFrZWRQdHIuY3Bw
ICovLAogCQkJCTFBRkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25hbC5jcHAgKi8sCisJ
CQkJMEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwICovLAogCQkJCTBG
QzZDNENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovLAogCQkJCTkzQTQy
N0FBMTgwREEyNjQwMENEMjRENyAvKiBSZWYuY3BwICovLAogCQkJCTg2QkQxOTk3MUEyREIwNUIw
MDZEQ0YwQSAvKiBSZWZDb3VudGVyLmNwcCAqLywKQEAgLTE2MjYsNiArMTYyOSw3IEBACiAJCQkJ
N0NDRTdFRDcxQTQxMUE3RTAwNDQ3QzRDIC8qIFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VS
TENyYXNoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMUMxQTQxMUFFNjAwNDQ3QzRDIC8q
IFdpbGxTZW5kU3VibWl0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDgxQTQx
MUE3RTAwNDQ3QzRDIC8qIFdpbGxTZW5kU3VibWl0RXZlbnQubW0gaW4gU291cmNlcyAqLywKKwkJ
CQkwRkU0NDc5OTFCNzZGMUVCMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0VEOTFBNDExQTdFMDA0NDdDNEMgLyogV2luZG93bGVzc1dlYlZpZXdXaXRo
TWVkaWEubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YyRTFBNDExQjEwMDA0NDdDNEMgLyog
V0tCcm93c2luZ0NvbnRleHRHcm91cFRlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0Yy
RjFBNDExQjEwMDA0NDdDNEMgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVUZXN0Lm1t
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNw
cAkocmV2aXNpb24gMTg4MTAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1By
aW1pdGl2ZXMuaD4KQEAgLTk0LDcgKzk1LDQyIEBAIFRFU1QoV1RGX0xvY2ssIE1hbnlDb250ZW50
ZWRTaG9ydFNlY3Rpb24KIAogVEVTVChXVEZfTG9jaywgTWFueUNvbnRlbnRlZExvbmdTZWN0aW9u
cykKIHsKLSAgICBydW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAsIDEwMDAwLCAyMDAwKTsKKyAgICBy
dW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAsIDEwMDAwLCAxMDAwKTsKK30KKworVEVTVChXVEZfQnl0
ZUxvY2ssIFVuY29udGVudGVkU2hvcnRTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVM
b2NrPigxLCAxLCAxLCAxMDAwMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBVbmNvbnRl
bnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxLCAxMDAw
MCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBDb250ZW50ZWRTaG9ydFNlY3Rpb24p
Cit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEwLCAxLCAxMDAwMDAwMCk7Cit9CisK
K1RFU1QoV1RGX0J5dGVMb2NrLCBDb250ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAgICBydW5Mb2Nr
VGVzdDxCeXRlTG9jaz4oMSwgMTAsIDEwMDAwLCAxMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVM
b2NrLCBNYW55Q29udGVudGVkU2hvcnRTZWN0aW9ucykKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRl
TG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworfQorCitURVNUKFdURl9CeXRlTG9jaywgTWFueUNv
bnRlbnRlZExvbmdTZWN0aW9ucykKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMTAsIDEw
LCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBTZWN0aW9uQWRkcmVzc0Nv
bGxpc2lvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oNCwgMiwgMTAwMDAsIDIwMDAp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNl
IHsKKworc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CisgICAgdm9pZCBpbml0aWFsaXplKHVuc2ln
bmVkIG51bVRocmVhZHMpCisgICAgeworICAgICAgICBsYXRjaC5zdG9yZSgwKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVRocmVhZHM7IGktLTspIHsKKyAgICAgICAg
ICAgIHRocmVhZHMuYXBwZW5kKAorICAgICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAg
ICAgICAgICAgICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAorICAgICAgICAgICAgICAgICAg
ICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBjdXJyZW50
VGhyZWFkKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY3Vy
cmVudExhdGNoVmFsdWUgPSBsYXRjaC5sb2FkKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRMYXRjaFZhbHVlID4g
MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGF0Y2guY29tcGFyZUV4
Y2hhbmdlV2VhayhjdXJyZW50TGF0Y2hWYWx1ZSwgY3VycmVudExhdGNoVmFsdWUgLSAxKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUGFya2luZ0xvdDo6Y29tcGFyZUFuZFBhcmsoJmxhdGNoLCBjdXJyZW50TGF0Y2hWYWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIo
bG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRocmVhZCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbi5ub3RpZnlfb25lKCk7CisgICAg
ICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgdW5wYXJr
T25lKHVuc2lnbmVkIHNpbmdsZVVucGFya0luZGV4KQorICAgIHsKKyAgICAgICAgdW5zaWduZWQg
bnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CisgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCisg
ICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIgdGhyZWFkSWRlbnRpZmllciwgY29uc3Qg
dm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZsYXRjaCkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgbnVtV2FpdGlu
Z09uQWRkcmVzcysrOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgRVhQRUNUX0xFKG51bVdh
aXRpbmdPbkFkZHJlc3MsIHRocmVhZHMuc2l6ZSgpIC0gc2luZ2xlVW5wYXJrSW5kZXgpOworCisg
ICAgICAgIEVYUEVDVF9FUSgwdSwgbGF0Y2gubG9hZCgpKTsKKyAgICAgICAgbGF0Y2guc3RvcmUo
MSk7CisgICAgICAgIFBhcmtpbmdMb3Q6OnVucGFya09uZSgmbGF0Y2gpOworCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOwor
ICAgICAgICAgICAgd2hpbGUgKGF3YWtlLnNpemUoKSA8IHNpbmdsZVVucGFya0luZGV4ICsgMSkK
KyAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCBmaW5pc2godW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykKKyAgICB7Cisg
ICAgICAgIHVuc2lnbmVkIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOworICAgICAgICBQYXJraW5n
TG90Ojpmb3JFYWNoKAorICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2
b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJmxhdGNoKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOworICAgICAgICAgICAgfSk7CisgICAgICAgIAor
ICAgICAgICBFWFBFQ1RfTEUobnVtV2FpdGluZ09uQWRkcmVzcywgdGhyZWFkcy5zaXplKCkgLSBu
dW1TaW5nbGVVbnBhcmtzKTsKKyAgICAKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBsYXRjaC5sb2Fk
KCkpOworICAgICAgICBsYXRjaC5zdG9yZSh0aHJlYWRzLnNpemUoKSAtIG51bVNpbmdsZVVucGFy
a3MpOworICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJmxhdGNoKTsKKworICAgICAgICBu
dW1XYWl0aW5nT25BZGRyZXNzID0gMDsKKyAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKKyAg
ICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgewor
ICAgICAgICAgICAgICAgIGlmIChhZGRyZXNzICE9ICZsYXRjaCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRk
cmVzcysrOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBudW1XYWl0
aW5nT25BZGRyZXNzKTsKKyAgICAKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
bG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CisgICAgICAgICAgICB3aGlsZSAoYXdha2Uu
c2l6ZSgpIDwgdGhyZWFkcy5zaXplKCkpCisgICAgICAgICAgICAgICAgY29uZGl0aW9uLndhaXQo
bG9ja2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJl
YWRJZGVudGlmaWVyIDogdGhyZWFkcykKKyAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0
aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIH0KKyAgICAKKyAgICBBdG9taWM8dW5zaWduZWQ+
IGxhdGNoOworICAgIHN0ZDo6bXV0ZXggbG9jazsKKyAgICBzdGQ6OmNvbmRpdGlvbl92YXJpYWJs
ZSBjb25kaXRpb247CisgICAgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBhd2FrZTsKKyAgICBW
ZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKK307CisKK3ZvaWQgcnVuUGFya2luZ1Rl
c3QodW5zaWduZWQgbnVtTGF0Y2hlcywgdW5zaWduZWQgZGVsYXksIHVuc2lnbmVkIG51bVRocmVh
ZHMsIHVuc2lnbmVkIG51bVNpbmdsZVVucGFya3MpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFNp
bmdsZUxhdGNoVGVzdFtdPiB0ZXN0cyA9IHN0ZDo6bWFrZV91bmlxdWU8U2luZ2xlTGF0Y2hUZXN0
W10+KG51bUxhdGNoZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBsYXRjaEluZGV4ID0gbnVtTGF0
Y2hlczsgbGF0Y2hJbmRleC0tOykKKyAgICAgICAgdGVzdHNbbGF0Y2hJbmRleF0uaW5pdGlhbGl6
ZShudW1UaHJlYWRzKTsKKworICAgIGZvciAodW5zaWduZWQgdW5wYXJrSW5kZXggPSAwOyB1bnBh
cmtJbmRleCA8IG51bVNpbmdsZVVucGFya3M7ICsrdW5wYXJrSW5kZXgpIHsKKyAgICAgICAgdXNs
ZWVwKGRlbGF5KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBsYXRjaEluZGV4ID0gbnVtTGF0Y2hl
czsgbGF0Y2hJbmRleC0tOykKKyAgICAgICAgICAgIHRlc3RzW2xhdGNoSW5kZXhdLnVucGFya09u
ZSh1bnBhcmtJbmRleCk7CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBsYXRjaEluZGV4ID0g
bnVtTGF0Y2hlczsgbGF0Y2hJbmRleC0tOykKKyAgICAgICAgdGVzdHNbbGF0Y2hJbmRleF0uZmlu
aXNoKG51bVNpbmdsZVVucGFya3MpOworfQorCit2b2lkIHJlcGVhdFBhcmtpbmdUZXN0KHVuc2ln
bmVkIG51bVJlcGVhdHMsIHVuc2lnbmVkIG51bUxhdGNoZXMsIHVuc2lnbmVkIGRlbGF5LCB1bnNp
Z25lZCBudW1UaHJlYWRzLCB1bnNpZ25lZCBudW1TaW5nbGVVbnBhcmtzKQoreworICAgIHdoaWxl
IChudW1SZXBlYXRzLS0pCisgICAgICAgIHJ1blBhcmtpbmdUZXN0KG51bUxhdGNoZXMsIGRlbGF5
LCBudW1UaHJlYWRzLCBudW1TaW5nbGVVbnBhcmtzKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya0FsbE9uZUZhc3QpCit7CisgICAg
cmVwZWF0UGFya2luZ1Rlc3QoMTAwMDAsIDEsIDAsIDEsIDApOworfQorCitURVNUKFdURl9QYXJr
aW5nTG90LCBVbnBhcmtBbGxIdW5kcmVkRmFzdCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgx
MDAwLCAxLCAwLCAxMDAsIDApOworfQorCitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtPbmVP
bmVGYXN0KQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEwMDAsIDEsIDAsIDEsIDEpOworfQor
CitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtPbmVIdW5kcmVkRmFzdCkKK3sKKyAgICByZXBl
YXRQYXJraW5nVGVzdCgxMDAsIDEsIDAsIDEwMCwgMTAwKTsKK30KKworVEVTVChXVEZfUGFya2lu
Z0xvdCwgVW5wYXJrT25lRmlmdHlUaGVuRmlmdHlBbGxGYXN0KQoreworICAgIHJlcGVhdFBhcmtp
bmdUZXN0KDIwMCwgMSwgMCwgMTAwLCA1MCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVu
cGFya0FsbE9uZSkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxMDAsIDEsIDEwMDAwLCAxLCAw
KTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJrQWxsSHVuZHJlZCkKK3sKKyAgICBy
ZXBlYXRQYXJraW5nVGVzdCgxMDAsIDEsIDEwMDAwLCAxMDAsIDApOworfQorCitURVNUKFdURl9Q
YXJraW5nTG90LCBVbnBhcmtPbmVPbmUpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAsIDEs
IDEwMDAwLCAxLCAxKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJrT25lSHVuZHJl
ZCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxLCAxLCAxMDAwMCwgMTAwLCAxMDApOworfQor
CitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtPbmVGaWZ0eVRoZW5GaWZ0eUFsbCkKK3sKKyAg
ICByZXBlYXRQYXJraW5nVGVzdCgyLCAxLCAxMDAwMCwgMTAwLCA1MCk7Cit9CisKK1RFU1QoV1RG
X1BhcmtpbmdMb3QsIEh1bmRyZWRVbnBhcmtBbGxPbmVGYXN0KQoreworICAgIHJlcGVhdFBhcmtp
bmdUZXN0KDEwMCwgMTAwLCAwLCAxLCAwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgSHVu
ZHJlZFVucGFya0FsbE9uZSkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxLCAxMDAsIDEwMDAw
LCAxLCAwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258650</attachid>
            <date>2015-08-10 14:12:48 -0700</date>
            <delta_ts>2015-08-10 14:34:56 -0700</delta_ts>
            <desc>it has tests even</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>68724</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDE1LTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBoYXZlIGEgUGFya2luZ0xvdCBmb3IgcGFya2luZyBzbGVlcGluZyB0aHJlYWRz
LCBzbyB0aGF0IGxvY2tzIGNhbiBmaXQgaW4gMS42IGJpdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY2NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgQnl0ZVNwaW5Mb2NrIHdpdGggQnl0
ZUxvY2suCisKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmg6CisKIDIwMTUt
MDgtMDcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBMZXQn
cyByZW5hbWUgRnVuY3Rpb25Cb2R5Tm9kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAxODgwOTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxNCArMjcsMTQgQEAKICNkZWZpbmUgQ29uY3VycmVudEpJVExvY2tfaAog
CiAjaW5jbHVkZSAiRGVmZXJHQy5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KKyNp
bmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlwZWRlZiBCeXRlU3Bp
bkxvY2sgQ29uY3VycmVudEpJVExvY2s7Ci10eXBlZGVmIEJ5dGVTcGluTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwordHlwZWRlZiBCeXRlTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5
cGVkZWYgQnl0ZUxvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKICNlbHNlCiB0eXBlZGVm
IE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKIHR5cGVkZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODIyOSkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTUtMDgtMTAgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEYgc2hvdWxkIGhhdmUg
YSBQYXJraW5nTG90IGZvciBwYXJraW5nIHNsZWVwaW5nIHRocmVhZHMsIHNvIHRoYXQgbG9ja3Mg
Y2FuIGZpdCBpbiAxLjYgYml0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ3NjY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWRkcyBhIG1ham9yIG5ldyBhYnN0cmFjdGlvbiBmb3Ig
Y29uY3VycmVuY3kgYWxnb3JpdGhtcyBpbiBXZWJLaXQuIEl0J3MgY2FsbGVkIGEKKyAgICAgICAg
UGFya2luZ0xvdCwgYW5kIGl0IG1ha2VzIGF2YWlsYWJsZSBhIHRocmVhZCBwYXJraW5nIHF1ZXVl
IGZvciBlYWNoIHZpcnR1YWwgYWRkcmVzcyBpbiBtZW1vcnkuCisgICAgICAgIFRoZSBxdWV1ZXMg
YXJlIG1haW50YWluZWQgYnkgYSBkYXRhLWFjY2Vzcy1wYXJhbGxlbCBjb25jdXJyZW50IGhhc2h0
YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhlCisgICAgICAgIG1lbW9yeSB1c2FnZSBpcyBib3VuZGVk
IGF0IGFyb3VuZCBoYWxmIGEgS0IgcGVyIHRocmVhZC4KKworICAgICAgICBUaGUgUGFya2luZ0xv
dCBtYWtlcyBpdCBlYXN5IHRvIHR1cm4gYW55IHNwaW5sb2NrLWJhc2VkIGNvbmN1cnJlbmN5IHBy
b3RvY29sIGludG8gb25lIHRoYXQKKyAgICAgICAgcGFya3MgdGhyZWFkcyBhZnRlciBhIHdoaWxl
LiBCZWNhdXNlIHF1ZXVlIHN0YXRlIG1hbmFnZW1lbnQgaXMgdXAgdG8gdGhlIFBhcmtpbmdMb3Qg
YW5kIG5vdAorICAgICAgICB0aGUgdXNlcidzIGRhdGEgc3RydWN0dXJlLCB0aGlzIHBhdGNoIHVz
ZXMgaXQgdG8gaW1wbGVtZW50IGEgZnVsbCBhZGFwdGl2ZSBtdXRleCBpbiBvbmUgYnl0ZS4KKyAg
ICAgICAgSW4gZmFjdCwgb25seSB0aHJlZSBzdGF0ZXMgb2YgdGhhdCBieXRlIGFyZSB1c2VkICgw
ID0gYXZhaWxhYmxlLCAxID0gbG9ja2VkLCAyID0gbG9ja2VkIGFuZAorICAgICAgICB0aGVyZSBh
cmUgcGFya2VkIHRocmVhZHMpLiBIZW5jZSB0aGUgam9rZSB0aGF0IFBhcmtpbmdMb3QgYWxsb3dz
IGxvY2tzIHRoYXQgZml0IGluIDEuNiBiaXRzLgorCisgICAgICAgIEJ5dGVMb2NrIGlzIHVzZWQg
YXMgYSByZXBsYWNlbWVudCBmb3IgQnl0ZVNwaW5Mb2NrIGluIEphdmFTY3JpcHRDb3JlLgorCisg
ICAgICAgIFRoZSBBUEkgdGVzdHMgZm9yIHRoaXMgYWxzbyBkZW1vIGhvdyB0byBjcmVhdGUgYSBj
b21wbGV0ZWx5IGZhaXIgKEZJRk8pIGJpbmFyeSBzZW1hbXBob3JlLiBUaGUKKyAgICAgICAgY29t
bWVudCBpbiBMb2NrLmggc2hvd3MgaG93IHdlIGNvdWxkIGFjY2VsZXJhdGUgTG9jayBwZXJmb3Jt
YW5jZSB1c2luZyBQYXJraW5nTG90LiBBZnRlciB3ZQorICAgICAgICBhcmUgc3VyZSB0aGF0IHRo
aXMgY29kZSB3b3Jrcywgd2UgY2FuIGV4cGFuZCB0aGUgdXNlIG9mIFBhcmtpbmdMb3QuIFRoYXQn
cyBjb3ZlcmVkIGJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDc4NDEuCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAg
ICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtz
L0xvY2tTcGVlZFRlc3QuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd3RmL0F0b21p
Y3MuaDoKKyAgICAgICAgKFdURjo6QXRvbWljOjpjb21wYXJlRXhjaGFuZ2VXZWFrKToKKyAgICAg
ICAgKFdURjo6QXRvbWljOjpjb21wYXJlRXhjaGFuZ2VTdHJvbmcpOgorICAgICAgICAqIHd0Zi9C
eXRlTG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6bG9ja1Nsb3cpOgor
ICAgICAgICAoV1RGOjpCeXRlTG9jazo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL0J5dGVM
b2NrLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6Qnl0ZUxvY2spOgorICAgICAg
ICAoV1RGOjpCeXRlTG9jazo6bG9jayk6CisgICAgICAgIChXVEY6OkJ5dGVMb2NrOjp1bmxvY2sp
OgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6aXNIZWxkKToKKyAgICAgICAgKFdURjo6Qnl0ZUxv
Y2s6OmlzTG9ja2VkKToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
d3RmL0xvY2suaDoKKyAgICAgICAgKiB3dGYvUGFya2luZ0xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseSk6CisgICAgICAgIChXVEY6OlBh
cmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya0Fs
bCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9Q
YXJraW5nTG90Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJraW5nTG90Ojpjb21wYXJlQW5k
UGFyayk6CisKIDIwMTUtMDgtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5j
YW5vbi5mcj4KIAogICAgICAgICBDb21waWxlIHdhcm5pbmcgKC1Xc2lnbi1jb21wYXJlKSBvbiAz
Mi1iaXRzIGF0IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
dmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg4MTAwKQorKysgU291cmNlL1dURi9XVEYu
dmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogICA8
SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEFzc2VydGlvbnMuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEJpdFZlY3Rvci5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQnl0ZUxvY2suY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cd3RmXENvbXBpbGF0aW9uVGhyZWFkLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5jcHAiIC8+CkBAIC0xMTYsNiArMTE3LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHd0ZlxPU1JhbmRvbVNvdXJjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3
dGZcUGFnZUJsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJh
bGxlbEpvYnNHZW5lcmljLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQ
YXJraW5nTG90LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQcmludFN0
cmVhbS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUkFNU2l6ZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUmFuZG9tTnVtYmVyLmNwcCIgLz4K
QEAgLTE3MSw2ICsxNzMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJsb2Nr
U3RhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCbG9vbUZpbHRlci5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQnl0ZUxvY2suaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxDaGVja2VkQXJpdGhtZXRpYy5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENoZWNrZWRCb29sZWFuLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ29tcGlsZXIuaCIgLz4KQEAgLTI0Niw2ICsyNDksNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9ic0dlbmVyaWMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnNMaWJkaXNwYXRj
aC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9ic09wZW5N
UC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmtpbmdMb3QuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXNzUmVmUHRyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGxhdGZvcm0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxQcmludFN0cmVhbS5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODgxMDApCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwx
MCBAQAogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0
RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKKwkJMEY4MjRBNjYxQjc0NDNBMDAwMkUz
NDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGODI0QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi87IH07
CisJCTBGODI0QTY3MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjMxQjc0NDNBMDAwMkUzNDVE
IC8qIEJ5dGVMb2NrLmggKi87IH07CisJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKKwkJMEY4
MjRBNjkxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQ
YXJraW5nTG90LmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2lu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3
MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjg4NUUwRjE4
NDVBRUE5MDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFz
dEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi87
IH07CkBAIC0zMDcsNiArMzExLDEwIEBACiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBE
ZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FF
M0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhv
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGODI0QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlTG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8q
IFBhcmtpbmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xv
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQ
b2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODg1RTBFMTg0NUFFOUYw
MEYxRTNGQSAvKiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZhc3RCaXRW
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE2LDYg
KzcyNCw4IEBACiAJCQkJQThBNDcyNjQxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb2NrU3RhY2suaCAq
LywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIzRkYgLyogQmxvb21GaWx0ZXIuaCAqLywKIAkJ
CQlBOEE0NzI2NzE1MUE4MjVBMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywK
KwkJCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwICovLAorCQkJCTBG
ODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovLAogCQkJCUVCOTVFMUVGMTYx
QTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAqLywKIAkJCQkwRkVDM0VFNDE3MUI4MzQ3MDBG
REFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8sCiAJCQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZG
IC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCkBAIC04MTAsNiArODIwLDggQEAKIAkJCQlBOEE0
NzJFNTE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZVJlc2VydmF0aW9uLmggKi8sCiAJCQkJQThBNDcy
RTYxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcmFsbGVsSm9icy5oICovLAogCQkJCUE4QTQ3MkU5MTUx
QTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oICovLAorCQkJCTBGODI0
QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLywKKwkJCQkwRjgyNEE2NTFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1
IC8qIFBsYXRmb3JtLmggKi8sCiAJCQkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50
U3RyZWFtLmNwcCAqLywKQEAgLTExNTYsNiArMTE2OCw3IEBACiAJCQkJQThBNDc0MTUxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTYx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDE3MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFy
cmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTExNjcsNiArMTE4MCw3IEBACiAJCQkJMTQ2OTQxOTIx
NkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRG
M0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Njk0MTk2MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVk
VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMDE1MUE4MjVCMDA0MTIzRkYgLyog
U2VudGluZWxMaW5rZWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMjE1MUE4MjVC
MDA0MTIzRkYgLyogU0hBMS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzI1LDYgKzEzMzksNyBAQAog
CQkJZmlsZXMgPSAoCiAJCQkJQThBNDczODYxNTFBODI1QjAwNDEyM0ZGIC8qIEFzc2VydGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzUxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21p
Y1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjgyNEE2NjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUJDNzBGMDUxNzZDMzc5RDAwMTAx
REVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZC
MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5
NDE5RDE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMzQwLDYgKzEzNTUsNyBAQAogCQkJCUE4QTQ3MzlBMTUxQTgyNUIwMDQxMjNGRiAv
KiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OEE0NzQzOTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBOEE0NzM5QzE1MUE4MjVCMDA0MTIzRkYgLyogQ3VycmVudFRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODZGNDZGNjAxQTI4NDBFRTAwQ0NCRjIyIC8qIFJlZkNvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUUxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQTAxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVN
YXRoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tT
cGVlZFRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3Bl
ZWRUZXN0LmNwcAkocmV2aXNpb24gMTg4MTAwKQorKysgU291cmNlL1dURi9iZW5jaG1hcmtzL0xv
Y2tTcGVlZFRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQnl0ZUxv
Y2suaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5oPgpAQCAtNDMsNyArNDQsNyBAQCB1bnNpZ25lZCBu
dW1JdGVyYXRpb25zOwogICAgIAogdm9pZCB1c2FnZSgpCiB7Ci0gICAgcHJpbnRmKCJVc2FnZTog
TG9ja1NwZWVkVGVzdCBzcGlubG9ja3xsb2NrfG11dGV4fGFsbCA8bnVtIHRocmVhZCBncm91cHM+
IDxudW0gdGhyZWFkcyBwZXIgZ3JvdXA+IDx3b3JrIHBlciBjcml0aWNhbCBzZWN0aW9uPiA8bnVt
IG5vaXNlIHRocmVhZHM+IDxudW0gaXRlcmF0aW9ucz5cbiIpOworICAgIHByaW50ZigiVXNhZ2U6
IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xieXRlbG9ja3xtdXRleHxhbGwgPG51bSB0aHJl
YWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29yayBwZXIgY3JpdGljYWwgc2Vj
dGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+XG4iKTsKICAgICBleGl0
KDEpOwogfQogCkBAIC0xMjUsNiArMTI2LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiog
YXJndikKICAgICAgICAgcnVuQmVuY2htYXJrPExvY2s+KCJXVEYgTG9jayIpOwogICAgICAgICBk
aWRSdW4gPSB0cnVlOwogICAgIH0KKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYnl0ZWxvY2si
KSB8fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgeworICAgICAgICBydW5CZW5jaG1hcms8Qnl0
ZUxvY2s+KCJXVEYgQnl0ZUxvY2siKTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsKKyAgICB9CiAg
ICAgaWYgKCFzdHJjbXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxs
IikpIHsKICAgICAgICAgcnVuQmVuY2htYXJrPE11dGV4PigiUGxhdGZvcm0gTXV0ZXgiKTsKICAg
ICAgICAgZGlkUnVuID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9BdG9taWNzLmgJKHJldmlzaW9uIDE4ODA5OSkKKysr
IFNvdXJjZS9XVEYvd3RmL0F0b21pY3MuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTIgKzkxLDE4
IEBAIHN0cnVjdCBBdG9taWMgewogCiAgICAgYm9vbCBjb21wYXJlRXhjaGFuZ2VXZWFrKFQgZXhw
ZWN0ZWQsIFQgZGVzaXJlZCwgc3RkOjptZW1vcnlfb3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9v
cmRlcl9zZXFfY3N0KQogICAgIHsKKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICBvcmRlciA9IHN0
ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3Q7CisjZW5kaWYKICAgICAgICAgVCBleHBlY3RlZE9yQWN0
dWFsID0gZXhwZWN0ZWQ7CiAgICAgICAgIHJldHVybiB2YWx1ZS5jb21wYXJlX2V4Y2hhbmdlX3dl
YWsoZXhwZWN0ZWRPckFjdHVhbCwgZGVzaXJlZCwgb3JkZXIpOwogICAgIH0KIAogICAgIGJvb2wg
Y29tcGFyZUV4Y2hhbmdlU3Ryb25nKFQgZXhwZWN0ZWQsIFQgZGVzaXJlZCwgc3RkOjptZW1vcnlf
b3JkZXIgb3JkZXIgPSBzdGQ6Om1lbW9yeV9vcmRlcl9zZXFfY3N0KQogICAgIHsKKyNpZiBPUyhX
SU5ET1dTKQorICAgICAgICBvcmRlciA9IHN0ZDo6bWVtb3J5X29yZGVyX3NlcV9jc3Q7CisjZW5k
aWYKICAgICAgICAgVCBleHBlY3RlZE9yQWN0dWFsID0gZXhwZWN0ZWQ7CiAgICAgICAgIHJldHVy
biB2YWx1ZS5jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhleHBlY3RlZE9yQWN0dWFsLCBkZXNpcmVk
LCBvcmRlcik7CiAgICAgfQpJbmRleDogU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XVEYvd3RmL0J5dGVMb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQnl0ZUxvY2suaCIKKworI2luY2x1ZGUgIlBhcmtpbmdM
b3QuaCIKKyNpbmNsdWRlIDx0aHJlYWQ+CisKK25hbWVzcGFjZSBXVEYgeworCitzdGF0aWMgYm9v
bCB2ZXJib3NlID0gZmFsc2U7CisKK3ZvaWQgQnl0ZUxvY2s6OmxvY2tTbG93KCkKK3sKKyAgICB1
bnNpZ25lZCBzcGluQ291bnQgPSAwOworCisgICAgLy8gVGhpcyBtYWdpYyBudW1iZXIgdHVybnMg
b3V0IHRvIGJlIG9wdGltYWwgYmFzZWQgb24gcGFzdCBKaWtlc1JWTSBleHBlcmltZW50cy4KKyAg
ICBjb25zdCB1bnNpZ25lZCBzcGluTGltaXQgPSA0MDsKKyAgICAKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIHVpbnQ4X3QgY3VycmVudEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IGxvY2tpbmcgd2l0aCAiLCBjdXJyZW50Qnl0ZVZhbHVlLCAiXG4iKSk7CisKKyAgICAg
ICAgLy8gV2UgYWxsb3cgb3Vyc2VsdmVzIHRvIGJhcmdlIGluLgorICAgICAgICBpZiAoIShjdXJy
ZW50Qnl0ZVZhbHVlICYgaXNIZWxkQml0KQorICAgICAgICAgICAgJiYgbV9ieXRlLmNvbXBhcmVF
eGNoYW5nZVdlYWsoY3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGlzSGVsZEJp
dCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm9ib2R5
IHBhcmtlZCBhbmQgd2UgaGF2ZW4ndCBzcHVuIHRvbyBtdWNoLCB3ZSBjYW4ganVzdCB0cnkgdG8g
c3BpbiBhcm91bmQuCisgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBoYXNQYXJrZWRC
aXQpICYmIHNwaW5Db3VudCA8IHNwaW5MaW1pdCkgeworICAgICAgICAgICAgc3BpbkNvdW50Kys7
CisgICAgICAgICAgICBzdGQ6OnRoaXNfdGhyZWFkOjp5aWVsZCgpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBOZWVkIHRvIHBhcmsuIFdlIGRvIHRoaXMg
Ynkgc2V0dGluZyB0aGUgcGFya2VkIGJpdCBmaXJzdCwgYW5kIHRoZW4gcGFya2luZy4gV2Ugc3Bp
biBhcm91bmQKKyAgICAgICAgLy8gaWYgdGhlIHBhcmtlZCBiaXQgd2Fzbid0IHNldCBhbmQgd2Ug
ZmFpbGVkIGF0IHNldHRpbmcgaXQuCisgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBo
YXNQYXJrZWRCaXQpCisgICAgICAgICAgICAmJiAhbV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWso
Y3VycmVudEJ5dGVWYWx1ZSwgY3VycmVudEJ5dGVWYWx1ZSB8IGhhc1BhcmtlZEJpdCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBXZSBub3cgZXhwZWN0IHRoZSB2YWx1ZSB0
byBiZSBpc0hlbGR8aGFzUGFya2VkLiBTbyBsb25nIGFzIHRoYXQncyB0aGUgY2FzZSwgd2UgY2Fu
IHBhcmsuCisgICAgICAgIFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZtX2J5dGUsIGlzSGVs
ZEJpdCB8IGhhc1BhcmtlZEJpdCk7CisKKyAgICAgICAgLy8gV2UgaGF2ZSBhd2FrZW4sIG9yIHdl
IG5ldmVyIHBhcmtlZCBiZWNhdXNlIHRoZSBieXRlIHZhbHVlIGNoYW5nZWQuIEVpdGhlciB3YXks
IHdlIGxvb3AKKyAgICAgICAgLy8gYXJvdW5kIGFuZCB0cnkgYWdhaW4uCisgICAgfQorfQorCit2
b2lkIEJ5dGVMb2NrOjp1bmxvY2tTbG93KCkKK3sKKyAgICAvLyBSZWxlYXNlIHRoZSBsb2NrIHdo
aWxlIGZpbmRpbmcgb3V0IGlmIHNvbWVvbmUgaXMgcGFya2VkLiBOb3RlIHRoYXQgYXMgc29vbiBh
cyB3ZSBkbyB0aGlzLAorICAgIC8vIHNvbWVvbmUgbWlnaHQgYmFyZ2UgaW4uCisgICAgdWludDhf
dCBvbGRCeXRlVmFsdWU7CisgICAgZm9yICg7OykgeworICAgICAgICBvbGRCeXRlVmFsdWUgPSBt
X2J5dGUubG9hZCgpOworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bmxvY2tpbmcgd2l0aCAiLCBvbGRCeXRlVmFs
dWUsICJcbiIpKTsKKyAgICAgICAgQVNTRVJUKG9sZEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCk7Cisg
ICAgICAgIGlmIChtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRCeXRlVmFsdWUsIDApKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHNvbWVvbmUgY291
bGQgdHJ5IHRvIHBhcmsgcmlnaHQgbm93LiBJZiB0aGF0IGhhcHBlbnMsIHRoZXkgd2lsbCByZXR1
cm4gaW1tZWRpYXRlbHkKKyAgICAvLyBiZWNhdXNlIG91ciBwYXJraW5nIHByZWRpY2F0ZSBpcyB0
aGF0IG1fYnl0ZSA9PSBpc0hlbGRCaXQgfCBoYXNQYXJrZWRCaXQsIGJ1dCB3ZSd2ZSBhbHJlYWR5
IHNldAorICAgIC8vIG1fYnl0ZSA9IDAuCisKKyAgICAvLyBJZiB0aGVyZSBoYWQgYmVlbiB0aHJl
YWRzIHBhcmtlZCwgdW5wYXJrIGFsbCBvZiB0aGVtLiBUaGlzIGNhdXNlcyBhIHRodW5kZXJpbmcg
aGVyZCwgYnV0IHdoaWxlCisgICAgLy8gdGhhdCBpcyB0aGVvcmV0aWNhbGx5IHNjYXJ5LCBpdCdz
IHRvdGFsbHkgZmluZSBpbiBXZWJLaXQgYmVjYXVzZSB3ZSB1c3VhbGx5IGRvbid0IGhhdmUgZW5v
dWdoCisgICAgLy8gdGhyZWFkcyBmb3IgdGhpcyB0byBtYXR0ZXIuCisgICAgLy8gRklYTUU6IFdl
IGRvbid0IHJlYWxseSBuZWVkIHRoaXMgdG8gZXhoaWJpdCB0aHVuZGVyaW5nIGhlcmQuIFdlIGNv
dWxkIHVzZSB1bnBhcmtPbmUoKSwgYW5kIGlmCisgICAgLy8gdGhhdCByZXR1cm5zIHRydWUsIGp1
c3Qgc2V0IHRoZSBwYXJrZWQgYml0IGFnYWluLiBJZiBpbiB0aGUgcHJvY2VzcyBvZiBzZXR0aW5n
IHRoZSBwYXJrZWQgYml0CisgICAgLy8gd2UgZmFpbCB0aGUgQ0FTLCB0aGVuIGp1c3QgdW5wYXJr
IGFnYWluLgorICAgIGlmIChvbGRCeXRlVmFsdWUgJiBoYXNQYXJrZWRCaXQpCisgICAgICAgIFBh
cmtpbmdMb3Q6OnVucGFya0FsbCgmbV9ieXRlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvQnl0ZUxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL0J5dGVMb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCeXRlTG9ja19oCisjZGVmaW5lIEJ5
dGVMb2NrX2gKKworI2luY2x1ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0xvY2tl
ci5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
Ly8gVGhpcyBpcyBsaWtlIExvY2ssIGJ1dCBvbmx5IHJlcXVpcmVzIDEgYnl0ZSBpbnN0ZWFkIG9m
IHNpemVvZih2b2lkKikgc3RvcmFnZS4gVGhlIGRvd25zaWRlIGlzIHRoYXQKKy8vIGl0IGlzIHNs
b3dlciBvbiB0aGUgc2xvdyBwYXRoIHVuZGVyIGhlYXZ5IGNvbnRlbnRpb24gaW52b2x2aW5nIG1h
bnkgdGhyZWFkcyBiZWNhdXNlIGl0IGlzCisvLyBzdXNjZXB0aWJsZSB0byB0aGUgInRodW5kZXJp
bmcgaGVyZCIgcHJvYmxlbTogaXQgZG9lc24ndCBoYXZlIGVub3VnaCBzdGF0ZSB0byB0cmFjayBo
b3cgbWFueQorLy8gdGhyZWFkcyBhcmUgd2FpdGluZyBmb3IgdGhlIGxvY2ssIHNvIHdoZW4gdW5s
b2NrIGRldGVjdHMgdGhhdCBhbnkgdGhyZWFkIGlzIHdhaXRpbmcsIHRoZW4gaXQgd2FrZXMKKy8v
IGFsbCBvZiB0aGUgd2FpdGluZyB0aHJlYWRzLiBBbGwgb2YgdGhvc2UgdGhyZWFkcyB3aWxsIHBp
bGUgb250byB0aGUgbG9jazsgb25lIHdpbGwgc3VjY2VlZCBhbmQgdGFrZQorLy8gaXQgd2hpbGUg
dGhlIG90aGVycyB3aWxsIGdvIGJhY2sgdG8gc2xlZXAuIFRoZSBzbG93LWRvd24gaXMgc21hbGwu
IFRlbiB0aHJlYWRzIHJlcGVhdGVkbHkKKy8vIGNvbnRlbmRpbmcgZm9yIHRoZSBzYW1lIH4xLTEw
dXMgbG9uZyBjcml0aWNhbCBzZWN0aW9uIHdpbGwgcnVuIDclIHNsb3dlciBvbiBteSBtYWNoaW5l
LiBJZiBJIG1lc3MKKy8vIHdpdGggYW55IG9mIHRoZSBwYXJhbWV0ZXJzIC0gY2hhbmdlIHRoZSBu
dW1iZXIgb2YgdGhyZWFkcyBvciBjaGFuZ2UgdGhlIGNyaXRpY2FsIHNlY3Rpb24gZHVyYXRpb24g
LQorLy8gdGhlbiBCeXRlTG9jayByZWFjaGVzIHBhcml0eSB3aXRoIExvY2ssIGFuZCBzb21ldGlt
ZXMgb3V0cGVyZm9ybXMgaXQuIFBlcmhhcHMgbW9zdCBzdXJwcmlzaW5nbHksCisvLyB0aGUgc2xv
dy1kb3duIGdvZXMgYXdheSBldmVuIHdoZW4geW91IGluY3JlYXNlIHRoZSBudW1iZXIgb2YgdGhy
ZWFkcy4gQnl0ZUxvY2sgYXBwZWFycyB0byBzb21ldGltZXMKKy8vIGJlIGZhc3RlciB1bmRlciBt
aWNyb2NvbnRlbnRpb24sIHBlcmhhcHMgYmVjYXVzZSBhIGNvbnRlbnRpb3VzIDgtYml0IENBUyBp
cyBjaGVhcGVyIHRoYW4gYQorLy8gY29udGVudGlvdXMgNjQtYml0IENBUy4gTm90ZSB0aGF0IHVu
Y29udGVuZGVkIGxvY2tpbmcgaXMgZXF1YWxseSBmYXN0IHdpdGggQnl0ZUxvY2sgYXMgd2l0aCBM
b2NrLgorLy8gSW4gYWxsLCBMb2NrIGFuZCBCeXRlTG9jayBoYXZlIHNpbWlsYXIgcGVyZm9ybWFu
Y2UgdW5kZXIgY29udHJvbGxlZCBtaWNyb2JlbmNobWFya3MsIGJ1dCBMb2NrIGlzCisvLyB0aGVv
cmV0aWNhbGx5IHNhZmVyIGJlY2F1c2Ugb2YgdGhlIHRodW5kZXJpbmcgaGVyZCBpc3N1ZS4gSXQn
cyBwcm9iYWJseSBiZXN0IHRvIHVzZSBCeXRlTG9jayBvbmx5CisvLyB3aGVuIHlvdSByZWFsbHkg
Y2FyZSBhYm91dCBzcGFjZSBhbmQgeW91IGRvbid0IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgdGhh
dCBhIGxhcmdlIG51bWJlciBvZgorLy8gdGhyZWFkcyB3b3VsZCBldmVyIHBpbGUgb250byB0aGUg
c2FtZSBsb2NrLgorCitjbGFzcyBCeXRlTG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Qnl0ZUxvY2spOworcHVibGljOgorICAgIEJ5dGVMb2NrKCkKKyAgICB7CisgICAgICAgIG1fYnl0
ZS5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBsb2NrKCkKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNo
YW5nZVdlYWsoMCwgaXNIZWxkQml0LCBzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSkpIHsKKyAg
ICAgICAgICAgIC8vIExvY2sgYWNxdWlyZWQhCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBsb2NrU2xvdygpOworICAgIH0KKworICAgIHZvaWQgdW5sb2NrKCkKKyAg
ICB7CisgICAgICAgIGlmIChMSUtFTFkobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsoaXNIZWxk
Qml0LCAwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxlYXNlKSkpIHsKKyAgICAgICAgICAgIC8vIExv
Y2sgcmVsZWFzZWQgYW5kIG5vYm9keSB3YXMgd2FpdGluZyEKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIHVubG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICBib29sIGlz
SGVsZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ieXRlLmxvYWQoc3RkOjptZW1v
cnlfb3JkZXJfYWNxdWlyZSkgJiBpc0hlbGRCaXQ7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tl
ZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNIZWxkKCk7CisgICAgfQorCitwcml2
YXRlOgorICAgIHN0YXRpYyBjb25zdCB1aW50OF90IGlzSGVsZEJpdCA9IDE7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQ4X3QgaGFzUGFya2VkQml0ID0gMjsKKworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGxvY2tTbG93KCk7CisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgdW5sb2NrU2xv
dygpOworCisgICAgQXRvbWljPHVpbnQ4X3Q+IG1fYnl0ZTsKK307CisKK3R5cGVkZWYgTG9ja2Vy
PEJ5dGVMb2NrPiBCeXRlTG9ja2VyOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpCeXRlTG9jazsKK3VzaW5nIFdURjo6Qnl0ZUxvY2tlcjsKKworI2VuZGlmIC8vIEJ5dGVMb2Nr
X2gKKwpJbmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4ODEwMCkKKysrIFNvdXJj
ZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03LDYgKzcsNyBAQCBz
ZXQoV1RGX0hFQURFUlMKICAgICBCaXRWZWN0b3IuaAogICAgIEJpdG1hcC5oCiAgICAgQnVtcFBv
aW50ZXJBbGxvY2F0b3IuaAorICAgIEJ5dGVMb2NrLmgKICAgICBCeXRlT3JkZXIuaAogICAgIENv
bXBpbGF0aW9uVGhyZWFkLmgKICAgICBDb21waWxlci5oCkBAIC02Miw2ICs2Myw3IEBAIHNldChX
VEZfSEVBREVSUwogICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuaAogICAgIFBhcmFsbGVsSm9ic0xp
YmRpc3BhdGNoLmgKICAgICBQYXJhbGxlbEpvYnNPcGVuTVAuaAorICAgIFBhcmtpbmdMb3QuaAog
ICAgIFBhc3NSZWZQdHIuaAogICAgIFBsYXRmb3JtLmgKICAgICBQcmludFN0cmVhbS5oCkBAIC0x
NDQsNiArMTQ2LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgQXNzZXJ0aW9ucy5jcHAKICAgICBB
dG9taWNzLmNwcAogICAgIEJpdFZlY3Rvci5jcHAKKyAgICBCeXRlTG9jay5jcHAKICAgICBDb21w
aWxhdGlvblRocmVhZC5jcHAKICAgICBDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcAogICAgIENy
eXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmNwcApAQCAtMTY2LDYgKzE2OSw3IEBAIHNldChX
VEZfU09VUkNFUwogICAgIE9TUmFuZG9tU291cmNlLmNwcAogICAgIFBhZ2VCbG9jay5jcHAKICAg
ICBQYXJhbGxlbEpvYnNHZW5lcmljLmNwcAorICAgIFBhcmtpbmdMb3QuY3BwCiAgICAgUHJpbnRT
dHJlYW0uY3BwCiAgICAgUkFNU2l6ZS5jcHAKICAgICBSYW5kb21OdW1iZXIuY3BwCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9Mb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTG9jay5o
CShyZXZpc2lvbiAxODgxMDApCisrKyBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMiw2ICsxMDIsMzMgQEAgbmFtZXNwYWNlIFdURiB7CiAvLyAgIGFjcXVpc2l0aW9u
IG9yZGVyIHVuZGVyIGNvbnRlbnRpb24uIFRoZSBzYW1lIGNhdmVhdCBpcyBnZW5lcmFsbHkgdHJ1
ZSBvZiBTcGluTG9jayBhbmQgcGxhdGZvcm0KIC8vICAgbXV0ZXhlcyBvbiBzb21lIHBsYXRmb3Jt
cy4KIAorLy8gRklYTUU6IFdlIGNvdWxkIG1ha2UgdGhpcyBMb2NrIG1vcmUgZWZmaWNpZW50IGJ5
IHVzaW5nIFBhcmtpbmdMb3QgYW5kIGF0b21pYyBhZGQgaW5zdGVhZCBvZiBDQVMuCisvLyBUaGUg
bG9jayB3b3VsZCBiZSBhdmFpbGFibGUgaWYgdGhlIDMyLWJpdCBsb2NrIHdvcmQgPD0gMS4gTG9j
a2luZyB3b3VsZCBhdG9taWNhbGx5IGFkZCAyIHRvIHRoZQorLy8gd29yZC4gVGhlIGxvY2sgd291
bGQgYmUga25vd24gdG8gYmUgaGVsZCBpZiB0aGUgb2xkIHZhbHVlIG9mIHRoZSB3b3JkIHdhcyA8
PSAxLiBUaGUgbG93IGJpdAorLy8ganVzdCBpbmRpY2F0ZXMgaWYgYW55b25lIGlzIHdhaXRpbmcu
IElmIHRoZSB3b3JkIHdhcyA+PSAyIGFmdGVyIHRoZSBhdG9taWMgYWRkLCB3ZSB3b3VsZCBnbyB0
byBhCisvLyBzbG93IHBhdGggdGhhdCByZXBlYXRlZGx5IGF0dGVtcHRzIHRvIHNldCB0aGUgbG9j
ayB3b3JkIHRvIDMgW3NpY10gZnJvbSAwIG9yIDEsIGFuZCBwYXJrcyBpZiB0aGF0J3MKKy8vIG5v
dCBwb3NzaWJsZS4gVGhlIHNsb3cgcGF0aCBjb3VsZCBhbHNvIHBlcmZvcm0gZGVmZW5zaXZlIGZp
eHVwIHRoYXQgZHJvcHMgdGhlIGxvY2sgdmFsdWUgZG93biB0bworLy8gMyBpZiBpdCB3YXMgZ3Jl
YXRlciB0aGFuIDMsIGFueXRpbWUgdGhhdCBpdCBuZWVkZWQgdG8gZ28gdG8gcGFyay4gVGhlIHVu
bG9jayBmYXN0IHBhdGggd291bGQKKy8vIGF0b21pY2FsbHkgc3VidHJhY3QgMi4gSWYgdGhlIGRl
Y3JlbWVudCBvcGVyYXRpb24gZG9lcyBub3QgY2F1c2UgdGhlIGNvdW50IHRvIHplcm8sIGl0IHdv
dWxkIGdvIHRvCisvLyBhIHNsb3cgcGF0aC4gVGhlIHNsb3cgcGF0aCB3b3VsZCB1bnBhcmsgb25l
LiBJZiB1bnBhcmtpbmcgcmV0dXJucyBmYWxzZSwgdGhlIHNsb3cgcGF0aCB3b3VsZAorLy8gYXR0
ZW1wdCBhIHN0cm9uZyBDQVMgZnJvbSAxIHRvIDAuIEl0IHdvdWxkbid0IGRvIGFueXRoaW5nIGlm
IHRoZSBDQVMgZmFpbHMsIHNpbmNlIHRoZSBvbmx5IGdvYWwgb2YKKy8vIHRoYXQgQ0FTIGlzIHRv
IHRlbGwgZnV0dXJlIHVubG9jayBmYXN0IHBhdGhzIHRoYXQgdGhlcmUgaXMgcG9zc2libHkgYSB0
aHJlYWQgcGFya2VkLiBBcyBzdWNoIHRoZQorLy8gc3RhdGVzIG9mIHRoZSBsb2NrIGFyZToKKy8v
CisvLyAgIDA6IGxvY2sgYXZhaWxhYmxlIGFuZCBub2JvZHkgd2FpdGluZworLy8gICAxOiBsb2Nr
IGF2YWlsYWJsZSBhbmQgdGhlcmUgbWF5IGJlIHRocmVhZHMgd2FpdGluZworLy8gICAyOiBsb2Nr
IHRha2VuIGFuZCBubyB0aHJlYWRzIHdhaXRpbmcKKy8vID49MzogbG9jayB0YWtlbiBhbmQgdGhy
ZWFkcyB3YWl0aW5nCisvLworLy8gSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGRlc2lnbiBhbiBldmVu
IGJldHRlciBsb2NrIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGF0b21pYyBpbmNyZW1lbnRzIHJh
dGhlcgorLy8gdGhhbiBhdG9taWMgKz0yLy09Mi4KKy8vCisvLyBOb3RlIHRoYXQgYmVjYXVzZSBQ
YXJraW5nTG90IHVzZXMgdGhpcyBsb2NrIGludGVybmFsbHksIHdlIHdvdWxkIHByb2JhYmx5IHJl
bmFtZSB0aGlzIGxvY2sKKy8vIGltcGxlbWVudGF0aW9uIHRvIHNvbWV0aGluZyBsaWtlIEJvb3Rz
dHJhcExvY2sgb3IgZXZlbiBtYWtlIGl0IHBhcnQgb2YgYW4gYW5vbnltb3VzIG5hbWVzcGFjZQor
Ly8gaW5zaWRlIFBhcmtpbmdMb3QuCisvLworLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE0Nzg0MQorCiAvLyBUaGlzIGlzIGEgc3RydWN0IHdpdGhvdXQgYSBjb25z
dHJ1Y3RvciBvciBkZXN0cnVjdG9yIHNvIHRoYXQgaXQgY2FuIGJlIHN0YXRpY2FsbHkgaW5pdGlh
bGl6ZWQuCiAvLyBVc2UgTG9jayBpbiBpbnN0YW5jZSB2YXJpYWJsZXMuCiBzdHJ1Y3QgTG9ja0Jh
c2UgewpJbmRleDogU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RG
L3d0Zi9QYXJraW5nTG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiUGFya2luZ0xvdC5oIgorCisjaW5jbHVkZSAiSGFzaEZ1bmN0aW9u
cy5oIgorI2luY2x1ZGUgIkxvY2suaCIKKyNpbmNsdWRlICJTdHJpbmdQcmludFN0cmVhbS5oIgor
I2luY2x1ZGUgIlRocmVhZFNwZWNpZmljLmgiCisjaW5jbHVkZSAiVGhyZWFkaW5nUHJpbWl0aXZl
cy5oIgorI2luY2x1ZGUgIlZlY3Rvci5oIgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHRo
cmVhZD4KKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVyYm9zZSA9
IGZhbHNlOworCitzdHJ1Y3QgVGhyZWFkRGF0YSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgCisgICAgVGhyZWFkRGF0YSgpOworICAgIH5UaHJlYWREYXRhKCk7
CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXI7CisgICAgCisgICAgYm9v
bCBzaG91bGRQYXJrIHsgZmFsc2UgfTsKKyAgICBzdGQ6Om11dGV4IHBhcmtpbmdMb2NrOworICAg
IHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHBhcmtpbmdDb25kaXRpb247CisKKyAgICBjb25zdCB2
b2lkKiBhZGRyZXNzOworICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0ciB9Owor
fTsKKworZW51bSBjbGFzcyBEZXF1ZXVlUmVzdWx0IHsKKyAgICBJZ25vcmUsCisgICAgUmVtb3Zl
QW5kQ29udGludWUsCisgICAgUmVtb3ZlQW5kU3RvcAorfTsKKworc3RydWN0IEJ1Y2tldCB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBlbnF1ZXVlKFRo
cmVhZERhdGEqIGRhdGEpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nICIsIFJhd1Bv
aW50ZXIoZGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihkYXRhLT5hZGRyZXNz
KSwgIiBvbnRvICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgQVNTRVJUKGRh
dGEtPmFkZHJlc3MpOworICAgICAgICBBU1NFUlQoIWRhdGEtPm5leHRJblF1ZXVlKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChxdWV1ZVRhaWwpIHsKKyAgICAgICAgICAgIHF1ZXVlVGFpbC0+bmV4
dEluUXVldWUgPSBkYXRhOworICAgICAgICAgICAgcXVldWVUYWlsID0gZGF0YTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHF1ZXVlSGVhZCA9IGRhdGE7CisgICAg
ICAgIHF1ZXVlVGFpbCA9IGRhdGE7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGdlbmVyaWNEZXF1ZXVlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmco
Y3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nIGZyb20gYnVja2V0IGF0ICIsIFJhd1BvaW50
ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghcXVldWVIZWFkKSB7Cisg
ICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KGN1cnJlbnRUaHJlYWQoKSwgIjogZW1wdHkuXG4iKSk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIGxvb3AgaXMgYSB2ZXJ5IGNsZXZlciBhYm9taW5h
dGlvbi4gVGhlIGluZHVjdGlvbiB2YXJpYWJsZXMgYXJlIHRoZSBwb2ludGVyIHRvIHRoZQorICAg
ICAgICAvLyBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5vZGUsIGFuZCB0aGUgcG9pbnRlciB0byB0
aGUgcHJldmlvdXMgbm9kZS4gVGhpcyBnaXZlcyB1cyBldmVyeXRoaW5nCisgICAgICAgIC8vIHdl
IG5lZWQgdG8gYm90aCBwcm9jZWVkIGZvcndhcmQgdG8gdGhlIG5leHQgbm9kZSwgYW5kIHRvIHJl
bW92ZSBub2RlcyB3aGlsZSBtYWludGFpbmluZyB0aGUKKyAgICAgICAgLy8gcXVldWVIZWFkL3F1
ZXVlVGFpbCBhbmQgYWxsIG9mIHRoZSBuZXh0SW5RdWV1ZSBsaW5rcy4gRm9yIGV4YW1wbGUsIHdo
ZW4gd2UgYXJlIGF0IHRoZSBoZWFkCisgICAgICAgIC8vIGVsZW1lbnQsIHRoZW4gcmVtb3ZhbCBt
ZWFucyByZXdpcmluZyBxdWV1ZUhlYWQsIGFuZCBpZiBpdCB3YXMgYWxzbyBlcXVhbCB0byBxdWV1
ZVRhaWwsIHRoZW4KKyAgICAgICAgLy8gd2UnZCB3YW50IHF1ZXVlVGFpbCB0byBiZSBzZXQgdG8g
bnVsbHB0ci4gVGhpcyB3b3JrcyBiZWNhdXNlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAg
Y3VycmVudFB0ciA9PSAmcXVldWVIZWFkCisgICAgICAgIC8vICAgICBwcmV2aW91cyA9PSBudWxs
cHRyCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIHJlbW92ZSBieSBzZXR0aW5nICpjdXJyZW50
UHRyID0gKCpjdXJyZW50UHRyKS0+bmV4dEluUXVldWUsIGkuZS4gY2hhbmdpbmcgdGhlIHBvaW50
ZXIKKyAgICAgICAgLy8gdGhhdCB1c2VkIHRvIHBvaW50IHRvIHRoaXMgbm9kZSB0byBpbnN0ZWFk
IHBvaW50IHRvIHRoaXMgbm9kZSdzIHN1Y2Nlc3Nvci4gQW5vdGhlciBleGFtcGxlOgorICAgICAg
ICAvLyBpZiB3ZSB3ZXJlIGF0IHRoZSBzZWNvbmQgbm9kZSBpbiB0aGUgcXVldWUsIHRoZW4gd2Un
ZCBoYXZlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgY3VycmVudFB0ciA9PSAmcXVldWVI
ZWFkLT5uZXh0SW5RdWV1ZQorICAgICAgICAvLyAgICAgcHJldmlvdXMgPT0gcXVldWVIZWFkCisg
ICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgbm9kZSBpcyBub3QgZXF1YWwgdG8gcXVldWVU
YWlsLCB0aGVuIHJlbW92aW5nIGl0IHNpbXBseSBtZWFucyBtYWtpbmcKKyAgICAgICAgLy8gcXVl
dWVIZWFkLT5uZXh0SW5RdWV1ZSBwb2ludCB0byBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlLT5uZXh0
SW5RdWV1ZSAod2hpY2ggdGhlIGFsZ29yaXRobQorICAgICAgICAvLyBhY2hpZXZlcyBieSBtdXRh
dGluZyAqY3VycmVudFB0cikuIElmIHRoaXMgbm9kZSBpcyBlcXVhbCB0byBxdWV1ZVRhaWwsIHRo
ZW4gd2Ugd2FudCB0byBzZXQKKyAgICAgICAgLy8gcXVldWVUYWlsIHRvIHByZXZpb3VzLCB3aGlj
aCBpbiB0aGlzIGNhc2UgaXMgcXVldWVIZWFkIC0gdGh1cyBtYWtpbmcgdGhlIHF1ZXVlIGxvb2sg
bGlrZSBhCisgICAgICAgIC8vIHByb3BlciBvbmUtZWxlbWVudCBxdWV1ZSB3aXRoIHF1ZXVlSGVh
ZCA9PSBxdWV1ZVRhaWwuCisgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVlOworICAg
ICAgICBUaHJlYWREYXRhKiogY3VycmVudFB0ciA9ICZxdWV1ZUhlYWQ7CisgICAgICAgIFRocmVh
ZERhdGEqIHByZXZpb3VzID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKHNob3VsZENvbnRpbnVl
KSB7CisgICAgICAgICAgICBUaHJlYWREYXRhKiBjdXJyZW50ID0gKmN1cnJlbnRQdHI7CisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogZ290IHRocmVhZCAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiXG4i
KSk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBEZXF1ZXVlUmVzdWx0IHJlc3VsdCA9IGZ1bmN0b3IoY3VycmVudCk7CisgICAg
ICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0
OjpJZ25vcmU6CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBjdXJyZW50UHRyID0gIiwg
UmF3UG9pbnRlcihjdXJyZW50UHRyKSwgIiwgKmN1cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKCpj
dXJyZW50UHRyKSwgIlxuIikpOworICAgICAgICAgICAgICAgIHByZXZpb3VzID0gY3VycmVudDsK
KyAgICAgICAgICAgICAgICBjdXJyZW50UHRyID0gJigqY3VycmVudFB0ciktPm5leHRJblF1ZXVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0
OjpSZW1vdmVBbmRDb250aW51ZToKKyAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6UmVt
b3ZlQW5kU3RvcDoKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRlcXVldWVpbmcgIiwg
UmF3UG9pbnRlcihjdXJyZW50KSwgIiBmcm9tICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsK
KyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBxdWV1ZVRhaWwpCisgICAgICAgICAgICAg
ICAgICAgIHF1ZXVlVGFpbCA9IHByZXZpb3VzOworICAgICAgICAgICAgICAgICpjdXJyZW50UHRy
ID0gY3VycmVudC0+bmV4dEluUXVldWU7CisgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dElu
UXVldWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVxdWV1ZVJl
c3VsdDo6UmVtb3ZlQW5kU3RvcCkKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ29udGludWUg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIEFTU0VSVCghIXF1ZXVlSGVhZCA9PSAhIXF1ZXVlVGFpbCk7CisgICAgfQor
ICAgIAorICAgIFRocmVhZERhdGEqIGRlcXVldWUoKQorICAgIHsKKyAgICAgICAgVGhyZWFkRGF0
YSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgZ2VuZXJpY0RlcXVldWUoCisgICAgICAgICAg
ICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQpIC0+IERlcXVldWVSZXN1bHQgeworICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIERlcXVldWVS
ZXN1bHQ6OlJlbW92ZUFuZFN0b3A7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQgeyBudWxscHRyIH07Cisg
ICAgVGhyZWFkRGF0YSogcXVldWVUYWlsIHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhpcyBsb2Nr
IHByb3RlY3RzIHRoZSBlbnRpcmUgYnVja2V0LiBUaG91IHNoYWxsIG5vdCBtYWtlIGNoYW5nZXMg
dG8gQnVja2V0IHdpdGhvdXQgaG9sZGluZworICAgIC8vIHRoaXMgbG9jay4KKyAgICBMb2NrIGxv
Y2s7CisKKyAgICAvLyBQdXQgc29tZSBkaXN0YW5lIGJldHdlZW4gYnVja2V0cyBpbiBtZW1vcnku
IFRoaXMgaXMgb25lIG9mIHNldmVyYWwgbWl0aWdhdGlvbnMgYWdhaW5zdCBmYWxzZQorICAgIC8v
IHNoYXJpbmcuCisgICAgY2hhciBwYWRkaW5nWzY0XTsKK307CisKK3N0cnVjdCBIYXNodGFibGUg
eworICAgIHVuc2lnbmVkIHNpemU7CisgICAgQXRvbWljPEJ1Y2tldCo+IGRhdGFbMV07CisKKyAg
ICBzdGF0aWMgSGFzaHRhYmxlKiBjcmVhdGUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChzaXplID49IDEpOworICAgICAgICAKKyAgICAgICAgSGFzaHRhYmxlKiByZXN1bHQg
PSBzdGF0aWNfY2FzdDxIYXNodGFibGUqPigKKyAgICAgICAgICAgIGZhc3RaZXJvZWRNYWxsb2Mo
c2l6ZW9mKEhhc2h0YWJsZSkgKyBzaXplb2YoQXRvbWljPEJ1Y2tldCo+KSAqIChzaXplIC0gMSkp
KTsKKyAgICAgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEhhc2h0YWJsZSogaGFzaHRhYmxlKQor
ICAgIHsKKyAgICAgICAgZmFzdEZyZWUoaGFzaHRhYmxlKTsKKyAgICB9Cit9OworCitUaHJlYWRT
cGVjaWZpYzxUaHJlYWREYXRhPiogdGhyZWFkRGF0YTsKK0F0b21pYzxIYXNodGFibGUqPiBoYXNo
dGFibGU7CitBdG9taWM8dW5zaWduZWQ+IG51bVRocmVhZHM7CisKKy8vIFdpdGggNjQgYnl0ZXMg
b2YgcGFkZGluZyBwZXIgYnVja2V0LCBhc3N1bWluZyBhIGhhc2h0YWJsZSBpcyBmdWxseSBwb3B1
bGF0ZWQgd2l0aCBidWNrZXRzLCB0aGUKKy8vIG1lbW9yeSB1c2FnZSBwZXIgdGhyZWFkIHdpbGwg
c3RpbGwgYmUgbGVzcyB0aGFuIDFLQi4KK2NvbnN0IHVuc2lnbmVkIG1heExvYWRGYWN0b3IgPSAz
OworCitjb25zdCB1bnNpZ25lZCBncm93dGhGYWN0b3IgPSAyOworCit1bnNpZ25lZCBoYXNoQWRk
cmVzcyhjb25zdCB2b2lkKiBhZGRyZXNzKQoreworICAgIHJldHVybiBXVEY6OlB0ckhhc2g8Y29u
c3Qgdm9pZCo+OjpoYXNoKGFkZHJlc3MpOworfQorCisvLyBMb2NrcyB0aGUgaGFzaHRhYmxlLiBU
aGlzIHJlbG9vcHMgaW4gY2FzZSBvZiByZWhhc2hpbmcsIHNvIHRoZSBjdXJyZW50IGhhc2h0YWJs
ZSBtYXkgYmUgZGlmZmVyZW50CisvLyBhZnRlciB0aGlzIHJldHVybnMgdGhhbiB3aGVuIHlvdSBj
YWxsZWQgaXQuIEd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBhIGhhc2h0YWJsZS4gVGhpcyBpcyBw
cmV0dHkKKy8vIHNsb3cgYW5kIG5vdCBzY2FsYWJsZSwgc28gaXQncyBvbmx5IHVzZWQgZHVyaW5n
IHRocmVhZCBjcmVhdGlvbiBhbmQgZm9yIGRlYnVnZ2luZy90ZXN0aW5nLgorVmVjdG9yPEJ1Y2tl
dCo+IGxvY2tIYXNodGFibGUoKQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRhYmxl
KiBjdXJyZW50SGFzaHRhYmxlOworCisgICAgICAgIGN1cnJlbnRIYXNodGFibGUgPSBoYXNodGFi
bGUubG9hZCgpOworICAgICAgICBpZiAoIWN1cnJlbnRIYXNodGFibGUpIHsKKyAgICAgICAgICAg
IC8vIFRyeSB0byBiZSB0aGUgZmlyc3QgdG8gY3JlYXRlIHRoZSBoYXNodGFibGUuCisgICAgICAg
ICAgICBjdXJyZW50SGFzaHRhYmxlID0gSGFzaHRhYmxlOjpjcmVhdGUobWF4TG9hZEZhY3Rvcik7
CisgICAgICAgICAgICBpZiAoIWhhc2h0YWJsZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIs
IGN1cnJlbnRIYXNodGFibGUpKSB7CisgICAgICAgICAgICAgICAgSGFzaHRhYmxlOjpkZXN0cm95
KGN1cnJlbnRIYXNodGFibGUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0
b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgaW5pdGlhbCBoYXNodGFibGUgIiwg
UmF3UG9pbnRlcihjdXJyZW50SGFzaHRhYmxlKSwgIlxuIikpOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gTm93IGZpbmQgYWxsIG9mIHRoZSBidWNrZXRzLiBUaGlzIG1ha2VzIHN1cmUgdGhhdCB0
aGUgaGFzaHRhYmxlIGlzIGZ1bGwgb2YgYnVja2V0cyBzbyB0aGF0CisgICAgICAgIC8vIHdlIGNh
biBsb2NrIGFsbCBvZiB0aGUgYnVja2V0cywgbm90IGp1c3QgdGhlIG9uZXMgdGhhdCBhcmUgbWF0
ZXJpYWxpemVkLgorICAgICAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0czsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gY3VycmVudEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykgeworICAgICAgICAg
ICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQb2ludGVyID0gY3VycmVudEhhc2h0YWJsZS0+ZGF0
YVtpXTsKKworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIEJ1Y2tldCog
YnVja2V0ID0gYnVja2V0UG9pbnRlci5sb2FkKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoIWJ1
Y2tldCkgeworICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghYnVja2V0UG9pbnRlci5jb21wYXJlRXhjaGFuZ2VXZWFrKG51
bGxwdHIsIGJ1Y2tldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBidWNrZXQ7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJ1Y2tldHMuYXBwZW5kKGJ1
Y2tldCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICAvLyBOb3cgbG9jayB0aGUgYnVja2V0cyBpbiB0aGUgcmlnaHQgb3JkZXIuCisg
ICAgICAgIHN0ZDo6c29ydChidWNrZXRzLmJlZ2luKCksIGJ1Y2tldHMuZW5kKCkpOworICAgICAg
ICBmb3IgKEJ1Y2tldCogYnVja2V0IDogYnVja2V0cykKKyAgICAgICAgICAgIGJ1Y2tldC0+bG9j
ay5sb2NrKCk7CisKKyAgICAgICAgLy8gSWYgdGhlIGhhc2h0YWJsZSBkaWRuJ3QgY2hhbmdlICh3
YXNuJ3QgcmVoYXNoZWQpIHdoaWxlIHdlIHdlcmUgbG9ja2luZyBpdCwgdGhlbiB3ZSBvd24gaXQK
KyAgICAgICAgLy8gbm93LgorICAgICAgICBpZiAoaGFzaHRhYmxlLmxvYWQoKSA9PSBjdXJyZW50
SGFzaHRhYmxlKQorICAgICAgICAgICAgcmV0dXJuIGJ1Y2tldHM7CisKKyAgICAgICAgLy8gVGhl
IGhhc2h0YWJsZSByZWhhc2hlZC4gVW5sb2NrIGV2ZXJ5dGhpbmcgYW5kIHRyeSBhZ2Fpbi4KKyAg
ICAgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IGJ1Y2tldHMpCisgICAgICAgICAgICBidWNrZXQt
PmxvY2sudW5sb2NrKCk7CisgICAgfQorfQorCit2b2lkIHVubG9ja0hhc2h0YWJsZShjb25zdCBW
ZWN0b3I8QnVja2V0Kj4mIGJ1Y2tldHMpCit7CisgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IGJ1
Y2tldHMpCisgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKK30KKworLy8gUmVoYXNoIHRo
ZSBoYXNodGFibGUgdG8gaGFuZGxlIG51bVRocmVhZHMgdGhyZWFkcy4KK3ZvaWQgZW5zdXJlSGFz
aHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQoreworICAgIC8vIFdlIHRyeSB0byBlbnN1
cmUgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlIHVzZWQgZm9yIHRocmVhZCBxdWV1ZXMg
aXMgYWx3YXlzIGxhcmdlIGVub3VnaAorICAgIC8vIHRvIGF2b2lkIGNvbGxpc2lvbnMuIFNvLCBz
aW5jZSB3ZSBzdGFydGVkIGEgbmV3IHRocmVhZCwgd2UgbWF5IG5lZWQgdG8gaW5jcmVhc2UgdGhl
IHNpemUgb2YgdGhlCisgICAgLy8gaGFzaHRhYmxlLiBUaGlzIGRvZXMganVzdCB0aGF0LiBOb3Rl
IHRoYXQgd2UgbmV2ZXIgZnJlZSB0aGUgb2xkIHNwaW5lLCBzaW5jZSB3ZSBuZXZlciBsb2NrCisg
ICAgLy8gYXJvdW5kIHNwaW5lIGFjY2Vzc2VzIChpLmUuIHRoZSAiaGFzaHRhYmxlIiBnbG9iYWwg
dmFyaWFibGUpLgorCisgICAgLy8gRmlyc3QgZG8gYSBmYXN0IGNoZWNrIHRvIHNlZSBpZiByZWhh
c2hpbmcgaXMgbmVlZGVkLgorICAgIEhhc2h0YWJsZSogb2xkSGFzaHRhYmxlID0gaGFzaHRhYmxl
LmxvYWQoKTsKKyAgICBpZiAob2xkSGFzaHRhYmxlICYmIHN0YXRpY19jYXN0PGRvdWJsZT4ob2xk
SGFzaHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtVGhyZWFkcykgPj0gbWF4
TG9hZEZhY3RvcikgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBubyBuZWVkIHRvIHJlaGFzaCBiZWNhdXNlICIs
IG9sZEhhc2h0YWJsZS0+c2l6ZSwgIiAvICIsIG51bVRocmVhZHMsICIgPj0gIiwgbWF4TG9hZEZh
Y3RvciwgIlxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2VlbXMgbGlr
ZSB3ZSAqbWlnaHQqIGhhdmUgdG8gcmVoYXNoLCBzbyBsb2NrIHRoZSBoYXNodGFibGUgYW5kIHRy
eSBhZ2Fpbi4KKyAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0c1RvVW5sb2NrID0gbG9ja0hhc2h0
YWJsZSgpOworCisgICAgLy8gQ2hlY2sgYWdhaW4sIHNpbmNlIHRoZSBoYXNodGFibGUgY291bGQg
aGF2ZSByZWhhc2hlZCB3aGlsZSB3ZSB3ZXJlIGxvY2tpbmcgaXQuIEFsc28sCisgICAgLy8gbG9j
a0hhc2h0YWJsZSgpIGNyZWF0ZXMgYW4gaW5pdGlhbCBoYXNodGFibGUgZm9yIHVzLgorICAgIG9s
ZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgaWYgKG9sZEhhc2h0YWJsZSAmJiBz
dGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2FzdDxkb3Vi
bGU+KG51bVRocmVhZHMpID49IG1heExvYWRGYWN0b3IpIHsKKyAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogYWZ0ZXIg
bG9ja2luZywgbm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUs
ICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsKKyAgICAg
ICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBWZWN0b3I8QnVja2V0Kj4gcmV1c2FibGVCdWNrZXRzID0gYnVja2V0c1RvVW5s
b2NrOworCisgICAgLy8gT0ssIG5vdyB3ZSByZXNpemUuIEZpcnN0IHdlIGdhdGhlciBhbGwgdGhy
ZWFkIGRhdGFzIGZyb20gdGhlIG9sZCBoYXNodGFibGUuIFRoZXNlIHRocmVhZCBkYXRhcworICAg
IC8vIGFyZSBwbGFjZWQgaW50byB0aGUgdmVjdG9yIGluIHF1ZXVlIG9yZGVyLgorICAgIFZlY3Rv
cjxUaHJlYWREYXRhKj4gdGhyZWFkRGF0YXM7CisgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IHJl
dXNhYmxlQnVja2V0cykgeworICAgICAgICB3aGlsZSAoVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9
IGJ1Y2tldC0+ZGVxdWV1ZSgpKQorICAgICAgICAgICAgdGhyZWFkRGF0YXMuYXBwZW5kKHRocmVh
ZERhdGEpOworICAgIH0KKworICAgIHVuc2lnbmVkIG5ld1NpemUgPSBudW1UaHJlYWRzICogZ3Jv
d3RoRmFjdG9yICogbWF4TG9hZEZhY3RvcjsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdTaXplID4g
b2xkSGFzaHRhYmxlLT5zaXplKTsKKyAgICAKKyAgICBIYXNodGFibGUqIG5ld0hhc2h0YWJsZSA9
IEhhc2h0YWJsZTo6Y3JlYXRlKG5ld1NpemUpOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogY3JlYXRlZCBuZXcgaGFzaHRhYmxl
OiAiLCBSYXdQb2ludGVyKG5ld0hhc2h0YWJsZSksICJcbiIpKTsKKyAgICBmb3IgKFRocmVhZERh
dGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiByZWhhc2hpbmcg
dGhyZWFkIGRhdGEgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIiB3aXRoIGFkZHJlc3MgPSAi
LCBSYXdQb2ludGVyKHRocmVhZERhdGEtPmFkZHJlc3MpLCAiXG4iKSk7CisgICAgICAgIHVuc2ln
bmVkIGhhc2ggPSBoYXNoQWRkcmVzcyh0aHJlYWREYXRhLT5hZGRyZXNzKTsKKyAgICAgICAgdW5z
aWduZWQgaW5kZXggPSBoYXNoICUgbmV3SGFzaHRhYmxlLT5zaXplOworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBp
bmRleCA9ICIsIGluZGV4LCAiXG4iKSk7CisgICAgICAgIEJ1Y2tldCogYnVja2V0ID0gbmV3SGFz
aHRhYmxlLT5kYXRhW2luZGV4XS5sb2FkKCk7CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAg
ICAgICAgICBpZiAocmV1c2FibGVCdWNrZXRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBi
dWNrZXQgPSBuZXcgQnVja2V0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
YnVja2V0ID0gcmV1c2FibGVCdWNrZXRzLnRha2VMYXN0KCk7CisgICAgICAgICAgICBuZXdIYXNo
dGFibGUtPmRhdGFbaW5kZXhdLnN0b3JlKGJ1Y2tldCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJ1Y2tldC0+ZW5xdWV1ZSh0aHJlYWREYXRhKTsKKyAgICB9CisgICAgCisgICAgLy8g
QXQgdGhpcyBwb2ludCB0aGVyZSBtYXkgYmUgc29tZSBidWNrZXRzIGxlZnQgdW5yZXVzZWQuIFRo
aXMgY291bGQgZWFzaWx5IGhhcHBlbiBpZiB0aGUKKyAgICAvLyBudW1iZXIgb2YgZW5xdWV1ZWQg
dGhyZWFkcyByaWdodCBub3cgaXMgbG93IGJ1dCB0aGUgaGlnaCB3YXRlcm1hcmsgb2YgdGhlIG51
bWJlciBvZiB0aHJlYWRzCisgICAgLy8gZW5xdWV1ZWQgd2FzIGhpZ2guIFdlIHBsYWNlIHRoZXNl
IGJ1Y2tldHMgaW50byB0aGUgaGFzaHRhYmxlIGJhc2ljYWxseSBhdCByYW5kb20sIGp1c3QgdG8K
KyAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgbGVhayB0aGVtLgorICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBuZXdIYXNodGFibGUtPnNpemUgJiYgIXJldXNhYmxlQnVja2V0cy5pc0VtcHR5
KCk7ICsraSkgeworICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFB0ciA9IG5ld0hhc2h0
YWJsZS0+ZGF0YVtpXTsKKyAgICAgICAgaWYgKGJ1Y2tldFB0ci5sb2FkKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgYnVja2V0UHRyLnN0b3JlKHJldXNhYmxlQnVja2V0cy50YWtl
TGFzdCgpKTsKKyAgICB9CisgICAgCisgICAgLy8gU2luY2Ugd2UgaW5jcmVhc2VkIHRoZSBzaXpl
IG9mIHRoZSBoYXNodGFibGUsIHdlIHNob3VsZCBoYXZlIGV4aGF1c3RlZCBvdXIgcHJlYWxsb2Nh
dGVkCisgICAgLy8gYnVja2V0cyBieSBub3cuCisgICAgQVNTRVJUKHJldXNhYmxlQnVja2V0cy5p
c0VtcHR5KCkpOworICAgIAorICAgIC8vIE9LLCByaWdodCBub3cgdGhlIG9sZCBoYXNodGFibGUg
aXMgbG9ja2VkIHVwIGFuZCB0aGUgbmV3IGhhc2h0YWJsZSBpcyByZWFkeSB0byByb2NrIGFuZAor
ICAgIC8vIHJvbGwuIEFmdGVyIHdlIGluc3RhbGwgdGhlIG5ldyBoYXNodGFibGUsIHdlIGNhbiBy
ZWxlYXNlIGFsbCBidWNrZXQgbG9ja3MuCisgICAgCisgICAgYm9vbCByZXN1bHQgPSBoYXNodGFi
bGUuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG9sZEhhc2h0YWJsZSwgbmV3SGFzaHRhYmxlKTsKKyAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworCisgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNU
b1VubG9jayk7Cit9CisKK1RocmVhZERhdGE6OlRocmVhZERhdGEoKQorICAgIDogdGhyZWFkSWRl
bnRpZmllcihjdXJyZW50VGhyZWFkKCkpCit7CisgICAgdW5zaWduZWQgY3VycmVudE51bVRocmVh
ZHM7CisgICAgZm9yICg7OykgeworICAgICAgICB1bnNpZ25lZCBvbGROdW1UaHJlYWRzID0gbnVt
VGhyZWFkcy5sb2FkKCk7CisgICAgICAgIGN1cnJlbnROdW1UaHJlYWRzID0gb2xkTnVtVGhyZWFk
cyArIDE7CisgICAgICAgIGlmIChudW1UaHJlYWRzLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkTnVt
VGhyZWFkcywgY3VycmVudE51bVRocmVhZHMpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgZW5zdXJlSGFzaHRhYmxlU2l6ZShjdXJyZW50TnVtVGhyZWFkcyk7Cit9CisKK1RocmVh
ZERhdGE6On5UaHJlYWREYXRhKCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVuc2lnbmVk
IG9sZE51bVRocmVhZHMgPSBudW1UaHJlYWRzLmxvYWQoKTsKKyAgICAgICAgaWYgKG51bVRocmVh
ZHMuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGROdW1UaHJlYWRzLCBvbGROdW1UaHJlYWRzIC0gMSkp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1RocmVhZERhdGEqIG15VGhyZWFkRGF0
YSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOworICAgIHN0
ZDo6Y2FsbF9vbmNlKAorICAgICAgICBpbml0aWFsaXplT25jZSwKKyAgICAgICAgW10geworICAg
ICAgICAgICAgdGhyZWFkRGF0YSA9IG5ldyBUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPigpOwor
ICAgICAgICB9KTsKKworICAgIHJldHVybiAqdGhyZWFkRGF0YTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KK2Jvb2wgZW5xdWV1ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQoreworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyhhZGRy
ZXNzKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRhYmxlKiBteUhhc2h0YWJsZSA9
IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAlIG15SGFz
aHRhYmxlLT5zaXplOworICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFBvaW50ZXIgPSBt
eUhhc2h0YWJsZS0+ZGF0YVtpbmRleF07CisgICAgICAgIEJ1Y2tldCogYnVja2V0OworICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBidWNrZXQgPSBidWNrZXRQb2ludGVyLmxvYWQoKTsK
KyAgICAgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3
IEJ1Y2tldCgpOworICAgICAgICAgICAgICAgIGlmICghYnVja2V0UG9pbnRlci5jb21wYXJlRXhj
aGFuZ2VXZWFrKG51bGxwdHIsIGJ1Y2tldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRl
IGJ1Y2tldDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQo
KSwgIjogZW5xdWV1ZWluZyBvbnRvIGJ1Y2tldCAiLCBSYXdQb2ludGVyKGJ1Y2tldCksICIgd2l0
aCBpbmRleCAiLCBpbmRleCwgIiBmb3IgYWRkcmVzcyAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAi
IHdpdGggaGFzaCAiLCBoYXNoLCAiXG4iKSk7CisgICAgICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7
CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVo
YXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRh
YmxlKSB7CisgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBm
dW5jdG9yKCk7CisgICAgICAgIGJvb2wgcmVzdWx0OworICAgICAgICBpZiAodGhyZWFkRGF0YSkg
eworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHByb2NlZWRpbmcgdG8gZW5xdWV1ZSAiLCBSYXdQb2lu
dGVyKHRocmVhZERhdGEpLCAiXG4iKSk7CisgICAgICAgICAgICBidWNrZXQtPmVucXVldWUodGhy
ZWFkRGF0YSk7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorYm9vbCBkZXF1ZXVlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmco
Y3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihhZGRy
ZXNzKSwgIlxuIikpOworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyhhZGRyZXNzKTsK
KyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFk
KCksICI6IGhhc2ggPSAiLCBoYXNoLCAiXG4iKSk7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAg
IEhhc2h0YWJsZSogbXlIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOworICAgICAgICBpZiAo
IW15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbm8gaGFzaHRhYmxlLlxuIikp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVk
IGluZGV4ID0gaGFzaCAlIG15SGFzaHRhYmxlLT5zaXplOworICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBpbmRleCA9
ICIsIGluZGV4LCAiXG4iKSk7CisgICAgICAgIEJ1Y2tldCogYnVja2V0ID0gbXlIYXNodGFibGUt
PmRhdGFbaW5kZXhdLmxvYWQoKTsKKyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiBubyBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiLlxuIikpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9j
a2luZyBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiXG4iKSk7CisgICAgICAgIGJ1
Y2tldC0+bG9jay5sb2NrKCk7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGxvY2tlZCBidWNrZXQgYXQgIiwgUmF3
UG9pbnRlcihidWNrZXQpLCAiXG4iKSk7CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUg
aGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlmIChoYXNo
dGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaGFz
aHRhYmxlIGNoYW5nZWQuXG4iKSk7CisgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGZvdW5k
IGJ1Y2tldC5cbiIpKTsKKyAgICAgICAgYnVja2V0LT5nZW5lcmljRGVxdWV1ZShmdW5jdG9yKTsK
KyAgICAgICAgYm9vbCByZXN1bHQgPSAhIWJ1Y2tldC0+cXVldWVIZWFkOworICAgICAgICBidWNr
ZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9u
YWxseShjb25zdCB2b2lkKiBhZGRyZXNzLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFsaWRhdGlv
bikKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50
VGhyZWFkKCksICI6IHBhcmtpbmcuXG4iKSk7CisgICAgCisgICAgVGhyZWFkRGF0YSogbWUgPSBt
eVRocmVhZERhdGEoKTsKKworICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOworICAgIAorICAg
IGJvb2wgcmVzdWx0ID0gZW5xdWV1ZSgKKyAgICAgICAgYWRkcmVzcywKKyAgICAgICAgWyZdICgp
IC0+IFRocmVhZERhdGEqIHsKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGlvbigpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBtZS0+YWRkcmVzcyA9IGFk
ZHJlc3M7CisgICAgICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gbWU7CisgICAgICAgIH0pOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZyBzZWxmOiAiLCBSYXdQb2ludGVyKG1lKSwgIlxuIikp
OworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobWUt
PnBhcmtpbmdMb2NrKTsKKyAgICAgICAgd2hpbGUgKG1lLT5zaG91bGRQYXJrKQorICAgICAgICAg
ICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOworCisgICAgICAgIG1lLT5hZGRy
ZXNzID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtlZCBzZWxmOiAiLCBSYXdQb2ludGVy
KG1lKSwgIlxuIikpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBhcmtpbmdMb3Q6OnVu
cGFya09uZShjb25zdCB2b2lkKiBhZGRyZXNzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIG9uZS5cbiIp
KTsKKworICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBudWxscHRyOworICAgIGJvb2wgcmVz
dWx0ID0gZGVxdWV1ZSgKKyAgICAgICAgYWRkcmVzcywKKyAgICAgICAgWyZdIChUaHJlYWREYXRh
KiBlbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBhZGRyZXNz
KQorICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7CisgICAgICAg
ICAgICB0aHJlYWREYXRhID0gZWxlbWVudDsKKyAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVz
dWx0OjpSZW1vdmVBbmRTdG9wOworICAgICAgICB9KTsKKworICAgIGlmICghdGhyZWFkRGF0YSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKHRocmVhZERhdGEtPnNob3VsZFBh
cmspOworICAgIAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBs
b2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICB0aHJlYWREYXRhLT5zaG91
bGRQYXJrID0gZmFsc2U7CisgICAgICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90
aWZ5X2FsbCgpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUGFya2lu
Z0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZvaWQqIGFkZHJlc3MpCit7CisgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcg
YWxsIGZyb20gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIi5cbiIpKTsKKyAgICAKKyAgICBWZWN0
b3I8VGhyZWFkRGF0YSosIDg+IHRocmVhZERhdGFzOworICAgIGRlcXVldWUoCisgICAgICAgIGFk
ZHJlc3MsCisgICAgICAgIFsmXSAoVGhyZWFkRGF0YSogZWxlbWVudCkgeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhy
ZWFkKCksICI6IE9ic2VydmluZyBlbGVtZW50IHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIo
ZWxlbWVudC0+YWRkcmVzcyksICJcbiIpKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5hZGRy
ZXNzICE9IGFkZHJlc3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6Okln
bm9yZTsKKyAgICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZChlbGVtZW50KTsKKyAgICAgICAg
ICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZTsKKyAgICAgICAgfSk7
CisKKyAgICBmb3IgKFRocmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgeworICAg
ICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIiB3aXRoIGFk
ZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAg
ICBBU1NFUlQodGhyZWFkRGF0YS0+c2hvdWxkUGFyayk7CisgICAgICAgIHN0ZDo6dW5pcXVlX2xv
Y2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAg
dGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9IGZhbHNlOworICAgICAgICB0aHJlYWREYXRhLT5wYXJr
aW5nQ29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRvbmUgdW5wYXJraW5n
LlxuIikpOworfQorCit2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2goc3RkOjpmdW5jdGlvbjx2b2lk
KFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4gY2FsbGJhY2spCit7CisgICAgVmVjdG9y
PEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKKworICAgIEhhc2h0
YWJsZSogY3VycmVudEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gY3VycmVudEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykgeworICAgICAgICBCdWNrZXQq
IGJ1Y2tldCA9IGN1cnJlbnRIYXNodGFibGUtPmRhdGFbaV0ubG9hZCgpOworICAgICAgICBpZiAo
IWJ1Y2tldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKFRocmVhZERhdGEq
IGN1cnJlbnRUaHJlYWREYXRhID0gYnVja2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJlYWREYXRh
OyBjdXJyZW50VGhyZWFkRGF0YSA9IGN1cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1ZSkKKyAg
ICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlmaWVyLCBj
dXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHVubG9ja0hhc2h0
YWJsZShidWNrZXRzVG9VbmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDog
U291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1BhcmtpbmdMb3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX1BhcmtpbmdMb3RfaAorI2RlZmlu
ZSBXVEZfUGFya2luZ0xvdF9oCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHd0
Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBQYXJraW5nTG90IHsKKyAgICBQYXJraW5nTG90KCkgPSBkZWxldGU7
CisgICAgUGFya2luZ0xvdChjb25zdCBQYXJraW5nTG90JikgPSBkZWxldGU7CisKK3B1YmxpYzoK
KyAgICAvLyBQYXJrcyB0aGUgdGhyZWFkIGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBn
aXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4gVGhlCisgICAgLy8gcGFya2luZyBv
bmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGls
ZSB0aGUgcXVldWUgbG9jayBpcyBoZWxkLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgdGhy
ZWFkIGFjdHVhbGx5IHNsZXB0LCBvciBmYWxzZSBpZiBpdCByZXR1cm5lZCBxdWlja2x5IGJlY2F1
c2Ugb2YKKyAgICAvLyB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRF
IHN0YXRpYyBib29sIHBhcmtDb25kaXRpb25hbGx5KGNvbnN0IHZvaWQqIGFkZHJlc3MsIHN0ZDo6
ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0aW9uKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFU+CisgICAgc3RhdGljIGJvb2wgY29tcGFyZUFuZFBhcmsoY29uc3QgQXRvbWlj
PFQ+KiBhZGRyZXNzLCBVIGV4cGVjdGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBhcmtDb25k
aXRpb25hbGx5KAorICAgICAgICAgICAgYWRkcmVzcywKKyAgICAgICAgICAgIFthZGRyZXNzLCBl
eHBlY3RlZF0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgVSB2YWx1ZSA9IGFkZHJlc3Mt
PmxvYWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gZXhwZWN0ZWQ7CisgICAg
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBVbnBhcmtzIG9uZSB0aHJlYWQgZnJvbSB0aGUg
cXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUg
bnVsbC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgbWF5IHN0aWxsIGJlIG90aGVyIHRo
cmVhZHMgb24gdGhhdCBxdWV1ZSwgb3IgZmFsc2UgaWYgdGhlcmUgZGVmaW5pdGVseQorICAgIC8v
IGFyZSBubyBtb3JlIHRocmVhZHMgb24gdGhlIHF1ZXVlLgorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgYm9vbCB1bnBhcmtPbmUoY29uc3Qgdm9pZCogYWRkcmVzcyk7CisKKyAgICAvLyBV
bnBhcmtzIGV2ZXJ5IHRocmVhZCBmcm9tIHRoZSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdp
dmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLgorICAgIFdURl9FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB1bnBhcmtBbGwoY29uc3Qgdm9pZCogYWRkcmVzcyk7CisKKyAgICAvLyBM
b2NrcyB0aGUgcGFya2luZyBsb3QgYW5kIHdhbGtzIGFsbCBvZiB0aGUgcGFya2VkIHRocmVhZHMg
YW5kIHRoZSBhZGRyZXNzZXMgdGhleSBhcmUgd2FpdGluZworICAgIC8vIG9uLiBUaHJlYWRzIHRo
YXQgYXJlIG9uIHRoZSBzYW1lIHF1ZXVlIGFyZSBndWFyYW50ZWVkIHRvIGJlIHdhbGtlZCBmcm9t
IGZpcnN0IHRvIGxhc3QsIGJ1dCB0aGUKKyAgICAvLyBxdWV1ZXMgbWF5IGJlIHJhbmRvbWx5IGlu
dGVybGVhdmVkLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHF1ZXVlIGZvciBhZGRyZXNzIEExIGhhcyBU
MSBhbmQgVDIgYW5kCisgICAgLy8gdGhlIHF1ZXVlIGZvciBhZGRyZXNzIEEyIGhhcyBUMyBhbmQg
VDQsIHRoZW4geW91IG1pZ2h0IHNlZSBpdGVyYXRpb24gb3JkZXJzIGxpa2U6CisgICAgLy8KKyAg
ICAvLyBBMSxUMSBBMSxUMiBBMixUMyBBMixUNAorICAgIC8vIEEyLFQzIEEyLFQ0IEExLFQxIEEx
LFQyCisgICAgLy8gQTEsVDEgQTIsVDMgQTEsVDIgQTIsVDQKKyAgICAvLyBBMSxUMSBBMixUMyBB
MixUNCBBMSxUMgorICAgIC8vCisgICAgLy8gQXMgd2VsbCBhcyBtYW55IG90aGVyIHBvc3NpYmxl
IGludGVybGVhdmVzIHRoYXQgYWxsIGhhdmUgVDEgYmVmb3JlIFQyIGFuZCBUMyBiZWZvcmUgVDQg
YnV0IGFyZQorICAgIC8vIG90aGVyd2lzZSB1bmNvbnN0cmFpbmVkLiBUaGlzIG1ldGhvZCBpcyB1
c2VmdWwgcHJpbWFyaWx5IGZvciBkZWJ1Z2dpbmcuIEl0J3MgYWxzbyB1c2VkIGJ5IHVuaXQKKyAg
ICAvLyB0ZXN0cy4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9yRWFjaChz
dGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPik7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQYXJraW5nTG90OworCisjZW5kaWYg
Ly8gV1RGX1BhcmtpbmdMb3RfaAorCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgyMjkpCisrKyBUb29scy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNS0wOC0xMCAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFdURiBzaG91bGQgaGF2ZSBhIFBhcmtpbmdM
b3QgZm9yIHBhcmtpbmcgc2xlZXBpbmcgdGhyZWFkcywgc28gdGhhdCBsb2NrcyBjYW4gZml0IGlu
IDEuNiBiaXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDc2NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qOgorICAgICAgICAq
IFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwOgorICAgICAgICAoVGVz
dFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFy
a2luZ0xvdC5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIw
MTUtMDgtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5mcj4KIAog
ICAgICAgICBDb21waWxlIHdhcm5pbmcgKC1Xc2lnbi1jb21wYXJlKSBvbiAzMi1iaXRzIGF0IFdl
YkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkv
Q01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTg4MTAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCBzZXQoVGVzdFdURl9TT1VS
Q0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL01lZGlhVGltZS5jcHAKICAg
ICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAKICAgICAk
e1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTmFrZWRQdHIuY3BwCisgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJ
X0RJUn0vVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElS
fS9UZXN0cy9XVEYvUmVmLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9S
ZWZQdHIuY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJv
ai9UZXN0V2ViS2l0QVBJLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCShyZXZpc2lvbiAx
ODgxMDApCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9UZXN0
V2ViS2l0QVBJLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICszMjYsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV1RGXE1ldGFBbGxvY2F0b3IuY3BwIiAvPgog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV1RGXE5ha2VkUHRyLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxPcHRpb25hbC5jcHAiIC8+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcUGFya2luZ0xvdC5jcHAiIC8+CiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcUmVkQmxhY2tUcmVlLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxSZWYuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV1RGXFJlZkNvdW50ZXIuY3BwIiAvPgpJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODEwMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkp
CkBAIC0xMSw2ICsxMSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQbGF0Zm9y
bVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29j
b2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxp
dGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0g
Ki87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUph
dmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0
Lm1tICovOyB9OworCQkwRkU0NDc5OTFCNzZGMUVCMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5NzFC
NzZGMUUzMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CiAJCTBGRkM0NUE2MUI3M0VC
RUIwMDg1QkQ2MiAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAvKiBMb2NrLmNwcCAqLzsgfTsK
IAkJMUEwMkM4NzAxMjVENENGRDAwRTNGNEJEIC8qIGZpbmQuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0QjEyNUQ0QTVFMDBF
M0Y0QkQgLyogZmluZC5odG1sICovOyB9OwogCQkxQTUwQUEyMDFBMkE1MUZDMDBGNEMzNDUgLyog
Y2xvc2UtZnJvbS13aXRoaW4tY3JlYXRlLXBhZ2UuaHRtbCBpbiBDb3B5IFJlc291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTUwQUExRjFBMkE0RUE1MDBGNEMzNDUg
LyogY2xvc2UtZnJvbS13aXRoaW4tY3JlYXRlLXBhZ2UuaHRtbCAqLzsgfTsKQEAgLTQyOSw2ICs0
MzAsNyBAQAogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVK
YXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tX
ZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2Nh
dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFBbGxvY2F0
b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU0NDc5NzFCNzZGMUUzMDA5
NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzQ1
QTQxQjczRUJFMjAwODVCRDYyIC8qIExvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0NDY0
MDEyMTY3QTgzMDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRpY09w
ZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2F0dXJh
dGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMTEwNiw2ICsxMTA4LDcgQEAKIAkJCQk5M0E0MjdBQzE4MERBNjBGMDBDRDI0RDcgLyogTW92
ZU9ubHkuaCAqLywKIAkJCQlGRUI2Rjc0RTFCMkJBNDRFMDA5RTQ5MjIgLyogTmFrZWRQdHIuY3Bw
ICovLAogCQkJCTFBRkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25hbC5jcHAgKi8sCisJ
CQkJMEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwICovLAogCQkJCTBG
QzZDNENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovLAogCQkJCTkzQTQy
N0FBMTgwREEyNjQwMENEMjRENyAvKiBSZWYuY3BwICovLAogCQkJCTg2QkQxOTk3MUEyREIwNUIw
MDZEQ0YwQSAvKiBSZWZDb3VudGVyLmNwcCAqLywKQEAgLTE2MjYsNiArMTYyOSw3IEBACiAJCQkJ
N0NDRTdFRDcxQTQxMUE3RTAwNDQ3QzRDIC8qIFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3RUb1VS
TENyYXNoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMUMxQTQxMUFFNjAwNDQ3QzRDIC8q
IFdpbGxTZW5kU3VibWl0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDgxQTQx
MUE3RTAwNDQ3QzRDIC8qIFdpbGxTZW5kU3VibWl0RXZlbnQubW0gaW4gU291cmNlcyAqLywKKwkJ
CQkwRkU0NDc5OTFCNzZGMUVCMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0VEOTFBNDExQTdFMDA0NDdDNEMgLyogV2luZG93bGVzc1dlYlZpZXdXaXRo
TWVkaWEubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YyRTFBNDExQjEwMDA0NDdDNEMgLyog
V0tCcm93c2luZ0NvbnRleHRHcm91cFRlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0Yy
RjFBNDExQjEwMDA0NDdDNEMgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVUZXN0Lm1t
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNw
cAkocmV2aXNpb24gMTg4MTAwKQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZGluZ1By
aW1pdGl2ZXMuaD4KQEAgLTk0LDcgKzk1LDQyIEBAIFRFU1QoV1RGX0xvY2ssIE1hbnlDb250ZW50
ZWRTaG9ydFNlY3Rpb24KIAogVEVTVChXVEZfTG9jaywgTWFueUNvbnRlbnRlZExvbmdTZWN0aW9u
cykKIHsKLSAgICBydW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAsIDEwMDAwLCAyMDAwKTsKKyAgICBy
dW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAsIDEwMDAwLCAxMDAwKTsKK30KKworVEVTVChXVEZfQnl0
ZUxvY2ssIFVuY29udGVudGVkU2hvcnRTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVM
b2NrPigxLCAxLCAxLCAxMDAwMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBVbmNvbnRl
bnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxLCAxMDAw
MCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBDb250ZW50ZWRTaG9ydFNlY3Rpb24p
Cit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEwLCAxLCAxMDAwMDAwMCk7Cit9CisK
K1RFU1QoV1RGX0J5dGVMb2NrLCBDb250ZW50ZWRMb25nU2VjdGlvbikKK3sKKyAgICBydW5Mb2Nr
VGVzdDxCeXRlTG9jaz4oMSwgMTAsIDEwMDAwLCAxMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVM
b2NrLCBNYW55Q29udGVudGVkU2hvcnRTZWN0aW9ucykKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRl
TG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworfQorCitURVNUKFdURl9CeXRlTG9jaywgTWFueUNv
bnRlbnRlZExvbmdTZWN0aW9ucykKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMTAsIDEw
LCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBTZWN0aW9uQWRkcmVzc0Nv
bGxpc2lvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oNCwgMiwgMTAwMDAsIDIwMDAp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXJr
aW5nTG90Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRpbmdQcmltaXRpdmVzLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBU
ZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNlIHsKKworc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7
CisgICAgdm9pZCBpbml0aWFsaXplKHVuc2lnbmVkIG51bVRocmVhZHMpCisgICAgeworICAgICAg
ICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYWlyIChGSUZPKSBzZW1hcGhvcmUsIGFuZCBpdCBzdGFy
dHMgb3V0IHVuYXZhaWxhYmxlLgorICAgICAgICBzZW1hcGhvcmUuc3RvcmUoMCk7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1UaHJlYWRzOyBpLS07KSB7CisgICAgICAg
ICAgICB0aHJlYWRzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAg
ICAgICAgICAgICAgICAgICJQYXJraW5nIFRlc3QgVGhyZWFkIiwKKyAgICAgICAgICAgICAgICAg
ICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9ORSgwdSwgY3VycmVu
dFRocmVhZCgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgZG93bigpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3VhcmQ8c3RkOjptdXRleD4gbG9ja2VyKGxvY2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgYXdha2UuYWRkKGN1cnJlbnRUaHJlYWQoKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXdva2VuID0gY3VycmVudFRocmVhZCgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uLm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgfSkpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCB1bnBhcmtPbmUodW5z
aWduZWQgc2luZ2xlVW5wYXJrSW5kZXgpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMHUsIGxh
c3RBd29rZW4pOworICAgICAgICAKKyAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVz
cyA9IDA7CisgICAgICAgIFZlY3RvcjxUaHJlYWRJZGVudGlmaWVyLCA4PiBxdWV1ZTsKKyAgICAg
ICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmll
ciB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICAgICAgcXVldWUuYXBwZW5kKHRocmVhZElkZW50aWZpZXIpOworCisg
ICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOworICAgICAgICAgICAgfSk7CisK
KyAgICAgICAgRVhQRUNUX0xFKG51bVdhaXRpbmdPbkFkZHJlc3MsIHRocmVhZHMuc2l6ZSgpIC0g
c2luZ2xlVW5wYXJrSW5kZXgpOworCisgICAgICAgIHVwKCk7CisKKyAgICAgICAgeworICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CisgICAgICAg
ICAgICB3aGlsZSAoYXdha2Uuc2l6ZSgpIDwgc2luZ2xlVW5wYXJrSW5kZXggKyAxKQorICAgICAg
ICAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tlcik7CisgICAgICAgICAgICBFWFBFQ1RfTkUo
MHUsIGxhc3RBd29rZW4pOworICAgICAgICAgICAgaWYgKCFxdWV1ZS5pc0VtcHR5KCkgJiYgcXVl
dWVbMF0gIT0gbGFzdEF3b2tlbikgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIldva2UgdXAg
d3JvbmcgdGhyZWFkOiBxdWV1ZSA9ICIsIGxpc3REdW1wKHF1ZXVlKSwgIiwgbGFzdCBhd29rZW4g
PSAiLCBsYXN0QXdva2VuLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEocXVldWVb
MF0sIGxhc3RBd29rZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGFzdEF3b2tlbiA9
IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGZpbmlzaCh1bnNpZ25lZCBudW1TaW5n
bGVVbnBhcmtzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9
IDA7CisgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCisgICAgICAgICAgICBbJl0gKFRocmVh
ZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgICAgICBpZiAo
YWRkcmVzcyAhPSAmc2VtYXBob3JlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOworICAg
ICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBFWFBFQ1RfTEUobnVtV2FpdGluZ09uQWRk
cmVzcywgdGhyZWFkcy5zaXplKCkgLSBudW1TaW5nbGVVbnBhcmtzKTsKKworICAgICAgICBzZW1h
cGhvcmUuc3RvcmUodGhyZWFkcy5zaXplKCkgLSBudW1TaW5nbGVVbnBhcmtzKTsKKyAgICAgICAg
UGFya2luZ0xvdDo6dW5wYXJrQWxsKCZzZW1hcGhvcmUpOworCisgICAgICAgIG51bVdhaXRpbmdP
bkFkZHJlc3MgPSAwOworICAgICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAorICAgICAgICAgICAg
WyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysr
OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgRVhQRUNUX0VRKDB1LCBudW1XYWl0aW5nT25B
ZGRyZXNzKTsKKyAgICAKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxz
dGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CisgICAgICAgICAgICB3aGlsZSAoYXdha2Uuc2l6ZSgp
IDwgdGhyZWFkcy5zaXplKCkpCisgICAgICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2Vy
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVu
dGlmaWVyIDogdGhyZWFkcykKKyAgICAgICAgICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRo
cmVhZElkZW50aWZpZXIpOworICAgIH0KKworICAgIC8vIFNlbWFwaG9yZSBvcGVyYXRpb25zLgor
ICAgIHZvaWQgZG93bigpCisgICAgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBp
bnQgb2xkU2VtYXBob3JlVmFsdWUgPSBzZW1hcGhvcmUubG9hZCgpOworICAgICAgICAgICAgaW50
IG5ld1NlbWFwaG9yZVZhbHVlID0gb2xkU2VtYXBob3JlVmFsdWUgLSAxOworICAgICAgICAgICAg
aWYgKCFzZW1hcGhvcmUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTZW1hcGhvcmVWYWx1ZSwgbmV3
U2VtYXBob3JlVmFsdWUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAob2xkU2VtYXBob3JlVmFsdWUgPiAwKSB7CisgICAgICAgICAgICAg
ICAgLy8gV2UgYWNxdWlyZWQgdGhlIHNlbWFwaG9yZS4gRG9uZS4KKyAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIG5l
ZWQgdG8gd2FpdC4KKyAgICAgICAgICAgIGlmIChQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygm
c2VtYXBob3JlLCBuZXdTZW1hcGhvcmVWYWx1ZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBk
aWQgd2FpdCwgYW5kIHRoZW4gZ290IHdva2VuIHVwLiBUaGlzIG1lYW5zIHRoYXQgc29tZW9uZSB3
aG8gdXAnZCB0aGUgc2VtYXBob3JlCisgICAgICAgICAgICAgICAgLy8gcGFzc2VkIG93bmVyc2hp
cCBvbnRvIHVzLgorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gV2UgbmV2ZXIgcGFya2VkLCBiZWNhdXNlIHRoZSBzZW1hcGhvcmUgdmFsdWUg
Y2hhbmdlZC4gVW5kbyBvdXIgZGVjcmVtZW50IGFuZCB0cnkgYWdhaW4uCisgICAgICAgICAgICBm
b3IgKDs7KSB7CisgICAgICAgICAgICAgICAgaW50IG9sZFNlbWFwaG9yZVZhbHVlID0gc2VtYXBo
b3JlLmxvYWQoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VtYXBob3JlLmNvbXBhcmVFeGNoYW5n
ZVdlYWsob2xkU2VtYXBob3JlVmFsdWUsIG9sZFNlbWFwaG9yZVZhbHVlICsgMSkpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IHZvaWQgdXAoKQorICAgIHsKKyAgICAgICAgaW50IG9sZFNlbWFwaG9yZVZhbHVlOworICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBvbGRTZW1hcGhvcmVWYWx1ZSA9IHNlbWFwaG9yZS5s
b2FkKCk7CisgICAgICAgICAgICBpZiAoc2VtYXBob3JlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xk
U2VtYXBob3JlVmFsdWUsIG9sZFNlbWFwaG9yZVZhbHVlICsgMSkpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvLyBDaGVjayBpZiBhbnlvbmUgd2FzIHdhaXRp
bmcgb24gdGhlIHNlbWFwaG9yZS4gSWYgdGhleSB3ZXJlLCB0aGVuIHBhc3Mgb3duZXJzaGlwIHRv
IHRoZW0uCisgICAgICAgIGlmIChvbGRTZW1hcGhvcmVWYWx1ZSA8IDApCisgICAgICAgICAgICBQ
YXJraW5nTG90Ojp1bnBhcmtPbmUoJnNlbWFwaG9yZSk7CisgICAgfQorICAgIAorICAgIEF0b21p
YzxpbnQ+IHNlbWFwaG9yZTsKKyAgICBzdGQ6Om11dGV4IGxvY2s7CisgICAgc3RkOjpjb25kaXRp
b25fdmFyaWFibGUgY29uZGl0aW9uOworICAgIEhhc2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gYXdh
a2U7CisgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXI+IHRocmVhZHM7CisgICAgVGhyZWFkSWRl
bnRpZmllciBsYXN0QXdva2VuIHsgMCB9OworfTsKKwordm9pZCBydW5QYXJraW5nVGVzdCh1bnNp
Z25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxheSwgdW5zaWduZWQgbnVtVGhyZWFkcywgdW5z
aWduZWQgbnVtU2luZ2xlVW5wYXJrcykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2luZ2xlTGF0
Y2hUZXN0W10+IHRlc3RzID0gc3RkOjptYWtlX3VuaXF1ZTxTaW5nbGVMYXRjaFRlc3RbXT4obnVt
TGF0Y2hlcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGxhdGNoSW5kZXggPSBudW1MYXRjaGVzOyBs
YXRjaEluZGV4LS07KQorICAgICAgICB0ZXN0c1tsYXRjaEluZGV4XS5pbml0aWFsaXplKG51bVRo
cmVhZHMpOworCisgICAgZm9yICh1bnNpZ25lZCB1bnBhcmtJbmRleCA9IDA7IHVucGFya0luZGV4
IDwgbnVtU2luZ2xlVW5wYXJrczsgKyt1bnBhcmtJbmRleCkgeworICAgICAgICB1c2xlZXAoZGVs
YXkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxhdGNoSW5kZXggPSBudW1MYXRjaGVzOyBsYXRj
aEluZGV4LS07KQorICAgICAgICAgICAgdGVzdHNbbGF0Y2hJbmRleF0udW5wYXJrT25lKHVucGFy
a0luZGV4KTsKKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGxhdGNoSW5kZXggPSBudW1MYXRj
aGVzOyBsYXRjaEluZGV4LS07KQorICAgICAgICB0ZXN0c1tsYXRjaEluZGV4XS5maW5pc2gobnVt
U2luZ2xlVW5wYXJrcyk7Cit9CisKK3ZvaWQgcmVwZWF0UGFya2luZ1Rlc3QodW5zaWduZWQgbnVt
UmVwZWF0cywgdW5zaWduZWQgbnVtTGF0Y2hlcywgdW5zaWduZWQgZGVsYXksIHVuc2lnbmVkIG51
bVRocmVhZHMsIHVuc2lnbmVkIG51bVNpbmdsZVVucGFya3MpCit7CisgICAgd2hpbGUgKG51bVJl
cGVhdHMtLSkKKyAgICAgICAgcnVuUGFya2luZ1Rlc3QobnVtTGF0Y2hlcywgZGVsYXksIG51bVRo
cmVhZHMsIG51bVNpbmdsZVVucGFya3MpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
KworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJrQWxsT25lRmFzdCkKK3sKKyAgICByZXBlYXRQ
YXJraW5nVGVzdCgxMDAwMCwgMSwgMCwgMSwgMCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3Qs
IFVucGFya0FsbEh1bmRyZWRGYXN0KQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEwMDAsIDEs
IDAsIDEwMCwgMCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya09uZU9uZUZhc3Qp
Cit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAwMCwgMSwgMCwgMSwgMSk7Cit9CisKK1RFU1Qo
V1RGX1BhcmtpbmdMb3QsIFVucGFya09uZUh1bmRyZWRGYXN0KQoreworICAgIHJlcGVhdFBhcmtp
bmdUZXN0KDEwMCwgMSwgMCwgMTAwLCAxMDApOworfQorCitURVNUKFdURl9QYXJraW5nTG90LCBV
bnBhcmtPbmVGaWZ0eVRoZW5GaWZ0eUFsbEZhc3QpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3Qo
MjAwLCAxLCAwLCAxMDAsIDUwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJrQWxs
T25lKQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEwMCwgMSwgMTAwMDAsIDEsIDApOworfQor
CitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtBbGxIdW5kcmVkKQoreworICAgIHJlcGVhdFBh
cmtpbmdUZXN0KDEwMCwgMSwgMTAwMDAsIDEwMCwgMCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdM
b3QsIFVucGFya09uZU9uZSkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxMCwgMSwgMTAwMDAs
IDEsIDEpOworfQorCitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtPbmVIdW5kcmVkKQorewor
ICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEsIDEsIDEwMDAwLCAxMDAsIDEwMCk7Cit9CisKK1RFU1Qo
V1RGX1BhcmtpbmdMb3QsIFVucGFya09uZUZpZnR5VGhlbkZpZnR5QWxsKQoreworICAgIHJlcGVh
dFBhcmtpbmdUZXN0KDIsIDEsIDEwMDAwLCAxMDAsIDUwKTsKK30KKworVEVTVChXVEZfUGFya2lu
Z0xvdCwgSHVuZHJlZFVucGFya0FsbE9uZUZhc3QpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3Qo
MTAwLCAxMDAsIDAsIDEsIDApOworfQorCitURVNUKFdURl9QYXJraW5nTG90LCBIdW5kcmVkVW5w
YXJrQWxsT25lKQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEsIDEwMCwgMTAwMDAsIDEsIDAp
OworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2ViS2l0QVBJCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258652</attachid>
            <date>2015-08-10 14:34:56 -0700</date>
            <delta_ts>2015-08-10 16:24:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>80354</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDE1LTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBoYXZlIGEgUGFya2luZ0xvdCBmb3IgcGFya2luZyBzbGVlcGluZyB0aHJlYWRz
LCBzbyB0aGF0IGxvY2tzIGNhbiBmaXQgaW4gMS42IGJpdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY2NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgQnl0ZVNwaW5Mb2NrIHdpdGggQnl0
ZUxvY2suCisKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmg6CisKIDIwMTUt
MDgtMDcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBMZXQn
cyByZW5hbWUgRnVuY3Rpb25Cb2R5Tm9kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAxODgyMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxNCArMjcsMTQgQEAKICNkZWZpbmUgQ29uY3VycmVudEpJVExvY2tfaAog
CiAjaW5jbHVkZSAiRGVmZXJHQy5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KKyNp
bmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlwZWRlZiBCeXRlU3Bp
bkxvY2sgQ29uY3VycmVudEpJVExvY2s7Ci10eXBlZGVmIEJ5dGVTcGluTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwordHlwZWRlZiBCeXRlTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5
cGVkZWYgQnl0ZUxvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKICNlbHNlCiB0eXBlZGVm
IE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKIHR5cGVkZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODIyOSkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTUtMDgtMTAgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEYgc2hvdWxkIGhhdmUg
YSBQYXJraW5nTG90IGZvciBwYXJraW5nIHNsZWVwaW5nIHRocmVhZHMsIHNvIHRoYXQgbG9ja3Mg
Y2FuIGZpdCBpbiAxLjYgYml0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ3NjY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWRkcyBhIG1ham9yIG5ldyBhYnN0cmFjdGlvbiBmb3Ig
Y29uY3VycmVuY3kgYWxnb3JpdGhtcyBpbiBXZWJLaXQuIEl0J3MgY2FsbGVkIGEKKyAgICAgICAg
UGFya2luZ0xvdCwgYW5kIGl0IG1ha2VzIGF2YWlsYWJsZSBhIHRocmVhZCBwYXJraW5nIHF1ZXVl
IGZvciBlYWNoIHZpcnR1YWwgYWRkcmVzcyBpbiBtZW1vcnkuCisgICAgICAgIFRoZSBxdWV1ZXMg
YXJlIG1haW50YWluZWQgYnkgYSBkYXRhLWFjY2Vzcy1wYXJhbGxlbCBjb25jdXJyZW50IGhhc2h0
YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhlCisgICAgICAgIG1lbW9yeSB1c2FnZSBpcyBib3VuZGVk
IGF0IGFyb3VuZCBoYWxmIGEgS0IgcGVyIHRocmVhZC4KKworICAgICAgICBUaGUgUGFya2luZ0xv
dCBtYWtlcyBpdCBlYXN5IHRvIHR1cm4gYW55IHNwaW5sb2NrLWJhc2VkIGNvbmN1cnJlbmN5IHBy
b3RvY29sIGludG8gb25lIHRoYXQKKyAgICAgICAgcGFya3MgdGhyZWFkcyBhZnRlciBhIHdoaWxl
LiBCZWNhdXNlIHF1ZXVlIHN0YXRlIG1hbmFnZW1lbnQgaXMgdXAgdG8gdGhlIFBhcmtpbmdMb3Qg
YW5kIG5vdAorICAgICAgICB0aGUgdXNlcidzIGRhdGEgc3RydWN0dXJlLCB0aGlzIHBhdGNoIHVz
ZXMgaXQgdG8gaW1wbGVtZW50IGEgZnVsbCBhZGFwdGl2ZSBtdXRleCBpbiBvbmUgYnl0ZS4KKyAg
ICAgICAgSW4gZmFjdCwgb25seSB0aHJlZSBzdGF0ZXMgb2YgdGhhdCBieXRlIGFyZSB1c2VkICgw
ID0gYXZhaWxhYmxlLCAxID0gbG9ja2VkLCAyID0gbG9ja2VkIGFuZAorICAgICAgICB0aGVyZSBh
cmUgcGFya2VkIHRocmVhZHMpLiBIZW5jZSB0aGUgam9rZSB0aGF0IFBhcmtpbmdMb3QgYWxsb3dz
IGxvY2tzIHRoYXQgZml0IGluIDEuNiBiaXRzLgorCisgICAgICAgIEJ5dGVMb2NrIGlzIHVzZWQg
YXMgYSByZXBsYWNlbWVudCBmb3IgQnl0ZVNwaW5Mb2NrIGluIEphdmFTY3JpcHRDb3JlLgorCisg
ICAgICAgIFRoZSBBUEkgdGVzdHMgZm9yIHRoaXMgYWxzbyBkZW1vIGhvdyB0byBjcmVhdGUgYSBj
b21wbGV0ZWx5IGZhaXIgKEZJRk8pIGJpbmFyeSBzZW1hbXBob3JlLiBUaGUKKyAgICAgICAgY29t
bWVudCBpbiBMb2NrLmggc2hvd3MgaG93IHdlIGNvdWxkIGFjY2VsZXJhdGUgTG9jayBwZXJmb3Jt
YW5jZSB1c2luZyBQYXJraW5nTG90LiBBZnRlciB3ZQorICAgICAgICBhcmUgc3VyZSB0aGF0IHRo
aXMgY29kZSB3b3Jrcywgd2UgY2FuIGV4cGFuZCB0aGUgdXNlIG9mIFBhcmtpbmdMb3QuIFRoYXQn
cyBjb3ZlcmVkIGJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDc4NDEuCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAg
ICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtz
L0xvY2tTcGVlZFRlc3QuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd3RmL0F0b21p
Y3MuaDoKKyAgICAgICAgKFdURjo6QXRvbWljOjpjb21wYXJlRXhjaGFuZ2VXZWFrKToKKyAgICAg
ICAgKFdURjo6QXRvbWljOjpjb21wYXJlRXhjaGFuZ2VTdHJvbmcpOgorICAgICAgICAqIHd0Zi9C
eXRlTG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6bG9ja1Nsb3cpOgor
ICAgICAgICAoV1RGOjpCeXRlTG9jazo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL0J5dGVM
b2NrLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6Qnl0ZUxvY2spOgorICAgICAg
ICAoV1RGOjpCeXRlTG9jazo6bG9jayk6CisgICAgICAgIChXVEY6OkJ5dGVMb2NrOjp1bmxvY2sp
OgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6aXNIZWxkKToKKyAgICAgICAgKFdURjo6Qnl0ZUxv
Y2s6OmlzTG9ja2VkKToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
d3RmL0xvY2suaDoKKyAgICAgICAgKiB3dGYvUGFya2luZ0xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseSk6CisgICAgICAgIChXVEY6OlBh
cmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya0Fs
bCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9Q
YXJraW5nTG90Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJraW5nTG90Ojpjb21wYXJlQW5k
UGFyayk6CisKIDIwMTUtMDgtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5j
YW5vbi5mcj4KIAogICAgICAgICBDb21waWxlIHdhcm5pbmcgKC1Xc2lnbi1jb21wYXJlKSBvbiAz
Mi1iaXRzIGF0IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
dmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNlL1dURi9XVEYu
dmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogICA8
SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEFzc2VydGlvbnMuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEJpdFZlY3Rvci5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQnl0ZUxvY2suY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cd3RmXENvbXBpbGF0aW9uVGhyZWFkLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5jcHAiIC8+CkBAIC0xMTYsNiArMTE3LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHd0ZlxPU1JhbmRvbVNvdXJjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3
dGZcUGFnZUJsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJh
bGxlbEpvYnNHZW5lcmljLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQ
YXJraW5nTG90LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQcmludFN0
cmVhbS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUkFNU2l6ZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUmFuZG9tTnVtYmVyLmNwcCIgLz4K
QEAgLTE3MSw2ICsxNzMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJsb2Nr
U3RhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCbG9vbUZpbHRlci5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQnl0ZUxvY2suaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxDaGVja2VkQXJpdGhtZXRpYy5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENoZWNrZWRCb29sZWFuLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ29tcGlsZXIuaCIgLz4KQEAgLTI0Niw2ICsyNDksNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9ic0dlbmVyaWMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnNMaWJkaXNwYXRj
aC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9ic09wZW5N
UC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmtpbmdMb3QuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXNzUmVmUHRyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGxhdGZvcm0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxQcmludFN0cmVhbS5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODgyMjkpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwx
MCBAQAogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0
RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKKwkJMEY4MjRBNjYxQjc0NDNBMDAwMkUz
NDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGODI0QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi87IH07
CisJCTBGODI0QTY3MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjMxQjc0NDNBMDAwMkUzNDVE
IC8qIEJ5dGVMb2NrLmggKi87IH07CisJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKKwkJMEY4
MjRBNjkxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQ
YXJraW5nTG90LmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2lu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3
MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjg4NUUwRjE4
NDVBRUE5MDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFz
dEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi87
IH07CkBAIC0zMDcsNiArMzExLDEwIEBACiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBE
ZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FF
M0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhv
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGODI0QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlTG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8q
IFBhcmtpbmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xv
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQ
b2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODg1RTBFMTg0NUFFOUYw
MEYxRTNGQSAvKiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZhc3RCaXRW
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE2LDYg
KzcyNCw4IEBACiAJCQkJQThBNDcyNjQxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb2NrU3RhY2suaCAq
LywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIzRkYgLyogQmxvb21GaWx0ZXIuaCAqLywKIAkJ
CQlBOEE0NzI2NzE1MUE4MjVBMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywK
KwkJCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwICovLAorCQkJCTBG
ODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovLAogCQkJCUVCOTVFMUVGMTYx
QTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAqLywKIAkJCQkwRkVDM0VFNDE3MUI4MzQ3MDBG
REFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8sCiAJCQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZG
IC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCkBAIC04MTAsNiArODIwLDggQEAKIAkJCQlBOEE0
NzJFNTE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZVJlc2VydmF0aW9uLmggKi8sCiAJCQkJQThBNDcy
RTYxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcmFsbGVsSm9icy5oICovLAogCQkJCUE4QTQ3MkU5MTUx
QTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oICovLAorCQkJCTBGODI0
QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLywKKwkJCQkwRjgyNEE2NTFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1
IC8qIFBsYXRmb3JtLmggKi8sCiAJCQkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50
U3RyZWFtLmNwcCAqLywKQEAgLTExNTYsNiArMTE2OCw3IEBACiAJCQkJQThBNDc0MTUxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTYx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDE3MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFy
cmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTExNjcsNiArMTE4MCw3IEBACiAJCQkJMTQ2OTQxOTIx
NkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRG
M0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Njk0MTk2MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVk
VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMDE1MUE4MjVCMDA0MTIzRkYgLyog
U2VudGluZWxMaW5rZWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMjE1MUE4MjVC
MDA0MTIzRkYgLyogU0hBMS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzI1LDYgKzEzMzksNyBAQAog
CQkJZmlsZXMgPSAoCiAJCQkJQThBNDczODYxNTFBODI1QjAwNDEyM0ZGIC8qIEFzc2VydGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzUxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21p
Y1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjgyNEE2NjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUJDNzBGMDUxNzZDMzc5RDAwMTAx
REVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZC
MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5
NDE5RDE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMzQwLDYgKzEzNTUsNyBAQAogCQkJCUE4QTQ3MzlBMTUxQTgyNUIwMDQxMjNGRiAv
KiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OEE0NzQzOTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBOEE0NzM5QzE1MUE4MjVCMDA0MTIzRkYgLyogQ3VycmVudFRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODZGNDZGNjAxQTI4NDBFRTAwQ0NCRjIyIC8qIFJlZkNvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUUxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQTAxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVN
YXRoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tT
cGVlZFRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3Bl
ZWRUZXN0LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tT
cGVlZFRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQnl0ZUxvY2su
aD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgog
I2luY2x1ZGUgPHd0Zi9TcGluTG9jay5oPgpAQCAtNDMsNyArNDQsNyBAQCB1bnNpZ25lZCBudW1J
dGVyYXRpb25zOwogICAgIAogdm9pZCB1c2FnZSgpCiB7Ci0gICAgcHJpbnRmKCJVc2FnZTogTG9j
a1NwZWVkVGVzdCBzcGlubG9ja3xsb2NrfG11dGV4fGFsbCA8bnVtIHRocmVhZCBncm91cHM+IDxu
dW0gdGhyZWFkcyBwZXIgZ3JvdXA+IDx3b3JrIHBlciBjcml0aWNhbCBzZWN0aW9uPiA8bnVtIG5v
aXNlIHRocmVhZHM+IDxudW0gaXRlcmF0aW9ucz5cbiIpOworICAgIHByaW50ZigiVXNhZ2U6IExv
Y2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xieXRlbG9ja3xtdXRleHxhbGwgPG51bSB0aHJlYWQg
Z3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29yayBwZXIgY3JpdGljYWwgc2VjdGlv
bj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlvbnM+XG4iKTsKICAgICBleGl0KDEp
OwogfQogCkBAIC0xMjUsNiArMTI2LDEwIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJn
dikKICAgICAgICAgcnVuQmVuY2htYXJrPExvY2s+KCJXVEYgTG9jayIpOwogICAgICAgICBkaWRS
dW4gPSB0cnVlOwogICAgIH0KKyAgICBpZiAoIXN0cmNtcChhcmd2WzFdLCAiYnl0ZWxvY2siKSB8
fCAhc3RyY21wKGFyZ3ZbMV0sICJhbGwiKSkgeworICAgICAgICBydW5CZW5jaG1hcms8Qnl0ZUxv
Y2s+KCJXVEYgQnl0ZUxvY2siKTsKKyAgICAgICAgZGlkUnVuID0gdHJ1ZTsKKyAgICB9CiAgICAg
aWYgKCFzdHJjbXAoYXJndlsxXSwgIm11dGV4IikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikp
IHsKICAgICAgICAgcnVuQmVuY2htYXJrPE11dGV4PigiUGxhdGZvcm0gTXV0ZXgiKTsKICAgICAg
ICAgZGlkUnVuID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0J5dGVMb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJ5dGVMb2NrLmgiCisKKyNpbmNsdWRlICJQYXJraW5n
TG90LmgiCisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgV1RGIHsKKworc3RhdGljIGJv
b2wgdmVyYm9zZSA9IGZhbHNlOworCit2b2lkIEJ5dGVMb2NrOjpsb2NrU2xvdygpCit7CisgICAg
dW5zaWduZWQgc3BpbkNvdW50ID0gMDsKKworICAgIC8vIFRoaXMgbWFnaWMgbnVtYmVyIHR1cm5z
IG91dCB0byBiZSBvcHRpbWFsIGJhc2VkIG9uIHBhc3QgSmlrZXNSVk0gZXhwZXJpbWVudHMuCisg
ICAgY29uc3QgdW5zaWduZWQgc3BpbkxpbWl0ID0gNDA7CisgICAgCisgICAgZm9yICg7Oykgewor
ICAgICAgICB1aW50OF90IGN1cnJlbnRCeXRlVmFsdWUgPSBtX2J5dGUubG9hZCgpOworICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVh
ZCgpLCAiOiBsb2NraW5nIHdpdGggIiwgY3VycmVudEJ5dGVWYWx1ZSwgIlxuIikpOworCisgICAg
ICAgIC8vIFdlIGFsbG93IG91cnNlbHZlcyB0byBiYXJnZSBpbi4KKyAgICAgICAgaWYgKCEoY3Vy
cmVudEJ5dGVWYWx1ZSAmIGlzSGVsZEJpdCkKKyAgICAgICAgICAgICYmIG1fYnl0ZS5jb21wYXJl
RXhjaGFuZ2VXZWFrKGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBpc0hlbGRC
aXQpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vYm9k
eSBwYXJrZWQgYW5kIHdlIGhhdmVuJ3Qgc3B1biB0b28gbXVjaCwgd2UgY2FuIGp1c3QgdHJ5IHRv
IHNwaW4gYXJvdW5kLgorICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYgaGFzUGFya2Vk
Qml0KSAmJiBzcGluQ291bnQgPCBzcGluTGltaXQpIHsKKyAgICAgICAgICAgIHNwaW5Db3VudCsr
OworICAgICAgICAgICAgc3RkOjp0aGlzX3RocmVhZDo6eWllbGQoKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTmVlZCB0byBwYXJrLiBXZSBkbyB0aGlz
IGJ5IHNldHRpbmcgdGhlIHBhcmtlZCBiaXQgZmlyc3QsIGFuZCB0aGVuIHBhcmtpbmcuIFdlIHNw
aW4gYXJvdW5kCisgICAgICAgIC8vIGlmIHRoZSBwYXJrZWQgYml0IHdhc24ndCBzZXQgYW5kIHdl
IGZhaWxlZCBhdCBzZXR0aW5nIGl0LgorICAgICAgICBpZiAoIShjdXJyZW50Qnl0ZVZhbHVlICYg
aGFzUGFya2VkQml0KQorICAgICAgICAgICAgJiYgIW1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFr
KGN1cnJlbnRCeXRlVmFsdWUsIGN1cnJlbnRCeXRlVmFsdWUgfCBoYXNQYXJrZWRCaXQpKQorICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8gV2Ugbm93IGV4cGVjdCB0aGUgdmFsdWUg
dG8gYmUgaXNIZWxkfGhhc1BhcmtlZC4gU28gbG9uZyBhcyB0aGF0J3MgdGhlIGNhc2UsIHdlIGNh
biBwYXJrLgorICAgICAgICBQYXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmbV9ieXRlLCBpc0hl
bGRCaXQgfCBoYXNQYXJrZWRCaXQpOworCisgICAgICAgIC8vIFdlIGhhdmUgYXdha2VuLCBvciB3
ZSBuZXZlciBwYXJrZWQgYmVjYXVzZSB0aGUgYnl0ZSB2YWx1ZSBjaGFuZ2VkLiBFaXRoZXIgd2F5
LCB3ZSBsb29wCisgICAgICAgIC8vIGFyb3VuZCBhbmQgdHJ5IGFnYWluLgorICAgIH0KK30KKwor
dm9pZCBCeXRlTG9jazo6dW5sb2NrU2xvdygpCit7CisgICAgLy8gUmVsZWFzZSB0aGUgbG9jayB3
aGlsZSBmaW5kaW5nIG91dCBpZiBzb21lb25lIGlzIHBhcmtlZC4gTm90ZSB0aGF0IGFzIHNvb24g
YXMgd2UgZG8gdGhpcywKKyAgICAvLyBzb21lb25lIG1pZ2h0IGJhcmdlIGluLgorICAgIHVpbnQ4
X3Qgb2xkQnl0ZVZhbHVlOworICAgIGZvciAoOzspIHsKKyAgICAgICAgb2xkQnl0ZVZhbHVlID0g
bV9ieXRlLmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5sb2NraW5nIHdpdGggIiwgb2xkQnl0ZVZh
bHVlLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVChvbGRCeXRlVmFsdWUgJiBpc0hlbGRCaXQpOwor
ICAgICAgICBpZiAobV9ieXRlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkQnl0ZVZhbHVlLCAwKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCBzb21lb25lIGNv
dWxkIHRyeSB0byBwYXJrIHJpZ2h0IG5vdy4gSWYgdGhhdCBoYXBwZW5zLCB0aGV5IHdpbGwgcmV0
dXJuIGltbWVkaWF0ZWx5CisgICAgLy8gYmVjYXVzZSBvdXIgcGFya2luZyBwcmVkaWNhdGUgaXMg
dGhhdCBtX2J5dGUgPT0gaXNIZWxkQml0IHwgaGFzUGFya2VkQml0LCBidXQgd2UndmUgYWxyZWFk
eSBzZXQKKyAgICAvLyBtX2J5dGUgPSAwLgorCisgICAgLy8gSWYgdGhlcmUgaGFkIGJlZW4gdGhy
ZWFkcyBwYXJrZWQsIHVucGFyayBhbGwgb2YgdGhlbS4gVGhpcyBjYXVzZXMgYSB0aHVuZGVyaW5n
IGhlcmQsIGJ1dCB3aGlsZQorICAgIC8vIHRoYXQgaXMgdGhlb3JldGljYWxseSBzY2FyeSwgaXQn
cyB0b3RhbGx5IGZpbmUgaW4gV2ViS2l0IGJlY2F1c2Ugd2UgdXN1YWxseSBkb24ndCBoYXZlIGVu
b3VnaAorICAgIC8vIHRocmVhZHMgZm9yIHRoaXMgdG8gbWF0dGVyLgorICAgIC8vIEZJWE1FOiBX
ZSBkb24ndCByZWFsbHkgbmVlZCB0aGlzIHRvIGV4aGliaXQgdGh1bmRlcmluZyBoZXJkLiBXZSBj
b3VsZCB1c2UgdW5wYXJrT25lKCksIGFuZCBpZgorICAgIC8vIHRoYXQgcmV0dXJucyB0cnVlLCBq
dXN0IHNldCB0aGUgcGFya2VkIGJpdCBhZ2Fpbi4gSWYgaW4gdGhlIHByb2Nlc3Mgb2Ygc2V0dGlu
ZyB0aGUgcGFya2VkIGJpdAorICAgIC8vIHdlIGZhaWwgdGhlIENBUywgdGhlbiBqdXN0IHVucGFy
ayBhZ2Fpbi4KKyAgICBpZiAob2xkQnl0ZVZhbHVlICYgaGFzUGFya2VkQml0KQorICAgICAgICBQ
YXJraW5nTG90Ojp1bnBhcmtBbGwoJm1fYnl0ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0J5dGVMb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQnl0ZUxvY2tfaAorI2RlZmluZSBC
eXRlTG9ja19oCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1ZGUgPHd0Zi9Mb2Nr
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIFRoaXMgaXMgbGlrZSBMb2NrLCBidXQgb25seSByZXF1aXJlcyAxIGJ5dGUgaW5zdGVhZCBv
ZiBzaXplb2Yodm9pZCopIHN0b3JhZ2UuIFRoZSBkb3duc2lkZSBpcyB0aGF0CisvLyBpdCBpcyBz
bG93ZXIgb24gdGhlIHNsb3cgcGF0aCB1bmRlciBoZWF2eSBjb250ZW50aW9uIGludm9sdmluZyBt
YW55IHRocmVhZHMgYmVjYXVzZSBpdCBpcworLy8gc3VzY2VwdGlibGUgdG8gdGhlICJ0aHVuZGVy
aW5nIGhlcmQiIHByb2JsZW06IGl0IGRvZXNuJ3QgaGF2ZSBlbm91Z2ggc3RhdGUgdG8gdHJhY2sg
aG93IG1hbnkKKy8vIHRocmVhZHMgYXJlIHdhaXRpbmcgZm9yIHRoZSBsb2NrLCBzbyB3aGVuIHVu
bG9jayBkZXRlY3RzIHRoYXQgYW55IHRocmVhZCBpcyB3YWl0aW5nLCB0aGVuIGl0IHdha2VzCisv
LyBhbGwgb2YgdGhlIHdhaXRpbmcgdGhyZWFkcy4gQWxsIG9mIHRob3NlIHRocmVhZHMgd2lsbCBw
aWxlIG9udG8gdGhlIGxvY2s7IG9uZSB3aWxsIHN1Y2NlZWQgYW5kIHRha2UKKy8vIGl0IHdoaWxl
IHRoZSBvdGhlcnMgd2lsbCBnbyBiYWNrIHRvIHNsZWVwLiBUaGUgc2xvdy1kb3duIGlzIHNtYWxs
LiBUZW4gdGhyZWFkcyByZXBlYXRlZGx5CisvLyBjb250ZW5kaW5nIGZvciB0aGUgc2FtZSB+MS0x
MHVzIGxvbmcgY3JpdGljYWwgc2VjdGlvbiB3aWxsIHJ1biA3JSBzbG93ZXIgb24gbXkgbWFjaGlu
ZS4gSWYgSSBtZXNzCisvLyB3aXRoIGFueSBvZiB0aGUgcGFyYW1ldGVycyAtIGNoYW5nZSB0aGUg
bnVtYmVyIG9mIHRocmVhZHMgb3IgY2hhbmdlIHRoZSBjcml0aWNhbCBzZWN0aW9uIGR1cmF0aW9u
IC0KKy8vIHRoZW4gQnl0ZUxvY2sgcmVhY2hlcyBwYXJpdHkgd2l0aCBMb2NrLCBhbmQgc29tZXRp
bWVzIG91dHBlcmZvcm1zIGl0LiBQZXJoYXBzIG1vc3Qgc3VycHJpc2luZ2x5LAorLy8gdGhlIHNs
b3ctZG93biBnb2VzIGF3YXkgZXZlbiB3aGVuIHlvdSBpbmNyZWFzZSB0aGUgbnVtYmVyIG9mIHRo
cmVhZHMuIEJ5dGVMb2NrIGFwcGVhcnMgdG8gc29tZXRpbWVzCisvLyBiZSBmYXN0ZXIgdW5kZXIg
bWljcm9jb250ZW50aW9uLCBwZXJoYXBzIGJlY2F1c2UgYSBjb250ZW50aW91cyA4LWJpdCBDQVMg
aXMgY2hlYXBlciB0aGFuIGEKKy8vIGNvbnRlbnRpb3VzIDY0LWJpdCBDQVMuIE5vdGUgdGhhdCB1
bmNvbnRlbmRlZCBsb2NraW5nIGlzIGVxdWFsbHkgZmFzdCB3aXRoIEJ5dGVMb2NrIGFzIHdpdGgg
TG9jay4KKy8vIEluIGFsbCwgTG9jayBhbmQgQnl0ZUxvY2sgaGF2ZSBzaW1pbGFyIHBlcmZvcm1h
bmNlIHVuZGVyIGNvbnRyb2xsZWQgbWljcm9iZW5jaG1hcmtzLCBidXQgTG9jayBpcworLy8gdGhl
b3JldGljYWxseSBzYWZlciBiZWNhdXNlIG9mIHRoZSB0aHVuZGVyaW5nIGhlcmQgaXNzdWUuIEl0
J3MgcHJvYmFibHkgYmVzdCB0byB1c2UgQnl0ZUxvY2sgb25seQorLy8gd2hlbiB5b3UgcmVhbGx5
IGNhcmUgYWJvdXQgc3BhY2UgYW5kIHlvdSBkb24ndCBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIHRo
YXQgYSBsYXJnZSBudW1iZXIgb2YKKy8vIHRocmVhZHMgd291bGQgZXZlciBwaWxlIG9udG8gdGhl
IHNhbWUgbG9jay4KKworY2xhc3MgQnl0ZUxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KEJ5dGVMb2NrKTsKK3B1YmxpYzoKKyAgICBCeXRlTG9jaygpCisgICAgeworICAgICAgICBtX2J5
dGUuc3RvcmUoMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgbG9jaygpCisgICAgeworICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhj
aGFuZ2VXZWFrKDAsIGlzSGVsZEJpdCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7Cisg
ICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgbG9ja1Nsb3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisg
ICAgeworICAgICAgICBpZiAoTElLRUxZKG1fYnl0ZS5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzSGVs
ZEJpdCwgMCwgc3RkOjptZW1vcnlfb3JkZXJfcmVsZWFzZSkpKSB7CisgICAgICAgICAgICAvLyBM
b2NrIHJlbGVhc2VkIGFuZCBub2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBp
c0hlbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYnl0ZS5sb2FkKHN0ZDo6bWVt
b3J5X29yZGVyX2FjcXVpcmUpICYgaXNIZWxkQml0OworICAgIH0KKworICAgIGJvb2wgaXNMb2Nr
ZWQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzSGVsZCgpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBpc0hlbGRCaXQgPSAxOworICAgIHN0YXRp
YyBjb25zdCB1aW50OF90IGhhc1BhcmtlZEJpdCA9IDI7CisKKyAgICBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBsb2NrU2xvdygpOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHVubG9ja1Ns
b3coKTsKKworICAgIEF0b21pYzx1aW50OF90PiBtX2J5dGU7Cit9OworCit0eXBlZGVmIExvY2tl
cjxCeXRlTG9jaz4gQnl0ZUxvY2tlcjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6Qnl0ZUxvY2s7Cit1c2luZyBXVEY6OkJ5dGVMb2NrZXI7CisKKyNlbmRpZiAvLyBCeXRlTG9j
a19oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODgyMjkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNyw2ICs3LDcgQEAg
c2V0KFdURl9IRUFERVJTCiAgICAgQml0VmVjdG9yLmgKICAgICBCaXRtYXAuaAogICAgIEJ1bXBQ
b2ludGVyQWxsb2NhdG9yLmgKKyAgICBCeXRlTG9jay5oCiAgICAgQnl0ZU9yZGVyLmgKICAgICBD
b21waWxhdGlvblRocmVhZC5oCiAgICAgQ29tcGlsZXIuaApAQCAtNjIsNiArNjMsNyBAQCBzZXQo
V1RGX0hFQURFUlMKICAgICBQYXJhbGxlbEpvYnNHZW5lcmljLmgKICAgICBQYXJhbGxlbEpvYnNM
aWJkaXNwYXRjaC5oCiAgICAgUGFyYWxsZWxKb2JzT3Blbk1QLmgKKyAgICBQYXJraW5nTG90LmgK
ICAgICBQYXNzUmVmUHRyLmgKICAgICBQbGF0Zm9ybS5oCiAgICAgUHJpbnRTdHJlYW0uaApAQCAt
MTQ0LDYgKzE0Niw3IEBAIHNldChXVEZfU09VUkNFUwogICAgIEFzc2VydGlvbnMuY3BwCiAgICAg
QXRvbWljcy5jcHAKICAgICBCaXRWZWN0b3IuY3BwCisgICAgQnl0ZUxvY2suY3BwCiAgICAgQ29t
cGlsYXRpb25UaHJlYWQuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY1V0aWxpdGllcy5jcHAKICAgICBD
cnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAKQEAgLTE2Niw2ICsxNjksNyBAQCBzZXQo
V1RGX1NPVVJDRVMKICAgICBPU1JhbmRvbVNvdXJjZS5jcHAKICAgICBQYWdlQmxvY2suY3BwCiAg
ICAgUGFyYWxsZWxKb2JzR2VuZXJpYy5jcHAKKyAgICBQYXJraW5nTG90LmNwcAogICAgIFByaW50
U3RyZWFtLmNwcAogICAgIFJBTVNpemUuY3BwCiAgICAgUmFuZG9tTnVtYmVyLmNwcApJbmRleDog
U291cmNlL1dURi93dGYvTG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2su
aAkocmV2aXNpb24gMTg4MTAwKQkoZnJvbSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmg6MTg4MTAwKQor
KysgU291cmNlL1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
V1RGX0xvY2tfaAorI2RlZmluZSBXVEZfTG9ja19oCisKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5o
PgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrZXIuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8vIEEgTG9j
ayBpcyBhIGZ1bGx5IGFkYXB0aXZlIG11dGV4IHRoYXQgZ2l2ZXMgeW91IHRoZSBiZXN0IG9mIFNw
aW5Mb2NrIGFuZCBNdXRleC4gRm9yIHNtYWxsIGNyaXRpY2FsCisvLyBzZWN0aW9ucyAodGhhdCB0
YWtlIG5hbm9zZWNvbmRzKSwgaXQgd2lsbCB1c3VhbGx5IHBlcmZvcm0gd2l0aGluIDJ4IG9mIGEg
U3BpbkxvY2sgaW4gYm90aCB0aGUKKy8vIGNvbnRlbmRlZCBhbmQgdW5jb250ZW5kZWQgY2FzZS4g
V2hlbiB1c2luZyBhIE11dGV4LCBzdWNoIGNyaXRpY2FsIHNlY3Rpb25zIHRha2UgdXAgdG8gMTAw
eCBsb25nZXIKKy8vIHRoYW4gTG9jayBpbiB0aGUgY29udGVuZGVkIGNhc2UsIG9yIDN4IGxvbmdl
ciB0aGFuIExvY2sgaW4gdGhlIHVuY29udGVuZGVkIGNhc2UuIEZvciBsb25nZXIKKy8vIGNyaXRp
Y2FsIHNlY3Rpb25zICh0aGF0IHRha2UgdGVucyBvZiBtaWNyb3NlY29uZHMpLCBpdCB3aWxsIHBl
cmZvcm0gYXMgd2VsbCBhcyBhIE11dGV4IGFuZCBzbGlnaHRseQorLy8gYmV0dGVyIHRoYW4gYSBT
cGluTG9jay4gQnV0LCBjcnVjaWFsbHksIGEgU3BpbkxvY2sgd2lsbCBidXJuIHVwIHRvIDkweCBt
b3JlIHRpbWUgaW4gdGhlIGtlcm5lbCBmb3IKKy8vIHN1Y2ggY3JpdGljYWwgc2VjdGlvbnMgdGhh
biBlaXRoZXIgTG9jayBvciBNdXRleC4gSGVuY2UsIHVzaW5nIExvY2sgd2lsbCBtYWtlIHRoZSBj
b21tb24gY2FzZSBvZgorLy8gbG9ja2luZyBwZXJmb3JtIGNsb3NlIHRvIFNwaW5Mb2NrIGZvciBh
bnkgY3JpdGljYWwgc2VjdGlvbiB0aGF0IGRvZXMgbW9yZSB0aGFuIGEgZmV3IG5hbm9zZWNvbmRz
IG9mCisvLyB3b3JrIHdoaWxlIGJlaW5nIGFzIGtpbmQgdG8gdGhlIHNjaGVkdWxlciBmb3IgbG9u
Z2VyIGNyaXRpY2FsIHNlY3Rpb25zIGFzIGEgTXV0ZXguCisvLworLy8gTGlrZSBTcGluTG9jaywg
TG9jayB0YWtlcyB2ZXJ5IGxpdHRsZSBtZW1vcnkgLSBqdXN0IHNpemVvZih2b2lkKiksIHRob3Vn
aCBzZWUgYSBkZXRhaWxlZCBjYXZlYXQKKy8vIGJlbG93LgorLy8KKy8vIEdlbmVyYWxseSwgeW91
IHNob3VsZCB1c2UgTG9jayBpbnN0ZWFkIG9mIFNwaW5Mb2NrIGJlY2F1c2Ugd2hpbGUgaXQgcGVu
YWxpemVzIHlvdSBzbGlnaHRseSwgeW91CisvLyBtYWtlIHVwIGZvciBpdCBieSBub3Qgd2FzdGlu
ZyBDUFUgY3ljbGVzIGluIGNhc2Ugb2YgY29udGVudGlvbi4KKy8vCisvLyBUaGUgTG9jayBoYXMg
dGhlIGZvbGxvd2luZyBuaWNlIHByb3BlcnRpZXM6CisvLworLy8gLSBVbmNvbnRlbmRlZCBmYXN0
IHBhdGhzIGZvciBsb2NrIGFjcXVpc2l0aW9uIGFuZCBsb2NrIHJlbGVhc2UgdGhhdCBhcmUgYWxt
b3N0IGFzIGZhc3QgYXMgdGhlCisvLyAgIHVuY29udGVuZGVkIGZhc3QgcGF0aHMgb2YgYSBzcGlu
bG9jay4gVGhlIG9ubHkgb3ZlcmhlYWQgaXMgdGhhdCB0aGUgc3BpbmxvY2sgd2lsbCBub3QgQ0FT
IG9uCisvLyAgIHJlbGVhc2UsIHdoaWxlIExvY2sgd2lsbCBDQVMuIFRoaXMgb3ZlcmhlYWQgKmNh
biogc2xvdyB0aGluZ3MgZG93biBmb3IgZXh0cmVtZWx5IHNtYWxsIGNyaXRpY2FsCisvLyAgIHNl
Y3Rpb25zIHRoYXQgZG8gbGl0dGxlIG9yIG5vdGhpbmcgLSBpdCBtYWtlcyB0aGVtIDJ4IHNsb3dl
ciBzaW5jZSBpbiB0aGF0IGNhc2UsIENBUyBpcyB0aGUgbW9zdAorLy8gICBleHBlbnNpdmUgaW5z
dHJ1Y3Rpb24gYW5kIGhhdmluZyB0d28gb2YgdGhlbSBpcyB0d2ljZSBhcyBiYWQgYXMganVzdCBo
YXZpbmcgb25lLiBIb3dldmVyLCB0aGlzCisvLyAgIGxvY2sgaW1wbGVtZW50YXRpb24gaXMgc3Rp
bGwgYWxtb3N0IDN4IGZhc3RlciB0aGFuIGEgcGxhdGZvcm0gbXV0ZXggaW4gdGhvc2UgY2FzZXMu
IEl0J3MgdW5saWtlbHkKKy8vICAgdGhhdCB5b3UnbGwgZW5jb3VudGVyIG5vLW9wIGNyaXRpY2Fs
IHNlY3Rpb25zLCBzbyB1c3VhbGx5LCB0aGlzIGxvY2sgaXMgYmV0dGVyIHRoYW4gYSBzcGlubG9j
ay4KKy8vCisvLyAtIENvbnRlbmRlZCBmYXN0IHBhdGggdGhhdCBhdHRlbXB0cyB0byBzcGluIGFu
ZCB5aWVsZCBmb3Igc29tZSBudW1iZXIgb2YgdGltZXMuIEZvciBjcml0aWNhbAorLy8gICBzZWN0
aW9ucyB0aGF0IGFyZSBoZWxkIG9ubHkgYnJpZWZseSwgdGhpcyBhbGxvd3MgTG9jayB0byBwZXJm
b3JtIGFsbW9zdCBhcyB3ZWxsIGFzIGEgU3BpbkxvY2suCisvLyAgIFNwaW5Mb2NrIGNhbiBzdGls
bCBiZSBhbG1vc3QgMnggZmFzdGVyIHRoYW4gTG9jayBpZiB0aGUgY3JpdGljYWwgc2VjdGlvbiBp
cyBhIG5vLW9wLCBidXQgdGhpcworLy8gICBhZHZhbnRhZ2UgZGltaW5pc2hlcyBhcyB0aGUgY3Jp
dGljYWwgc2VjdGlvbiBncm93cy4KKy8vCisvLyAtIENvbnRlbmRlZCBzbG93IHBhdGggdGhhdCBl
bnF1ZXVlcyB0aGUgY29udGVuZGluZyB0aHJlYWQgYW5kIGNhdXNlcyBpdCB0byB3YWl0IG9uIGEg
Y29uZGl0aW9uCisvLyAgIHZhcmlhYmxlIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBUaGlz
IGlzIHRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggc3lzdGVtIG11dGV4ZXMgYW5kIGNvbmRpdGlvbgor
Ly8gICB2YXJpYWJsZXMgYXJlIHVzZWQuIFRoaXMgY2FzZSBpcyByYXJlIGFuZCBzZWxmLWxpbWl0
aW5nOiBpdCB3aWxsIG9ubHkgaGFwcGVuIHdoZW4gYSBsb2NrIGlzIGhlbGQKKy8vICAgZm9yIGxv
bmcgZW5vdWdoIHRoYXQgc3Bpbm5pbmcgc29tZSBudW1iZXIgb2YgdGltZXMgZG9lc24ndCBhY3F1
aXJlIGl0LiBUaGUgZmFjdCB0aGF0IExvY2sgZG9lcworLy8gICB0aGlzIGFzIGEgZmFsbGJhY2sg
d2hlbiBzcGlubmluZyBmb3Igc29tZSBudW1iZXIgb2YgdGltZXMgZmFpbHMgbWVhbnMgdGhhdCBp
dCB3aWxsIGJ1cm4KKy8vICAgZHJhbWF0aWNhbGx5IGZld2VyIENQVSBjeWNsZXMgLSBmb3IgZXhh
bXBsZSB3aXRoIDEwIHRocmVhZHMgb24gYW4gOCBsb2dpY2FsIENQVSBtYWNoaW5lIGFjcXVpcmlu
ZworLy8gICBhIGNyaXRpY2FsIHNlY3Rpb24gdGhhdCB0YWtlcyA1MCBtaWNyb3NlY29uZHMsIHRo
ZSBXVEYgU3BpbkxvY2sgd2lsbCBjYXVzZSA5MHggbW9yZSB0aW1lIHRvIGJlCisvLyAgIHNwZW50
IGluIHRoZSBrZXJuZWwgdGhhbiBMb2NrLgorLy8KKy8vIC0gVmVyeSBsb3cgbWVtb3J5IHVzYWdl
LiBFYWNoIExvY2sgcmVxdWlyZXMgb25seSBzaXplb2Yodm9pZCopIG1lbW9yeS4gV2hlbiB0aGUg
Y29udGVuZGVkIHNsb3cKKy8vICAgcGF0aCBpcyBhY3RpdmF0ZWQsIExvY2sgb25seSByZWxpZXMg
b24gZWFjaCB0aHJlYWQgaGF2aW5nIGEgcHJlYWxsb2NhdGVkIHRocmVhZC1zcGVjaWZpYyBkYXRh
CisvLyAgIHN0cnVjdHVyZSBjYWxsZWQgVGhyZWFkRGF0YSB0aGF0LCB0b2dldGhlciB3aXRoIHRo
ZSBMb2NrIGl0c2VsZiwgaXMgdXNlZCB0byBidWlsZCB1cCBhIHRocmVhZAorLy8gICBxdWV1ZS4g
U28sIHRoZSB0b3RhbCBtZW1vcnkgdXNhZ2Ugb2YgYWxsIExvY2tzIGlzIHN0aWxsIGJvdW5kZWQg
Ynk6CisvLworLy8gICAgICAgbnVtYmVyT2ZMb2NrcyAqIHNpemVvZih2b2lkKikgKyBudW1iZXJP
ZlRocmVhZHMgKiBzaXplb2YoVGhyZWFkRGF0YSkKKy8vCisvLyAgIFdoZXJlIFRocmVhZERhdGEg
aXMgYSBkZWNlbnRseSBsYXJnZSBkYXRhIHN0cnVjdHVyZSwgYnV0IHdlIHdpbGwgb25seSBldmVy
IGhhdmUgb25lIHBlciB0aHJlYWQsCisvLyAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG51bWJlciBvZiBM
b2NrcyBpbiBtZW1vcnkuIEFub3RoZXIgd2F5IHRvIHZpZXcgdGhpcyBpcyB0aGF0IHRoZSB3b3Jz
dCBjYXNlCisvLyAgIG1lbW9yeSB1c2FnZSBwZXIgTG9jayBpczoKKy8vCisvLyAgICAgICBzaXpl
b2Yodm9pZCopICsgbnVtYmVyT2ZUaHJlYWRzIC8gbnVtYmVyT2ZMb2NrcyAqIHNpemVvZihUaHJl
YWREYXRhKQorLy8KKy8vICAgU28sIHVubGVzcyB5b3UgaGF2ZSBhIHNtYWxsIG51bWJlciBvZiBM
b2NrcyAob3IsIGEgbGFyZ2UgbnVtYmVyIG9mIHRocmVhZHMsIHdoaWNoIGlzIGZhciBsZXNzCisv
LyAgIGxpa2VseSksIHRoZSBtZW1vcnkgdXNhZ2UgcGVyLUxvY2sgaXMgc3RpbGwgZ29pbmcgdG8g
YmUgc29tZXdoZXJlIGFyb3VuZCBzaXplb2Yodm9pZCopLgorLy8KKy8vIC0gQmFyZ2luZyBmYXN0
IHBhdGhzLiBUaGUgTG9jayBpcyB0dW5lZCBmb3IgbWF4aW11bSB0aHJvdWdocHV0IHJhdGhlciB0
aGFuIG1heGltdW0gZmFpcm5lc3MuIElmCisvLyAgIGEgdGhyZWFkIHJlbGVhc2VzIGEgTG9jayB0
aGF0IHdhcyBjb250ZW5kZWQgYW5kIGhhZCBhIHF1ZXVlIG9mIHdhaXRpbmcgdGhyZWFkcywgdGhl
biBpdCB3aWxsCisvLyAgIHdha2UgdXAgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLCBidXQgaXQgd2ls
bCBhbHNvIG1hcmsgdGhlIGxvY2sgYXMgYmVpbmcgYXZhaWxhYmxlLiBUaGlzIG1lYW5zIHRoYXQK
Ky8vICAgc29tZSBvdGhlciB0aHJlYWQgdGhhdCBpcyBqdXN0IG5vdyBhdHRlbXB0aW5nIHRvIGFj
cXVpcmUgdGhlIGxvY2sgbWF5IGdldCBpdCBiZWZvcmUgdGhlIHRocmVhZAorLy8gICB0aGF0IGdv
dCB3b2tlbiB1cC4gV2hlbiBhIHRocmVhZCBiYXJnZXMgaW50byB0aGUgbG9jaywgdGhlIHRocmVh
ZCB0aGF0IGdvdCB3b2tlbiB1cCB3aWxsIHNpbXBseQorLy8gICBnbyBiYWNrIHRvIHRoZSBlbmQg
b2YgdGhlIHF1ZXVlLiBUaGUgYmFyZ2luZyBiZWhhdmlvciBlbmRzIHVwIGJlaW5nIHByb2JhYmls
aXN0aWMgb24gbW9zdAorLy8gICBwbGF0Zm9ybXMgYW5kIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSB1
bmZhaXIgdG8gc29tZSB0aHJlYWQgYXQgc29tZSBtb21lbnQgaW4gdGltZSwgaXQgd2lsbCByYXJl
bHkKKy8vICAgaGF2ZSBhIGxvbmcgc3RyZWFrIG9mIHVuZmFpcm5lc3MgdG93YXJkcyBhbnkgcGFy
dGljdWxhciB0aHJlYWQ6IGV2ZW50dWFsbHkgZWFjaCB0aHJlYWQgd2FpdGluZyBvbgorLy8gICB0
aGUgbG9jayB3aWxsIGdldCB0byBoYXZlIGEgdHVybiBzbyBsb25nIGFzIG5vIHRocmVhZCBqdXN0
IGhvbGRzIHRoZSBsb2NrIGZvcmV2ZXIuIFRoYXQgc2FpZCwKKy8vICAgdGhlcmUgKmlzKiBhIGNo
YW5jZSBvZiBwYXRob2xvZ2llcyAtIHVzZXJzIG9mIExvY2sgc2hvdWxkIG5vdCBkZXBlbmQgb24g
Zmlyc3QtaW4sIGZpcnN0LW91dCBsb2NrCisvLyAgIGFjcXVpc2l0aW9uIG9yZGVyIHVuZGVyIGNv
bnRlbnRpb24uIFRoZSBzYW1lIGNhdmVhdCBpcyBnZW5lcmFsbHkgdHJ1ZSBvZiBTcGluTG9jayBh
bmQgcGxhdGZvcm0KKy8vICAgbXV0ZXhlcyBvbiBzb21lIHBsYXRmb3Jtcy4KKworLy8gVGhpcyBp
cyBhIHN0cnVjdCB3aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3RvciBzbyB0aGF0IGl0
IGNhbiBiZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkLgorLy8gVXNlIExvY2sgaW4gaW5zdGFuY2Ug
dmFyaWFibGVzLgorc3RydWN0IExvY2tCYXNlIHsKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAg
ICAgICAgaWYgKExJS0VMWShtX3dvcmQuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0xvY2tlZEJp
dCwgc3RkOjptZW1vcnlfb3JkZXJfYWNxdWlyZSkpKSB7CisgICAgICAgICAgICAvLyBMb2NrIGFj
cXVpcmVkIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbG9ja1Ns
b3coKTsKKyAgICB9CisKKyAgICB2b2lkIHVubG9jaygpCisgICAgeworICAgICAgICBpZiAoTElL
RUxZKG1fd29yZC5jb21wYXJlRXhjaGFuZ2VXZWFrKGlzTG9ja2VkQml0LCAwLCBzdGQ6Om1lbW9y
eV9vcmRlcl9yZWxlYXNlKSkpIHsKKyAgICAgICAgICAgIC8vIExvY2sgcmVsZWFzZWQsIGFuZCBu
b2JvZHkgd2FzIHdhaXRpbmchCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICB1bmxvY2tTbG93KCk7CisgICAgfQorCisgICAgYm9vbCBpc0hlbGQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fd29yZC5sb2FkKHN0ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUp
ICYgaXNMb2NrZWRCaXQ7CisgICAgfQorCisgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNIZWxkKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgc3Rh
dGljIGNvbnN0IHVpbnRwdHJfdCBpc0xvY2tlZEJpdCA9IDE7CisgICAgc3RhdGljIGNvbnN0IHVp
bnRwdHJfdCBpc1F1ZXVlTG9ja2VkQml0ID0gMjsKKyAgICBzdGF0aWMgY29uc3QgdWludHB0cl90
IHF1ZXVlSGVhZE1hc2sgPSAzOworCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Ns
b3coKTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CisKKyAgICBB
dG9taWM8dWludHB0cl90PiBtX3dvcmQ7Cit9OworCitjbGFzcyBMb2NrIDogcHVibGljIExvY2tC
YXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMb2NrKTsKK3B1YmxpYzoKKyAgICBMb2Nr
KCkKKyAgICB7CisgICAgICAgIG1fd29yZC5zdG9yZSgwLCBzdGQ6Om1lbW9yeV9vcmRlcl9yZWxh
eGVkKTsKKyAgICB9Cit9OworCit0eXBlZGVmIExvY2tCYXNlIFN0YXRpY0xvY2s7Cit0eXBlZGVm
IExvY2tlcjxMb2NrQmFzZT4gTG9ja0hvbGRlcjsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6U3RhdGljTG9jazsKK3VzaW5nIFdURjo6TG9jazsKK3VzaW5nIFdURjo6TG9ja0hv
bGRlcjsKKworI2VuZGlmIC8vIFdURl9Mb2NrX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvTG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQor
KysgU291cmNlL1dURi93dGYvTG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNiArMTAyLDMz
IEBAIG5hbWVzcGFjZSBXVEYgewogLy8gICBhY3F1aXNpdGlvbiBvcmRlciB1bmRlciBjb250ZW50
aW9uLiBUaGUgc2FtZSBjYXZlYXQgaXMgZ2VuZXJhbGx5IHRydWUgb2YgU3BpbkxvY2sgYW5kIHBs
YXRmb3JtCiAvLyAgIG11dGV4ZXMgb24gc29tZSBwbGF0Zm9ybXMuCiAKKy8vIEZJWE1FOiBXZSBj
b3VsZCBtYWtlIHRoaXMgTG9jayBtb3JlIGVmZmljaWVudCBieSB1c2luZyBQYXJraW5nTG90IGFu
ZCBhdG9taWMgYWRkIGluc3RlYWQgb2YgQ0FTLgorLy8gVGhlIGxvY2sgd291bGQgYmUgYXZhaWxh
YmxlIGlmIHRoZSAzMi1iaXQgbG9jayB3b3JkIDw9IDEuIExvY2tpbmcgd291bGQgYXRvbWljYWxs
eSBhZGQgMiB0byB0aGUKKy8vIHdvcmQuIFRoZSBsb2NrIHdvdWxkIGJlIGtub3duIHRvIGJlIGhl
bGQgaWYgdGhlIG9sZCB2YWx1ZSBvZiB0aGUgd29yZCB3YXMgPD0gMS4gVGhlIGxvdyBiaXQKKy8v
IGp1c3QgaW5kaWNhdGVzIGlmIGFueW9uZSBpcyB3YWl0aW5nLiBJZiB0aGUgd29yZCB3YXMgPj0g
MiBhZnRlciB0aGUgYXRvbWljIGFkZCwgd2Ugd291bGQgZ28gdG8gYQorLy8gc2xvdyBwYXRoIHRo
YXQgcmVwZWF0ZWRseSBhdHRlbXB0cyB0byBzZXQgdGhlIGxvY2sgd29yZCB0byAzIFtzaWNdIGZy
b20gMCBvciAxLCBhbmQgcGFya3MgaWYgdGhhdCdzCisvLyBub3QgcG9zc2libGUuIFRoZSBzbG93
IHBhdGggY291bGQgYWxzbyBwZXJmb3JtIGRlZmVuc2l2ZSBmaXh1cCB0aGF0IGRyb3BzIHRoZSBs
b2NrIHZhbHVlIGRvd24gdG8KKy8vIDMgaWYgaXQgd2FzIGdyZWF0ZXIgdGhhbiAzLCBhbnl0aW1l
IHRoYXQgaXQgbmVlZGVkIHRvIGdvIHRvIHBhcmsuIFRoZSB1bmxvY2sgZmFzdCBwYXRoIHdvdWxk
CisvLyBhdG9taWNhbGx5IHN1YnRyYWN0IDIuIElmIHRoZSBkZWNyZW1lbnQgb3BlcmF0aW9uIGRv
ZXMgbm90IGNhdXNlIHRoZSBjb3VudCB0byB6ZXJvLCBpdCB3b3VsZCBnbyB0bworLy8gYSBzbG93
IHBhdGguIFRoZSBzbG93IHBhdGggd291bGQgdW5wYXJrIG9uZS4gSWYgdW5wYXJraW5nIHJldHVy
bnMgZmFsc2UsIHRoZSBzbG93IHBhdGggd291bGQKKy8vIGF0dGVtcHQgYSBzdHJvbmcgQ0FTIGZy
b20gMSB0byAwLiBJdCB3b3VsZG4ndCBkbyBhbnl0aGluZyBpZiB0aGUgQ0FTIGZhaWxzLCBzaW5j
ZSB0aGUgb25seSBnb2FsIG9mCisvLyB0aGF0IENBUyBpcyB0byB0ZWxsIGZ1dHVyZSB1bmxvY2sg
ZmFzdCBwYXRocyB0aGF0IHRoZXJlIGlzIHBvc3NpYmx5IGEgdGhyZWFkIHBhcmtlZC4gQXMgc3Vj
aCB0aGUKKy8vIHN0YXRlcyBvZiB0aGUgbG9jayBhcmU6CisvLworLy8gICAwOiBsb2NrIGF2YWls
YWJsZSBhbmQgbm9ib2R5IHdhaXRpbmcKKy8vICAgMTogbG9jayBhdmFpbGFibGUgYW5kIHRoZXJl
IG1heSBiZSB0aHJlYWRzIHdhaXRpbmcKKy8vICAgMjogbG9jayB0YWtlbiBhbmQgbm8gdGhyZWFk
cyB3YWl0aW5nCisvLyA+PTM6IGxvY2sgdGFrZW4gYW5kIHRocmVhZHMgd2FpdGluZworLy8KKy8v
IEl0IG1heSBiZSBwb3NzaWJsZSB0byBkZXNpZ24gYW4gZXZlbiBiZXR0ZXIgbG9jayBpbXBsZW1l
bnRhdGlvbiBiYXNlZCBvbiBhdG9taWMgaW5jcmVtZW50cyByYXRoZXIKKy8vIHRoYW4gYXRvbWlj
ICs9Mi8tPTIuCisvLworLy8gTm90ZSB0aGF0IGJlY2F1c2UgUGFya2luZ0xvdCB1c2VzIHRoaXMg
bG9jayBpbnRlcm5hbGx5LCB3ZSB3b3VsZCBwcm9iYWJseSByZW5hbWUgdGhpcyBsb2NrCisvLyBp
bXBsZW1lbnRhdGlvbiB0byBzb21ldGhpbmcgbGlrZSBCb290c3RyYXBMb2NrIG9yIGV2ZW4gbWFr
ZSBpdCBwYXJ0IG9mIGFuIGFub255bW91cyBuYW1lc3BhY2UKKy8vIGluc2lkZSBQYXJraW5nTG90
LgorLy8KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc4NDEK
KwogLy8gVGhpcyBpcyBhIHN0cnVjdCB3aXRob3V0IGEgY29uc3RydWN0b3Igb3IgZGVzdHJ1Y3Rv
ciBzbyB0aGF0IGl0IGNhbiBiZSBzdGF0aWNhbGx5IGluaXRpYWxpemVkLgogLy8gVXNlIExvY2sg
aW4gaW5zdGFuY2UgdmFyaWFibGVzLgogc3RydWN0IExvY2tCYXNlIHsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1BhcmtpbmdMb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Bhcmtp
bmdMb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBh
cmtpbmdMb3QuaCIKKworI2luY2x1ZGUgIkhhc2hGdW5jdGlvbnMuaCIKKyNpbmNsdWRlICJMb2Nr
LmgiCisjaW5jbHVkZSAiU3RyaW5nUHJpbnRTdHJlYW0uaCIKKyNpbmNsdWRlICJUaHJlYWRTcGVj
aWZpYy5oIgorI2luY2x1ZGUgIlRocmVhZGluZ1ByaW1pdGl2ZXMuaCIKKyNpbmNsdWRlICJWZWN0
b3IuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx0aHJlYWQ+CisKK25hbWVzcGFjZSBX
VEYgeworCituYW1lc3BhY2UgeworCitib29sIHZlcmJvc2UgPSBmYWxzZTsKKworc3RydWN0IFRo
cmVhZERhdGEgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIAor
ICAgIFRocmVhZERhdGEoKTsKKyAgICB+VGhyZWFkRGF0YSgpOworCisgICAgVGhyZWFkSWRlbnRp
ZmllciB0aHJlYWRJZGVudGlmaWVyOworICAgIAorICAgIGJvb2wgc2hvdWxkUGFyayB7IGZhbHNl
IH07CisgICAgc3RkOjptdXRleCBwYXJraW5nTG9jazsKKyAgICBzdGQ6OmNvbmRpdGlvbl92YXJp
YWJsZSBwYXJraW5nQ29uZGl0aW9uOworCisgICAgY29uc3Qgdm9pZCogYWRkcmVzczsKKyAgICBU
aHJlYWREYXRhKiBuZXh0SW5RdWV1ZSB7IG51bGxwdHIgfTsKK307CisKK2VudW0gY2xhc3MgRGVx
dWV1ZVJlc3VsdCB7CisgICAgSWdub3JlLAorICAgIFJlbW92ZUFuZENvbnRpbnVlLAorICAgIFJl
bW92ZUFuZFN0b3AKK307CisKK3N0cnVjdCBCdWNrZXQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHZvaWQgZW5xdWV1ZShUaHJlYWREYXRhKiBkYXRhKQorICAg
IHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogZW5xdWV1ZWluZyAiLCBSYXdQb2ludGVyKGRhdGEpLCAiIHdpdGgg
YWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIoZGF0YS0+YWRkcmVzcyksICIgb250byAiLCBSYXdQb2lu
dGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVChkYXRhLT5hZGRyZXNzKTsKKyAgICAg
ICAgQVNTRVJUKCFkYXRhLT5uZXh0SW5RdWV1ZSk7CisgICAgICAgIAorICAgICAgICBpZiAocXVl
dWVUYWlsKSB7CisgICAgICAgICAgICBxdWV1ZVRhaWwtPm5leHRJblF1ZXVlID0gZGF0YTsKKyAg
ICAgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBxdWV1ZUhlYWQgPSBkYXRhOworICAgICAgICBxdWV1ZVRhaWwgPSBkYXRh
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBnZW5l
cmljRGVxdWV1ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
ZGVxdWV1ZWluZyBmcm9tIGJ1Y2tldCBhdCAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoIXF1ZXVlSGVhZCkgeworICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IGVtcHR5LlxuIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gVGhpcyBsb29wIGlzIGEgdmVyeSBjbGV2ZXIgYWJvbWluYXRpb24uIFRoZSBpbmR1Y3Rpb24g
dmFyaWFibGVzIGFyZSB0aGUgcG9pbnRlciB0byB0aGUKKyAgICAgICAgLy8gcG9pbnRlciB0byB0
aGUgY3VycmVudCBub2RlLCBhbmQgdGhlIHBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIG5vZGUuIFRo
aXMgZ2l2ZXMgdXMgZXZlcnl0aGluZworICAgICAgICAvLyB3ZSBuZWVkIHRvIGJvdGggcHJvY2Vl
ZCBmb3J3YXJkIHRvIHRoZSBuZXh0IG5vZGUsIGFuZCB0byByZW1vdmUgbm9kZXMgd2hpbGUgbWFp
bnRhaW5pbmcgdGhlCisgICAgICAgIC8vIHF1ZXVlSGVhZC9xdWV1ZVRhaWwgYW5kIGFsbCBvZiB0
aGUgbmV4dEluUXVldWUgbGlua3MuIEZvciBleGFtcGxlLCB3aGVuIHdlIGFyZSBhdCB0aGUgaGVh
ZAorICAgICAgICAvLyBlbGVtZW50LCB0aGVuIHJlbW92YWwgbWVhbnMgcmV3aXJpbmcgcXVldWVI
ZWFkLCBhbmQgaWYgaXQgd2FzIGFsc28gZXF1YWwgdG8gcXVldWVUYWlsLCB0aGVuCisgICAgICAg
IC8vIHdlJ2Qgd2FudCBxdWV1ZVRhaWwgdG8gYmUgc2V0IHRvIG51bGxwdHIuIFRoaXMgd29ya3Mg
YmVjYXVzZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIGN1cnJlbnRQdHIgPT0gJnF1ZXVl
SGVhZAorICAgICAgICAvLyAgICAgcHJldmlvdXMgPT0gbnVsbHB0cgorICAgICAgICAvLworICAg
ICAgICAvLyBXZSByZW1vdmUgYnkgc2V0dGluZyAqY3VycmVudFB0ciA9ICgqY3VycmVudFB0cikt
Pm5leHRJblF1ZXVlLCBpLmUuIGNoYW5naW5nIHRoZSBwb2ludGVyCisgICAgICAgIC8vIHRoYXQg
dXNlZCB0byBwb2ludCB0byB0aGlzIG5vZGUgdG8gaW5zdGVhZCBwb2ludCB0byB0aGlzIG5vZGUn
cyBzdWNjZXNzb3IuIEFub3RoZXIgZXhhbXBsZToKKyAgICAgICAgLy8gaWYgd2Ugd2VyZSBhdCB0
aGUgc2Vjb25kIG5vZGUgaW4gdGhlIHF1ZXVlLCB0aGVuIHdlJ2QgaGF2ZToKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gICAgIGN1cnJlbnRQdHIgPT0gJnF1ZXVlSGVhZC0+bmV4dEluUXVldWUKKyAg
ICAgICAgLy8gICAgIHByZXZpb3VzID09IHF1ZXVlSGVhZAorICAgICAgICAvLworICAgICAgICAv
LyBJZiB0aGlzIG5vZGUgaXMgbm90IGVxdWFsIHRvIHF1ZXVlVGFpbCwgdGhlbiByZW1vdmluZyBp
dCBzaW1wbHkgbWVhbnMgbWFraW5nCisgICAgICAgIC8vIHF1ZXVlSGVhZC0+bmV4dEluUXVldWUg
cG9pbnQgdG8gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZS0+bmV4dEluUXVldWUgKHdoaWNoIHRoZSBh
bGdvcml0aG0KKyAgICAgICAgLy8gYWNoaWV2ZXMgYnkgbXV0YXRpbmcgKmN1cnJlbnRQdHIpLiBJ
ZiB0aGlzIG5vZGUgaXMgZXF1YWwgdG8gcXVldWVUYWlsLCB0aGVuIHdlIHdhbnQgdG8gc2V0Cisg
ICAgICAgIC8vIHF1ZXVlVGFpbCB0byBwcmV2aW91cywgd2hpY2ggaW4gdGhpcyBjYXNlIGlzIHF1
ZXVlSGVhZCAtIHRodXMgbWFraW5nIHRoZSBxdWV1ZSBsb29rIGxpa2UgYQorICAgICAgICAvLyBw
cm9wZXIgb25lLWVsZW1lbnQgcXVldWUgd2l0aCBxdWV1ZUhlYWQgPT0gcXVldWVUYWlsLgorICAg
ICAgICBib29sIHNob3VsZENvbnRpbnVlID0gdHJ1ZTsKKyAgICAgICAgVGhyZWFkRGF0YSoqIGN1
cnJlbnRQdHIgPSAmcXVldWVIZWFkOworICAgICAgICBUaHJlYWREYXRhKiBwcmV2aW91cyA9IG51
bGxwdHI7CisgICAgICAgIHdoaWxlIChzaG91bGRDb250aW51ZSkgeworICAgICAgICAgICAgVGhy
ZWFkRGF0YSogY3VycmVudCA9ICpjdXJyZW50UHRyOworICAgICAgICAgICAgaWYgKHZlcmJvc2Up
CisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGdv
dCB0aHJlYWQgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIlxuIikpOworICAgICAgICAgICAgaWYg
KCFjdXJyZW50KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgRGVxdWV1ZVJl
c3VsdCByZXN1bHQgPSBmdW5jdG9yKGN1cnJlbnQpOworICAgICAgICAgICAgc3dpdGNoIChyZXN1
bHQpIHsKKyAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6SWdub3JlOgorICAgICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5n
KGN1cnJlbnRUaHJlYWQoKSwgIjogY3VycmVudFB0ciA9ICIsIFJhd1BvaW50ZXIoY3VycmVudFB0
ciksICIsICpjdXJyZW50UHRyID0gIiwgUmF3UG9pbnRlcigqY3VycmVudFB0ciksICJcbiIpKTsK
KyAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGN1cnJlbnQ7CisgICAgICAgICAgICAgICAgY3Vy
cmVudFB0ciA9ICYoKmN1cnJlbnRQdHIpLT5uZXh0SW5RdWV1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kQ29udGludWU6
CisgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A6CisgICAgICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nICIsIFJhd1BvaW50ZXIoY3VycmVudCks
ICIgZnJvbSAiLCBSYXdQb2ludGVyKHRoaXMpLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnQgPT0gcXVldWVUYWlsKQorICAgICAgICAgICAgICAgICAgICBxdWV1ZVRhaWwgPSBw
cmV2aW91czsKKyAgICAgICAgICAgICAgICAqY3VycmVudFB0ciA9IGN1cnJlbnQtPm5leHRJblF1
ZXVlOworICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHRJblF1ZXVlID0gbnVsbHB0cjsKKyAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0ID09IERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3Ap
CisgICAgICAgICAgICAgICAgICAgIHNob3VsZENvbnRpbnVlID0gZmFsc2U7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
ISFxdWV1ZUhlYWQgPT0gISFxdWV1ZVRhaWwpOworICAgIH0KKyAgICAKKyAgICBUaHJlYWREYXRh
KiBkZXF1ZXVlKCkKKyAgICB7CisgICAgICAgIFRocmVhZERhdGEqIHJlc3VsdCA9IG51bGxwdHI7
CisgICAgICAgIGdlbmVyaWNEZXF1ZXVlKAorICAgICAgICAgICAgWyZdIChUaHJlYWREYXRhKiBl
bGVtZW50KSAtPiBEZXF1ZXVlUmVzdWx0IHsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBlbGVt
ZW50OworICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9w
OworICAgICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
VGhyZWFkRGF0YSogcXVldWVIZWFkIHsgbnVsbHB0ciB9OworICAgIFRocmVhZERhdGEqIHF1ZXVl
VGFpbCB7IG51bGxwdHIgfTsKKworICAgIC8vIFRoaXMgbG9jayBwcm90ZWN0cyB0aGUgZW50aXJl
IGJ1Y2tldC4gVGhvdSBzaGFsbCBub3QgbWFrZSBjaGFuZ2VzIHRvIEJ1Y2tldCB3aXRob3V0IGhv
bGRpbmcKKyAgICAvLyB0aGlzIGxvY2suCisgICAgTG9jayBsb2NrOworCisgICAgLy8gUHV0IHNv
bWUgZGlzdGFuZSBiZXR3ZWVuIGJ1Y2tldHMgaW4gbWVtb3J5LiBUaGlzIGlzIG9uZSBvZiBzZXZl
cmFsIG1pdGlnYXRpb25zIGFnYWluc3QgZmFsc2UKKyAgICAvLyBzaGFyaW5nLgorICAgIGNoYXIg
cGFkZGluZ1s2NF07Cit9OworCitzdHJ1Y3QgSGFzaHRhYmxlIHsKKyAgICB1bnNpZ25lZCBzaXpl
OworICAgIEF0b21pYzxCdWNrZXQqPiBkYXRhWzFdOworCisgICAgc3RhdGljIEhhc2h0YWJsZSog
Y3JlYXRlKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBBU1NFUlQoc2l6ZSA+PSAxKTsK
KyAgICAgICAgCisgICAgICAgIEhhc2h0YWJsZSogcmVzdWx0ID0gc3RhdGljX2Nhc3Q8SGFzaHRh
YmxlKj4oCisgICAgICAgICAgICBmYXN0WmVyb2VkTWFsbG9jKHNpemVvZihIYXNodGFibGUpICsg
c2l6ZW9mKEF0b21pYzxCdWNrZXQqPikgKiAoc2l6ZSAtIDEpKSk7CisgICAgICAgIHJlc3VsdC0+
c2l6ZSA9IHNpemU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgZGVzdHJveShIYXNodGFibGUqIGhhc2h0YWJsZSkKKyAgICB7CisgICAgICAgIGZhc3RG
cmVlKGhhc2h0YWJsZSk7CisgICAgfQorfTsKKworVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4q
IHRocmVhZERhdGE7CitBdG9taWM8SGFzaHRhYmxlKj4gaGFzaHRhYmxlOworQXRvbWljPHVuc2ln
bmVkPiBudW1UaHJlYWRzOworCisvLyBXaXRoIDY0IGJ5dGVzIG9mIHBhZGRpbmcgcGVyIGJ1Y2tl
dCwgYXNzdW1pbmcgYSBoYXNodGFibGUgaXMgZnVsbHkgcG9wdWxhdGVkIHdpdGggYnVja2V0cywg
dGhlCisvLyBtZW1vcnkgdXNhZ2UgcGVyIHRocmVhZCB3aWxsIHN0aWxsIGJlIGxlc3MgdGhhbiAx
S0IuCitjb25zdCB1bnNpZ25lZCBtYXhMb2FkRmFjdG9yID0gMzsKKworY29uc3QgdW5zaWduZWQg
Z3Jvd3RoRmFjdG9yID0gMjsKKwordW5zaWduZWQgaGFzaEFkZHJlc3MoY29uc3Qgdm9pZCogYWRk
cmVzcykKK3sKKyAgICByZXR1cm4gV1RGOjpQdHJIYXNoPGNvbnN0IHZvaWQqPjo6aGFzaChhZGRy
ZXNzKTsKK30KKworLy8gTG9ja3MgdGhlIGhhc2h0YWJsZS4gVGhpcyByZWxvb3BzIGluIGNhc2Ug
b2YgcmVoYXNoaW5nLCBzbyB0aGUgY3VycmVudCBoYXNodGFibGUgbWF5IGJlIGRpZmZlcmVudAor
Ly8gYWZ0ZXIgdGhpcyByZXR1cm5zIHRoYW4gd2hlbiB5b3UgY2FsbGVkIGl0LiBHdWFyYW50ZWVz
IHRoYXQgdGhlcmUgaXMgYSBoYXNodGFibGUuIFRoaXMgaXMgcHJldHR5CisvLyBzbG93IGFuZCBu
b3Qgc2NhbGFibGUsIHNvIGl0J3Mgb25seSB1c2VkIGR1cmluZyB0aHJlYWQgY3JlYXRpb24gYW5k
IGZvciBkZWJ1Z2dpbmcvdGVzdGluZy4KK1ZlY3RvcjxCdWNrZXQqPiBsb2NrSGFzaHRhYmxlKCkK
K3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIEhhc2h0YWJsZSogY3VycmVudEhhc2h0YWJsZTsK
KworICAgICAgICBjdXJyZW50SGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICAgICAg
aWYgKCFjdXJyZW50SGFzaHRhYmxlKSB7CisgICAgICAgICAgICAvLyBUcnkgdG8gYmUgdGhlIGZp
cnN0IHRvIGNyZWF0ZSB0aGUgaGFzaHRhYmxlLgorICAgICAgICAgICAgY3VycmVudEhhc2h0YWJs
ZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG1heExvYWRGYWN0b3IpOworICAgICAgICAgICAgaWYgKCFo
YXNodGFibGUuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBjdXJyZW50SGFzaHRhYmxlKSkg
eworICAgICAgICAgICAgICAgIEhhc2h0YWJsZTo6ZGVzdHJveShjdXJyZW50SGFzaHRhYmxlKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVh
ZCgpLCAiOiBjcmVhdGVkIGluaXRpYWwgaGFzaHRhYmxlICIsIFJhd1BvaW50ZXIoY3VycmVudEhh
c2h0YWJsZSksICJcbiIpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBmaW5kIGFsbCBv
ZiB0aGUgYnVja2V0cy4gVGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGhhc2h0YWJsZSBpcyBmdWxs
IG9mIGJ1Y2tldHMgc28gdGhhdAorICAgICAgICAvLyB3ZSBjYW4gbG9jayBhbGwgb2YgdGhlIGJ1
Y2tldHMsIG5vdCBqdXN0IHRoZSBvbmVzIHRoYXQgYXJlIG1hdGVyaWFsaXplZC4KKyAgICAgICAg
VmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJl
bnRIYXNodGFibGUtPnNpemU7IGktLTspIHsKKyAgICAgICAgICAgIEF0b21pYzxCdWNrZXQqPiYg
YnVja2V0UG9pbnRlciA9IGN1cnJlbnRIYXNodGFibGUtPmRhdGFbaV07CisKKyAgICAgICAgICAg
IGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IGJ1Y2tldFBvaW50
ZXIubG9hZCgpOworCisgICAgICAgICAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAg
ICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWJ1Y2tldFBvaW50ZXIuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBidWNrZXQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYnVja2V0OworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBidWNrZXRzLmFwcGVuZChidWNrZXQpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IGxv
Y2sgdGhlIGJ1Y2tldHMgaW4gdGhlIHJpZ2h0IG9yZGVyLgorICAgICAgICBzdGQ6OnNvcnQoYnVj
a2V0cy5iZWdpbigpLCBidWNrZXRzLmVuZCgpKTsKKyAgICAgICAgZm9yIChCdWNrZXQqIGJ1Y2tl
dCA6IGJ1Y2tldHMpCisgICAgICAgICAgICBidWNrZXQtPmxvY2subG9jaygpOworCisgICAgICAg
IC8vIElmIHRoZSBoYXNodGFibGUgZGlkbid0IGNoYW5nZSAod2Fzbid0IHJlaGFzaGVkKSB3aGls
ZSB3ZSB3ZXJlIGxvY2tpbmcgaXQsIHRoZW4gd2Ugb3duIGl0CisgICAgICAgIC8vIG5vdy4KKyAg
ICAgICAgaWYgKGhhc2h0YWJsZS5sb2FkKCkgPT0gY3VycmVudEhhc2h0YWJsZSkKKyAgICAgICAg
ICAgIHJldHVybiBidWNrZXRzOworCisgICAgICAgIC8vIFRoZSBoYXNodGFibGUgcmVoYXNoZWQu
IFVubG9jayBldmVyeXRoaW5nIGFuZCB0cnkgYWdhaW4uCisgICAgICAgIGZvciAoQnVja2V0KiBi
dWNrZXQgOiBidWNrZXRzKQorICAgICAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOworICAg
IH0KK30KKwordm9pZCB1bmxvY2tIYXNodGFibGUoY29uc3QgVmVjdG9yPEJ1Y2tldCo+JiBidWNr
ZXRzKQoreworICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiBidWNrZXRzKQorICAgICAgICBidWNr
ZXQtPmxvY2sudW5sb2NrKCk7Cit9CisKKy8vIFJlaGFzaCB0aGUgaGFzaHRhYmxlIHRvIGhhbmRs
ZSBudW1UaHJlYWRzIHRocmVhZHMuCit2b2lkIGVuc3VyZUhhc2h0YWJsZVNpemUodW5zaWduZWQg
bnVtVGhyZWFkcykKK3sKKyAgICAvLyBXZSB0cnkgdG8gZW5zdXJlIHRoYXQgdGhlIHNpemUgb2Yg
dGhlIGhhc2h0YWJsZSB1c2VkIGZvciB0aHJlYWQgcXVldWVzIGlzIGFsd2F5cyBsYXJnZSBlbm91
Z2gKKyAgICAvLyB0byBhdm9pZCBjb2xsaXNpb25zLiBTbywgc2luY2Ugd2Ugc3RhcnRlZCBhIG5l
dyB0aHJlYWQsIHdlIG1heSBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZQorICAgIC8v
IGhhc2h0YWJsZS4gVGhpcyBkb2VzIGp1c3QgdGhhdC4gTm90ZSB0aGF0IHdlIG5ldmVyIGZyZWUg
dGhlIG9sZCBzcGluZSwgc2luY2Ugd2UgbmV2ZXIgbG9jaworICAgIC8vIGFyb3VuZCBzcGluZSBh
Y2Nlc3NlcyAoaS5lLiB0aGUgImhhc2h0YWJsZSIgZ2xvYmFsIHZhcmlhYmxlKS4KKworICAgIC8v
IEZpcnN0IGRvIGEgZmFzdCBjaGVjayB0byBzZWUgaWYgcmVoYXNoaW5nIGlzIG5lZWRlZC4KKyAg
ICBIYXNodGFibGUqIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgaWYgKG9s
ZEhhc2h0YWJsZSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0YWJsZS0+c2l6ZSkgLyBz
dGF0aWNfY2FzdDxkb3VibGU+KG51bVRocmVhZHMpID49IG1heExvYWRGYWN0b3IpIHsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogbm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUtPnNpemUs
ICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFNlZW1zIGxpa2Ugd2UgKm1pZ2h0KiBoYXZlIHRv
IHJlaGFzaCwgc28gbG9jayB0aGUgaGFzaHRhYmxlIGFuZCB0cnkgYWdhaW4uCisgICAgVmVjdG9y
PEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKKworICAgIC8vIENo
ZWNrIGFnYWluLCBzaW5jZSB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgd2hpbGUg
d2Ugd2VyZSBsb2NraW5nIGl0LiBBbHNvLAorICAgIC8vIGxvY2tIYXNodGFibGUoKSBjcmVhdGVz
IGFuIGluaXRpYWwgaGFzaHRhYmxlIGZvciB1cy4KKyAgICBvbGRIYXNodGFibGUgPSBoYXNodGFi
bGUubG9hZCgpOworICAgIGlmIChvbGRIYXNodGFibGUgJiYgc3RhdGljX2Nhc3Q8ZG91YmxlPihv
bGRIYXNodGFibGUtPnNpemUpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihudW1UaHJlYWRzKSA+PSBt
YXhMb2FkRmFjdG9yKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGFmdGVyIGxvY2tpbmcsIG5vIG5lZWQgdG8g
cmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8gIiwgbnVtVGhyZWFkcywg
IiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CisgICAgICAgIHVubG9ja0hhc2h0YWJsZShi
dWNrZXRzVG9VbmxvY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgVmVjdG9yPEJ1
Y2tldCo+IHJldXNhYmxlQnVja2V0cyA9IGJ1Y2tldHNUb1VubG9jazsKKworICAgIC8vIE9LLCBu
b3cgd2UgcmVzaXplLiBGaXJzdCB3ZSBnYXRoZXIgYWxsIHRocmVhZCBkYXRhcyBmcm9tIHRoZSBv
bGQgaGFzaHRhYmxlLiBUaGVzZSB0aHJlYWQgZGF0YXMKKyAgICAvLyBhcmUgcGxhY2VkIGludG8g
dGhlIHZlY3RvciBpbiBxdWV1ZSBvcmRlci4KKyAgICBWZWN0b3I8VGhyZWFkRGF0YSo+IHRocmVh
ZERhdGFzOworICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiByZXVzYWJsZUJ1Y2tldHMpIHsKKyAg
ICAgICAgd2hpbGUgKFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBidWNrZXQtPmRlcXVldWUoKSkK
KyAgICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZCh0aHJlYWREYXRhKTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBuZXdTaXplID0gbnVtVGhyZWFkcyAqIGdyb3d0aEZhY3RvciAqIG1heExvYWRG
YWN0b3I7CisgICAgUkVMRUFTRV9BU1NFUlQobmV3U2l6ZSA+IG9sZEhhc2h0YWJsZS0+c2l6ZSk7
CisgICAgCisgICAgSGFzaHRhYmxlKiBuZXdIYXNodGFibGUgPSBIYXNodGFibGU6OmNyZWF0ZShu
ZXdTaXplKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJy
ZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgbmV3IGhhc2h0YWJsZTogIiwgUmF3UG9pbnRlcihuZXdI
YXNodGFibGUpLCAiXG4iKSk7CisgICAgZm9yIChUaHJlYWREYXRhKiB0aHJlYWREYXRhIDogdGhy
ZWFkRGF0YXMpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcmVoYXNoaW5nIHRocmVhZCBkYXRhICIsIFJhd1Bv
aW50ZXIodGhyZWFkRGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcih0aHJlYWRE
YXRhLT5hZGRyZXNzKSwgIlxuIikpOworICAgICAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJl
c3ModGhyZWFkRGF0YS0+YWRkcmVzcyk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAl
IG5ld0hhc2h0YWJsZS0+c2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaW5kZXggPSAiLCBpbmRleCwgIlxu
IikpOworICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG5ld0hhc2h0YWJsZS0+ZGF0YVtpbmRleF0u
bG9hZCgpOworICAgICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgaWYgKHJldXNhYmxl
QnVja2V0cy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgYnVja2V0ID0gbmV3IEJ1Y2tldCgp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1Y2tldCA9IHJldXNhYmxlQnVj
a2V0cy50YWtlTGFzdCgpOworICAgICAgICAgICAgbmV3SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5z
dG9yZShidWNrZXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBidWNrZXQtPmVucXVl
dWUodGhyZWFkRGF0YSk7CisgICAgfQorICAgIAorICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlcmUg
bWF5IGJlIHNvbWUgYnVja2V0cyBsZWZ0IHVucmV1c2VkLiBUaGlzIGNvdWxkIGVhc2lseSBoYXBw
ZW4gaWYgdGhlCisgICAgLy8gbnVtYmVyIG9mIGVucXVldWVkIHRocmVhZHMgcmlnaHQgbm93IGlz
IGxvdyBidXQgdGhlIGhpZ2ggd2F0ZXJtYXJrIG9mIHRoZSBudW1iZXIgb2YgdGhyZWFkcworICAg
IC8vIGVucXVldWVkIHdhcyBoaWdoLiBXZSBwbGFjZSB0aGVzZSBidWNrZXRzIGludG8gdGhlIGhh
c2h0YWJsZSBiYXNpY2FsbHkgYXQgcmFuZG9tLCBqdXN0IHRvCisgICAgLy8gbWFrZSBzdXJlIHdl
IGRvbid0IGxlYWsgdGhlbS4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmV3SGFzaHRh
YmxlLT5zaXplICYmICFyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpOyArK2kpIHsKKyAgICAgICAg
QXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQdHIgPSBuZXdIYXNodGFibGUtPmRhdGFbaV07CisgICAg
ICAgIGlmIChidWNrZXRQdHIubG9hZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGJ1Y2tldFB0ci5zdG9yZShyZXVzYWJsZUJ1Y2tldHMudGFrZUxhc3QoKSk7CisgICAgfQorICAg
IAorICAgIC8vIFNpbmNlIHdlIGluY3JlYXNlZCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlLCB3
ZSBzaG91bGQgaGF2ZSBleGhhdXN0ZWQgb3VyIHByZWFsbG9jYXRlZAorICAgIC8vIGJ1Y2tldHMg
Ynkgbm93LgorICAgIEFTU0VSVChyZXVzYWJsZUJ1Y2tldHMuaXNFbXB0eSgpKTsKKyAgICAKKyAg
ICAvLyBPSywgcmlnaHQgbm93IHRoZSBvbGQgaGFzaHRhYmxlIGlzIGxvY2tlZCB1cCBhbmQgdGhl
IG5ldyBoYXNodGFibGUgaXMgcmVhZHkgdG8gcm9jayBhbmQKKyAgICAvLyByb2xsLiBBZnRlciB3
ZSBpbnN0YWxsIHRoZSBuZXcgaGFzaHRhYmxlLCB3ZSBjYW4gcmVsZWFzZSBhbGwgYnVja2V0IGxv
Y2tzLgorICAgIAorICAgIGJvb2wgcmVzdWx0ID0gaGFzaHRhYmxlLmNvbXBhcmVFeGNoYW5nZVN0
cm9uZyhvbGRIYXNodGFibGUsIG5ld0hhc2h0YWJsZSk7CisgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0KTsKKworICAgIHVubG9ja0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOworfQorCitUaHJl
YWREYXRhOjpUaHJlYWREYXRhKCkKKyAgICA6IHRocmVhZElkZW50aWZpZXIoY3VycmVudFRocmVh
ZCgpKQoreworICAgIHVuc2lnbmVkIGN1cnJlbnROdW1UaHJlYWRzOworICAgIGZvciAoOzspIHsK
KyAgICAgICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVhZHMubG9hZCgpOworICAg
ICAgICBjdXJyZW50TnVtVGhyZWFkcyA9IG9sZE51bVRocmVhZHMgKyAxOworICAgICAgICBpZiAo
bnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZE51bVRocmVhZHMsIGN1cnJlbnROdW1U
aHJlYWRzKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGVuc3VyZUhhc2h0YWJs
ZVNpemUoY3VycmVudE51bVRocmVhZHMpOworfQorCitUaHJlYWREYXRhOjp+VGhyZWFkRGF0YSgp
Cit7CisgICAgZm9yICg7OykgeworICAgICAgICB1bnNpZ25lZCBvbGROdW1UaHJlYWRzID0gbnVt
VGhyZWFkcy5sb2FkKCk7CisgICAgICAgIGlmIChudW1UaHJlYWRzLmNvbXBhcmVFeGNoYW5nZVdl
YWsob2xkTnVtVGhyZWFkcywgb2xkTnVtVGhyZWFkcyAtIDEpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitUaHJlYWREYXRhKiBteVRocmVhZERhdGEoKQoreworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBpbml0aWFsaXplT25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAg
ICAgaW5pdGlhbGl6ZU9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHRocmVhZERhdGEg
PSBuZXcgVGhyZWFkU3BlY2lmaWM8VGhyZWFkRGF0YT4oKTsKKyAgICAgICAgfSk7CisKKyAgICBy
ZXR1cm4gKnRocmVhZERhdGE7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Citib29s
IGVucXVldWUoY29uc3Qgdm9pZCogYWRkcmVzcywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sK
KyAgICB1bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3MoYWRkcmVzcyk7CisKKyAgICBmb3IgKDs7
KSB7CisgICAgICAgIEhhc2h0YWJsZSogbXlIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOwor
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBteUhhc2h0YWJsZS0+c2l6ZTsKKyAgICAg
ICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQb2ludGVyID0gbXlIYXNodGFibGUtPmRhdGFbaW5k
ZXhdOworICAgICAgICBCdWNrZXQqIGJ1Y2tldDsKKyAgICAgICAgZm9yICg7OykgeworICAgICAg
ICAgICAgYnVja2V0ID0gYnVja2V0UG9pbnRlci5sb2FkKCk7CisgICAgICAgICAgICBpZiAoIWJ1
Y2tldCkgeworICAgICAgICAgICAgICAgIGJ1Y2tldCA9IG5ldyBCdWNrZXQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWJ1Y2tldFBvaW50ZXIuY29tcGFyZUV4Y2hhbmdlV2VhayhudWxscHRyLCBi
dWNrZXQpKSB7CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBidWNrZXQ7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGVucXVldWVpbmcgb250
byBidWNrZXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiIHdpdGggaW5kZXggIiwgaW5kZXgsICIg
Zm9yIGFkZHJlc3MgIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIiB3aXRoIGhhc2ggIiwgaGFzaCwg
IlxuIikpOworICAgICAgICBidWNrZXQtPmxvY2subG9jaygpOworCisgICAgICAgIC8vIEF0IHRo
aXMgcG9pbnQgdGhlIGhhc2h0YWJsZSBjb3VsZCBoYXZlIHJlaGFzaGVkIHVuZGVyIHVzLgorICAg
ICAgICBpZiAoaGFzaHRhYmxlLmxvYWQoKSAhPSBteUhhc2h0YWJsZSkgeworICAgICAgICAgICAg
YnVja2V0LT5sb2NrLnVubG9jaygpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0K
KworICAgICAgICBUaHJlYWREYXRhKiB0aHJlYWREYXRhID0gZnVuY3RvcigpOworICAgICAgICBi
b29sIHJlc3VsdDsKKyAgICAgICAgaWYgKHRocmVhZERhdGEpIHsKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgp
LCAiOiBwcm9jZWVkaW5nIHRvIGVucXVldWUgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIlxu
IikpOworICAgICAgICAgICAgYnVja2V0LT5lbnF1ZXVlKHRocmVhZERhdGEpOworICAgICAgICAg
ICAgcmVzdWx0ID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBm
YWxzZTsKKyAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2Jvb2wgZGVxdWV1
ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
ZGVxdWV1ZWluZyBhZGRyZXNzICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICJcbiIpKTsKKyAgICB1
bnNpZ25lZCBoYXNoID0gaGFzaEFkZHJlc3MoYWRkcmVzcyk7CisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBoYXNoID0gIiwgaGFz
aCwgIlxuIikpOworCisgICAgZm9yICg7OykgeworICAgICAgICBIYXNodGFibGUqIG15SGFzaHRh
YmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICAgICAgaWYgKCFteUhhc2h0YWJsZSkgeworICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhj
dXJyZW50VGhyZWFkKCksICI6IG5vIGhhc2h0YWJsZS5cbiIpKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBteUhh
c2h0YWJsZS0+c2l6ZTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9n
KHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaW5kZXggPSAiLCBpbmRleCwgIlxuIikpOwor
ICAgICAgICBCdWNrZXQqIGJ1Y2tldCA9IG15SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5sb2FkKCk7
CisgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbm8gYnVja2V0
IGF0ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIi5cbiIpKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGxvY2tpbmcgYnVja2V0IGF0ICIsIFJh
d1BvaW50ZXIoYnVja2V0KSwgIlxuIikpOworICAgICAgICBidWNrZXQtPmxvY2subG9jaygpOwor
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBsb2NrZWQgYnVja2V0IGF0ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIlxu
IikpOworCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIGhhc2h0YWJsZSBjb3VsZCBoYXZl
IHJlaGFzaGVkIHVuZGVyIHVzLgorICAgICAgICBpZiAoaGFzaHRhYmxlLmxvYWQoKSAhPSBteUhh
c2h0YWJsZSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGhhc2h0YWJsZSBjaGFuZ2VkLlxuIikp
OworICAgICAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFM
b2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBmb3VuZCBidWNrZXQuXG4iKSk7CisgICAg
ICAgIGJ1Y2tldC0+Z2VuZXJpY0RlcXVldWUoZnVuY3Rvcik7CisgICAgICAgIGJvb2wgcmVzdWx0
ID0gISFidWNrZXQtPnF1ZXVlSGVhZDsKKyAgICAgICAgYnVja2V0LT5sb2NrLnVubG9jaygpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK2Jvb2wgUGFya2luZ0xvdDo6cGFya0NvbmRpdGlvbmFsbHkoY29uc3Qgdm9pZCogYWRk
cmVzcywgc3RkOjpmdW5jdGlvbjxib29sKCk+IHZhbGlkYXRpb24pCit7CisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBwYXJraW5n
LlxuIikpOworICAgIAorICAgIFRocmVhZERhdGEqIG1lID0gbXlUaHJlYWREYXRhKCk7CisKKyAg
ICBBU1NFUlQoIW1lLT5zaG91bGRQYXJrKTsKKyAgICAKKyAgICBib29sIHJlc3VsdCA9IGVucXVl
dWUoCisgICAgICAgIGFkZHJlc3MsCisgICAgICAgIFsmXSAoKSAtPiBUaHJlYWREYXRhKiB7Cisg
ICAgICAgICAgICBpZiAoIXZhbGlkYXRpb24oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgICAgICAgICAgbWUtPmFkZHJlc3MgPSBhZGRyZXNzOworICAgICAgICAgICAg
bWUtPnNob3VsZFBhcmsgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIG1lOworICAgICAgICB9
KTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHBh
cmtpbmcgc2VsZjogIiwgUmF3UG9pbnRlcihtZSksICJcbiIpKTsKKyAgICB7CisgICAgICAgIHN0
ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKG1lLT5wYXJraW5nTG9jayk7CisgICAg
ICAgIHdoaWxlIChtZS0+c2hvdWxkUGFyaykKKyAgICAgICAgICAgIG1lLT5wYXJraW5nQ29uZGl0
aW9uLndhaXQobG9ja2VyKTsKKworICAgICAgICBtZS0+YWRkcmVzcyA9IG51bGxwdHI7CisgICAg
fQorICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogdW5wYXJrZWQgc2VsZjogIiwgUmF3UG9pbnRlcihtZSksICJcbiIpKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBQYXJraW5nTG90Ojp1bnBhcmtPbmUoY29uc3Qgdm9pZCog
YWRkcmVzcykKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhj
dXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBvbmUuXG4iKSk7CisKKyAgICBUaHJlYWREYXRh
KiB0aHJlYWREYXRhID0gbnVsbHB0cjsKKyAgICBib29sIHJlc3VsdCA9IGRlcXVldWUoCisgICAg
ICAgIGFkZHJlc3MsCisgICAgICAgIFsmXSAoVGhyZWFkRGF0YSogZWxlbWVudCkgeworICAgICAg
ICAgICAgaWYgKGVsZW1lbnQtPmFkZHJlc3MgIT0gYWRkcmVzcykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gRGVxdWV1ZVJlc3VsdDo6SWdub3JlOworICAgICAgICAgICAgdGhyZWFkRGF0YSA9IGVs
ZW1lbnQ7CisgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcDsK
KyAgICAgICAgfSk7CisKKyAgICBpZiAoIXRocmVhZERhdGEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIEFTU0VSVCh0aHJlYWREYXRhLT5zaG91bGRQYXJrKTsKKyAgICAKKyAgICB7Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBh
cmtpbmdMb2NrKTsKKyAgICAgICAgdGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9IGZhbHNlOworICAg
ICAgICB0aHJlYWREYXRhLT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICB9CisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFBhcmtpbmdMb3Q6OnVucGFya0FsbChjb25z
dCB2b2lkKiBhZGRyZXNzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIGFsbCBmcm9tICIsIFJhd1BvaW50
ZXIoYWRkcmVzcyksICIuXG4iKSk7CisgICAgCisgICAgVmVjdG9yPFRocmVhZERhdGEqLCA4PiB0
aHJlYWREYXRhczsKKyAgICBkZXF1ZXVlKAorICAgICAgICBhZGRyZXNzLAorICAgICAgICBbJl0g
KFRocmVhZERhdGEqIGVsZW1lbnQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBPYnNlcnZpbmcg
ZWxlbWVudCB3aXRoIGFkZHJlc3MgPSAiLCBSYXdQb2ludGVyKGVsZW1lbnQtPmFkZHJlc3MpLCAi
XG4iKSk7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBhZGRyZXNzKQorICAg
ICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7CisgICAgICAgICAgICB0
aHJlYWREYXRhcy5hcHBlbmQoZWxlbWVudCk7CisgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJl
c3VsdDo6UmVtb3ZlQW5kQ29udGludWU7CisgICAgICAgIH0pOworCisgICAgZm9yIChUaHJlYWRE
YXRhKiB0aHJlYWREYXRhIDogdGhyZWFkRGF0YXMpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5n
ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICIgd2l0aCBhZGRyZXNzICIsIFJhd1BvaW50ZXIo
dGhyZWFkRGF0YS0+YWRkcmVzcyksICJcbiIpKTsKKyAgICAgICAgQVNTRVJUKHRocmVhZERhdGEt
PnNob3VsZFBhcmspOworICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tl
cih0aHJlYWREYXRhLT5wYXJraW5nTG9jayk7CisgICAgICAgIHRocmVhZERhdGEtPnNob3VsZFBh
cmsgPSBmYWxzZTsKKyAgICAgICAgdGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlf
YWxsKCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJp
bmcoY3VycmVudFRocmVhZCgpLCAiOiBkb25lIHVucGFya2luZy5cbiIpKTsKK30KKwordm9pZCBQ
YXJraW5nTG90Ojpmb3JFYWNoKHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWRJZGVudGlmaWVyLCBj
b25zdCB2b2lkKik+IGNhbGxiYWNrKQoreworICAgIFZlY3RvcjxCdWNrZXQqPiBidWNrZXRzVG9V
bmxvY2sgPSBsb2NrSGFzaHRhYmxlKCk7CisKKyAgICBIYXNodGFibGUqIGN1cnJlbnRIYXNodGFi
bGUgPSBoYXNodGFibGUubG9hZCgpOworICAgIGZvciAodW5zaWduZWQgaSA9IGN1cnJlbnRIYXNo
dGFibGUtPnNpemU7IGktLTspIHsKKyAgICAgICAgQnVja2V0KiBidWNrZXQgPSBjdXJyZW50SGFz
aHRhYmxlLT5kYXRhW2ldLmxvYWQoKTsKKyAgICAgICAgaWYgKCFidWNrZXQpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgZm9yIChUaHJlYWREYXRhKiBjdXJyZW50VGhyZWFkRGF0YSA9
IGJ1Y2tldC0+cXVldWVIZWFkOyBjdXJyZW50VGhyZWFkRGF0YTsgY3VycmVudFRocmVhZERhdGEg
PSBjdXJyZW50VGhyZWFkRGF0YS0+bmV4dEluUXVldWUpCisgICAgICAgICAgICBjYWxsYmFjayhj
dXJyZW50VGhyZWFkRGF0YS0+dGhyZWFkSWRlbnRpZmllciwgY3VycmVudFRocmVhZERhdGEtPmFk
ZHJlc3MpOworICAgIH0KKyAgICAKKyAgICB1bmxvY2tIYXNodGFibGUoYnVja2V0c1RvVW5sb2Nr
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Bhcmtp
bmdMb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIFdURl9QYXJraW5nTG90X2gKKyNkZWZpbmUgV1RGX1BhcmtpbmdMb3RfaAor
CisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgorI2luY2x1
ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUGFy
a2luZ0xvdCB7CisgICAgUGFya2luZ0xvdCgpID0gZGVsZXRlOworICAgIFBhcmtpbmdMb3QoY29u
c3QgUGFya2luZ0xvdCYpID0gZGVsZXRlOworCitwdWJsaWM6CisgICAgLy8gUGFya3MgdGhlIHRo
cmVhZCBpbiBhIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2gg
Y2Fubm90IGJlIG51bGwuIFRoZQorICAgIC8vIHBhcmtpbmcgb25seSBzdWNjZWVkcyBpZiB0aGUg
dmFsaWRhdGlvbiBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hpbGUgdGhlIHF1ZXVlIGxvY2sgaXMg
aGVsZC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHRocmVhZCBhY3R1YWxseSBzbGVwdCwg
b3IgZmFsc2UgaWYgaXQgcmV0dXJuZWQgcXVpY2tseSBiZWNhdXNlIG9mCisgICAgLy8gdmFsaWRh
dGlvbiBmYWlsdXJlLgorICAgIFdURl9FWFBPUlRfUFJJVkFURSBzdGF0aWMgYm9vbCBwYXJrQ29u
ZGl0aW9uYWxseShjb25zdCB2b2lkKiBhZGRyZXNzLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFs
aWRhdGlvbik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgorICAgIHN0
YXRpYyBib29sIGNvbXBhcmVBbmRQYXJrKGNvbnN0IEF0b21pYzxUPiogYWRkcmVzcywgVSBleHBl
Y3RlZCkKKyAgICB7CisgICAgICAgIHJldHVybiBwYXJrQ29uZGl0aW9uYWxseSgKKyAgICAgICAg
ICAgIGFkZHJlc3MsCisgICAgICAgICAgICBbYWRkcmVzcywgZXhwZWN0ZWRdICgpIC0+IGJvb2wg
eworICAgICAgICAgICAgICAgIFUgdmFsdWUgPSBhZGRyZXNzLT5sb2FkKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlID09IGV4cGVjdGVkOworICAgICAgICAgICAgfSk7CisgICAgfQor
CisgICAgLy8gVW5wYXJrcyBvbmUgdGhyZWFkIGZyb20gdGhlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0
aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90IGJlIG51bGwuCisgICAgLy8gUmV0dXJu
cyB0cnVlIGlmIHRoZXJlIG1heSBzdGlsbCBiZSBvdGhlciB0aHJlYWRzIG9uIHRoYXQgcXVldWUs
IG9yIGZhbHNlIGlmIHRoZXJlIGRlZmluaXRlbHkKKyAgICAvLyBhcmUgbm8gbW9yZSB0aHJlYWRz
IG9uIHRoZSBxdWV1ZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgdW5wYXJr
T25lKGNvbnN0IHZvaWQqIGFkZHJlc3MpOworCisgICAgLy8gVW5wYXJrcyBldmVyeSB0aHJlYWQg
ZnJvbSB0aGUgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBj
YW5ub3QgYmUgbnVsbC4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdW5wYXJr
QWxsKGNvbnN0IHZvaWQqIGFkZHJlc3MpOworCisgICAgLy8gTG9ja3MgdGhlIHBhcmtpbmcgbG90
IGFuZCB3YWxrcyBhbGwgb2YgdGhlIHBhcmtlZCB0aHJlYWRzIGFuZCB0aGUgYWRkcmVzc2VzIHRo
ZXkgYXJlIHdhaXRpbmcKKyAgICAvLyBvbi4gVGhyZWFkcyB0aGF0IGFyZSBvbiB0aGUgc2FtZSBx
dWV1ZSBhcmUgZ3VhcmFudGVlZCB0byBiZSB3YWxrZWQgZnJvbSBmaXJzdCB0byBsYXN0LCBidXQg
dGhlCisgICAgLy8gcXVldWVzIG1heSBiZSByYW5kb21seSBpbnRlcmxlYXZlZC4gRm9yIGV4YW1w
bGUsIGlmIHRoZSBxdWV1ZSBmb3IgYWRkcmVzcyBBMSBoYXMgVDEgYW5kIFQyIGFuZAorICAgIC8v
IHRoZSBxdWV1ZSBmb3IgYWRkcmVzcyBBMiBoYXMgVDMgYW5kIFQ0LCB0aGVuIHlvdSBtaWdodCBz
ZWUgaXRlcmF0aW9uIG9yZGVycyBsaWtlOgorICAgIC8vCisgICAgLy8gQTEsVDEgQTEsVDIgQTIs
VDMgQTIsVDQKKyAgICAvLyBBMixUMyBBMixUNCBBMSxUMSBBMSxUMgorICAgIC8vIEExLFQxIEEy
LFQzIEExLFQyIEEyLFQ0CisgICAgLy8gQTEsVDEgQTIsVDMgQTIsVDQgQTEsVDIKKyAgICAvLwor
ICAgIC8vIEFzIHdlbGwgYXMgbWFueSBvdGhlciBwb3NzaWJsZSBpbnRlcmxlYXZlcyB0aGF0IGFs
bCBoYXZlIFQxIGJlZm9yZSBUMiBhbmQgVDMgYmVmb3JlIFQ0IGJ1dCBhcmUKKyAgICAvLyBvdGhl
cndpc2UgdW5jb25zdHJhaW5lZC4gVGhpcyBtZXRob2QgaXMgdXNlZnVsIHByaW1hcmlseSBmb3Ig
ZGVidWdnaW5nLiBJdCdzIGFsc28gdXNlZCBieSB1bml0CisgICAgLy8gdGVzdHMuCisgICAgV1RG
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGZvckVhY2goc3RkOjpmdW5jdGlvbjx2b2lkKFRo
cmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4pOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKK3VzaW5nIFdURjo6UGFya2luZ0xvdDsKKworI2VuZGlmIC8vIFdURl9QYXJraW5nTG90X2gK
KwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gMTg4MjI5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTUtMDgtMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4K
KworICAgICAgICBXVEYgc2hvdWxkIGhhdmUgYSBQYXJraW5nTG90IGZvciBwYXJraW5nIHNsZWVw
aW5nIHRocmVhZHMsIHNvIHRoYXQgbG9ja3MgY2FuIGZpdCBpbiAxLjYgYml0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NjY1CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL0NN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS52Y3hw
cm9qL1Rlc3RXZWJLaXRBUEkudmN4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RX
ZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBUZXN0V2ViS2l0
QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCiAyMDE1LTA4LTEwICBZb3Vlbm4gRmFi
bGV0ICA8eW91ZW5uLmZhYmxldEBjcmYuY2Fub24uZnI+CiAKICAgICAgICAgQ29tcGlsZSB3YXJu
aW5nICgtV3NpZ24tY29tcGFyZSkgb24gMzItYml0cyBhdCBXZWJDb3JlL3BsYXRmb3JtL0ZpbGVT
eXN0ZW0uY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE4
ODIyOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTgxLDYgKzgxLDcgQEAgc2V0KFRlc3RXVEZfU09VUkNFUwogICAgICR7VEVTVFdFQktJ
VEFQSV9ESVJ9L1Rlc3RzL1dURi9NZWRpYVRpbWUuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJ
Un0vVGVzdHMvV1RGL01ldGFBbGxvY2F0b3IuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0v
VGVzdHMvV1RGL05ha2VkUHRyLmNwcAorICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dU
Ri9QYXJraW5nTG90LmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9SZWRC
bGFja1RyZWUuY3BwCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1JlZi5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvUmVmUHRyLmNwcApJbmRleDogVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS52Y3hw
cm9qL1Rlc3RXZWJLaXRBUEkudmN4cHJvagkocmV2aXNpb24gMTg4MjI5KQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0zMjYsNiArMzI2LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXFRlc3RzXFdURlxNZXRhQWxsb2NhdG9yLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXFRlc3RzXFdURlxOYWtlZFB0ci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxUZXN0c1xXVEZcT3B0aW9uYWwuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cVGVzdHNcV1RGXFBhcmtpbmdMb3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cVGVzdHNcV1RGXFJlZEJsYWNrVHJlZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxUZXN0c1xXVEZcUmVmLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRl
c3RzXFdURlxSZWZDb3VudGVyLmNwcCIgLz4KSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxODgyMjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEsNyBAQAog
CQkwRjEzOUU3ODFBNDIzQTZCMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0
MjNBMkIwMEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICovOyB9OwogCQkwRjEz
OUU3OTFBNDI0NTcwMDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTM5RTcyMUE0MjNBMkIw
MEY1OTBGNSAvKiBQbGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tICovOyB9OwogCQkwRjNCOTRBNzFB
NzcyNjc0MDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYzQjk0QTUxQTc3MjY2QzAw
REUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLzsgfTsKKwkJMEZFNDQ3
OTkxQjc2RjFFQjAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBh
cmtpbmdMb3QuY3BwICovOyB9OwogCQkwRkZDNDVBNjFCNzNFQkVCMDA4NUJENjIgLyogTG9jay5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkZDNDVB
NDFCNzNFQkUyMDA4NUJENjIgLyogTG9jay5jcHAgKi87IH07CiAJCTFBMDJDODcwMTI1RDRDRkQw
MEUzRjRCRCAvKiBmaW5kLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMUEwMkM4NEIxMjVENEE1RTAwRTNGNEJEIC8qIGZpbmQuaHRtbCAq
LzsgfTsKIAkJMUE1MEFBMjAxQTJBNTFGQzAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGluLWNy
ZWF0ZS1wYWdlLmh0bWwgaW4gQ29weSBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE1MEFBMUYxQTJBNEVBNTAwRjRDMzQ1IC8qIGNsb3NlLWZyb20td2l0aGlu
LWNyZWF0ZS1wYWdlLmh0bWwgKi87IH07CkBAIC00MjksNiArNDMwLDcgQEAKIAkJMEYzQjk0QTUx
QTc3MjY2QzAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdLV2ViVmlld0V2YWx1YXRlSmF2YVNj
cmlwdC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNkM0Q0IxNDEwMjdFMDAw
NUI3RjBDIC8qIFJlZEJsYWNrVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBSZWRCbGFja1RyZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkM2QzRDRTE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZXRhQWxsb2NhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFya2luZ0xvdC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAv
KiBMb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExvY2suY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxNDQ2NDAxMjE2N0E4MzA1MDAwQkQyMTgg
LyogTGF5b3V0VW5pdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBM
YXlvdXRVbml0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTRGM0IxMTIxNUU0
NUVBQjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhdHVyYXRlZEFyaXRobWV0aWNPcGVyYXRp
b25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMDYsNiArMTEwOCw3IEBA
CiAJCQkJOTNBNDI3QUMxODBEQTYwRjAwQ0QyNEQ3IC8qIE1vdmVPbmx5LmggKi8sCiAJCQkJRkVC
NkY3NEUxQjJCQTQ0RTAwOUU0OTIyIC8qIE5ha2VkUHRyLmNwcCAqLywKIAkJCQkxQUZERTY1NDE5
NTNCMkMwMDBDNDhGRkEgLyogT3B0aW9uYWwuY3BwICovLAorCQkJCTBGRTQ0Nzk3MUI3NkYxRTMw
MDk0OThFQiAvKiBQYXJraW5nTG90LmNwcCAqLywKIAkJCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdG
MEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLywKIAkJCQk5M0E0MjdBQTE4MERBMjY0MDBDRDI0RDcg
LyogUmVmLmNwcCAqLywKIAkJCQk4NkJEMTk5NzFBMkRCMDVCMDA2RENGMEEgLyogUmVmQ291bnRl
ci5jcHAgKi8sCkBAIC0xNjI2LDYgKzE2MjksNyBAQAogCQkJCTdDQ0U3RUQ3MUE0MTFBN0UwMDQ0
N0M0QyAvKiBXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0VG9VUkxDcmFzaC5tbSBpbiBTb3VyY2Vz
ICovLAogCQkJCTdDQ0U3RjFDMUE0MTFBRTYwMDQ0N0M0QyAvKiBXaWxsU2VuZFN1Ym1pdEV2ZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUQ4MUE0MTFBN0UwMDQ0N0M0QyAvKiBXaWxs
U2VuZFN1Ym1pdEV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFNDQ3OTkxQjc2RjFFQjAw
OTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdFRDkxQTQx
MUE3RTAwNDQ3QzRDIC8qIFdpbmRvd2xlc3NXZWJWaWV3V2l0aE1lZGlhLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0NDRTdGMkUxQTQxMUIxMDAwNDQ3QzRDIC8qIFdLQnJvd3NpbmdDb250ZXh0R3Jv
dXBUZXN0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMkYxQTQxMUIxMDAwNDQ3QzRDIC8q
IFdLQnJvd3NpbmdDb250ZXh0TG9hZERlbGVnYXRlVGVzdC5tbSBpbiBTb3VyY2VzICovLApJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAJKHJldmlzaW9uIDE4ODEwMCkJ
KGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHA6MTg4MTAwKQorKysg
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZ1ByaW1pdGl2ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNw
YWNlIFRlc3RXZWJLaXRBUEkgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBMb2NrVHlwZT4KK3ZvaWQg
cnVuTG9ja1Rlc3QodW5zaWduZWQgbnVtVGhyZWFkR3JvdXBzLCB1bnNpZ25lZCBudW1UaHJlYWRz
UGVyR3JvdXAsIHVuc2lnbmVkIHdvcmtQZXJDcml0aWNhbFNlY3Rpb24sIHVuc2lnbmVkIG51bUl0
ZXJhdGlvbnMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPExvY2tUeXBlW10+IGxvY2tzID0gc3Rk
OjptYWtlX3VuaXF1ZTxMb2NrVHlwZVtdPihudW1UaHJlYWRHcm91cHMpOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxkb3VibGVbXT4gd29yZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPGRvdWJsZVtdPihudW1U
aHJlYWRHcm91cHMpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxUaHJlYWRJZGVudGlmaWVyW10+IHRo
cmVhZHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFRocmVhZElkZW50aWZpZXJbXT4obnVtVGhyZWFkR3Jv
dXBzICogbnVtVGhyZWFkc1Blckdyb3VwKTsKKworICAgIGZvciAodW5zaWduZWQgdGhyZWFkR3Jv
dXBJbmRleCA9IG51bVRocmVhZEdyb3VwczsgdGhyZWFkR3JvdXBJbmRleC0tOykgeworICAgICAg
ICB3b3Jkc1t0aHJlYWRHcm91cEluZGV4XSA9IDA7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0
aHJlYWRJbmRleCA9IG51bVRocmVhZHNQZXJHcm91cDsgdGhyZWFkSW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIHRocmVhZHNbdGhyZWFkR3JvdXBJbmRleCAqIG51bVRocmVhZHNQZXJHcm91cCArIHRo
cmVhZEluZGV4XSA9IGNyZWF0ZVRocmVhZCgKKyAgICAgICAgICAgICAgICAiQmVuY2htYXJrIHRo
cmVhZCIsCisgICAgICAgICAgICAgICAgW3RocmVhZEdyb3VwSW5kZXgsICZsb2NrcywgJndvcmRz
LCBudW1JdGVyYXRpb25zLCB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uXSAoKSB7CisgICAgICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bUl0ZXJhdGlvbnM7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxvY2tzW3RocmVhZEdyb3VwSW5kZXhdLmxvY2soKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IHdvcmtQZXJDcml0aWNhbFNlY3Rp
b247IGotLTspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZHNbdGhyZWFkR3JvdXBJ
bmRleF0rKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2tzW3RocmVhZEdyb3VwSW5kZXhd
LnVubG9jaygpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIHRocmVhZEluZGV4ID0gbnVtVGhy
ZWFkR3JvdXBzICogbnVtVGhyZWFkc1Blckdyb3VwOyB0aHJlYWRJbmRleC0tOykKKyAgICAgICAg
d2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFkc1t0aHJlYWRJbmRleF0pOworCisgICAgZG91
YmxlIGV4cGVjdGVkID0gMDsKKyAgICBmb3IgKHVpbnQ2NF90IGkgPSBzdGF0aWNfY2FzdDx1aW50
NjRfdD4obnVtSXRlcmF0aW9ucykgKiB3b3JrUGVyQ3JpdGljYWxTZWN0aW9uICogbnVtVGhyZWFk
c1Blckdyb3VwOyBpLS07KQorICAgICAgICBleHBlY3RlZCsrOworCisgICAgZm9yICh1bnNpZ25l
ZCB0aHJlYWRHcm91cEluZGV4ID0gbnVtVGhyZWFkR3JvdXBzOyB0aHJlYWRHcm91cEluZGV4LS07
KQorICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWQsIHdvcmRzW3RocmVhZEdyb3VwSW5kZXhdKTsK
K30KKworVEVTVChXVEZfTG9jaywgVW5jb250ZW50ZWRTaG9ydFNlY3Rpb24pCit7CisgICAgcnVu
TG9ja1Rlc3Q8TG9jaz4oMSwgMSwgMSwgMTAwMDAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBV
bmNvbnRlbnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEsIDEw
MDAwLCAxMDAwKTsKK30KKworVEVTVChXVEZfTG9jaywgQ29udGVudGVkU2hvcnRTZWN0aW9uKQor
eworICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEsIDEwLCAxLCAxMDAwMDAwMCk7Cit9CisKK1RFU1Qo
V1RGX0xvY2ssIENvbnRlbnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PExvY2s+
KDEsIDEwLCAxMDAwMCwgMTAwMDApOworfQorCitURVNUKFdURl9Mb2NrLCBNYW55Q29udGVudGVk
U2hvcnRTZWN0aW9ucykKK3sKKyAgICBydW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAsIDEsIDUwMDAw
MCk7Cit9CisKK1RFU1QoV1RGX0xvY2ssIE1hbnlDb250ZW50ZWRMb25nU2VjdGlvbnMpCit7Cisg
ICAgcnVuTG9ja1Rlc3Q8TG9jaz4oMTAsIDEwLCAxMDAwMCwgMjAwMCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RG
L0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9M
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9j
ay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
UHJpbWl0aXZlcy5oPgpAQCAtOTQsNyArOTUsNDIgQEAgVEVTVChXVEZfTG9jaywgTWFueUNvbnRl
bnRlZFNob3J0U2VjdGlvbgogCiBURVNUKFdURl9Mb2NrLCBNYW55Q29udGVudGVkTG9uZ1NlY3Rp
b25zKQogewotICAgIHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAwMDAsIDIwMDApOworICAg
IHJ1bkxvY2tUZXN0PExvY2s+KDEwLCAxMCwgMTAwMDAsIDEwMDApOworfQorCitURVNUKFdURl9C
eXRlTG9jaywgVW5jb250ZW50ZWRTaG9ydFNlY3Rpb24pCit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0
ZUxvY2s+KDEsIDEsIDEsIDEwMDAwMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIFVuY29u
dGVudGVkTG9uZ1NlY3Rpb24pCit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEsIDEw
MDAwLCAxMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIENvbnRlbnRlZFNob3J0U2VjdGlv
bikKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMSwgMTAsIDEsIDEwMDAwMDAwKTsKK30K
KworVEVTVChXVEZfQnl0ZUxvY2ssIENvbnRlbnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkxv
Y2tUZXN0PEJ5dGVMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKK30KKworVEVTVChXVEZfQnl0
ZUxvY2ssIE1hbnlDb250ZW50ZWRTaG9ydFNlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5
dGVMb2NrPigxMCwgMTAsIDEsIDUwMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBNYW55
Q29udGVudGVkTG9uZ1NlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxMCwg
MTAsIDEwMDAwLCAxMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIFNlY3Rpb25BZGRyZXNz
Q29sbGlzaW9uKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPig0LCAyLCAxMDAwMCwgMjAw
MCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCShyZXZpc2lvbiAwKQorKysgVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0
Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1Bh
cmtpbmdMb3QuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1Ro
cmVhZGluZ1ByaW1pdGl2ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNl
IFRlc3RXZWJLaXRBUEkgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0
IHsKKyAgICB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgbnVtVGhyZWFkcykKKyAgICB7CisgICAg
ICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIGZhaXIgKEZJRk8pIHNlbWFwaG9yZSwgYW5kIGl0IHN0
YXJ0cyBvdXQgdW5hdmFpbGFibGUuCisgICAgICAgIHNlbWFwaG9yZS5zdG9yZSgwKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVRocmVhZHM7IGktLTspIHsKKyAgICAg
ICAgICAgIHRocmVhZHMuYXBwZW5kKAorICAgICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgICAgICAgICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAorICAgICAgICAgICAgICAg
ICAgICBbJl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBjdXJy
ZW50VGhyZWFkKCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobG9j
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRocmVhZCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSBjdXJyZW50VGhyZWFkKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICAg
ICAgICAgICAgICB9KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHVucGFya09uZSh1
bnNpZ25lZCBzaW5nbGVVbnBhcmtJbmRleCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgwdSwg
bGFzdEF3b2tlbik7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRy
ZXNzID0gMDsKKyAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIDg+IHF1ZXVlOworICAg
ICAgICBQYXJraW5nTG90Ojpmb3JFYWNoKAorICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlm
aWVyIHRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQorICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisK
KyAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7CisgICAgICAgICAgICB9KTsK
KworICAgICAgICBFWFBFQ1RfTEUobnVtV2FpdGluZ09uQWRkcmVzcywgdGhyZWFkcy5zaXplKCkg
LSBzaW5nbGVVbnBhcmtJbmRleCk7CisKKyAgICAgICAgdXAoKTsKKworICAgICAgICB7CisgICAg
ICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKKyAgICAg
ICAgICAgIHdoaWxlIChhd2FrZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJbmRleCArIDEpCisgICAg
ICAgICAgICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgICAgIEVYUEVDVF9O
RSgwdSwgbGFzdEF3b2tlbik7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLmlzRW1wdHkoKSAmJiBx
dWV1ZVswXSAhPSBsYXN0QXdva2VuKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiV29rZSB1
cCB3cm9uZyB0aHJlYWQ6IHF1ZXVlID0gIiwgbGlzdER1bXAocXVldWUpLCAiLCBsYXN0IGF3b2tl
biA9ICIsIGxhc3RBd29rZW4sICJcbiIpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShxdWV1
ZVswXSwgbGFzdEF3b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0QXdva2Vu
ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZmluaXNoKHVuc2lnbmVkIG51bVNp
bmdsZVVucGFya3MpCisgICAgeworICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNz
ID0gMDsKKyAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKKyAgICAgICAgICAgIFsmXSAoVGhy
ZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgICAgIGlm
IChhZGRyZXNzICE9ICZzZW1hcGhvcmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7Cisg
ICAgICAgICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9MRShudW1XYWl0aW5nT25B
ZGRyZXNzLCB0aHJlYWRzLnNpemUoKSAtIG51bVNpbmdsZVVucGFya3MpOworCisgICAgICAgIHNl
bWFwaG9yZS5zdG9yZSh0aHJlYWRzLnNpemUoKSAtIG51bVNpbmdsZVVucGFya3MpOworICAgICAg
ICBQYXJraW5nTG90Ojp1bnBhcmtBbGwoJnNlbWFwaG9yZSk7CisKKyAgICAgICAgbnVtV2FpdGlu
Z09uQWRkcmVzcyA9IDA7CisgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCisgICAgICAgICAg
ICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNz
Kys7CisgICAgICAgICAgICB9KTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIG51bVdhaXRpbmdP
bkFkZHJlc3MpOworICAgIAorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2Nr
PHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChhd2FrZS5zaXpl
KCkgPCB0aHJlYWRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2Nr
ZXIpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElk
ZW50aWZpZXIgOiB0aHJlYWRzKQorICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24o
dGhyZWFkSWRlbnRpZmllcik7CisgICAgfQorCisgICAgLy8gU2VtYXBob3JlIG9wZXJhdGlvbnMu
CisgICAgdm9pZCBkb3duKCkKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAg
IGludCBvbGRTZW1hcGhvcmVWYWx1ZSA9IHNlbWFwaG9yZS5sb2FkKCk7CisgICAgICAgICAgICBp
bnQgbmV3U2VtYXBob3JlVmFsdWUgPSBvbGRTZW1hcGhvcmVWYWx1ZSAtIDE7CisgICAgICAgICAg
ICBpZiAoIXNlbWFwaG9yZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFNlbWFwaG9yZVZhbHVlLCBu
ZXdTZW1hcGhvcmVWYWx1ZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmIChvbGRTZW1hcGhvcmVWYWx1ZSA+IDApIHsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBhY3F1aXJlZCB0aGUgc2VtYXBob3JlLiBEb25lLgorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2Ug
bmVlZCB0byB3YWl0LgorICAgICAgICAgICAgaWYgKFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJr
KCZzZW1hcGhvcmUsIG5ld1NlbWFwaG9yZVZhbHVlKSkgeworICAgICAgICAgICAgICAgIC8vIFdl
IGRpZCB3YWl0LCBhbmQgdGhlbiBnb3Qgd29rZW4gdXAuIFRoaXMgbWVhbnMgdGhhdCBzb21lb25l
IHdobyB1cCdkIHRoZSBzZW1hcGhvcmUKKyAgICAgICAgICAgICAgICAvLyBwYXNzZWQgb3duZXJz
aGlwIG9udG8gdXMuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBXZSBuZXZlciBwYXJrZWQsIGJlY2F1c2UgdGhlIHNlbWFwaG9yZSB2YWx1
ZSBjaGFuZ2VkLiBVbmRvIG91ciBkZWNyZW1lbnQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAg
IGZvciAoOzspIHsKKyAgICAgICAgICAgICAgICBpbnQgb2xkU2VtYXBob3JlVmFsdWUgPSBzZW1h
cGhvcmUubG9hZCgpOworICAgICAgICAgICAgICAgIGlmIChzZW1hcGhvcmUuY29tcGFyZUV4Y2hh
bmdlV2VhayhvbGRTZW1hcGhvcmVWYWx1ZSwgb2xkU2VtYXBob3JlVmFsdWUgKyAxKSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgdm9pZCB1cCgpCisgICAgeworICAgICAgICBpbnQgb2xkU2VtYXBob3JlVmFsdWU7CisgICAg
ICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIG9sZFNlbWFwaG9yZVZhbHVlID0gc2VtYXBob3Jl
LmxvYWQoKTsKKyAgICAgICAgICAgIGlmIChzZW1hcGhvcmUuY29tcGFyZUV4Y2hhbmdlV2Vhayhv
bGRTZW1hcGhvcmVWYWx1ZSwgb2xkU2VtYXBob3JlVmFsdWUgKyAxKSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIGlmIGFueW9uZSB3YXMgd2Fp
dGluZyBvbiB0aGUgc2VtYXBob3JlLiBJZiB0aGV5IHdlcmUsIHRoZW4gcGFzcyBvd25lcnNoaXAg
dG8gdGhlbS4KKyAgICAgICAgaWYgKG9sZFNlbWFwaG9yZVZhbHVlIDwgMCkKKyAgICAgICAgICAg
IFBhcmtpbmdMb3Q6OnVucGFya09uZSgmc2VtYXBob3JlKTsKKyAgICB9CisgICAgCisgICAgQXRv
bWljPGludD4gc2VtYXBob3JlOworICAgIHN0ZDo6bXV0ZXggbG9jazsKKyAgICBzdGQ6OmNvbmRp
dGlvbl92YXJpYWJsZSBjb25kaXRpb247CisgICAgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBh
d2FrZTsKKyAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBUaHJlYWRJ
ZGVudGlmaWVyIGxhc3RBd29rZW4geyAwIH07Cit9OworCit2b2lkIHJ1blBhcmtpbmdUZXN0KHVu
c2lnbmVkIG51bUxhdGNoZXMsIHVuc2lnbmVkIGRlbGF5LCB1bnNpZ25lZCBudW1UaHJlYWRzLCB1
bnNpZ25lZCBudW1TaW5nbGVVbnBhcmtzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaW5nbGVM
YXRjaFRlc3RbXT4gdGVzdHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbmdsZUxhdGNoVGVzdFtdPihu
dW1MYXRjaGVzKTsKKworICAgIGZvciAodW5zaWduZWQgbGF0Y2hJbmRleCA9IG51bUxhdGNoZXM7
IGxhdGNoSW5kZXgtLTspCisgICAgICAgIHRlc3RzW2xhdGNoSW5kZXhdLmluaXRpYWxpemUobnVt
VGhyZWFkcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHVucGFya0luZGV4ID0gMDsgdW5wYXJrSW5k
ZXggPCBudW1TaW5nbGVVbnBhcmtzOyArK3VucGFya0luZGV4KSB7CisgICAgICAgIHVzbGVlcChk
ZWxheSk7CisgICAgICAgIGZvciAodW5zaWduZWQgbGF0Y2hJbmRleCA9IG51bUxhdGNoZXM7IGxh
dGNoSW5kZXgtLTspCisgICAgICAgICAgICB0ZXN0c1tsYXRjaEluZGV4XS51bnBhcmtPbmUodW5w
YXJrSW5kZXgpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgbGF0Y2hJbmRleCA9IG51bUxh
dGNoZXM7IGxhdGNoSW5kZXgtLTspCisgICAgICAgIHRlc3RzW2xhdGNoSW5kZXhdLmZpbmlzaChu
dW1TaW5nbGVVbnBhcmtzKTsKK30KKwordm9pZCByZXBlYXRQYXJraW5nVGVzdCh1bnNpZ25lZCBu
dW1SZXBlYXRzLCB1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxheSwgdW5zaWduZWQg
bnVtVGhyZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykKK3sKKyAgICB3aGlsZSAobnVt
UmVwZWF0cy0tKQorICAgICAgICBydW5QYXJraW5nVGVzdChudW1MYXRjaGVzLCBkZWxheSwgbnVt
VGhyZWFkcywgbnVtU2luZ2xlVW5wYXJrcyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtBbGxPbmVGYXN0KQoreworICAgIHJlcGVh
dFBhcmtpbmdUZXN0KDEwMDAwLCAxLCAwLCAxLCAwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xv
dCwgVW5wYXJrQWxsSHVuZHJlZEZhc3QpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAwMCwg
MSwgMCwgMTAwLCAwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJrT25lT25lRmFz
dCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxMDAwLCAxLCAwLCAxLCAxKTsKK30KKworVEVT
VChXVEZfUGFya2luZ0xvdCwgVW5wYXJrT25lSHVuZHJlZEZhc3QpCit7CisgICAgcmVwZWF0UGFy
a2luZ1Rlc3QoMTAwLCAxLCAwLCAxMDAsIDEwMCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3Qs
IFVucGFya09uZUZpZnR5VGhlbkZpZnR5QWxsRmFzdCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVz
dCgyMDAsIDEsIDAsIDEwMCwgNTApOworfQorCitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtB
bGxPbmUpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAwLCAxLCAxMDAwMCwgMSwgMCk7Cit9
CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya0FsbEh1bmRyZWQpCit7CisgICAgcmVwZWF0
UGFya2luZ1Rlc3QoMTAwLCAxLCAxMDAwMCwgMTAwLCAwKTsKK30KKworVEVTVChXVEZfUGFya2lu
Z0xvdCwgVW5wYXJrT25lT25lKQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEwLCAxLCAxMDAw
MCwgMSwgMSk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya09uZUh1bmRyZWQpCit7
CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMSwgMSwgMTAwMDAsIDEwMCwgMTAwKTsKK30KKworVEVT
VChXVEZfUGFya2luZ0xvdCwgVW5wYXJrT25lRmlmdHlUaGVuRmlmdHlBbGwpCit7CisgICAgcmVw
ZWF0UGFya2luZ1Rlc3QoMiwgMSwgMTAwMDAsIDEwMCwgNTApOworfQorCitURVNUKFdURl9QYXJr
aW5nTG90LCBIdW5kcmVkVW5wYXJrQWxsT25lRmFzdCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVz
dCgxMDAsIDEwMCwgMCwgMSwgMCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIEh1bmRyZWRV
bnBhcmtBbGxPbmUpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMSwgMTAwLCAxMDAwMCwgMSwg
MCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258671</attachid>
            <date>2015-08-10 16:24:15 -0700</date>
            <delta_ts>2015-08-10 18:03:14 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67865</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDE1LTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBoYXZlIGEgUGFya2luZ0xvdCBmb3IgcGFya2luZyBzbGVlcGluZyB0aHJlYWRz
LCBzbyB0aGF0IGxvY2tzIGNhbiBmaXQgaW4gMS42IGJpdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY2NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgQnl0ZVNwaW5Mb2NrIHdpdGggQnl0
ZUxvY2suCisKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmg6CisKIDIwMTUt
MDgtMDcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBMZXQn
cyByZW5hbWUgRnVuY3Rpb25Cb2R5Tm9kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAxODgyMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxNCArMjcsMTQgQEAKICNkZWZpbmUgQ29uY3VycmVudEpJVExvY2tfaAog
CiAjaW5jbHVkZSAiRGVmZXJHQy5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KKyNp
bmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlwZWRlZiBCeXRlU3Bp
bkxvY2sgQ29uY3VycmVudEpJVExvY2s7Ci10eXBlZGVmIEJ5dGVTcGluTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwordHlwZWRlZiBCeXRlTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5
cGVkZWYgQnl0ZUxvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKICNlbHNlCiB0eXBlZGVm
IE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKIHR5cGVkZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODIyOSkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTUtMDgtMTAgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEYgc2hvdWxkIGhhdmUg
YSBQYXJraW5nTG90IGZvciBwYXJraW5nIHNsZWVwaW5nIHRocmVhZHMsIHNvIHRoYXQgbG9ja3Mg
Y2FuIGZpdCBpbiAxLjYgYml0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ3NjY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWRkcyBhIG1ham9yIG5ldyBhYnN0cmFjdGlvbiBmb3Ig
Y29uY3VycmVuY3kgYWxnb3JpdGhtcyBpbiBXZWJLaXQuIEl0J3MgY2FsbGVkIGEKKyAgICAgICAg
UGFya2luZ0xvdCwgYW5kIGl0IG1ha2VzIGF2YWlsYWJsZSBhIHRocmVhZCBwYXJraW5nIHF1ZXVl
IGZvciBlYWNoIHZpcnR1YWwgYWRkcmVzcyBpbiBtZW1vcnkuCisgICAgICAgIFRoZSBxdWV1ZXMg
YXJlIG1haW50YWluZWQgYnkgYSBkYXRhLWFjY2Vzcy1wYXJhbGxlbCBjb25jdXJyZW50IGhhc2h0
YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhlCisgICAgICAgIG1lbW9yeSB1c2FnZSBpcyBib3VuZGVk
IGF0IGFyb3VuZCBoYWxmIGEgS0IgcGVyIHRocmVhZC4KKworICAgICAgICBUaGUgUGFya2luZ0xv
dCBtYWtlcyBpdCBlYXN5IHRvIHR1cm4gYW55IHNwaW5sb2NrLWJhc2VkIGNvbmN1cnJlbmN5IHBy
b3RvY29sIGludG8gb25lIHRoYXQKKyAgICAgICAgcGFya3MgdGhyZWFkcyBhZnRlciBhIHdoaWxl
LiBCZWNhdXNlIHF1ZXVlIHN0YXRlIG1hbmFnZW1lbnQgaXMgdXAgdG8gdGhlIFBhcmtpbmdMb3Qg
YW5kIG5vdAorICAgICAgICB0aGUgdXNlcidzIGRhdGEgc3RydWN0dXJlLCB0aGlzIHBhdGNoIHVz
ZXMgaXQgdG8gaW1wbGVtZW50IGEgZnVsbCBhZGFwdGl2ZSBtdXRleCBpbiBvbmUgYnl0ZS4KKyAg
ICAgICAgSW4gZmFjdCwgb25seSB0aHJlZSBzdGF0ZXMgb2YgdGhhdCBieXRlIGFyZSB1c2VkICgw
ID0gYXZhaWxhYmxlLCAxID0gbG9ja2VkLCAyID0gbG9ja2VkIGFuZAorICAgICAgICB0aGVyZSBh
cmUgcGFya2VkIHRocmVhZHMpLiBIZW5jZSB0aGUgam9rZSB0aGF0IFBhcmtpbmdMb3QgYWxsb3dz
IGxvY2tzIHRoYXQgZml0IGluIDEuNiBiaXRzLgorCisgICAgICAgIEJ5dGVMb2NrIGlzIHVzZWQg
YXMgYSByZXBsYWNlbWVudCBmb3IgQnl0ZVNwaW5Mb2NrIGluIEphdmFTY3JpcHRDb3JlLgorCisg
ICAgICAgIFRoZSBBUEkgdGVzdHMgZm9yIHRoaXMgYWxzbyBkZW1vIGhvdyB0byBjcmVhdGUgYSBj
b21wbGV0ZWx5IGZhaXIgKEZJRk8pIGJpbmFyeSBzZW1hbXBob3JlLiBUaGUKKyAgICAgICAgY29t
bWVudCBpbiBMb2NrLmggc2hvd3MgaG93IHdlIGNvdWxkIGFjY2VsZXJhdGUgTG9jayBwZXJmb3Jt
YW5jZSB1c2luZyBQYXJraW5nTG90LiBBZnRlciB3ZQorICAgICAgICBhcmUgc3VyZSB0aGF0IHRo
aXMgY29kZSB3b3Jrcywgd2UgY2FuIGV4cGFuZCB0aGUgdXNlIG9mIFBhcmtpbmdMb3QuIFRoYXQn
cyBjb3ZlcmVkIGJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDc4NDEuCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAg
ICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtz
L0xvY2tTcGVlZFRlc3QuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd3RmL0F0b21p
Y3MuaDoKKyAgICAgICAgKFdURjo6QXRvbWljOjpjb21wYXJlRXhjaGFuZ2VXZWFrKToKKyAgICAg
ICAgKFdURjo6QXRvbWljOjpjb21wYXJlRXhjaGFuZ2VTdHJvbmcpOgorICAgICAgICAqIHd0Zi9C
eXRlTG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6bG9ja1Nsb3cpOgor
ICAgICAgICAoV1RGOjpCeXRlTG9jazo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL0J5dGVM
b2NrLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6Qnl0ZUxvY2spOgorICAgICAg
ICAoV1RGOjpCeXRlTG9jazo6bG9jayk6CisgICAgICAgIChXVEY6OkJ5dGVMb2NrOjp1bmxvY2sp
OgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6aXNIZWxkKToKKyAgICAgICAgKFdURjo6Qnl0ZUxv
Y2s6OmlzTG9ja2VkKToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
d3RmL0xvY2suaDoKKyAgICAgICAgKiB3dGYvUGFya2luZ0xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseSk6CisgICAgICAgIChXVEY6OlBh
cmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya0Fs
bCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9Q
YXJraW5nTG90Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJraW5nTG90Ojpjb21wYXJlQW5k
UGFyayk6CisKIDIwMTUtMDgtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5j
YW5vbi5mcj4KIAogICAgICAgICBDb21waWxlIHdhcm5pbmcgKC1Xc2lnbi1jb21wYXJlKSBvbiAz
Mi1iaXRzIGF0IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
dmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNlL1dURi9XVEYu
dmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogICA8
SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEFzc2VydGlvbnMuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEJpdFZlY3Rvci5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQnl0ZUxvY2suY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cd3RmXENvbXBpbGF0aW9uVGhyZWFkLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5jcHAiIC8+CkBAIC0xMTYsNiArMTE3LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHd0ZlxPU1JhbmRvbVNvdXJjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3
dGZcUGFnZUJsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJh
bGxlbEpvYnNHZW5lcmljLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQ
YXJraW5nTG90LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQcmludFN0
cmVhbS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUkFNU2l6ZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUmFuZG9tTnVtYmVyLmNwcCIgLz4K
QEAgLTE3MSw2ICsxNzMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJsb2Nr
U3RhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCbG9vbUZpbHRlci5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQnl0ZUxvY2suaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxDaGVja2VkQXJpdGhtZXRpYy5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENoZWNrZWRCb29sZWFuLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ29tcGlsZXIuaCIgLz4KQEAgLTI0Niw2ICsyNDksNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9ic0dlbmVyaWMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnNMaWJkaXNwYXRj
aC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9ic09wZW5N
UC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmtpbmdMb3QuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXNzUmVmUHRyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGxhdGZvcm0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxQcmludFN0cmVhbS5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODgyMjkpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwx
MCBAQAogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0
RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKKwkJMEY4MjRBNjYxQjc0NDNBMDAwMkUz
NDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGODI0QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi87IH07
CisJCTBGODI0QTY3MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjMxQjc0NDNBMDAwMkUzNDVE
IC8qIEJ5dGVMb2NrLmggKi87IH07CisJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKKwkJMEY4
MjRBNjkxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQ
YXJraW5nTG90LmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2lu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3
MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjg4NUUwRjE4
NDVBRUE5MDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFz
dEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi87
IH07CkBAIC0zMDcsNiArMzExLDEwIEBACiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBE
ZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FF
M0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhv
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGODI0QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlTG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8q
IFBhcmtpbmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xv
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQ
b2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODg1RTBFMTg0NUFFOUYw
MEYxRTNGQSAvKiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZhc3RCaXRW
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE2LDYg
KzcyNCw4IEBACiAJCQkJQThBNDcyNjQxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb2NrU3RhY2suaCAq
LywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIzRkYgLyogQmxvb21GaWx0ZXIuaCAqLywKIAkJ
CQlBOEE0NzI2NzE1MUE4MjVBMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywK
KwkJCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwICovLAorCQkJCTBG
ODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovLAogCQkJCUVCOTVFMUVGMTYx
QTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAqLywKIAkJCQkwRkVDM0VFNDE3MUI4MzQ3MDBG
REFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8sCiAJCQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZG
IC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCkBAIC04MTAsNiArODIwLDggQEAKIAkJCQlBOEE0
NzJFNTE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZVJlc2VydmF0aW9uLmggKi8sCiAJCQkJQThBNDcy
RTYxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcmFsbGVsSm9icy5oICovLAogCQkJCUE4QTQ3MkU5MTUx
QTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oICovLAorCQkJCTBGODI0
QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLywKKwkJCQkwRjgyNEE2NTFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1
IC8qIFBsYXRmb3JtLmggKi8sCiAJCQkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50
U3RyZWFtLmNwcCAqLywKQEAgLTExNTYsNiArMTE2OCw3IEBACiAJCQkJQThBNDc0MTUxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTYx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDE3MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFy
cmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTExNjcsNiArMTE4MCw3IEBACiAJCQkJMTQ2OTQxOTIx
NkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRG
M0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Njk0MTk2MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVk
VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMDE1MUE4MjVCMDA0MTIzRkYgLyog
U2VudGluZWxMaW5rZWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMjE1MUE4MjVC
MDA0MTIzRkYgLyogU0hBMS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzI1LDYgKzEzMzksNyBAQAog
CQkJZmlsZXMgPSAoCiAJCQkJQThBNDczODYxNTFBODI1QjAwNDEyM0ZGIC8qIEFzc2VydGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzUxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21p
Y1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjgyNEE2NjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUJDNzBGMDUxNzZDMzc5RDAwMTAx
REVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZC
MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5
NDE5RDE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMzQwLDYgKzEzNTUsNyBAQAogCQkJCUE4QTQ3MzlBMTUxQTgyNUIwMDQxMjNGRiAv
KiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OEE0NzQzOTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBOEE0NzM5QzE1MUE4MjVCMDA0MTIzRkYgLyogQ3VycmVudFRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODZGNDZGNjAxQTI4NDBFRTAwQ0NCRjIyIC8qIFJlZkNvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUUxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQTAxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVN
YXRoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tT
cGVlZFRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3Bl
ZWRUZXN0LmNwcAkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNlL1dURi9iZW5jaG1hcmtzL0xv
Y2tTcGVlZFRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQnl0ZUxv
Y2suaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5oPgpAQCAtNDEsOSArNDIsOSBAQCB1bnNpZ25lZCB3
b3JrUGVyQ3JpdGljYWxTZWN0aW9uOwogdW5zaWduZWQgbnVtTm9pc2VUaHJlYWRzOwogdW5zaWdu
ZWQgbnVtSXRlcmF0aW9uczsKICAgICAKLU5PX1JFVFVSTiB2b2lkIHVzYWdlKCkKK3ZvaWQgdXNh
Z2UoKQogewotICAgIHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xt
dXRleHxhbGwgPG51bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29y
ayBwZXIgY3JpdGljYWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlv
bnM+XG4iKTsKKyAgICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8
Ynl0ZWxvY2t8bXV0ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBn
cm91cD4gPHdvcmsgcGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51
bSBpdGVyYXRpb25zPlxuIik7CiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTI1LDYgKzEyNiwxMCBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxM
b2NrPigiV1RGIExvY2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CisgICAgaWYg
KCFzdHJjbXAoYXJndlsxXSwgImJ5dGVsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikp
IHsKKyAgICAgICAgcnVuQmVuY2htYXJrPEJ5dGVMb2NrPigiV1RGIEJ5dGVMb2NrIik7CisgICAg
ICAgIGRpZFJ1biA9IHRydWU7CisgICAgfQogICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRl
eCIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CiAgICAgICAgIHJ1bkJlbmNobWFyazxN
dXRleD4oIlBsYXRmb3JtIE11dGV4Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Qnl0ZUxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
eXRlTG9jay5oIgorCisjaW5jbHVkZSAiUGFya2luZ0xvdC5oIgorI2luY2x1ZGUgPHRocmVhZD4K
KworbmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKwordm9p
ZCBCeXRlTG9jazo6bG9ja1Nsb3coKQoreworICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisK
KyAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBv
biBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1p
dCA9IDQwOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0
ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1
cnJlbnRCeXRlVmFsdWUsICJcbiIpKTsKKworICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMg
dG8gYmFyZ2UgaW4uCisgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQp
CisgICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZh
bHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNw
dW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KKyAgICAgICAgaWYg
KCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3Bpbkxp
bWl0KSB7CisgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190
aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0
IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAorICAgICAgICAvLyBpZiB0
aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAgICAgICAg
ICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50
Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNv
IGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KKyAgICAgICAgUGFya2luZ0xv
dDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKKwor
ICAgICAgICAvLyBXZSBoYXZlIGF3YWtlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhl
IGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAorICAgICAgICAvLyBhcm91
bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICB9Cit9CisKK3ZvaWQgQnl0ZUxvY2s6OnVubG9ja1Nsb3co
KQoreworICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgd2hpbGUgZmluZGluZyBvdXQgaWYgc29tZW9u
ZSBpcyBwYXJrZWQuIE5vdGUgdGhhdCBhcyBzb29uIGFzIHdlIGRvIHRoaXMsCisgICAgLy8gc29t
ZW9uZSBtaWdodCBiYXJnZSBpbi4KKyAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZTsKKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IHVubG9ja2luZyB3aXRoICIsIG9sZEJ5dGVWYWx1ZSwgIlxuIikpOworICAgICAgICBBU1NF
UlQob2xkQnl0ZVZhbHVlICYgaXNIZWxkQml0KTsKKyAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJl
RXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgMCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICAvLyBOb3RlIHRoYXQgc29tZW9uZSBjb3VsZCB0cnkgdG8gcGFyayByaWdodCBub3cu
IElmIHRoYXQgaGFwcGVucywgdGhleSB3aWxsIHJldHVybiBpbW1lZGlhdGVseQorICAgIC8vIGJl
Y2F1c2Ugb3VyIHBhcmtpbmcgcHJlZGljYXRlIGlzIHRoYXQgbV9ieXRlID09IGlzSGVsZEJpdCB8
IGhhc1BhcmtlZEJpdCwgYnV0IHdlJ3ZlIGFscmVhZHkgc2V0CisgICAgLy8gbV9ieXRlID0gMC4K
KworICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIHRocmVhZHMgcGFya2VkLCB1bnBhcmsgYWxsIG9m
IHRoZW0uIFRoaXMgY2F1c2VzIGEgdGh1bmRlcmluZyBoZXJkLCBidXQgd2hpbGUKKyAgICAvLyB0
aGF0IGlzIHRoZW9yZXRpY2FsbHkgc2NhcnksIGl0J3MgdG90YWxseSBmaW5lIGluIFdlYktpdCBi
ZWNhdXNlIHdlIHVzdWFsbHkgZG9uJ3QgaGF2ZSBlbm91Z2gKKyAgICAvLyB0aHJlYWRzIGZvciB0
aGlzIHRvIG1hdHRlci4KKyAgICAvLyBGSVhNRTogV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyB0
byBleGhpYml0IHRodW5kZXJpbmcgaGVyZC4gV2UgY291bGQgdXNlIHVucGFya09uZSgpLCBhbmQg
aWYKKyAgICAvLyB0aGF0IHJldHVybnMgdHJ1ZSwganVzdCBzZXQgdGhlIHBhcmtlZCBiaXQgYWdh
aW4uIElmIGluIHRoZSBwcm9jZXNzIG9mIHNldHRpbmcgdGhlIHBhcmtlZCBiaXQKKyAgICAvLyB3
ZSBmYWlsIHRoZSBDQVMsIHRoZW4ganVzdCB1bnBhcmsgYWdhaW4uCisgICAgaWYgKG9sZEJ5dGVW
YWx1ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrQWxsKCZtX2J5
dGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQnl0
ZUxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dURi93dGYvQnl0ZUxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEJ5dGVMb2NrX2gKKyNkZWZpbmUgQnl0ZUxvY2tfaAorCisjaW5jbHVkZSA8d3Rm
L0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGxpa2UgTG9jaywgYnV0
IG9ubHkgcmVxdWlyZXMgMSBieXRlIGluc3RlYWQgb2Ygc2l6ZW9mKHZvaWQqKSBzdG9yYWdlLiBU
aGUgZG93bnNpZGUgaXMgdGhhdAorLy8gaXQgaXMgc2xvd2VyIG9uIHRoZSBzbG93IHBhdGggdW5k
ZXIgaGVhdnkgY29udGVudGlvbiBpbnZvbHZpbmcgbWFueSB0aHJlYWRzIGJlY2F1c2UgaXQgaXMK
Ky8vIHN1c2NlcHRpYmxlIHRvIHRoZSAidGh1bmRlcmluZyBoZXJkIiBwcm9ibGVtOiBpdCBkb2Vz
bid0IGhhdmUgZW5vdWdoIHN0YXRlIHRvIHRyYWNrIGhvdyBtYW55CisvLyB0aHJlYWRzIGFyZSB3
YWl0aW5nIGZvciB0aGUgbG9jaywgc28gd2hlbiB1bmxvY2sgZGV0ZWN0cyB0aGF0IGFueSB0aHJl
YWQgaXMgd2FpdGluZywgdGhlbiBpdCB3YWtlcworLy8gYWxsIG9mIHRoZSB3YWl0aW5nIHRocmVh
ZHMuIEFsbCBvZiB0aG9zZSB0aHJlYWRzIHdpbGwgcGlsZSBvbnRvIHRoZSBsb2NrOyBvbmUgd2ls
bCBzdWNjZWVkIGFuZCB0YWtlCisvLyBpdCB3aGlsZSB0aGUgb3RoZXJzIHdpbGwgZ28gYmFjayB0
byBzbGVlcC4gVGhlIHNsb3ctZG93biBpcyBzbWFsbC4gVGVuIHRocmVhZHMgcmVwZWF0ZWRseQor
Ly8gY29udGVuZGluZyBmb3IgdGhlIHNhbWUgfjEtMTB1cyBsb25nIGNyaXRpY2FsIHNlY3Rpb24g
d2lsbCBydW4gNyUgc2xvd2VyIG9uIG15IG1hY2hpbmUuIElmIEkgbWVzcworLy8gd2l0aCBhbnkg
b2YgdGhlIHBhcmFtZXRlcnMgLSBjaGFuZ2UgdGhlIG51bWJlciBvZiB0aHJlYWRzIG9yIGNoYW5n
ZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBkdXJhdGlvbiAtCisvLyB0aGVuIEJ5dGVMb2NrIHJlYWNo
ZXMgcGFyaXR5IHdpdGggTG9jaywgYW5kIHNvbWV0aW1lcyBvdXRwZXJmb3JtcyBpdC4gUGVyaGFw
cyBtb3N0IHN1cnByaXNpbmdseSwKKy8vIHRoZSBzbG93LWRvd24gZ29lcyBhd2F5IGV2ZW4gd2hl
biB5b3UgaW5jcmVhc2UgdGhlIG51bWJlciBvZiB0aHJlYWRzLiBCeXRlTG9jayBhcHBlYXJzIHRv
IHNvbWV0aW1lcworLy8gYmUgZmFzdGVyIHVuZGVyIG1pY3JvY29udGVudGlvbiwgcGVyaGFwcyBi
ZWNhdXNlIGEgY29udGVudGlvdXMgOC1iaXQgQ0FTIGlzIGNoZWFwZXIgdGhhbiBhCisvLyBjb250
ZW50aW91cyA2NC1iaXQgQ0FTLiBOb3RlIHRoYXQgdW5jb250ZW5kZWQgbG9ja2luZyBpcyBlcXVh
bGx5IGZhc3Qgd2l0aCBCeXRlTG9jayBhcyB3aXRoIExvY2suCisvLyBJbiBhbGwsIExvY2sgYW5k
IEJ5dGVMb2NrIGhhdmUgc2ltaWxhciBwZXJmb3JtYW5jZSB1bmRlciBjb250cm9sbGVkIG1pY3Jv
YmVuY2htYXJrcywgYnV0IExvY2sgaXMKKy8vIHRoZW9yZXRpY2FsbHkgc2FmZXIgYmVjYXVzZSBv
ZiB0aGUgdGh1bmRlcmluZyBoZXJkIGlzc3VlLiBJdCdzIHByb2JhYmx5IGJlc3QgdG8gdXNlIEJ5
dGVMb2NrIG9ubHkKKy8vIHdoZW4geW91IHJlYWxseSBjYXJlIGFib3V0IHNwYWNlIGFuZCB5b3Ug
ZG9uJ3QgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSB0aGF0IGEgbGFyZ2UgbnVtYmVyIG9mCisvLyB0
aHJlYWRzIHdvdWxkIGV2ZXIgcGlsZSBvbnRvIHRoZSBzYW1lIGxvY2suCisKK2NsYXNzIEJ5dGVM
b2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlTG9jayk7CitwdWJsaWM6CisgICAg
Qnl0ZUxvY2soKQorICAgIHsKKyAgICAgICAgbV9ieXRlLnN0b3JlKDAsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAg
ICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgeworICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJl
ZCEKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxvY2tTbG93KCk7
CisgICAgfQorCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWSht
X2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpKSkgeworICAgICAgICAgICAgLy8gTG9jayByZWxlYXNlZCBhbmQgbm9ib2R5IHdh
cyB3YWl0aW5nIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5s
b2NrU2xvdygpOworICAgIH0KKworICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2J5dGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVs
ZEJpdDsKKyAgICB9CisKKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0hlbGQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVp
bnQ4X3QgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJrZWRC
aXQgPSAyOworCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CisKKyAgICBBdG9taWM8dWludDhf
dD4gbV9ieXRlOworfTsKKwordHlwZWRlZiBMb2NrZXI8Qnl0ZUxvY2s+IEJ5dGVMb2NrZXI7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkJ5dGVMb2NrOwordXNpbmcgV1RGOjpC
eXRlTG9ja2VyOworCisjZW5kaWYgLy8gQnl0ZUxvY2tfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTcsNiArNyw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEJpdFZl
Y3Rvci5oCiAgICAgQml0bWFwLmgKICAgICBCdW1wUG9pbnRlckFsbG9jYXRvci5oCisgICAgQnl0
ZUxvY2suaAogICAgIEJ5dGVPcmRlci5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENv
bXBpbGVyLmgKQEAgLTYyLDYgKzYzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgUGFyYWxsZWxK
b2JzR2VuZXJpYy5oCiAgICAgUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaAogICAgIFBhcmFsbGVs
Sm9ic09wZW5NUC5oCisgICAgUGFya2luZ0xvdC5oCiAgICAgUGFzc1JlZlB0ci5oCiAgICAgUGxh
dGZvcm0uaAogICAgIFByaW50U3RyZWFtLmgKQEAgLTE0NCw2ICsxNDYsNyBAQCBzZXQoV1RGX1NP
VVJDRVMKICAgICBBc3NlcnRpb25zLmNwcAogICAgIEF0b21pY3MuY3BwCiAgICAgQml0VmVjdG9y
LmNwcAorICAgIEJ5dGVMb2NrLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIuY3BwCkBAIC0xNjYsNiArMTY5LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgT1NSYW5kb21T
b3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcAogICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3Bw
CisgICAgUGFya2luZ0xvdC5jcHAKICAgICBQcmludFN0cmVhbS5jcHAKICAgICBSQU1TaXplLmNw
cAogICAgIFJhbmRvbU51bWJlci5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDE4ODIyOSkKKysrIFNv
dXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwzMyBAQCBu
YW1lc3BhY2UgV1RGIHsKIC8vICAgYWNxdWlzaXRpb24gb3JkZXIgdW5kZXIgY29udGVudGlvbi4g
VGhlIHNhbWUgY2F2ZWF0IGlzIGdlbmVyYWxseSB0cnVlIG9mIFNwaW5Mb2NrIGFuZCBwbGF0Zm9y
bQogLy8gICBtdXRleGVzIG9uIHNvbWUgcGxhdGZvcm1zLgogCisvLyBGSVhNRTogV2UgY291bGQg
bWFrZSB0aGlzIExvY2sgbW9yZSBlZmZpY2llbnQgYnkgdXNpbmcgUGFya2luZ0xvdCBhbmQgYXRv
bWljIGFkZCBpbnN0ZWFkIG9mIENBUy4KKy8vIFRoZSBsb2NrIHdvdWxkIGJlIGF2YWlsYWJsZSBp
ZiB0aGUgMzItYml0IGxvY2sgd29yZCA8PSAxLiBMb2NraW5nIHdvdWxkIGF0b21pY2FsbHkgYWRk
IDIgdG8gdGhlCisvLyB3b3JkLiBUaGUgbG9jayB3b3VsZCBiZSBrbm93biB0byBiZSBoZWxkIGlm
IHRoZSBvbGQgdmFsdWUgb2YgdGhlIHdvcmQgd2FzIDw9IDEuIFRoZSBsb3cgYml0CisvLyBqdXN0
IGluZGljYXRlcyBpZiBhbnlvbmUgaXMgd2FpdGluZy4gSWYgdGhlIHdvcmQgd2FzID49IDIgYWZ0
ZXIgdGhlIGF0b21pYyBhZGQsIHdlIHdvdWxkIGdvIHRvIGEKKy8vIHNsb3cgcGF0aCB0aGF0IHJl
cGVhdGVkbHkgYXR0ZW1wdHMgdG8gc2V0IHRoZSBsb2NrIHdvcmQgdG8gMyBbc2ljXSBmcm9tIDAg
b3IgMSwgYW5kIHBhcmtzIGlmIHRoYXQncworLy8gbm90IHBvc3NpYmxlLiBUaGUgc2xvdyBwYXRo
IGNvdWxkIGFsc28gcGVyZm9ybSBkZWZlbnNpdmUgZml4dXAgdGhhdCBkcm9wcyB0aGUgbG9jayB2
YWx1ZSBkb3duIHRvCisvLyAzIGlmIGl0IHdhcyBncmVhdGVyIHRoYW4gMywgYW55dGltZSB0aGF0
IGl0IG5lZWRlZCB0byBnbyB0byBwYXJrLiBUaGUgdW5sb2NrIGZhc3QgcGF0aCB3b3VsZAorLy8g
YXRvbWljYWxseSBzdWJ0cmFjdCAyLiBJZiB0aGUgZGVjcmVtZW50IG9wZXJhdGlvbiBkb2VzIG5v
dCBjYXVzZSB0aGUgY291bnQgdG8gemVybywgaXQgd291bGQgZ28gdG8KKy8vIGEgc2xvdyBwYXRo
LiBUaGUgc2xvdyBwYXRoIHdvdWxkIHVucGFyayBvbmUuIElmIHVucGFya2luZyByZXR1cm5zIGZh
bHNlLCB0aGUgc2xvdyBwYXRoIHdvdWxkCisvLyBhdHRlbXB0IGEgc3Ryb25nIENBUyBmcm9tIDEg
dG8gMC4gSXQgd291bGRuJ3QgZG8gYW55dGhpbmcgaWYgdGhlIENBUyBmYWlscywgc2luY2UgdGhl
IG9ubHkgZ29hbCBvZgorLy8gdGhhdCBDQVMgaXMgdG8gdGVsbCBmdXR1cmUgdW5sb2NrIGZhc3Qg
cGF0aHMgdGhhdCB0aGVyZSBpcyBwb3NzaWJseSBhIHRocmVhZCBwYXJrZWQuIEFzIHN1Y2ggdGhl
CisvLyBzdGF0ZXMgb2YgdGhlIGxvY2sgYXJlOgorLy8KKy8vICAgMDogbG9jayBhdmFpbGFibGUg
YW5kIG5vYm9keSB3YWl0aW5nCisvLyAgIDE6IGxvY2sgYXZhaWxhYmxlIGFuZCB0aGVyZSBtYXkg
YmUgdGhyZWFkcyB3YWl0aW5nCisvLyAgIDI6IGxvY2sgdGFrZW4gYW5kIG5vIHRocmVhZHMgd2Fp
dGluZworLy8gPj0zOiBsb2NrIHRha2VuIGFuZCB0aHJlYWRzIHdhaXRpbmcKKy8vCisvLyBJdCBt
YXkgYmUgcG9zc2libGUgdG8gZGVzaWduIGFuIGV2ZW4gYmV0dGVyIGxvY2sgaW1wbGVtZW50YXRp
b24gYmFzZWQgb24gYXRvbWljIGluY3JlbWVudHMgcmF0aGVyCisvLyB0aGFuIGF0b21pYyArPTIv
LT0yLgorLy8KKy8vIE5vdGUgdGhhdCBiZWNhdXNlIFBhcmtpbmdMb3QgdXNlcyB0aGlzIGxvY2sg
aW50ZXJuYWxseSwgd2Ugd291bGQgcHJvYmFibHkgcmVuYW1lIHRoaXMgbG9jaworLy8gaW1wbGVt
ZW50YXRpb24gdG8gc29tZXRoaW5nIGxpa2UgQm9vdHN0cmFwTG9jayBvciBldmVuIG1ha2UgaXQg
cGFydCBvZiBhbiBhbm9ueW1vdXMgbmFtZXNwYWNlCisvLyBpbnNpZGUgUGFya2luZ0xvdC4KKy8v
CisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODQxCisKIC8v
IFRoaXMgaXMgYSBzdHJ1Y3Qgd2l0aG91dCBhIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3Igc28g
dGhhdCBpdCBjYW4gYmUgc3RhdGljYWxseSBpbml0aWFsaXplZC4KIC8vIFVzZSBMb2NrIGluIGlu
c3RhbmNlIHZhcmlhYmxlcy4KIHN0cnVjdCBMb2NrQmFzZSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXJraW5n
TG90LmgiCisKKyNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiTG9jay5oIgor
I2luY2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMu
aCIKKyNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgi
CisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgV1RGIHsK
KworbmFtZXNwYWNlIHsKKworYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK3N0cnVjdCBUaHJlYWRE
YXRhIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICAKKyAgICBU
aHJlYWREYXRhKCk7CisgICAgflRocmVhZERhdGEoKTsKKworICAgIFRocmVhZElkZW50aWZpZXIg
dGhyZWFkSWRlbnRpZmllcjsKKyAgICAKKyAgICBib29sIHNob3VsZFBhcmsgeyBmYWxzZSB9Owor
ICAgIHN0ZDo6bXV0ZXggcGFya2luZ0xvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUg
cGFya2luZ0NvbmRpdGlvbjsKKworICAgIGNvbnN0IHZvaWQqIGFkZHJlc3M7CisgICAgVGhyZWFk
RGF0YSogbmV4dEluUXVldWUgeyBudWxscHRyIH07Cit9OworCitlbnVtIGNsYXNzIERlcXVldWVS
ZXN1bHQgeworICAgIElnbm9yZSwKKyAgICBSZW1vdmVBbmRDb250aW51ZSwKKyAgICBSZW1vdmVB
bmRTdG9wCit9OworCitzdHJ1Y3QgQnVja2V0IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICB2b2lkIGVucXVldWUoVGhyZWFkRGF0YSogZGF0YSkKKyAgICB7Cisg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50
VGhyZWFkKCksICI6IGVucXVldWVpbmcgIiwgUmF3UG9pbnRlcihkYXRhKSwgIiB3aXRoIGFkZHJl
c3MgPSAiLCBSYXdQb2ludGVyKGRhdGEtPmFkZHJlc3MpLCAiIG9udG8gIiwgUmF3UG9pbnRlcih0
aGlzKSwgIlxuIikpOworICAgICAgICBBU1NFUlQoZGF0YS0+YWRkcmVzcyk7CisgICAgICAgIEFT
U0VSVCghZGF0YS0+bmV4dEluUXVldWUpOworICAgICAgICAKKyAgICAgICAgaWYgKHF1ZXVlVGFp
bCkgeworICAgICAgICAgICAgcXVldWVUYWlsLT5uZXh0SW5RdWV1ZSA9IGRhdGE7CisgICAgICAg
ICAgICBxdWV1ZVRhaWwgPSBkYXRhOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgcXVldWVIZWFkID0gZGF0YTsKKyAgICAgICAgcXVldWVUYWlsID0gZGF0YTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZ2VuZXJpY0Rl
cXVldWUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlmICh2ZXJib3Nl
KQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRlcXVl
dWVpbmcgZnJvbSBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFxdWV1ZUhlYWQpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbXB0
eS5cbiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRo
aXMgbG9vcCBpcyBhIHZlcnkgY2xldmVyIGFib21pbmF0aW9uLiBUaGUgaW5kdWN0aW9uIHZhcmlh
YmxlcyBhcmUgdGhlIHBvaW50ZXIgdG8gdGhlCisgICAgICAgIC8vIHBvaW50ZXIgdG8gdGhlIGN1
cnJlbnQgbm9kZSwgYW5kIHRoZSBwb2ludGVyIHRvIHRoZSBwcmV2aW91cyBub2RlLiBUaGlzIGdp
dmVzIHVzIGV2ZXJ5dGhpbmcKKyAgICAgICAgLy8gd2UgbmVlZCB0byBib3RoIHByb2NlZWQgZm9y
d2FyZCB0byB0aGUgbmV4dCBub2RlLCBhbmQgdG8gcmVtb3ZlIG5vZGVzIHdoaWxlIG1haW50YWlu
aW5nIHRoZQorICAgICAgICAvLyBxdWV1ZUhlYWQvcXVldWVUYWlsIGFuZCBhbGwgb2YgdGhlIG5l
eHRJblF1ZXVlIGxpbmtzLiBGb3IgZXhhbXBsZSwgd2hlbiB3ZSBhcmUgYXQgdGhlIGhlYWQKKyAg
ICAgICAgLy8gZWxlbWVudCwgdGhlbiByZW1vdmFsIG1lYW5zIHJld2lyaW5nIHF1ZXVlSGVhZCwg
YW5kIGlmIGl0IHdhcyBhbHNvIGVxdWFsIHRvIHF1ZXVlVGFpbCwgdGhlbgorICAgICAgICAvLyB3
ZSdkIHdhbnQgcXVldWVUYWlsIHRvIGJlIHNldCB0byBudWxscHRyLiBUaGlzIHdvcmtzIGJlY2F1
c2U6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBjdXJyZW50UHRyID09ICZxdWV1ZUhlYWQK
KyAgICAgICAgLy8gICAgIHByZXZpb3VzID09IG51bGxwdHIKKyAgICAgICAgLy8KKyAgICAgICAg
Ly8gV2UgcmVtb3ZlIGJ5IHNldHRpbmcgKmN1cnJlbnRQdHIgPSAoKmN1cnJlbnRQdHIpLT5uZXh0
SW5RdWV1ZSwgaS5lLiBjaGFuZ2luZyB0aGUgcG9pbnRlcgorICAgICAgICAvLyB0aGF0IHVzZWQg
dG8gcG9pbnQgdG8gdGhpcyBub2RlIHRvIGluc3RlYWQgcG9pbnQgdG8gdGhpcyBub2RlJ3Mgc3Vj
Y2Vzc29yLiBBbm90aGVyIGV4YW1wbGU6CisgICAgICAgIC8vIGlmIHdlIHdlcmUgYXQgdGhlIHNl
Y29uZCBub2RlIGluIHRoZSBxdWV1ZSwgdGhlbiB3ZSdkIGhhdmU6CisgICAgICAgIC8vCisgICAg
ICAgIC8vICAgICBjdXJyZW50UHRyID09ICZxdWV1ZUhlYWQtPm5leHRJblF1ZXVlCisgICAgICAg
IC8vICAgICBwcmV2aW91cyA9PSBxdWV1ZUhlYWQKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSWYg
dGhpcyBub2RlIGlzIG5vdCBlcXVhbCB0byBxdWV1ZVRhaWwsIHRoZW4gcmVtb3ZpbmcgaXQgc2lt
cGx5IG1lYW5zIG1ha2luZworICAgICAgICAvLyBxdWV1ZUhlYWQtPm5leHRJblF1ZXVlIHBvaW50
IHRvIHF1ZXVlSGVhZC0+bmV4dEluUXVldWUtPm5leHRJblF1ZXVlICh3aGljaCB0aGUgYWxnb3Jp
dGhtCisgICAgICAgIC8vIGFjaGlldmVzIGJ5IG11dGF0aW5nICpjdXJyZW50UHRyKS4gSWYgdGhp
cyBub2RlIGlzIGVxdWFsIHRvIHF1ZXVlVGFpbCwgdGhlbiB3ZSB3YW50IHRvIHNldAorICAgICAg
ICAvLyBxdWV1ZVRhaWwgdG8gcHJldmlvdXMsIHdoaWNoIGluIHRoaXMgY2FzZSBpcyBxdWV1ZUhl
YWQgLSB0aHVzIG1ha2luZyB0aGUgcXVldWUgbG9vayBsaWtlIGEKKyAgICAgICAgLy8gcHJvcGVy
IG9uZS1lbGVtZW50IHF1ZXVlIHdpdGggcXVldWVIZWFkID09IHF1ZXVlVGFpbC4KKyAgICAgICAg
Ym9vbCBzaG91bGRDb250aW51ZSA9IHRydWU7CisgICAgICAgIFRocmVhZERhdGEqKiBjdXJyZW50
UHRyID0gJnF1ZXVlSGVhZDsKKyAgICAgICAgVGhyZWFkRGF0YSogcHJldmlvdXMgPSBudWxscHRy
OworICAgICAgICB3aGlsZSAoc2hvdWxkQ29udGludWUpIHsKKyAgICAgICAgICAgIFRocmVhZERh
dGEqIGN1cnJlbnQgPSAqY3VycmVudFB0cjsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBnb3QgdGhy
ZWFkICIsIFJhd1BvaW50ZXIoY3VycmVudCksICJcbiIpKTsKKyAgICAgICAgICAgIGlmICghY3Vy
cmVudCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIERlcXVldWVSZXN1bHQg
cmVzdWx0ID0gZnVuY3RvcihjdXJyZW50KTsKKyAgICAgICAgICAgIHN3aXRjaCAocmVzdWx0KSB7
CisgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6Oklnbm9yZToKKyAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJy
ZW50VGhyZWFkKCksICI6IGN1cnJlbnRQdHIgPSAiLCBSYXdQb2ludGVyKGN1cnJlbnRQdHIpLCAi
LCAqY3VycmVudFB0ciA9ICIsIFJhd1BvaW50ZXIoKmN1cnJlbnRQdHIpLCAiXG4iKSk7CisgICAg
ICAgICAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50OworICAgICAgICAgICAgICAgIGN1cnJlbnRQ
dHIgPSAmKCpjdXJyZW50UHRyKS0+bmV4dEluUXVldWU7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZENvbnRpbnVlOgorICAg
ICAgICAgICAgY2FzZSBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOgorICAgICAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogZGVxdWV1ZWluZyAiLCBSYXdQb2ludGVyKGN1cnJlbnQpLCAiIGZy
b20gIiwgUmF3UG9pbnRlcih0aGlzKSwgIlxuIikpOworICAgICAgICAgICAgICAgIGlmIChjdXJy
ZW50ID09IHF1ZXVlVGFpbCkKKyAgICAgICAgICAgICAgICAgICAgcXVldWVUYWlsID0gcHJldmlv
dXM7CisgICAgICAgICAgICAgICAgKmN1cnJlbnRQdHIgPSBjdXJyZW50LT5uZXh0SW5RdWV1ZTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50LT5uZXh0SW5RdWV1ZSA9IG51bGxwdHI7CisgICAgICAg
ICAgICAgICAgaWYgKHJlc3VsdCA9PSBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wKQorICAg
ICAgICAgICAgICAgICAgICBzaG91bGRDb250aW51ZSA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUKCEhcXVl
dWVIZWFkID09ICEhcXVldWVUYWlsKTsKKyAgICB9CisgICAgCisgICAgVGhyZWFkRGF0YSogZGVx
dWV1ZSgpCisgICAgeworICAgICAgICBUaHJlYWREYXRhKiByZXN1bHQgPSBudWxscHRyOworICAg
ICAgICBnZW5lcmljRGVxdWV1ZSgKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkRGF0YSogZWxlbWVu
dCkgLT4gRGVxdWV1ZVJlc3VsdCB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcDsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIFRocmVh
ZERhdGEqIHF1ZXVlSGVhZCB7IG51bGxwdHIgfTsKKyAgICBUaHJlYWREYXRhKiBxdWV1ZVRhaWwg
eyBudWxscHRyIH07CisKKyAgICAvLyBUaGlzIGxvY2sgcHJvdGVjdHMgdGhlIGVudGlyZSBidWNr
ZXQuIFRob3Ugc2hhbGwgbm90IG1ha2UgY2hhbmdlcyB0byBCdWNrZXQgd2l0aG91dCBob2xkaW5n
CisgICAgLy8gdGhpcyBsb2NrLgorICAgIExvY2sgbG9jazsKKworICAgIC8vIFB1dCBzb21lIGRp
c3RhbmUgYmV0d2VlbiBidWNrZXRzIGluIG1lbW9yeS4gVGhpcyBpcyBvbmUgb2Ygc2V2ZXJhbCBt
aXRpZ2F0aW9ucyBhZ2FpbnN0IGZhbHNlCisgICAgLy8gc2hhcmluZy4KKyAgICBjaGFyIHBhZGRp
bmdbNjRdOworfTsKKworc3RydWN0IEhhc2h0YWJsZSB7CisgICAgdW5zaWduZWQgc2l6ZTsKKyAg
ICBBdG9taWM8QnVja2V0Kj4gZGF0YVsxXTsKKworICAgIHN0YXRpYyBIYXNodGFibGUqIGNyZWF0
ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHNpemUgPj0gMSk7CisgICAg
ICAgIAorICAgICAgICBIYXNodGFibGUqIHJlc3VsdCA9IHN0YXRpY19jYXN0PEhhc2h0YWJsZSo+
KAorICAgICAgICAgICAgZmFzdFplcm9lZE1hbGxvYyhzaXplb2YoSGFzaHRhYmxlKSArIHNpemVv
ZihBdG9taWM8QnVja2V0Kj4pICogKHNpemUgLSAxKSkpOworICAgICAgICByZXN1bHQtPnNpemUg
PSBzaXplOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGRlc3Ryb3koSGFzaHRhYmxlKiBoYXNodGFibGUpCisgICAgeworICAgICAgICBmYXN0RnJlZSho
YXNodGFibGUpOworICAgIH0KK307CisKK1RocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KiB0aHJl
YWREYXRhOworQXRvbWljPEhhc2h0YWJsZSo+IGhhc2h0YWJsZTsKK0F0b21pYzx1bnNpZ25lZD4g
bnVtVGhyZWFkczsKKworLy8gV2l0aCA2NCBieXRlcyBvZiBwYWRkaW5nIHBlciBidWNrZXQsIGFz
c3VtaW5nIGEgaGFzaHRhYmxlIGlzIGZ1bGx5IHBvcHVsYXRlZCB3aXRoIGJ1Y2tldHMsIHRoZQor
Ly8gbWVtb3J5IHVzYWdlIHBlciB0aHJlYWQgd2lsbCBzdGlsbCBiZSBsZXNzIHRoYW4gMUtCLgor
Y29uc3QgdW5zaWduZWQgbWF4TG9hZEZhY3RvciA9IDM7CisKK2NvbnN0IHVuc2lnbmVkIGdyb3d0
aEZhY3RvciA9IDI7CisKK3Vuc2lnbmVkIGhhc2hBZGRyZXNzKGNvbnN0IHZvaWQqIGFkZHJlc3Mp
Cit7CisgICAgcmV0dXJuIFdURjo6UHRySGFzaDxjb25zdCB2b2lkKj46Omhhc2goYWRkcmVzcyk7
Cit9CisKKy8vIExvY2tzIHRoZSBoYXNodGFibGUuIFRoaXMgcmVsb29wcyBpbiBjYXNlIG9mIHJl
aGFzaGluZywgc28gdGhlIGN1cnJlbnQgaGFzaHRhYmxlIG1heSBiZSBkaWZmZXJlbnQKKy8vIGFm
dGVyIHRoaXMgcmV0dXJucyB0aGFuIHdoZW4geW91IGNhbGxlZCBpdC4gR3VhcmFudGVlcyB0aGF0
IHRoZXJlIGlzIGEgaGFzaHRhYmxlLiBUaGlzIGlzIHByZXR0eQorLy8gc2xvdyBhbmQgbm90IHNj
YWxhYmxlLCBzbyBpdCdzIG9ubHkgdXNlZCBkdXJpbmcgdGhyZWFkIGNyZWF0aW9uIGFuZCBmb3Ig
ZGVidWdnaW5nL3Rlc3RpbmcuCitWZWN0b3I8QnVja2V0Kj4gbG9ja0hhc2h0YWJsZSgpCit7Cisg
ICAgZm9yICg7OykgeworICAgICAgICBIYXNodGFibGUqIGN1cnJlbnRIYXNodGFibGU7CisKKyAg
ICAgICAgY3VycmVudEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIGlmICgh
Y3VycmVudEhhc2h0YWJsZSkgeworICAgICAgICAgICAgLy8gVHJ5IHRvIGJlIHRoZSBmaXJzdCB0
byBjcmVhdGUgdGhlIGhhc2h0YWJsZS4KKyAgICAgICAgICAgIGN1cnJlbnRIYXNodGFibGUgPSBI
YXNodGFibGU6OmNyZWF0ZShtYXhMb2FkRmFjdG9yKTsKKyAgICAgICAgICAgIGlmICghaGFzaHRh
YmxlLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgY3VycmVudEhhc2h0YWJsZSkpIHsKKyAg
ICAgICAgICAgICAgICBIYXNodGFibGU6OmRlc3Ryb3koY3VycmVudEhhc2h0YWJsZSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwg
IjogY3JlYXRlZCBpbml0aWFsIGhhc2h0YWJsZSAiLCBSYXdQb2ludGVyKGN1cnJlbnRIYXNodGFi
bGUpLCAiXG4iKSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgZmluZCBhbGwgb2YgdGhl
IGJ1Y2tldHMuIFRoaXMgbWFrZXMgc3VyZSB0aGF0IHRoZSBoYXNodGFibGUgaXMgZnVsbCBvZiBi
dWNrZXRzIHNvIHRoYXQKKyAgICAgICAgLy8gd2UgY2FuIGxvY2sgYWxsIG9mIHRoZSBidWNrZXRz
LCBub3QganVzdCB0aGUgb25lcyB0aGF0IGFyZSBtYXRlcmlhbGl6ZWQuCisgICAgICAgIFZlY3Rv
cjxCdWNrZXQqPiBidWNrZXRzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50SGFz
aHRhYmxlLT5zaXplOyBpLS07KSB7CisgICAgICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tl
dFBvaW50ZXIgPSBjdXJyZW50SGFzaHRhYmxlLT5kYXRhW2ldOworCisgICAgICAgICAgICBmb3Ig
KDs7KSB7CisgICAgICAgICAgICAgICAgQnVja2V0KiBidWNrZXQgPSBidWNrZXRQb2ludGVyLmxv
YWQoKTsKKworICAgICAgICAgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGJ1Y2tldCA9IG5ldyBCdWNrZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFidWNr
ZXRQb2ludGVyLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgYnVja2V0KSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIGJ1Y2tldDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgYnVja2V0cy5hcHBlbmQoYnVja2V0KTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdyBsb2NrIHRo
ZSBidWNrZXRzIGluIHRoZSByaWdodCBvcmRlci4KKyAgICAgICAgc3RkOjpzb3J0KGJ1Y2tldHMu
YmVnaW4oKSwgYnVja2V0cy5lbmQoKSk7CisgICAgICAgIGZvciAoQnVja2V0KiBidWNrZXQgOiBi
dWNrZXRzKQorICAgICAgICAgICAgYnVja2V0LT5sb2NrLmxvY2soKTsKKworICAgICAgICAvLyBJ
ZiB0aGUgaGFzaHRhYmxlIGRpZG4ndCBjaGFuZ2UgKHdhc24ndCByZWhhc2hlZCkgd2hpbGUgd2Ug
d2VyZSBsb2NraW5nIGl0LCB0aGVuIHdlIG93biBpdAorICAgICAgICAvLyBub3cuCisgICAgICAg
IGlmIChoYXNodGFibGUubG9hZCgpID09IGN1cnJlbnRIYXNodGFibGUpCisgICAgICAgICAgICBy
ZXR1cm4gYnVja2V0czsKKworICAgICAgICAvLyBUaGUgaGFzaHRhYmxlIHJlaGFzaGVkLiBVbmxv
Y2sgZXZlcnl0aGluZyBhbmQgdHJ5IGFnYWluLgorICAgICAgICBmb3IgKEJ1Y2tldCogYnVja2V0
IDogYnVja2V0cykKKyAgICAgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICB9Cit9
CisKK3ZvaWQgdW5sb2NrSGFzaHRhYmxlKGNvbnN0IFZlY3RvcjxCdWNrZXQqPiYgYnVja2V0cykK
K3sKKyAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDogYnVja2V0cykKKyAgICAgICAgYnVja2V0LT5s
b2NrLnVubG9jaygpOworfQorCisvLyBSZWhhc2ggdGhlIGhhc2h0YWJsZSB0byBoYW5kbGUgbnVt
VGhyZWFkcyB0aHJlYWRzLgordm9pZCBlbnN1cmVIYXNodGFibGVTaXplKHVuc2lnbmVkIG51bVRo
cmVhZHMpCit7CisgICAgLy8gV2UgdHJ5IHRvIGVuc3VyZSB0aGF0IHRoZSBzaXplIG9mIHRoZSBo
YXNodGFibGUgdXNlZCBmb3IgdGhyZWFkIHF1ZXVlcyBpcyBhbHdheXMgbGFyZ2UgZW5vdWdoCisg
ICAgLy8gdG8gYXZvaWQgY29sbGlzaW9ucy4gU28sIHNpbmNlIHdlIHN0YXJ0ZWQgYSBuZXcgdGhy
ZWFkLCB3ZSBtYXkgbmVlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUKKyAgICAvLyBoYXNo
dGFibGUuIFRoaXMgZG9lcyBqdXN0IHRoYXQuIE5vdGUgdGhhdCB3ZSBuZXZlciBmcmVlIHRoZSBv
bGQgc3BpbmUsIHNpbmNlIHdlIG5ldmVyIGxvY2sKKyAgICAvLyBhcm91bmQgc3BpbmUgYWNjZXNz
ZXMgKGkuZS4gdGhlICJoYXNodGFibGUiIGdsb2JhbCB2YXJpYWJsZSkuCisKKyAgICAvLyBGaXJz
dCBkbyBhIGZhc3QgY2hlY2sgdG8gc2VlIGlmIHJlaGFzaGluZyBpcyBuZWVkZWQuCisgICAgSGFz
aHRhYmxlKiBvbGRIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOworICAgIGlmIChvbGRIYXNo
dGFibGUgJiYgc3RhdGljX2Nhc3Q8ZG91YmxlPihvbGRIYXNodGFibGUtPnNpemUpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihudW1UaHJlYWRzKSA+PSBtYXhMb2FkRmFjdG9yKSB7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IG5vIG5lZWQgdG8gcmVoYXNoIGJlY2F1c2UgIiwgb2xkSGFzaHRhYmxlLT5zaXplLCAiIC8g
IiwgbnVtVGhyZWFkcywgIiA+PSAiLCBtYXhMb2FkRmFjdG9yLCAiXG4iKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICAvLyBTZWVtcyBsaWtlIHdlICptaWdodCogaGF2ZSB0byByZWhh
c2gsIHNvIGxvY2sgdGhlIGhhc2h0YWJsZSBhbmQgdHJ5IGFnYWluLgorICAgIFZlY3RvcjxCdWNr
ZXQqPiBidWNrZXRzVG9VbmxvY2sgPSBsb2NrSGFzaHRhYmxlKCk7CisKKyAgICAvLyBDaGVjayBh
Z2Fpbiwgc2luY2UgdGhlIGhhc2h0YWJsZSBjb3VsZCBoYXZlIHJlaGFzaGVkIHdoaWxlIHdlIHdl
cmUgbG9ja2luZyBpdC4gQWxzbywKKyAgICAvLyBsb2NrSGFzaHRhYmxlKCkgY3JlYXRlcyBhbiBp
bml0aWFsIGhhc2h0YWJsZSBmb3IgdXMuCisgICAgb2xkSGFzaHRhYmxlID0gaGFzaHRhYmxlLmxv
YWQoKTsKKyAgICBpZiAob2xkSGFzaHRhYmxlICYmIHN0YXRpY19jYXN0PGRvdWJsZT4ob2xkSGFz
aHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtVGhyZWFkcykgPj0gbWF4TG9h
ZEZhY3RvcikgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBhZnRlciBsb2NraW5nLCBubyBuZWVkIHRvIHJlaGFz
aCBiZWNhdXNlICIsIG9sZEhhc2h0YWJsZS0+c2l6ZSwgIiAvICIsIG51bVRocmVhZHMsICIgPj0g
IiwgbWF4TG9hZEZhY3RvciwgIlxuIikpOworICAgICAgICB1bmxvY2tIYXNodGFibGUoYnVja2V0
c1RvVW5sb2NrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFZlY3RvcjxCdWNrZXQq
PiByZXVzYWJsZUJ1Y2tldHMgPSBidWNrZXRzVG9VbmxvY2s7CisKKyAgICAvLyBPSywgbm93IHdl
IHJlc2l6ZS4gRmlyc3Qgd2UgZ2F0aGVyIGFsbCB0aHJlYWQgZGF0YXMgZnJvbSB0aGUgb2xkIGhh
c2h0YWJsZS4gVGhlc2UgdGhyZWFkIGRhdGFzCisgICAgLy8gYXJlIHBsYWNlZCBpbnRvIHRoZSB2
ZWN0b3IgaW4gcXVldWUgb3JkZXIuCisgICAgVmVjdG9yPFRocmVhZERhdGEqPiB0aHJlYWREYXRh
czsKKyAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDogcmV1c2FibGVCdWNrZXRzKSB7CisgICAgICAg
IHdoaWxlIChUaHJlYWREYXRhKiB0aHJlYWREYXRhID0gYnVja2V0LT5kZXF1ZXVlKCkpCisgICAg
ICAgICAgICB0aHJlYWREYXRhcy5hcHBlbmQodGhyZWFkRGF0YSk7CisgICAgfQorCisgICAgdW5z
aWduZWQgbmV3U2l6ZSA9IG51bVRocmVhZHMgKiBncm93dGhGYWN0b3IgKiBtYXhMb2FkRmFjdG9y
OworICAgIFJFTEVBU0VfQVNTRVJUKG5ld1NpemUgPiBvbGRIYXNodGFibGUtPnNpemUpOworICAg
IAorICAgIEhhc2h0YWJsZSogbmV3SGFzaHRhYmxlID0gSGFzaHRhYmxlOjpjcmVhdGUobmV3U2l6
ZSk7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRo
cmVhZCgpLCAiOiBjcmVhdGVkIG5ldyBoYXNodGFibGU6ICIsIFJhd1BvaW50ZXIobmV3SGFzaHRh
YmxlKSwgIlxuIikpOworICAgIGZvciAoVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA6IHRocmVhZERh
dGFzKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IHJlaGFzaGluZyB0aHJlYWQgZGF0YSAiLCBSYXdQb2ludGVy
KHRocmVhZERhdGEpLCAiIHdpdGggYWRkcmVzcyA9ICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YS0+
YWRkcmVzcyksICJcbiIpKTsKKyAgICAgICAgdW5zaWduZWQgaGFzaCA9IGhhc2hBZGRyZXNzKHRo
cmVhZERhdGEtPmFkZHJlc3MpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGhhc2ggJSBuZXdI
YXNodGFibGUtPnNpemU7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGluZGV4ID0gIiwgaW5kZXgsICJcbiIpKTsK
KyAgICAgICAgQnVja2V0KiBidWNrZXQgPSBuZXdIYXNodGFibGUtPmRhdGFbaW5kZXhdLmxvYWQo
KTsKKyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAgICAgICAgIGlmIChyZXVzYWJsZUJ1Y2tl
dHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGJ1Y2tldCA9IG5ldyBCdWNrZXQoKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBidWNrZXQgPSByZXVzYWJsZUJ1Y2tldHMu
dGFrZUxhc3QoKTsKKyAgICAgICAgICAgIG5ld0hhc2h0YWJsZS0+ZGF0YVtpbmRleF0uc3RvcmUo
YnVja2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYnVja2V0LT5lbnF1ZXVlKHRo
cmVhZERhdGEpOworICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50IHRoZXJlIG1heSBi
ZSBzb21lIGJ1Y2tldHMgbGVmdCB1bnJldXNlZC4gVGhpcyBjb3VsZCBlYXNpbHkgaGFwcGVuIGlm
IHRoZQorICAgIC8vIG51bWJlciBvZiBlbnF1ZXVlZCB0aHJlYWRzIHJpZ2h0IG5vdyBpcyBsb3cg
YnV0IHRoZSBoaWdoIHdhdGVybWFyayBvZiB0aGUgbnVtYmVyIG9mIHRocmVhZHMKKyAgICAvLyBl
bnF1ZXVlZCB3YXMgaGlnaC4gV2UgcGxhY2UgdGhlc2UgYnVja2V0cyBpbnRvIHRoZSBoYXNodGFi
bGUgYmFzaWNhbGx5IGF0IHJhbmRvbSwganVzdCB0bworICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24n
dCBsZWFrIHRoZW0uCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG5ld0hhc2h0YWJsZS0+
c2l6ZSAmJiAhcmV1c2FibGVCdWNrZXRzLmlzRW1wdHkoKTsgKytpKSB7CisgICAgICAgIEF0b21p
YzxCdWNrZXQqPiYgYnVja2V0UHRyID0gbmV3SGFzaHRhYmxlLT5kYXRhW2ldOworICAgICAgICBp
ZiAoYnVja2V0UHRyLmxvYWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBidWNr
ZXRQdHIuc3RvcmUocmV1c2FibGVCdWNrZXRzLnRha2VMYXN0KCkpOworICAgIH0KKyAgICAKKyAg
ICAvLyBTaW5jZSB3ZSBpbmNyZWFzZWQgdGhlIHNpemUgb2YgdGhlIGhhc2h0YWJsZSwgd2Ugc2hv
dWxkIGhhdmUgZXhoYXVzdGVkIG91ciBwcmVhbGxvY2F0ZWQKKyAgICAvLyBidWNrZXRzIGJ5IG5v
dy4KKyAgICBBU1NFUlQocmV1c2FibGVCdWNrZXRzLmlzRW1wdHkoKSk7CisgICAgCisgICAgLy8g
T0ssIHJpZ2h0IG5vdyB0aGUgb2xkIGhhc2h0YWJsZSBpcyBsb2NrZWQgdXAgYW5kIHRoZSBuZXcg
aGFzaHRhYmxlIGlzIHJlYWR5IHRvIHJvY2sgYW5kCisgICAgLy8gcm9sbC4gQWZ0ZXIgd2UgaW5z
dGFsbCB0aGUgbmV3IGhhc2h0YWJsZSwgd2UgY2FuIHJlbGVhc2UgYWxsIGJ1Y2tldCBsb2Nrcy4K
KyAgICAKKyAgICBib29sIHJlc3VsdCA9IGhhc2h0YWJsZS5jb21wYXJlRXhjaGFuZ2VTdHJvbmco
b2xkSGFzaHRhYmxlLCBuZXdIYXNodGFibGUpOworICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7
CisKKyAgICB1bmxvY2tIYXNodGFibGUoYnVja2V0c1RvVW5sb2NrKTsKK30KKworVGhyZWFkRGF0
YTo6VGhyZWFkRGF0YSgpCisgICAgOiB0aHJlYWRJZGVudGlmaWVyKGN1cnJlbnRUaHJlYWQoKSkK
K3sKKyAgICB1bnNpZ25lZCBjdXJyZW50TnVtVGhyZWFkczsKKyAgICBmb3IgKDs7KSB7CisgICAg
ICAgIHVuc2lnbmVkIG9sZE51bVRocmVhZHMgPSBudW1UaHJlYWRzLmxvYWQoKTsKKyAgICAgICAg
Y3VycmVudE51bVRocmVhZHMgPSBvbGROdW1UaHJlYWRzICsgMTsKKyAgICAgICAgaWYgKG51bVRo
cmVhZHMuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGROdW1UaHJlYWRzLCBjdXJyZW50TnVtVGhyZWFk
cykpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBlbnN1cmVIYXNodGFibGVTaXpl
KGN1cnJlbnROdW1UaHJlYWRzKTsKK30KKworVGhyZWFkRGF0YTo6flRocmVhZERhdGEoKQorewor
ICAgIGZvciAoOzspIHsKKyAgICAgICAgdW5zaWduZWQgb2xkTnVtVGhyZWFkcyA9IG51bVRocmVh
ZHMubG9hZCgpOworICAgICAgICBpZiAobnVtVGhyZWFkcy5jb21wYXJlRXhjaGFuZ2VXZWFrKG9s
ZE51bVRocmVhZHMsIG9sZE51bVRocmVhZHMgLSAxKSkKKyAgICAgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworVGhyZWFkRGF0YSogbXlUaHJlYWREYXRhKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgaW5pdGlhbGl6ZU9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIGlu
aXRpYWxpemVPbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICB0aHJlYWREYXRhID0gbmV3
IFRocmVhZFNwZWNpZmljPFRocmVhZERhdGE+KCk7CisgICAgICAgIH0pOworCisgICAgcmV0dXJu
ICp0aHJlYWREYXRhOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorYm9vbCBlbnF1
ZXVlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAg
dW5zaWduZWQgaGFzaCA9IGhhc2hBZGRyZXNzKGFkZHJlc3MpOworCisgICAgZm9yICg7Oykgewor
ICAgICAgICBIYXNodGFibGUqIG15SGFzaHRhYmxlID0gaGFzaHRhYmxlLmxvYWQoKTsKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBoYXNoICUgbXlIYXNodGFibGUtPnNpemU7CisgICAgICAgIEF0
b21pYzxCdWNrZXQqPiYgYnVja2V0UG9pbnRlciA9IG15SGFzaHRhYmxlLT5kYXRhW2luZGV4XTsK
KyAgICAgICAgQnVja2V0KiBidWNrZXQ7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAg
IGJ1Y2tldCA9IGJ1Y2tldFBvaW50ZXIubG9hZCgpOworICAgICAgICAgICAgaWYgKCFidWNrZXQp
IHsKKyAgICAgICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7CisgICAgICAgICAgICAg
ICAgaWYgKCFidWNrZXRQb2ludGVyLmNvbXBhcmVFeGNoYW5nZVdlYWsobnVsbHB0ciwgYnVja2V0
KSkgeworICAgICAgICAgICAgICAgICAgICBkZWxldGUgYnVja2V0OworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
IGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nIG9udG8gYnVj
a2V0ICIsIFJhd1BvaW50ZXIoYnVja2V0KSwgIiB3aXRoIGluZGV4ICIsIGluZGV4LCAiIGZvciBh
ZGRyZXNzICIsIFJhd1BvaW50ZXIoYWRkcmVzcyksICIgd2l0aCBoYXNoICIsIGhhc2gsICJcbiIp
KTsKKyAgICAgICAgYnVja2V0LT5sb2NrLmxvY2soKTsKKworICAgICAgICAvLyBBdCB0aGlzIHBv
aW50IHRoZSBoYXNodGFibGUgY291bGQgaGF2ZSByZWhhc2hlZCB1bmRlciB1cy4KKyAgICAgICAg
aWYgKGhhc2h0YWJsZS5sb2FkKCkgIT0gbXlIYXNodGFibGUpIHsKKyAgICAgICAgICAgIGJ1Y2tl
dC0+bG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgVGhyZWFkRGF0YSogdGhyZWFkRGF0YSA9IGZ1bmN0b3IoKTsKKyAgICAgICAgYm9vbCBy
ZXN1bHQ7CisgICAgICAgIGlmICh0aHJlYWREYXRhKSB7CisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
cHJvY2VlZGluZyB0byBlbnF1ZXVlICIsIFJhd1BvaW50ZXIodGhyZWFkRGF0YSksICJcbiIpKTsK
KyAgICAgICAgICAgIGJ1Y2tldC0+ZW5xdWV1ZSh0aHJlYWREYXRhKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gZmFsc2U7
CisgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Citib29sIGRlcXVldWUoY29u
c3Qgdm9pZCogYWRkcmVzcywgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRlcXVl
dWVpbmcgYWRkcmVzcyAiLCBSYXdQb2ludGVyKGFkZHJlc3MpLCAiXG4iKSk7CisgICAgdW5zaWdu
ZWQgaGFzaCA9IGhhc2hBZGRyZXNzKGFkZHJlc3MpOworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogaGFzaCA9ICIsIGhhc2gsICJc
biIpKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRhYmxlKiBteUhhc2h0YWJsZSA9
IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIGlmICghbXlIYXNodGFibGUpIHsKKyAgICAgICAg
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiBubyBoYXNodGFibGUuXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgdW5zaWduZWQgaW5kZXggPSBoYXNoICUgbXlIYXNodGFi
bGUtPnNpemU7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0
cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGluZGV4ID0gIiwgaW5kZXgsICJcbiIpKTsKKyAgICAg
ICAgQnVja2V0KiBidWNrZXQgPSBteUhhc2h0YWJsZS0+ZGF0YVtpbmRleF0ubG9hZCgpOworICAg
ICAgICBpZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IG5vIGJ1Y2tldCBhdCAi
LCBSYXdQb2ludGVyKGJ1Y2tldCksICIuXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBsb2NraW5nIGJ1Y2tldCBhdCAiLCBSYXdQb2lu
dGVyKGJ1Y2tldCksICJcbiIpKTsKKyAgICAgICAgYnVja2V0LT5sb2NrLmxvY2soKTsKKyAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJl
YWQoKSwgIjogbG9ja2VkIGJ1Y2tldCBhdCAiLCBSYXdQb2ludGVyKGJ1Y2tldCksICJcbiIpKTsK
KworICAgICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBoYXNodGFibGUgY291bGQgaGF2ZSByZWhh
c2hlZCB1bmRlciB1cy4KKyAgICAgICAgaWYgKGhhc2h0YWJsZS5sb2FkKCkgIT0gbXlIYXNodGFi
bGUpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
dG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBoYXNodGFibGUgY2hhbmdlZC5cbiIpKTsKKyAg
ICAgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZm91bmQgYnVja2V0LlxuIikpOworICAgICAgICBi
dWNrZXQtPmdlbmVyaWNEZXF1ZXVlKGZ1bmN0b3IpOworICAgICAgICBib29sIHJlc3VsdCA9ICEh
YnVja2V0LT5xdWV1ZUhlYWQ7CisgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Citib29sIFBhcmtpbmdMb3Q6OnBhcmtDb25kaXRpb25hbGx5KGNvbnN0IHZvaWQqIGFkZHJlc3Ms
IHN0ZDo6ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0aW9uKQoreworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZy5cbiIp
KTsKKyAgICAKKyAgICBUaHJlYWREYXRhKiBtZSA9IG15VGhyZWFkRGF0YSgpOworCisgICAgQVNT
RVJUKCFtZS0+c2hvdWxkUGFyayk7CisgICAgCisgICAgYm9vbCByZXN1bHQgPSBlbnF1ZXVlKAor
ICAgICAgICBhZGRyZXNzLAorICAgICAgICBbJl0gKCkgLT4gVGhyZWFkRGF0YSogeworICAgICAg
ICAgICAgaWYgKCF2YWxpZGF0aW9uKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAgICAgICAgIG1lLT5hZGRyZXNzID0gYWRkcmVzczsKKyAgICAgICAgICAgIG1lLT5z
aG91bGRQYXJrID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBtZTsKKyAgICAgICAgfSk7CisK
KyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBwYXJraW5n
IHNlbGY6ICIsIFJhd1BvaW50ZXIobWUpLCAiXG4iKSk7CisgICAgeworICAgICAgICBzdGQ6OnVu
aXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihtZS0+cGFya2luZ0xvY2spOworICAgICAgICB3
aGlsZSAobWUtPnNob3VsZFBhcmspCisgICAgICAgICAgICBtZS0+cGFya2luZ0NvbmRpdGlvbi53
YWl0KGxvY2tlcik7CisKKyAgICAgICAgbWUtPmFkZHJlc3MgPSBudWxscHRyOworICAgIH0KKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IHVucGFya2VkIHNlbGY6ICIsIFJhd1BvaW50ZXIobWUpLCAiXG4iKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgUGFya2luZ0xvdDo6dW5wYXJrT25lKGNvbnN0IHZvaWQqIGFkZHJl
c3MpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVu
dFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgb25lLlxuIikpOworCisgICAgVGhyZWFkRGF0YSogdGhy
ZWFkRGF0YSA9IG51bGxwdHI7CisgICAgYm9vbCByZXN1bHQgPSBkZXF1ZXVlKAorICAgICAgICBh
ZGRyZXNzLAorICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQpIHsKKyAgICAgICAgICAg
IGlmIChlbGVtZW50LT5hZGRyZXNzICE9IGFkZHJlc3MpCisgICAgICAgICAgICAgICAgcmV0dXJu
IERlcXVldWVSZXN1bHQ6Oklnbm9yZTsKKyAgICAgICAgICAgIHRocmVhZERhdGEgPSBlbGVtZW50
OworICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A7CisgICAg
ICAgIH0pOworCisgICAgaWYgKCF0aHJlYWREYXRhKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBBU1NFUlQodGhyZWFkRGF0YS0+c2hvdWxkUGFyayk7CisgICAgCisgICAgeworICAgICAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcih0aHJlYWREYXRhLT5wYXJraW5n
TG9jayk7CisgICAgICAgIHRocmVhZERhdGEtPnNob3VsZFBhcmsgPSBmYWxzZTsKKyAgICAgICAg
dGhyZWFkRGF0YS0+cGFya2luZ0NvbmRpdGlvbi5ub3RpZnlfYWxsKCk7CisgICAgfQorCisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQYXJraW5nTG90Ojp1bnBhcmtBbGwoY29uc3Qgdm9p
ZCogYWRkcmVzcykKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmlu
ZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyBhbGwgZnJvbSAiLCBSYXdQb2ludGVyKGFk
ZHJlc3MpLCAiLlxuIikpOworICAgIAorICAgIFZlY3RvcjxUaHJlYWREYXRhKiwgOD4gdGhyZWFk
RGF0YXM7CisgICAgZGVxdWV1ZSgKKyAgICAgICAgYWRkcmVzcywKKyAgICAgICAgWyZdIChUaHJl
YWREYXRhKiBlbGVtZW50KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogT2JzZXJ2aW5nIGVsZW1l
bnQgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihlbGVtZW50LT5hZGRyZXNzKSwgIlxuIikp
OworICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmFkZHJlc3MgIT0gYWRkcmVzcykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gRGVxdWV1ZVJlc3VsdDo6SWdub3JlOworICAgICAgICAgICAgdGhyZWFk
RGF0YXMuYXBwZW5kKGVsZW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1bHQ6
OlJlbW92ZUFuZENvbnRpbnVlOworICAgICAgICB9KTsKKworICAgIGZvciAoVGhyZWFkRGF0YSog
dGhyZWFkRGF0YSA6IHRocmVhZERhdGFzKSB7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHVucGFya2luZyAiLCBS
YXdQb2ludGVyKHRocmVhZERhdGEpLCAiIHdpdGggYWRkcmVzcyAiLCBSYXdQb2ludGVyKHRocmVh
ZERhdGEtPmFkZHJlc3MpLCAiXG4iKSk7CisgICAgICAgIEFTU0VSVCh0aHJlYWREYXRhLT5zaG91
bGRQYXJrKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIodGhy
ZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICB0aHJlYWREYXRhLT5zaG91bGRQYXJrID0g
ZmFsc2U7CisgICAgICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRpb24ubm90aWZ5X2FsbCgp
OworICAgIH0KKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1
cnJlbnRUaHJlYWQoKSwgIjogZG9uZSB1bnBhcmtpbmcuXG4iKSk7Cit9CisKK3ZvaWQgUGFya2lu
Z0xvdDo6Zm9yRWFjaChzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qg
dm9pZCopPiBjYWxsYmFjaykKK3sKKyAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0c1RvVW5sb2Nr
ID0gbG9ja0hhc2h0YWJsZSgpOworCisgICAgSGFzaHRhYmxlKiBjdXJyZW50SGFzaHRhYmxlID0g
aGFzaHRhYmxlLmxvYWQoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBjdXJyZW50SGFzaHRhYmxl
LT5zaXplOyBpLS07KSB7CisgICAgICAgIEJ1Y2tldCogYnVja2V0ID0gY3VycmVudEhhc2h0YWJs
ZS0+ZGF0YVtpXS5sb2FkKCk7CisgICAgICAgIGlmICghYnVja2V0KQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIGZvciAoVGhyZWFkRGF0YSogY3VycmVudFRocmVhZERhdGEgPSBidWNr
ZXQtPnF1ZXVlSGVhZDsgY3VycmVudFRocmVhZERhdGE7IGN1cnJlbnRUaHJlYWREYXRhID0gY3Vy
cmVudFRocmVhZERhdGEtPm5leHRJblF1ZXVlKQorICAgICAgICAgICAgY2FsbGJhY2soY3VycmVu
dFRocmVhZERhdGEtPnRocmVhZElkZW50aWZpZXIsIGN1cnJlbnRUaHJlYWREYXRhLT5hZGRyZXNz
KTsKKyAgICB9CisgICAgCisgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBXVEZfUGFya2luZ0xvdF9oCisjZGVmaW5lIFdURl9QYXJraW5nTG90X2gKKworI2lu
Y2x1ZGUgPGZ1bmN0aW9uYWw+CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFBhcmtpbmdM
b3QgeworICAgIFBhcmtpbmdMb3QoKSA9IGRlbGV0ZTsKKyAgICBQYXJraW5nTG90KGNvbnN0IFBh
cmtpbmdMb3QmKSA9IGRlbGV0ZTsKKworcHVibGljOgorICAgIC8vIFBhcmtzIHRoZSB0aHJlYWQg
aW4gYSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5v
dCBiZSBudWxsLiBUaGUKKyAgICAvLyBwYXJraW5nIG9ubHkgc3VjY2VlZHMgaWYgdGhlIHZhbGlk
YXRpb24gZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoaWxlIHRoZSBxdWV1ZSBsb2NrIGlzIGhlbGQu
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSB0aHJlYWQgYWN0dWFsbHkgc2xlcHQsIG9yIGZh
bHNlIGlmIGl0IHJldHVybmVkIHF1aWNrbHkgYmVjYXVzZSBvZgorICAgIC8vIHZhbGlkYXRpb24g
ZmFpbHVyZS4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgcGFya0NvbmRpdGlv
bmFsbHkoY29uc3Qgdm9pZCogYWRkcmVzcywgc3RkOjpmdW5jdGlvbjxib29sKCk+IHZhbGlkYXRp
b24pOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4KKyAgICBzdGF0aWMg
Ym9vbCBjb21wYXJlQW5kUGFyayhjb25zdCBBdG9taWM8VD4qIGFkZHJlc3MsIFUgZXhwZWN0ZWQp
CisgICAgeworICAgICAgICByZXR1cm4gcGFya0NvbmRpdGlvbmFsbHkoCisgICAgICAgICAgICBh
ZGRyZXNzLAorICAgICAgICAgICAgW2FkZHJlc3MsIGV4cGVjdGVkXSAoKSAtPiBib29sIHsKKyAg
ICAgICAgICAgICAgICBVIHZhbHVlID0gYWRkcmVzcy0+bG9hZCgpOworICAgICAgICAgICAgICAg
IHJldHVybiB2YWx1ZSA9PSBleHBlY3RlZDsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAg
IC8vIFVucGFya3Mgb25lIHRocmVhZCBmcm9tIHRoZSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggdGhl
IGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLgorICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGVyZSBtYXkgc3RpbGwgYmUgb3RoZXIgdGhyZWFkcyBvbiB0aGF0IHF1ZXVlLCBvciBm
YWxzZSBpZiB0aGVyZSBkZWZpbml0ZWx5CisgICAgLy8gYXJlIG5vIG1vcmUgdGhyZWFkcyBvbiB0
aGUgcXVldWUuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBib29sIHVucGFya09uZShj
b25zdCB2b2lkKiBhZGRyZXNzKTsKKworICAgIC8vIFVucGFya3MgZXZlcnkgdGhyZWFkIGZyb20g
dGhlIHF1ZXVlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gYWRkcmVzcywgd2hpY2ggY2Fubm90
IGJlIG51bGwuCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHVucGFya0FsbChj
b25zdCB2b2lkKiBhZGRyZXNzKTsKKworICAgIC8vIExvY2tzIHRoZSBwYXJraW5nIGxvdCBhbmQg
d2Fsa3MgYWxsIG9mIHRoZSBwYXJrZWQgdGhyZWFkcyBhbmQgdGhlIGFkZHJlc3NlcyB0aGV5IGFy
ZSB3YWl0aW5nCisgICAgLy8gb24uIFRocmVhZHMgdGhhdCBhcmUgb24gdGhlIHNhbWUgcXVldWUg
YXJlIGd1YXJhbnRlZWQgdG8gYmUgd2Fsa2VkIGZyb20gZmlyc3QgdG8gbGFzdCwgYnV0IHRoZQor
ICAgIC8vIHF1ZXVlcyBtYXkgYmUgcmFuZG9tbHkgaW50ZXJsZWF2ZWQuIEZvciBleGFtcGxlLCBp
ZiB0aGUgcXVldWUgZm9yIGFkZHJlc3MgQTEgaGFzIFQxIGFuZCBUMiBhbmQKKyAgICAvLyB0aGUg
cXVldWUgZm9yIGFkZHJlc3MgQTIgaGFzIFQzIGFuZCBUNCwgdGhlbiB5b3UgbWlnaHQgc2VlIGl0
ZXJhdGlvbiBvcmRlcnMgbGlrZToKKyAgICAvLworICAgIC8vIEExLFQxIEExLFQyIEEyLFQzIEEy
LFQ0CisgICAgLy8gQTIsVDMgQTIsVDQgQTEsVDEgQTEsVDIKKyAgICAvLyBBMSxUMSBBMixUMyBB
MSxUMiBBMixUNAorICAgIC8vIEExLFQxIEEyLFQzIEEyLFQ0IEExLFQyCisgICAgLy8KKyAgICAv
LyBBcyB3ZWxsIGFzIG1hbnkgb3RoZXIgcG9zc2libGUgaW50ZXJsZWF2ZXMgdGhhdCBhbGwgaGF2
ZSBUMSBiZWZvcmUgVDIgYW5kIFQzIGJlZm9yZSBUNCBidXQgYXJlCisgICAgLy8gb3RoZXJ3aXNl
IHVuY29uc3RyYWluZWQuIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBwcmltYXJpbHkgZm9yIGRlYnVn
Z2luZy4gSXQncyBhbHNvIHVzZWQgYnkgdW5pdAorICAgIC8vIHRlc3RzLgorICAgIFdURl9FWFBP
UlRfUFJJVkFURSBzdGF0aWMgdm9pZCBmb3JFYWNoKHN0ZDo6ZnVuY3Rpb248dm9pZChUaHJlYWRJ
ZGVudGlmaWVyLCBjb25zdCB2b2lkKik+KTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OlBhcmtpbmdMb3Q7CisKKyNlbmRpZiAvLyBXVEZfUGFya2luZ0xvdF9oCisKSW5k
ZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE4ODIyOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE4IEBACisyMDE1LTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgV1RGIHNob3VsZCBoYXZlIGEgUGFya2luZ0xvdCBmb3IgcGFya2luZyBzbGVlcGluZyB0
aHJlYWRzLCBzbyB0aGF0IGxvY2tzIGNhbiBmaXQgaW4gMS42IGJpdHMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY2NQorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9DTWFrZUxp
c3RzLnR4dDoKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9U
ZXN0V2ViS2l0QVBJLnZjeHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvTG9jay5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKyAgICAg
ICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNwcDogQWRkZWQuCisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKwogMjAxNS0wOC0xMCAgWW91ZW5uIEZhYmxldCAg
PHlvdWVubi5mYWJsZXRAY3JmLmNhbm9uLmZyPgogCiAgICAgICAgIENvbXBpbGUgd2FybmluZyAo
LVdzaWduLWNvbXBhcmUpIG9uIDMyLWJpdHMgYXQgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVt
LmNwcApJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxODgyMjkp
CisrKyBUb29scy9UZXN0V2ViS2l0QVBJL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBA
IC04MSw2ICs4MSw3IEBAIHNldChUZXN0V1RGX1NPVVJDRVMKICAgICAke1RFU1RXRUJLSVRBUElf
RElSfS9UZXN0cy9XVEYvTWVkaWFUaW1lLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rl
c3RzL1dURi9NZXRhQWxsb2NhdG9yLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dURi9OYWtlZFB0ci5jcHAKKyAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvUGFy
a2luZ0xvdC5jcHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvUmVkQmxhY2tU
cmVlLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3RzL1dURi9SZWYuY3BwCiAgICAg
JHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1JlZlB0ci5jcHAKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS52Y3hwcm9qL1Rlc3RXZWJLaXRBUEkudmN4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJvai9U
ZXN0V2ViS2l0QVBJLnZjeHByb2oJKHJldmlzaW9uIDE4ODIyOSkKKysrIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdFdlYktpdEFQSS52Y3hwcm9qL1Rlc3RXZWJLaXRBUEkudmN4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzI2LDYgKzMyNiw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxU
ZXN0c1xXVEZcTWV0YUFsbG9jYXRvci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxUZXN0c1xXVEZcTmFrZWRQdHIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
VGVzdHNcV1RGXE9wdGlvbmFsLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRl
c3RzXFdURlxQYXJraW5nTG90LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRl
c3RzXFdURlxSZWRCbGFja1RyZWUuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5c
VGVzdHNcV1RGXFJlZi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xX
VEZcUmVmQ291bnRlci5jcHAiIC8+CkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTg4MjI5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTExLDYgKzExLDcgQEAKIAkJMEYx
MzlFNzgxQTQyM0E2QjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3MjFBNDIzQTJC
MDBGNTkwRjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAqLzsgfTsKIAkJMEYxMzlFNzkx
QTQyNDU3MDAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29jb2EubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzOUU3MjFBNDIzQTJCMDBGNTkw
RjUgLyogUGxhdGZvcm1VdGlsaXRpZXNDb2NvYS5tbSAqLzsgfTsKIAkJMEYzQjk0QTcxQTc3MjY3
NDAwREUzMjcyIC8qIFdLV2ViVmlld0V2YWx1YXRlSmF2YVNjcmlwdC5tbSBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGM0I5NEE1MUE3NzI2NkMwMERFMzI3
MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi87IH07CisJCTBGRTQ0Nzk5MUI3
NkYxRUIwMDk0OThFQiAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0Nzk3MUI3NkYxRTMwMDk0OThFQiAvKiBQYXJraW5n
TG90LmNwcCAqLzsgfTsKIAkJMEZGQzQ1QTYxQjczRUJFQjAwODVCRDYyIC8qIExvY2suY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGQzQ1QTQxQjcz
RUJFMjAwODVCRDYyIC8qIExvY2suY3BwICovOyB9OwogCQkxQTAyQzg3MDEyNUQ0Q0ZEMDBFM0Y0
QkQgLyogZmluZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwgKi87IH07
CiAJCTFBNTBBQTIwMUEyQTUxRkMwMEY0QzM0NSAvKiBjbG9zZS1mcm9tLXdpdGhpbi1jcmVhdGUt
cGFnZS5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDFBNTBBQTFGMUEyQTRFQTUwMEY0QzM0NSAvKiBjbG9zZS1mcm9tLXdpdGhpbi1jcmVh
dGUtcGFnZS5odG1sICovOyB9OwpAQCAtNDI5LDYgKzQzMCw3IEBACiAJCTBGM0I5NEE1MUE3NzI2
NkMwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBXS1dlYlZpZXdFdmFsdWF0ZUphdmFTY3JpcHQu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzZDNENCMTQxMDI3RTAwMDVCN0Yw
QyAvKiBSZWRCbGFja1RyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gUmVkQmxhY2tUcmVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDNkM0
Q0UxNDEwMzRBRDAwNUI3RjBDIC8qIE1ldGFBbGxvY2F0b3IuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWV0YUFsbG9jYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRTQ0Nzk3MUI3NkYxRTMwMDk0OThFQiAvKiBQYXJraW5nTG90LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmtpbmdMb3QuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkZDNDVBNDFCNzNFQkUyMDA4NUJENjIgLyogTG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMb2NrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQ0NjQwMTIxNjdBODMwNTAwMEJEMjE4IC8qIExh
eW91dFVuaXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF5b3V0
VW5pdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0RjNCMTEyMTVFNDVFQUIw
MDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9ucy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMTA2LDYgKzExMDgsNyBAQAogCQkJ
CTkzQTQyN0FDMTgwREE2MEYwMENEMjRENyAvKiBNb3ZlT25seS5oICovLAogCQkJCUZFQjZGNzRF
MUIyQkE0NEUwMDlFNDkyMiAvKiBOYWtlZFB0ci5jcHAgKi8sCiAJCQkJMUFGREU2NTQxOTUzQjJD
MDAwQzQ4RkZBIC8qIE9wdGlvbmFsLmNwcCAqLywKKwkJCQkwRkU0NDc5NzFCNzZGMUUzMDA5NDk4
RUIgLyogUGFya2luZ0xvdC5jcHAgKi8sCiAJCQkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBDIC8q
IFJlZEJsYWNrVHJlZS5jcHAgKi8sCiAJCQkJOTNBNDI3QUExODBEQTI2NDAwQ0QyNEQ3IC8qIFJl
Zi5jcHAgKi8sCiAJCQkJODZCRDE5OTcxQTJEQjA1QjAwNkRDRjBBIC8qIFJlZkNvdW50ZXIuY3Bw
ICovLApAQCAtMTYyNiw2ICsxNjI5LDcgQEAKIAkJCQk3Q0NFN0VENzFBNDExQTdFMDA0NDdDNEMg
LyogV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdFRvVVJMQ3Jhc2gubW0gaW4gU291cmNlcyAqLywK
IAkJCQk3Q0NFN0YxQzFBNDExQUU2MDA0NDdDNEMgLyogV2lsbFNlbmRTdWJtaXRFdmVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEODFBNDExQTdFMDA0NDdDNEMgLyogV2lsbFNlbmRT
dWJtaXRFdmVudC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRTQ0Nzk5MUI3NkYxRUIwMDk0OThF
QiAvKiBQYXJraW5nTG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RUQ5MUE0MTFBN0Uw
MDQ0N0M0QyAvKiBXaW5kb3dsZXNzV2ViVmlld1dpdGhNZWRpYS5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTdDQ0U3RjJFMUE0MTFCMTAwMDQ0N0M0QyAvKiBXS0Jyb3dzaW5nQ29udGV4dEdyb3VwVGVz
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTdDQ0U3RjJGMUE0MTFCMTAwMDQ0N0M0QyAvKiBXS0Jy
b3dzaW5nQ29udGV4dExvYWREZWxlZ2F0ZVRlc3QubW0gaW4gU291cmNlcyAqLywKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwCShyZXZpc2lvbiAxODgyMjkpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9Mb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQsNiArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlIDx3dGYv
Qnl0ZUxvY2suaD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nUHJpbWl0aXZlcy5oPgpAQCAtOTcsNCArOTgs
MzkgQEAgVEVTVChXVEZfTG9jaywgTWFueUNvbnRlbnRlZExvbmdTZWN0aW9ucwogICAgIHJ1bkxv
Y2tUZXN0PExvY2s+KDEwLCAxMCwgMTAwMDAsIDEwMDApOwogfQogCitURVNUKFdURl9CeXRlTG9j
aywgVW5jb250ZW50ZWRTaG9ydFNlY3Rpb24pCit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+
KDEsIDEsIDEsIDEwMDAwMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIFVuY29udGVudGVk
TG9uZ1NlY3Rpb24pCit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+KDEsIDEsIDEwMDAwLCAx
MDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIENvbnRlbnRlZFNob3J0U2VjdGlvbikKK3sK
KyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMSwgMTAsIDEsIDEwMDAwMDAwKTsKK30KKworVEVT
VChXVEZfQnl0ZUxvY2ssIENvbnRlbnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkxvY2tUZXN0
PEJ5dGVMb2NrPigxLCAxMCwgMTAwMDAsIDEwMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ss
IE1hbnlDb250ZW50ZWRTaG9ydFNlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2Nr
PigxMCwgMTAsIDEsIDUwMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBNYW55Q29udGVu
dGVkTG9uZ1NlY3Rpb25zKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxMCwgMTAsIDEw
MDAwLCAxMDAwKTsKK30KKworVEVTVChXVEZfQnl0ZUxvY2ssIFNlY3Rpb25BZGRyZXNzQ29sbGlz
aW9uKQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPig0LCAyLCAxMDAwMCwgMjAwMCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XVEYvUGFya2luZ0xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8
Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisjaW5jbHVkZSA8d3RmL1BhcmtpbmdM
b3QuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGlu
Z1ByaW1pdGl2ZXMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIFRlc3RX
ZWJLaXRBUEkgeworCituYW1lc3BhY2UgeworCitzdHJ1Y3QgU2luZ2xlTGF0Y2hUZXN0IHsKKyAg
ICB2b2lkIGluaXRpYWxpemUodW5zaWduZWQgbnVtVGhyZWFkcykKKyAgICB7CisgICAgICAgIC8v
IFRoaXMgaW1wbGVtZW50cyBhIGZhaXIgKEZJRk8pIHNlbWFwaG9yZSwgYW5kIGl0IHN0YXJ0cyBv
dXQgdW5hdmFpbGFibGUuCisgICAgICAgIHNlbWFwaG9yZS5zdG9yZSgwKTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG51bVRocmVhZHM7IGktLTspIHsKKyAgICAgICAgICAg
IHRocmVhZHMuYXBwZW5kKAorICAgICAgICAgICAgICAgIGNyZWF0ZVRocmVhZCgKKyAgICAgICAg
ICAgICAgICAgICAgIlBhcmtpbmcgVGVzdCBUaHJlYWQiLAorICAgICAgICAgICAgICAgICAgICBb
Jl0gKCkgeworICAgICAgICAgICAgICAgICAgICAgICAgRVhQRUNUX05FKDB1LCBjdXJyZW50VGhy
ZWFkKCkpOworCisgICAgICAgICAgICAgICAgICAgICAgICBkb3duKCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6bG9ja19ndWFyZDxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhd2FrZS5hZGQoY3VycmVudFRocmVhZCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RBd29rZW4gPSBjdXJyZW50VGhyZWFkKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25kaXRpb24ubm90aWZ5X29uZSgpOworICAgICAgICAgICAgICAg
ICAgICB9KSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHVucGFya09uZSh1bnNpZ25l
ZCBzaW5nbGVVbnBhcmtJbmRleCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9FUSgwdSwgbGFzdEF3
b2tlbik7CisgICAgICAgIAorICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0g
MDsKKyAgICAgICAgVmVjdG9yPFRocmVhZElkZW50aWZpZXIsIDg+IHF1ZXVlOworICAgICAgICBQ
YXJraW5nTG90Ojpmb3JFYWNoKAorICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyIHRo
cmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICBxdWV1ZS5hcHBlbmQodGhyZWFkSWRlbnRpZmllcik7CisKKyAgICAg
ICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7CisgICAgICAgICAgICB9KTsKKworICAg
ICAgICBFWFBFQ1RfTEUobnVtV2FpdGluZ09uQWRkcmVzcywgdGhyZWFkcy5zaXplKCkgLSBzaW5n
bGVVbnBhcmtJbmRleCk7CisKKyAgICAgICAgdXAoKTsKKworICAgICAgICB7CisgICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6bXV0ZXg+IGxvY2tlcihsb2NrKTsKKyAgICAgICAgICAg
IHdoaWxlIChhd2FrZS5zaXplKCkgPCBzaW5nbGVVbnBhcmtJbmRleCArIDEpCisgICAgICAgICAg
ICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgICAgIEVYUEVDVF9ORSgwdSwg
bGFzdEF3b2tlbik7CisgICAgICAgICAgICBpZiAoIXF1ZXVlLmlzRW1wdHkoKSAmJiBxdWV1ZVsw
XSAhPSBsYXN0QXdva2VuKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiV29rZSB1cCB3cm9u
ZyB0aHJlYWQ6IHF1ZXVlID0gIiwgbGlzdER1bXAocXVldWUpLCAiLCBsYXN0IGF3b2tlbiA9ICIs
IGxhc3RBd29rZW4sICJcbiIpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShxdWV1ZVswXSwg
bGFzdEF3b2tlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsYXN0QXdva2VuID0gMDsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgZmluaXNoKHVuc2lnbmVkIG51bVNpbmdsZVVu
cGFya3MpCisgICAgeworICAgICAgICB1bnNpZ25lZCBudW1XYWl0aW5nT25BZGRyZXNzID0gMDsK
KyAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKKyAgICAgICAgICAgIFsmXSAoVGhyZWFkSWRl
bnRpZmllciwgY29uc3Qgdm9pZCogYWRkcmVzcykgeworICAgICAgICAgICAgICAgIGlmIChhZGRy
ZXNzICE9ICZzZW1hcGhvcmUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7CisgICAgICAg
ICAgICB9KTsKKyAgICAgICAgCisgICAgICAgIEVYUEVDVF9MRShudW1XYWl0aW5nT25BZGRyZXNz
LCB0aHJlYWRzLnNpemUoKSAtIG51bVNpbmdsZVVucGFya3MpOworCisgICAgICAgIHNlbWFwaG9y
ZS5zdG9yZSh0aHJlYWRzLnNpemUoKSAtIG51bVNpbmdsZVVucGFya3MpOworICAgICAgICBQYXJr
aW5nTG90Ojp1bnBhcmtBbGwoJnNlbWFwaG9yZSk7CisKKyAgICAgICAgbnVtV2FpdGluZ09uQWRk
cmVzcyA9IDA7CisgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVhY2goCisgICAgICAgICAgICBbJl0g
KFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJlc3MpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBudW1XYWl0aW5nT25BZGRyZXNzKys7Cisg
ICAgICAgICAgICB9KTsKKworICAgICAgICBFWFBFQ1RfRVEoMHUsIG51bVdhaXRpbmdPbkFkZHJl
c3MpOworICAgIAorICAgICAgICB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9sb2NrPHN0ZDo6
bXV0ZXg+IGxvY2tlcihsb2NrKTsKKyAgICAgICAgICAgIHdoaWxlIChhd2FrZS5zaXplKCkgPCB0
aHJlYWRzLnNpemUoKSkKKyAgICAgICAgICAgICAgICBjb25kaXRpb24ud2FpdChsb2NrZXIpOwor
ICAgICAgICB9CisKKyAgICAgICAgZm9yIChUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZp
ZXIgOiB0aHJlYWRzKQorICAgICAgICAgICAgd2FpdEZvclRocmVhZENvbXBsZXRpb24odGhyZWFk
SWRlbnRpZmllcik7CisgICAgfQorCisgICAgLy8gU2VtYXBob3JlIG9wZXJhdGlvbnMuCisgICAg
dm9pZCBkb3duKCkKKyAgICB7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIGludCBv
bGRTZW1hcGhvcmVWYWx1ZSA9IHNlbWFwaG9yZS5sb2FkKCk7CisgICAgICAgICAgICBpbnQgbmV3
U2VtYXBob3JlVmFsdWUgPSBvbGRTZW1hcGhvcmVWYWx1ZSAtIDE7CisgICAgICAgICAgICBpZiAo
IXNlbWFwaG9yZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG9sZFNlbWFwaG9yZVZhbHVlLCBuZXdTZW1h
cGhvcmVWYWx1ZSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChvbGRTZW1hcGhvcmVWYWx1ZSA+IDApIHsKKyAgICAgICAgICAgICAgICAv
LyBXZSBhY3F1aXJlZCB0aGUgc2VtYXBob3JlLiBEb25lLgorICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byB3YWl0LgorICAgICAgICAgICAgaWYgKFBhcmtpbmdMb3Q6OmNvbXBhcmVBbmRQYXJrKCZzZW1h
cGhvcmUsIG5ld1NlbWFwaG9yZVZhbHVlKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGRpZCB3
YWl0LCBhbmQgdGhlbiBnb3Qgd29rZW4gdXAuIFRoaXMgbWVhbnMgdGhhdCBzb21lb25lIHdobyB1
cCdkIHRoZSBzZW1hcGhvcmUKKyAgICAgICAgICAgICAgICAvLyBwYXNzZWQgb3duZXJzaGlwIG9u
dG8gdXMuCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBXZSBuZXZlciBwYXJrZWQsIGJlY2F1c2UgdGhlIHNlbWFwaG9yZSB2YWx1ZSBjaGFu
Z2VkLiBVbmRvIG91ciBkZWNyZW1lbnQgYW5kIHRyeSBhZ2Fpbi4KKyAgICAgICAgICAgIGZvciAo
OzspIHsKKyAgICAgICAgICAgICAgICBpbnQgb2xkU2VtYXBob3JlVmFsdWUgPSBzZW1hcGhvcmUu
bG9hZCgpOworICAgICAgICAgICAgICAgIGlmIChzZW1hcGhvcmUuY29tcGFyZUV4Y2hhbmdlV2Vh
ayhvbGRTZW1hcGhvcmVWYWx1ZSwgb2xkU2VtYXBob3JlVmFsdWUgKyAxKSkKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgdm9p
ZCB1cCgpCisgICAgeworICAgICAgICBpbnQgb2xkU2VtYXBob3JlVmFsdWU7CisgICAgICAgIGZv
ciAoOzspIHsKKyAgICAgICAgICAgIG9sZFNlbWFwaG9yZVZhbHVlID0gc2VtYXBob3JlLmxvYWQo
KTsKKyAgICAgICAgICAgIGlmIChzZW1hcGhvcmUuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGRTZW1h
cGhvcmVWYWx1ZSwgb2xkU2VtYXBob3JlVmFsdWUgKyAxKSkKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCisgICAgICAgIC8vIENoZWNrIGlmIGFueW9uZSB3YXMgd2FpdGluZyBv
biB0aGUgc2VtYXBob3JlLiBJZiB0aGV5IHdlcmUsIHRoZW4gcGFzcyBvd25lcnNoaXAgdG8gdGhl
bS4KKyAgICAgICAgaWYgKG9sZFNlbWFwaG9yZVZhbHVlIDwgMCkKKyAgICAgICAgICAgIFBhcmtp
bmdMb3Q6OnVucGFya09uZSgmc2VtYXBob3JlKTsKKyAgICB9CisgICAgCisgICAgQXRvbWljPGlu
dD4gc2VtYXBob3JlOworICAgIHN0ZDo6bXV0ZXggbG9jazsKKyAgICBzdGQ6OmNvbmRpdGlvbl92
YXJpYWJsZSBjb25kaXRpb247CisgICAgSGFzaFNldDxUaHJlYWRJZGVudGlmaWVyPiBhd2FrZTsK
KyAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gdGhyZWFkczsKKyAgICBUaHJlYWRJZGVudGlm
aWVyIGxhc3RBd29rZW4geyAwIH07Cit9OworCit2b2lkIHJ1blBhcmtpbmdUZXN0KHVuc2lnbmVk
IG51bUxhdGNoZXMsIHVuc2lnbmVkIGRlbGF5LCB1bnNpZ25lZCBudW1UaHJlYWRzLCB1bnNpZ25l
ZCBudW1TaW5nbGVVbnBhcmtzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaW5nbGVMYXRjaFRl
c3RbXT4gdGVzdHMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNpbmdsZUxhdGNoVGVzdFtdPihudW1MYXRj
aGVzKTsKKworICAgIGZvciAodW5zaWduZWQgbGF0Y2hJbmRleCA9IG51bUxhdGNoZXM7IGxhdGNo
SW5kZXgtLTspCisgICAgICAgIHRlc3RzW2xhdGNoSW5kZXhdLmluaXRpYWxpemUobnVtVGhyZWFk
cyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHVucGFya0luZGV4ID0gMDsgdW5wYXJrSW5kZXggPCBu
dW1TaW5nbGVVbnBhcmtzOyArK3VucGFya0luZGV4KSB7CisgICAgICAgIHVzbGVlcChkZWxheSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgbGF0Y2hJbmRleCA9IG51bUxhdGNoZXM7IGxhdGNoSW5k
ZXgtLTspCisgICAgICAgICAgICB0ZXN0c1tsYXRjaEluZGV4XS51bnBhcmtPbmUodW5wYXJrSW5k
ZXgpOworICAgIH0KKworICAgIGZvciAodW5zaWduZWQgbGF0Y2hJbmRleCA9IG51bUxhdGNoZXM7
IGxhdGNoSW5kZXgtLTspCisgICAgICAgIHRlc3RzW2xhdGNoSW5kZXhdLmZpbmlzaChudW1TaW5n
bGVVbnBhcmtzKTsKK30KKwordm9pZCByZXBlYXRQYXJraW5nVGVzdCh1bnNpZ25lZCBudW1SZXBl
YXRzLCB1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxheSwgdW5zaWduZWQgbnVtVGhy
ZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykKK3sKKyAgICB3aGlsZSAobnVtUmVwZWF0
cy0tKQorICAgICAgICBydW5QYXJraW5nVGVzdChudW1MYXRjaGVzLCBkZWxheSwgbnVtVGhyZWFk
cywgbnVtU2luZ2xlVW5wYXJrcyk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitU
RVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtBbGxPbmVGYXN0KQoreworICAgIHJlcGVhdFBhcmtp
bmdUZXN0KDEwMDAwLCAxLCAwLCAxLCAwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5w
YXJrQWxsSHVuZHJlZEZhc3QpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAwMCwgMSwgMCwg
MTAwLCAwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJrT25lT25lRmFzdCkKK3sK
KyAgICByZXBlYXRQYXJraW5nVGVzdCgxMDAwLCAxLCAwLCAxLCAxKTsKK30KKworVEVTVChXVEZf
UGFya2luZ0xvdCwgVW5wYXJrT25lSHVuZHJlZEZhc3QpCit7CisgICAgcmVwZWF0UGFya2luZ1Rl
c3QoMTAwLCAxLCAwLCAxMDAsIDEwMCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFy
a09uZUZpZnR5VGhlbkZpZnR5QWxsRmFzdCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgyMDAs
IDEsIDAsIDEwMCwgNTApOworfQorCitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtBbGxPbmUp
Cit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAwLCAxLCAxMDAwMCwgMSwgMCk7Cit9CisKK1RF
U1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya0FsbEh1bmRyZWQpCit7CisgICAgcmVwZWF0UGFya2lu
Z1Rlc3QoMTAwLCAxLCAxMDAwMCwgMTAwLCAwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwg
VW5wYXJrT25lT25lKQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEwLCAxLCAxMDAwMCwgMSwg
MSk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya09uZUh1bmRyZWQpCit7CisgICAg
cmVwZWF0UGFya2luZ1Rlc3QoMSwgMSwgMTAwMDAsIDEwMCwgMTAwKTsKK30KKworVEVTVChXVEZf
UGFya2luZ0xvdCwgVW5wYXJrT25lRmlmdHlUaGVuRmlmdHlBbGwpCit7CisgICAgcmVwZWF0UGFy
a2luZ1Rlc3QoMiwgMSwgMTAwMDAsIDEwMCwgNTApOworfQorCitURVNUKFdURl9QYXJraW5nTG90
LCBIdW5kcmVkVW5wYXJrQWxsT25lRmFzdCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxMDAs
IDEwMCwgMCwgMSwgMCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIEh1bmRyZWRVbnBhcmtB
bGxPbmUpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMSwgMTAwLCAxMDAwMCwgMSwgMCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>258678</attachid>
            <date>2015-08-10 18:03:14 -0700</date>
            <delta_ts>2015-08-11 12:18:19 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67896</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDE1LTA4LTEwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
V1RGIHNob3VsZCBoYXZlIGEgUGFya2luZ0xvdCBmb3IgcGFya2luZyBzbGVlcGluZyB0aHJlYWRz
LCBzbyB0aGF0IGxvY2tzIGNhbiBmaXQgaW4gMS42IGJpdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzY2NQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlcGxhY2UgQnl0ZVNwaW5Mb2NrIHdpdGggQnl0
ZUxvY2suCisKKyAgICAgICAgKiBydW50aW1lL0NvbmN1cnJlbnRKSVRMb2NrLmg6CisKIDIwMTUt
MDgtMDcgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBMZXQn
cyByZW5hbWUgRnVuY3Rpb25Cb2R5Tm9kZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29uY3VycmVudEpJVExvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCShyZXZpc2lvbiAxODgyMjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25jdXJyZW50SklUTG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNywxNCArMjcsMTQgQEAKICNkZWZpbmUgQ29uY3VycmVudEpJVExvY2tfaAog
CiAjaW5jbHVkZSAiRGVmZXJHQy5oIgotI2luY2x1ZGUgPHd0Zi9CeXRlU3BpbkxvY2suaD4KKyNp
bmNsdWRlIDx3dGYvQnl0ZUxvY2suaD4KICNpbmNsdWRlIDx3dGYvTm9Mb2NrLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCiAjaWYgRU5BQkxFKENPTkNVUlJFTlRfSklUKQotdHlwZWRlZiBCeXRlU3Bp
bkxvY2sgQ29uY3VycmVudEpJVExvY2s7Ci10eXBlZGVmIEJ5dGVTcGluTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwordHlwZWRlZiBCeXRlTG9jayBDb25jdXJyZW50SklUTG9jazsKK3R5
cGVkZWYgQnl0ZUxvY2tlciBDb25jdXJyZW50SklUTG9ja2VySW1wbDsKICNlbHNlCiB0eXBlZGVm
IE5vTG9jayBDb25jdXJyZW50SklUTG9jazsKIHR5cGVkZWYgTm9Mb2NrTG9ja2VyIENvbmN1cnJl
bnRKSVRMb2NrZXJJbXBsOwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4ODIyOSkKKysrIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTQgQEAKKzIwMTUtMDgtMTAgIEZp
bGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBXVEYgc2hvdWxkIGhhdmUg
YSBQYXJraW5nTG90IGZvciBwYXJraW5nIHNsZWVwaW5nIHRocmVhZHMsIHNvIHRoYXQgbG9ja3Mg
Y2FuIGZpdCBpbiAxLjYgYml0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTQ3NjY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWRkcyBhIG1ham9yIG5ldyBhYnN0cmFjdGlvbiBmb3Ig
Y29uY3VycmVuY3kgYWxnb3JpdGhtcyBpbiBXZWJLaXQuIEl0J3MgY2FsbGVkIGEKKyAgICAgICAg
UGFya2luZ0xvdCwgYW5kIGl0IG1ha2VzIGF2YWlsYWJsZSBhIHRocmVhZCBwYXJraW5nIHF1ZXVl
IGZvciBlYWNoIHZpcnR1YWwgYWRkcmVzcyBpbiBtZW1vcnkuCisgICAgICAgIFRoZSBxdWV1ZXMg
YXJlIG1haW50YWluZWQgYnkgYSBkYXRhLWFjY2Vzcy1wYXJhbGxlbCBjb25jdXJyZW50IGhhc2h0
YWJsZSBpbXBsZW1lbnRhdGlvbi4gVGhlCisgICAgICAgIG1lbW9yeSB1c2FnZSBpcyBib3VuZGVk
IGF0IGFyb3VuZCBoYWxmIGEgS0IgcGVyIHRocmVhZC4KKworICAgICAgICBUaGUgUGFya2luZ0xv
dCBtYWtlcyBpdCBlYXN5IHRvIHR1cm4gYW55IHNwaW5sb2NrLWJhc2VkIGNvbmN1cnJlbmN5IHBy
b3RvY29sIGludG8gb25lIHRoYXQKKyAgICAgICAgcGFya3MgdGhyZWFkcyBhZnRlciBhIHdoaWxl
LiBCZWNhdXNlIHF1ZXVlIHN0YXRlIG1hbmFnZW1lbnQgaXMgdXAgdG8gdGhlIFBhcmtpbmdMb3Qg
YW5kIG5vdAorICAgICAgICB0aGUgdXNlcidzIGRhdGEgc3RydWN0dXJlLCB0aGlzIHBhdGNoIHVz
ZXMgaXQgdG8gaW1wbGVtZW50IGEgZnVsbCBhZGFwdGl2ZSBtdXRleCBpbiBvbmUgYnl0ZS4KKyAg
ICAgICAgSW4gZmFjdCwgb25seSB0aHJlZSBzdGF0ZXMgb2YgdGhhdCBieXRlIGFyZSB1c2VkICgw
ID0gYXZhaWxhYmxlLCAxID0gbG9ja2VkLCAyID0gbG9ja2VkIGFuZAorICAgICAgICB0aGVyZSBh
cmUgcGFya2VkIHRocmVhZHMpLiBIZW5jZSB0aGUgam9rZSB0aGF0IFBhcmtpbmdMb3QgYWxsb3dz
IGxvY2tzIHRoYXQgZml0IGluIDEuNiBiaXRzLgorCisgICAgICAgIEJ5dGVMb2NrIGlzIHVzZWQg
YXMgYSByZXBsYWNlbWVudCBmb3IgQnl0ZVNwaW5Mb2NrIGluIEphdmFTY3JpcHRDb3JlLgorCisg
ICAgICAgIFRoZSBBUEkgdGVzdHMgZm9yIHRoaXMgYWxzbyBkZW1vIGhvdyB0byBjcmVhdGUgYSBj
b21wbGV0ZWx5IGZhaXIgKEZJRk8pIGJpbmFyeSBzZW1hbXBob3JlLiBUaGUKKyAgICAgICAgY29t
bWVudCBpbiBMb2NrLmggc2hvd3MgaG93IHdlIGNvdWxkIGFjY2VsZXJhdGUgTG9jayBwZXJmb3Jt
YW5jZSB1c2luZyBQYXJraW5nTG90LiBBZnRlciB3ZQorICAgICAgICBhcmUgc3VyZSB0aGF0IHRo
aXMgY29kZSB3b3Jrcywgd2UgY2FuIGV4cGFuZCB0aGUgdXNlIG9mIFBhcmtpbmdMb3QuIFRoYXQn
cyBjb3ZlcmVkIGJ5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNDc4NDEuCisKKyAgICAgICAgKiBXVEYudmN4cHJvai9XVEYudmN4cHJvajoKKyAgICAg
ICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiZW5jaG1hcmtz
L0xvY2tTcGVlZFRlc3QuY3BwOgorICAgICAgICAobWFpbik6CisgICAgICAgICogd3RmL0F0b21p
Y3MuaDoKKyAgICAgICAgKFdURjo6QXRvbWljOjpjb21wYXJlRXhjaGFuZ2VXZWFrKToKKyAgICAg
ICAgKFdURjo6QXRvbWljOjpjb21wYXJlRXhjaGFuZ2VTdHJvbmcpOgorICAgICAgICAqIHd0Zi9C
eXRlTG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6bG9ja1Nsb3cpOgor
ICAgICAgICAoV1RGOjpCeXRlTG9jazo6dW5sb2NrU2xvdyk6CisgICAgICAgICogd3RmL0J5dGVM
b2NrLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6Qnl0ZUxvY2spOgorICAgICAg
ICAoV1RGOjpCeXRlTG9jazo6bG9jayk6CisgICAgICAgIChXVEY6OkJ5dGVMb2NrOjp1bmxvY2sp
OgorICAgICAgICAoV1RGOjpCeXRlTG9jazo6aXNIZWxkKToKKyAgICAgICAgKFdURjo6Qnl0ZUxv
Y2s6OmlzTG9ja2VkKToKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICog
d3RmL0xvY2suaDoKKyAgICAgICAgKiB3dGYvUGFya2luZ0xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpQYXJraW5nTG90OjpwYXJrQ29uZGl0aW9uYWxseSk6CisgICAgICAgIChXVEY6OlBh
cmtpbmdMb3Q6OnVucGFya09uZSk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OnVucGFya0Fs
bCk6CisgICAgICAgIChXVEY6OlBhcmtpbmdMb3Q6OmZvckVhY2gpOgorICAgICAgICAqIHd0Zi9Q
YXJraW5nTG90Lmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpQYXJraW5nTG90Ojpjb21wYXJlQW5k
UGFyayk6CisKIDIwMTUtMDgtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5j
YW5vbi5mcj4KIAogICAgICAgICBDb21waWxlIHdhcm5pbmcgKC1Xc2lnbi1jb21wYXJlKSBvbiAz
Mi1iaXRzIGF0IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnZjeHByb2ovV1RGLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
dmN4cHJvai9XVEYudmN4cHJvagkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNlL1dURi9XVEYu
dmN4cHJvai9XVEYudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQAogICA8
SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEFzc2VydGlvbnMuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cd3RmXEJpdFZlY3Rvci5jcHAiIC8+Cisg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcQnl0ZUxvY2suY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cd3RmXENvbXBpbGF0aW9uVGhyZWFkLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDcnlwdG9ncmFwaGljVXRpbGl0aWVzLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5jcHAiIC8+CkBAIC0xMTYsNiArMTE3LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHd0ZlxPU1JhbmRvbVNvdXJjZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3
dGZcUGFnZUJsb2NrLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJh
bGxlbEpvYnNHZW5lcmljLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQ
YXJraW5nTG90LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHd0ZlxQcmludFN0
cmVhbS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUkFNU2l6ZS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlx3dGZcUmFuZG9tTnVtYmVyLmNwcCIgLz4K
QEAgLTE3MSw2ICsxNzMsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJsb2Nr
U3RhY2suaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxCbG9vbUZpbHRlci5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXEJ1bXBQb2ludGVyQWxsb2NhdG9y
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQnl0ZUxvY2suaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxDaGVja2VkQXJpdGhtZXRpYy5oIiAvPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXENoZWNrZWRCb29sZWFuLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcQ29tcGlsZXIuaCIgLz4KQEAgLTI0Niw2ICsyNDksNyBA
QAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9ic0dlbmVyaWMuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXJhbGxlbEpvYnNMaWJkaXNwYXRj
aC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmFsbGVsSm9ic09wZW5N
UC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cd3RmXFBhcmtpbmdMb3QuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHd0ZlxQYXNzUmVmUHRyLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlx3dGZcUGxhdGZvcm0uaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHd0ZlxQcmludFN0cmVhbS5oIiAvPgpJbmRleDogU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODgyMjkpCisrKyBTb3VyY2UvV1RGL1dU
Ri54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCwx
MCBAQAogCQkwRjBEODVCNDE3MjM0Q0MxMDAzMzgyMTAgLyogTm9Mb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjBEODVCMzE3MjM0Q0IxMDAzMzgy
MTAgLyogTm9Mb2NrLmggKi87IH07CiAJCTBGMkI2NkE2MTdCNkI0RkIwMEE3QUUzRiAvKiBEZWZl
cnJhYmxlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyQjY2QTQxN0I2QjRGNzAwQTdBRTNGIC8qIERlZmVycmFibGVSZWZDb3VudGVk
LmggKi87IH07CiAJCTBGMkI2NkE3MTdCNkI0RkQwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkI2NkE1MTdCNkI0
RjcwMEE3QUUzRiAvKiBGbGlwQnl0ZXMuaCAqLzsgfTsKKwkJMEY4MjRBNjYxQjc0NDNBMDAwMkUz
NDVEIC8qIEJ5dGVMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGODI0QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi87IH07
CisJCTBGODI0QTY3MUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4MjRBNjMxQjc0NDNBMDAwMkUzNDVE
IC8qIEJ5dGVMb2NrLmggKi87IH07CisJCTBGODI0QTY4MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJr
aW5nTG90LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGODI0QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLzsgfTsKKwkJMEY4
MjRBNjkxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGODI0QTY1MUI3NDQzQTAwMDJFMzQ1RCAvKiBQ
YXJraW5nTG90LmggKi87IH07CiAJCTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2lu
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg3
MTA1OTE2NjQzRjE5MDA5MEIwQUQgLyogUmF3UG9pbnRlci5oICovOyB9OwogCQkwRjg4NUUwRjE4
NDVBRUE5MDBGMUUzRkEgLyogRmFzdEJpdFZlY3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjg4NUUwRTE4NDVBRTlGMDBGMUUzRkEgLyogRmFz
dEJpdFZlY3Rvci5jcHAgKi87IH07CiAJCTBGOEYyQjkxMTcyRTAwRkMwMDdEQkRBNSAvKiBDb21w
aWxhdGlvblRocmVhZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4RjJCOTAxNzJFMDBGMDAwN0RCREE1IC8qIENvbXBpbGF0aW9uVGhyZWFkLmggKi87
IH07CkBAIC0zMDcsNiArMzExLDEwIEBACiAJCTBGMkI2NkE0MTdCNkI0RjcwMEE3QUUzRiAvKiBE
ZWZlcnJhYmxlUmVmQ291bnRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWZlcnJhYmxlUmVmQ291bnRl
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCNjZBNTE3QjZCNEY3MDBBN0FF
M0YgLyogRmxpcEJ5dGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZsaXBCeXRlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjMwMEI3RDE4QUI0OEI0MDBBNkQ3MkUgLyogSGFzaE1ldGhv
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoTWV0aG9kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGODI0QTYyMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCeXRlTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlTG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjgyNEE2NDFCNzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY4MjRBNjUxQjc0NDNBMDAwMkUzNDVEIC8q
IFBhcmtpbmdMb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFya2luZ0xv
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjg3MTA1OTE2NjQzRjE5MDA5MEIw
QUQgLyogUmF3UG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSYXdQ
b2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGODg1RTBFMTg0NUFFOUYw
MEYxRTNGQSAvKiBGYXN0Qml0VmVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZhc3RCaXRW
ZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGMkI4RjE3MkUwMEYw
MDA3REJEQTUgLyogQ29tcGlsYXRpb25UaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29t
cGlsYXRpb25UaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzE2LDYg
KzcyNCw4IEBACiAJCQkJQThBNDcyNjQxNTFBODI1QTAwNDEyM0ZGIC8qIEJsb2NrU3RhY2suaCAq
LywKIAkJCQlBOEE0NzI2NTE1MUE4MjVBMDA0MTIzRkYgLyogQmxvb21GaWx0ZXIuaCAqLywKIAkJ
CQlBOEE0NzI2NzE1MUE4MjVBMDA0MTIzRkYgLyogQnVtcFBvaW50ZXJBbGxvY2F0b3IuaCAqLywK
KwkJCQkwRjgyNEE2MjFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suY3BwICovLAorCQkJCTBG
ODI0QTYzMUI3NDQzQTAwMDJFMzQ1RCAvKiBCeXRlTG9jay5oICovLAogCQkJCUVCOTVFMUVGMTYx
QTcyNDEwMDg5QTJGNSAvKiBCeXRlT3JkZXIuaCAqLywKIAkJCQkwRkVDM0VFNDE3MUI4MzQ3MDBG
REFDOEQgLyogQnl0ZVNwaW5Mb2NrLmggKi8sCiAJCQkJQThBNDcyNkExNTFBODI1QTAwNDEyM0ZG
IC8qIENoZWNrZWRBcml0aG1ldGljLmggKi8sCkBAIC04MTAsNiArODIwLDggQEAKIAkJCQlBOEE0
NzJFNTE1MUE4MjVCMDA0MTIzRkYgLyogUGFnZVJlc2VydmF0aW9uLmggKi8sCiAJCQkJQThBNDcy
RTYxNTFBODI1QjAwNDEyM0ZGIC8qIFBhcmFsbGVsSm9icy5oICovLAogCQkJCUE4QTQ3MkU5MTUx
QTgyNUIwMDQxMjNGRiAvKiBQYXJhbGxlbEpvYnNMaWJkaXNwYXRjaC5oICovLAorCQkJCTBGODI0
QTY0MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90LmNwcCAqLywKKwkJCQkwRjgyNEE2NTFC
NzQ0M0EwMDAyRTM0NUQgLyogUGFya2luZ0xvdC5oICovLAogCQkJCUE4QTQ3MkVEMTUxQTgyNUIw
MDQxMjNGRiAvKiBQYXNzUmVmUHRyLmggKi8sCiAJCQkJQTg3NkRCRDcxNTE4MTZFNTAwREFEQjk1
IC8qIFBsYXRmb3JtLmggKi8sCiAJCQkJMEY5RDMzNUQxNjVEQkE3MzAwNUFEMzg3IC8qIFByaW50
U3RyZWFtLmNwcCAqLywKQEAgLTExNTYsNiArMTE2OCw3IEBACiAJCQkJQThBNDc0MTUxNTFBODI1
QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0MTYx
NTFBODI1QjAwNDEyM0ZGIC8qIFJhbmRvbU51bWJlclNlZWQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGODcxMDVBMTY2NDNGMTkwMDkwQjBBRCAvKiBSYXdQb2ludGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjgyNEE2NzFCNzQ0M0EwMDAyRTM0NUQgLyogQnl0ZUxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDE3MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWRCbGFja1RyZWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDE4MTUxQTgyNUIwMDQxMjNGRiAvKiBSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQxOTE1MUE4MjVCMDA0MTIzRkYgLyogUmVmQ291bnRlZEFy
cmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTExNjcsNiArMTE4MCw3IEBACiAJCQkJMTQ2OTQxOTIx
NkVBQUY2RDAwMjRFMTQ2IC8qIFJ1bkxvb3BUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRG
M0IwRjcxNUU0NUU0NjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0Njk0MTk2MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGODI0QTY5MUI3NDQzQTAwMDJFMzQ1RCAvKiBQYXJraW5nTG90Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQxRjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVk
VmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMDE1MUE4MjVCMDA0MTIzRkYgLyog
U2VudGluZWxMaW5rZWRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQyMjE1MUE4MjVC
MDA0MTIzRkYgLyogU0hBMS5oIGluIEhlYWRlcnMgKi8sCkBAIC0xMzI1LDYgKzEzMzksNyBAQAog
CQkJZmlsZXMgPSAoCiAJCQkJQThBNDczODYxNTFBODI1QjAwNDEyM0ZGIC8qIEFzc2VydGlvbnMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDc0MzUxNTFBODI1QjAwNDEyM0ZGIC8qIEF0b21p
Y1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjgyNEE2NjFCNzQ0M0EwMDAyRTM0NUQg
LyogQnl0ZUxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUJDNzBGMDUxNzZDMzc5RDAwMTAx
REVDIC8qIEF0b21pY1N0cmluZ1RhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUZC
MTgyNDM1QTYwMEE4MkU2OSAvKiBTdHJpbmdDRi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDY5
NDE5RDE2RUFCMTBBMDAyNEUxNDYgLyogQXV0b2RyYWluZWRQb29sTWFjLm1tIGluIFNvdXJjZXMg
Ki8sCkBAIC0xMzQwLDYgKzEzNTUsNyBAQAogCQkJCUE4QTQ3MzlBMTUxQTgyNUIwMDQxMjNGRiAv
KiBDcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
OEE0NzQzOTE1MUE4MjVCMDA0MTIzRkYgLyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBOEE0NzM5QzE1MUE4MjVCMDA0MTIzRkYgLyogQ3VycmVudFRpbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEY4MjRBNjgxQjc0NDNBMDAwMkUzNDVEIC8qIFBhcmtpbmdMb3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODZGNDZGNjAxQTI4NDBFRTAwQ0NCRjIyIC8qIFJlZkNvdW50ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczOUUxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGFMb2cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQThBNDczQTAxNTFBODI1QjAwNDEyM0ZGIC8qIERhdGVN
YXRoLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dURi9iZW5jaG1hcmtzL0xvY2tT
cGVlZFRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvYmVuY2htYXJrcy9Mb2NrU3Bl
ZWRUZXN0LmNwcAkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNlL1dURi9iZW5jaG1hcmtzL0xv
Y2tTcGVlZFRlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQnl0ZUxv
Y2suaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTG9jay5o
PgogI2luY2x1ZGUgPHd0Zi9TcGluTG9jay5oPgpAQCAtNDEsOSArNDIsOSBAQCB1bnNpZ25lZCB3
b3JrUGVyQ3JpdGljYWxTZWN0aW9uOwogdW5zaWduZWQgbnVtTm9pc2VUaHJlYWRzOwogdW5zaWdu
ZWQgbnVtSXRlcmF0aW9uczsKICAgICAKLU5PX1JFVFVSTiB2b2lkIHVzYWdlKCkKK3ZvaWQgdXNh
Z2UoKQogewotICAgIHByaW50ZigiVXNhZ2U6IExvY2tTcGVlZFRlc3Qgc3BpbmxvY2t8bG9ja3xt
dXRleHxhbGwgPG51bSB0aHJlYWQgZ3JvdXBzPiA8bnVtIHRocmVhZHMgcGVyIGdyb3VwPiA8d29y
ayBwZXIgY3JpdGljYWwgc2VjdGlvbj4gPG51bSBub2lzZSB0aHJlYWRzPiA8bnVtIGl0ZXJhdGlv
bnM+XG4iKTsKKyAgICBwcmludGYoIlVzYWdlOiBMb2NrU3BlZWRUZXN0IHNwaW5sb2NrfGxvY2t8
Ynl0ZWxvY2t8bXV0ZXh8YWxsIDxudW0gdGhyZWFkIGdyb3Vwcz4gPG51bSB0aHJlYWRzIHBlciBn
cm91cD4gPHdvcmsgcGVyIGNyaXRpY2FsIHNlY3Rpb24+IDxudW0gbm9pc2UgdGhyZWFkcz4gPG51
bSBpdGVyYXRpb25zPlxuIik7CiAgICAgZXhpdCgxKTsKIH0KIApAQCAtMTI1LDYgKzEyNiwxMCBA
QCBpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgICAgIHJ1bkJlbmNobWFyazxM
b2NrPigiV1RGIExvY2siKTsKICAgICAgICAgZGlkUnVuID0gdHJ1ZTsKICAgICB9CisgICAgaWYg
KCFzdHJjbXAoYXJndlsxXSwgImJ5dGVsb2NrIikgfHwgIXN0cmNtcChhcmd2WzFdLCAiYWxsIikp
IHsKKyAgICAgICAgcnVuQmVuY2htYXJrPEJ5dGVMb2NrPigiV1RGIEJ5dGVMb2NrIik7CisgICAg
ICAgIGRpZFJ1biA9IHRydWU7CisgICAgfQogICAgIGlmICghc3RyY21wKGFyZ3ZbMV0sICJtdXRl
eCIpIHx8ICFzdHJjbXAoYXJndlsxXSwgImFsbCIpKSB7CiAgICAgICAgIHJ1bkJlbmNobWFyazxN
dXRleD4oIlBsYXRmb3JtIE11dGV4Iik7CiAgICAgICAgIGRpZFJ1biA9IHRydWU7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Qnl0ZUxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvQnl0ZUxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
eXRlTG9jay5oIgorCisjaW5jbHVkZSAiUGFya2luZ0xvdC5oIgorI2luY2x1ZGUgPHRocmVhZD4K
KworbmFtZXNwYWNlIFdURiB7CisKK3N0YXRpYyBib29sIHZlcmJvc2UgPSBmYWxzZTsKKwordm9p
ZCBCeXRlTG9jazo6bG9ja1Nsb3coKQoreworICAgIHVuc2lnbmVkIHNwaW5Db3VudCA9IDA7CisK
KyAgICAvLyBUaGlzIG1hZ2ljIG51bWJlciB0dXJucyBvdXQgdG8gYmUgb3B0aW1hbCBiYXNlZCBv
biBwYXN0IEppa2VzUlZNIGV4cGVyaW1lbnRzLgorICAgIGNvbnN0IHVuc2lnbmVkIHNwaW5MaW1p
dCA9IDQwOworICAgIAorICAgIGZvciAoOzspIHsKKyAgICAgICAgdWludDhfdCBjdXJyZW50Qnl0
ZVZhbHVlID0gbV9ieXRlLmxvYWQoKTsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbG9ja2luZyB3aXRoICIsIGN1
cnJlbnRCeXRlVmFsdWUsICJcbiIpKTsKKworICAgICAgICAvLyBXZSBhbGxvdyBvdXJzZWx2ZXMg
dG8gYmFyZ2UgaW4uCisgICAgICAgIGlmICghKGN1cnJlbnRCeXRlVmFsdWUgJiBpc0hlbGRCaXQp
CisgICAgICAgICAgICAmJiBtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZh
bHVlLCBjdXJyZW50Qnl0ZVZhbHVlIHwgaXNIZWxkQml0KSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAvLyBJZiB0aGVyZSBpcyBub2JvZHkgcGFya2VkIGFuZCB3ZSBoYXZlbid0IHNw
dW4gdG9vIG11Y2gsIHdlIGNhbiBqdXN0IHRyeSB0byBzcGluIGFyb3VuZC4KKyAgICAgICAgaWYg
KCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkgJiYgc3BpbkNvdW50IDwgc3Bpbkxp
bWl0KSB7CisgICAgICAgICAgICBzcGluQ291bnQrKzsKKyAgICAgICAgICAgIHN0ZDo6dGhpc190
aHJlYWQ6OnlpZWxkKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIE5lZWQgdG8gcGFyay4gV2UgZG8gdGhpcyBieSBzZXR0aW5nIHRoZSBwYXJrZWQgYml0
IGZpcnN0LCBhbmQgdGhlbiBwYXJraW5nLiBXZSBzcGluIGFyb3VuZAorICAgICAgICAvLyBpZiB0
aGUgcGFya2VkIGJpdCB3YXNuJ3Qgc2V0IGFuZCB3ZSBmYWlsZWQgYXQgc2V0dGluZyBpdC4KKyAg
ICAgICAgaWYgKCEoY3VycmVudEJ5dGVWYWx1ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAgICAgICAg
ICYmICFtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhayhjdXJyZW50Qnl0ZVZhbHVlLCBjdXJyZW50
Qnl0ZVZhbHVlIHwgaGFzUGFya2VkQml0KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIC8vIFdlIG5vdyBleHBlY3QgdGhlIHZhbHVlIHRvIGJlIGlzSGVsZHxoYXNQYXJrZWQuIFNv
IGxvbmcgYXMgdGhhdCdzIHRoZSBjYXNlLCB3ZSBjYW4gcGFyay4KKyAgICAgICAgUGFya2luZ0xv
dDo6Y29tcGFyZUFuZFBhcmsoJm1fYnl0ZSwgaXNIZWxkQml0IHwgaGFzUGFya2VkQml0KTsKKwor
ICAgICAgICAvLyBXZSBoYXZlIGF3YWtlbiwgb3Igd2UgbmV2ZXIgcGFya2VkIGJlY2F1c2UgdGhl
IGJ5dGUgdmFsdWUgY2hhbmdlZC4gRWl0aGVyIHdheSwgd2UgbG9vcAorICAgICAgICAvLyBhcm91
bmQgYW5kIHRyeSBhZ2Fpbi4KKyAgICB9Cit9CisKK3ZvaWQgQnl0ZUxvY2s6OnVubG9ja1Nsb3co
KQoreworICAgIC8vIFJlbGVhc2UgdGhlIGxvY2sgd2hpbGUgZmluZGluZyBvdXQgaWYgc29tZW9u
ZSBpcyBwYXJrZWQuIE5vdGUgdGhhdCBhcyBzb29uIGFzIHdlIGRvIHRoaXMsCisgICAgLy8gc29t
ZW9uZSBtaWdodCBiYXJnZSBpbi4KKyAgICB1aW50OF90IG9sZEJ5dGVWYWx1ZTsKKyAgICBmb3Ig
KDs7KSB7CisgICAgICAgIG9sZEJ5dGVWYWx1ZSA9IG1fYnl0ZS5sb2FkKCk7CisgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCks
ICI6IHVubG9ja2luZyB3aXRoICIsIG9sZEJ5dGVWYWx1ZSwgIlxuIikpOworICAgICAgICBBU1NF
UlQob2xkQnl0ZVZhbHVlICYgaXNIZWxkQml0KTsKKyAgICAgICAgaWYgKG1fYnl0ZS5jb21wYXJl
RXhjaGFuZ2VXZWFrKG9sZEJ5dGVWYWx1ZSwgMCkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICAvLyBOb3RlIHRoYXQgc29tZW9uZSBjb3VsZCB0cnkgdG8gcGFyayByaWdodCBub3cu
IElmIHRoYXQgaGFwcGVucywgdGhleSB3aWxsIHJldHVybiBpbW1lZGlhdGVseQorICAgIC8vIGJl
Y2F1c2Ugb3VyIHBhcmtpbmcgcHJlZGljYXRlIGlzIHRoYXQgbV9ieXRlID09IGlzSGVsZEJpdCB8
IGhhc1BhcmtlZEJpdCwgYnV0IHdlJ3ZlIGFscmVhZHkgc2V0CisgICAgLy8gbV9ieXRlID0gMC4K
KworICAgIC8vIElmIHRoZXJlIGhhZCBiZWVuIHRocmVhZHMgcGFya2VkLCB1bnBhcmsgYWxsIG9m
IHRoZW0uIFRoaXMgY2F1c2VzIGEgdGh1bmRlcmluZyBoZXJkLCBidXQgd2hpbGUKKyAgICAvLyB0
aGF0IGlzIHRoZW9yZXRpY2FsbHkgc2NhcnksIGl0J3MgdG90YWxseSBmaW5lIGluIFdlYktpdCBi
ZWNhdXNlIHdlIHVzdWFsbHkgZG9uJ3QgaGF2ZSBlbm91Z2gKKyAgICAvLyB0aHJlYWRzIGZvciB0
aGlzIHRvIG1hdHRlci4KKyAgICAvLyBGSVhNRTogV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhpcyB0
byBleGhpYml0IHRodW5kZXJpbmcgaGVyZC4gV2UgY291bGQgdXNlIHVucGFya09uZSgpLCBhbmQg
aWYKKyAgICAvLyB0aGF0IHJldHVybnMgdHJ1ZSwganVzdCBzZXQgdGhlIHBhcmtlZCBiaXQgYWdh
aW4uIElmIGluIHRoZSBwcm9jZXNzIG9mIHNldHRpbmcgdGhlIHBhcmtlZCBiaXQKKyAgICAvLyB3
ZSBmYWlsIHRoZSBDQVMsIHRoZW4ganVzdCB1bnBhcmsgYWdhaW4uCisgICAgaWYgKG9sZEJ5dGVW
YWx1ZSAmIGhhc1BhcmtlZEJpdCkKKyAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrQWxsKCZtX2J5
dGUpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL1dURi93dGYvQnl0
ZUxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CeXRlTG9jay5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dURi93dGYvQnl0ZUxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEJ5dGVMb2NrX2gKKyNkZWZpbmUgQnl0ZUxvY2tfaAorCisjaW5jbHVkZSA8d3Rm
L0F0b21pY3MuaD4KKyNpbmNsdWRlIDx3dGYvTG9ja2VyLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBUaGlzIGlzIGxpa2UgTG9jaywgYnV0
IG9ubHkgcmVxdWlyZXMgMSBieXRlIGluc3RlYWQgb2Ygc2l6ZW9mKHZvaWQqKSBzdG9yYWdlLiBU
aGUgZG93bnNpZGUgaXMgdGhhdAorLy8gaXQgaXMgc2xvd2VyIG9uIHRoZSBzbG93IHBhdGggdW5k
ZXIgaGVhdnkgY29udGVudGlvbiBpbnZvbHZpbmcgbWFueSB0aHJlYWRzIGJlY2F1c2UgaXQgaXMK
Ky8vIHN1c2NlcHRpYmxlIHRvIHRoZSAidGh1bmRlcmluZyBoZXJkIiBwcm9ibGVtOiBpdCBkb2Vz
bid0IGhhdmUgZW5vdWdoIHN0YXRlIHRvIHRyYWNrIGhvdyBtYW55CisvLyB0aHJlYWRzIGFyZSB3
YWl0aW5nIGZvciB0aGUgbG9jaywgc28gd2hlbiB1bmxvY2sgZGV0ZWN0cyB0aGF0IGFueSB0aHJl
YWQgaXMgd2FpdGluZywgdGhlbiBpdCB3YWtlcworLy8gYWxsIG9mIHRoZSB3YWl0aW5nIHRocmVh
ZHMuIEFsbCBvZiB0aG9zZSB0aHJlYWRzIHdpbGwgcGlsZSBvbnRvIHRoZSBsb2NrOyBvbmUgd2ls
bCBzdWNjZWVkIGFuZCB0YWtlCisvLyBpdCB3aGlsZSB0aGUgb3RoZXJzIHdpbGwgZ28gYmFjayB0
byBzbGVlcC4gVGhlIHNsb3ctZG93biBpcyBzbWFsbC4gVGVuIHRocmVhZHMgcmVwZWF0ZWRseQor
Ly8gY29udGVuZGluZyBmb3IgdGhlIHNhbWUgfjEtMTB1cyBsb25nIGNyaXRpY2FsIHNlY3Rpb24g
d2lsbCBydW4gNyUgc2xvd2VyIG9uIG15IG1hY2hpbmUuIElmIEkgbWVzcworLy8gd2l0aCBhbnkg
b2YgdGhlIHBhcmFtZXRlcnMgLSBjaGFuZ2UgdGhlIG51bWJlciBvZiB0aHJlYWRzIG9yIGNoYW5n
ZSB0aGUgY3JpdGljYWwgc2VjdGlvbiBkdXJhdGlvbiAtCisvLyB0aGVuIEJ5dGVMb2NrIHJlYWNo
ZXMgcGFyaXR5IHdpdGggTG9jaywgYW5kIHNvbWV0aW1lcyBvdXRwZXJmb3JtcyBpdC4gUGVyaGFw
cyBtb3N0IHN1cnByaXNpbmdseSwKKy8vIHRoZSBzbG93LWRvd24gZ29lcyBhd2F5IGV2ZW4gd2hl
biB5b3UgaW5jcmVhc2UgdGhlIG51bWJlciBvZiB0aHJlYWRzLiBCeXRlTG9jayBhcHBlYXJzIHRv
IHNvbWV0aW1lcworLy8gYmUgZmFzdGVyIHVuZGVyIG1pY3JvY29udGVudGlvbiwgcGVyaGFwcyBi
ZWNhdXNlIGEgY29udGVudGlvdXMgOC1iaXQgQ0FTIGlzIGNoZWFwZXIgdGhhbiBhCisvLyBjb250
ZW50aW91cyA2NC1iaXQgQ0FTLiBOb3RlIHRoYXQgdW5jb250ZW5kZWQgbG9ja2luZyBpcyBlcXVh
bGx5IGZhc3Qgd2l0aCBCeXRlTG9jayBhcyB3aXRoIExvY2suCisvLyBJbiBhbGwsIExvY2sgYW5k
IEJ5dGVMb2NrIGhhdmUgc2ltaWxhciBwZXJmb3JtYW5jZSB1bmRlciBjb250cm9sbGVkIG1pY3Jv
YmVuY2htYXJrcywgYnV0IExvY2sgaXMKKy8vIHRoZW9yZXRpY2FsbHkgc2FmZXIgYmVjYXVzZSBv
ZiB0aGUgdGh1bmRlcmluZyBoZXJkIGlzc3VlLiBJdCdzIHByb2JhYmx5IGJlc3QgdG8gdXNlIEJ5
dGVMb2NrIG9ubHkKKy8vIHdoZW4geW91IHJlYWxseSBjYXJlIGFib3V0IHNwYWNlIGFuZCB5b3Ug
ZG9uJ3QgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSB0aGF0IGEgbGFyZ2UgbnVtYmVyIG9mCisvLyB0
aHJlYWRzIHdvdWxkIGV2ZXIgcGlsZSBvbnRvIHRoZSBzYW1lIGxvY2suCisKK2NsYXNzIEJ5dGVM
b2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlTG9jayk7CitwdWJsaWM6CisgICAg
Qnl0ZUxvY2soKQorICAgIHsKKyAgICAgICAgbV9ieXRlLnN0b3JlKDAsIHN0ZDo6bWVtb3J5X29y
ZGVyX3JlbGF4ZWQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvY2soKQorICAgIHsKKyAgICAg
ICAgaWYgKExJS0VMWShtX2J5dGUuY29tcGFyZUV4Y2hhbmdlV2VhaygwLCBpc0hlbGRCaXQsIHN0
ZDo6bWVtb3J5X29yZGVyX2FjcXVpcmUpKSkgeworICAgICAgICAgICAgLy8gTG9jayBhY3F1aXJl
ZCEKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxvY2tTbG93KCk7
CisgICAgfQorCisgICAgdm9pZCB1bmxvY2soKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWSht
X2J5dGUuY29tcGFyZUV4Y2hhbmdlV2Vhayhpc0hlbGRCaXQsIDAsIHN0ZDo6bWVtb3J5X29yZGVy
X3JlbGVhc2UpKSkgeworICAgICAgICAgICAgLy8gTG9jayByZWxlYXNlZCBhbmQgbm9ib2R5IHdh
cyB3YWl0aW5nIQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgdW5s
b2NrU2xvdygpOworICAgIH0KKworICAgIGJvb2wgaXNIZWxkKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2J5dGUubG9hZChzdGQ6Om1lbW9yeV9vcmRlcl9hY3F1aXJlKSAmIGlzSGVs
ZEJpdDsKKyAgICB9CisKKyAgICBib29sIGlzTG9ja2VkKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0hlbGQoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNvbnN0IHVp
bnQ4X3QgaXNIZWxkQml0ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgdWludDhfdCBoYXNQYXJrZWRC
aXQgPSAyOworCisgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgbG9ja1Nsb3coKTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCB1bmxvY2tTbG93KCk7CisKKyAgICBBdG9taWM8dWludDhf
dD4gbV9ieXRlOworfTsKKwordHlwZWRlZiBMb2NrZXI8Qnl0ZUxvY2s+IEJ5dGVMb2NrZXI7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OkJ5dGVMb2NrOwordXNpbmcgV1RGOjpC
eXRlTG9ja2VyOworCisjZW5kaWYgLy8gQnl0ZUxvY2tfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTg4MjI5KQorKysgU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTcsNiArNyw3IEBAIHNldChXVEZfSEVBREVSUwogICAgIEJpdFZl
Y3Rvci5oCiAgICAgQml0bWFwLmgKICAgICBCdW1wUG9pbnRlckFsbG9jYXRvci5oCisgICAgQnl0
ZUxvY2suaAogICAgIEJ5dGVPcmRlci5oCiAgICAgQ29tcGlsYXRpb25UaHJlYWQuaAogICAgIENv
bXBpbGVyLmgKQEAgLTYyLDYgKzYzLDcgQEAgc2V0KFdURl9IRUFERVJTCiAgICAgUGFyYWxsZWxK
b2JzR2VuZXJpYy5oCiAgICAgUGFyYWxsZWxKb2JzTGliZGlzcGF0Y2guaAogICAgIFBhcmFsbGVs
Sm9ic09wZW5NUC5oCisgICAgUGFya2luZ0xvdC5oCiAgICAgUGFzc1JlZlB0ci5oCiAgICAgUGxh
dGZvcm0uaAogICAgIFByaW50U3RyZWFtLmgKQEAgLTE0NCw2ICsxNDYsNyBAQCBzZXQoV1RGX1NP
VVJDRVMKICAgICBBc3NlcnRpb25zLmNwcAogICAgIEF0b21pY3MuY3BwCiAgICAgQml0VmVjdG9y
LmNwcAorICAgIEJ5dGVMb2NrLmNwcAogICAgIENvbXBpbGF0aW9uVGhyZWFkLmNwcAogICAgIENy
eXB0b2dyYXBoaWNVdGlsaXRpZXMuY3BwCiAgICAgQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIuY3BwCkBAIC0xNjYsNiArMTY5LDcgQEAgc2V0KFdURl9TT1VSQ0VTCiAgICAgT1NSYW5kb21T
b3VyY2UuY3BwCiAgICAgUGFnZUJsb2NrLmNwcAogICAgIFBhcmFsbGVsSm9ic0dlbmVyaWMuY3Bw
CisgICAgUGFya2luZ0xvdC5jcHAKICAgICBQcmludFN0cmVhbS5jcHAKICAgICBSQU1TaXplLmNw
cAogICAgIFJhbmRvbU51bWJlci5jcHAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Mb2NrLmgJKHJldmlzaW9uIDE4ODIyOSkKKysrIFNv
dXJjZS9XVEYvd3RmL0xvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiwzMyBAQCBu
YW1lc3BhY2UgV1RGIHsKIC8vICAgYWNxdWlzaXRpb24gb3JkZXIgdW5kZXIgY29udGVudGlvbi4g
VGhlIHNhbWUgY2F2ZWF0IGlzIGdlbmVyYWxseSB0cnVlIG9mIFNwaW5Mb2NrIGFuZCBwbGF0Zm9y
bQogLy8gICBtdXRleGVzIG9uIHNvbWUgcGxhdGZvcm1zLgogCisvLyBGSVhNRTogV2UgY291bGQg
bWFrZSB0aGlzIExvY2sgbW9yZSBlZmZpY2llbnQgYnkgdXNpbmcgUGFya2luZ0xvdCBhbmQgYXRv
bWljIGFkZCBpbnN0ZWFkIG9mIENBUy4KKy8vIFRoZSBsb2NrIHdvdWxkIGJlIGF2YWlsYWJsZSBp
ZiB0aGUgMzItYml0IGxvY2sgd29yZCA8PSAxLiBMb2NraW5nIHdvdWxkIGF0b21pY2FsbHkgYWRk
IDIgdG8gdGhlCisvLyB3b3JkLiBUaGUgbG9jayB3b3VsZCBiZSBrbm93biB0byBiZSBoZWxkIGlm
IHRoZSBvbGQgdmFsdWUgb2YgdGhlIHdvcmQgd2FzIDw9IDEuIFRoZSBsb3cgYml0CisvLyBqdXN0
IGluZGljYXRlcyBpZiBhbnlvbmUgaXMgd2FpdGluZy4gSWYgdGhlIHdvcmQgd2FzID49IDIgYWZ0
ZXIgdGhlIGF0b21pYyBhZGQsIHdlIHdvdWxkIGdvIHRvIGEKKy8vIHNsb3cgcGF0aCB0aGF0IHJl
cGVhdGVkbHkgYXR0ZW1wdHMgdG8gc2V0IHRoZSBsb2NrIHdvcmQgdG8gMyBbc2ljXSBmcm9tIDAg
b3IgMSwgYW5kIHBhcmtzIGlmIHRoYXQncworLy8gbm90IHBvc3NpYmxlLiBUaGUgc2xvdyBwYXRo
IGNvdWxkIGFsc28gcGVyZm9ybSBkZWZlbnNpdmUgZml4dXAgdGhhdCBkcm9wcyB0aGUgbG9jayB2
YWx1ZSBkb3duIHRvCisvLyAzIGlmIGl0IHdhcyBncmVhdGVyIHRoYW4gMywgYW55dGltZSB0aGF0
IGl0IG5lZWRlZCB0byBnbyB0byBwYXJrLiBUaGUgdW5sb2NrIGZhc3QgcGF0aCB3b3VsZAorLy8g
YXRvbWljYWxseSBzdWJ0cmFjdCAyLiBJZiB0aGUgZGVjcmVtZW50IG9wZXJhdGlvbiBkb2VzIG5v
dCBjYXVzZSB0aGUgY291bnQgdG8gemVybywgaXQgd291bGQgZ28gdG8KKy8vIGEgc2xvdyBwYXRo
LiBUaGUgc2xvdyBwYXRoIHdvdWxkIHVucGFyayBvbmUuIElmIHVucGFya2luZyByZXR1cm5zIGZh
bHNlLCB0aGUgc2xvdyBwYXRoIHdvdWxkCisvLyBhdHRlbXB0IGEgc3Ryb25nIENBUyBmcm9tIDEg
dG8gMC4gSXQgd291bGRuJ3QgZG8gYW55dGhpbmcgaWYgdGhlIENBUyBmYWlscywgc2luY2UgdGhl
IG9ubHkgZ29hbCBvZgorLy8gdGhhdCBDQVMgaXMgdG8gdGVsbCBmdXR1cmUgdW5sb2NrIGZhc3Qg
cGF0aHMgdGhhdCB0aGVyZSBpcyBwb3NzaWJseSBhIHRocmVhZCBwYXJrZWQuIEFzIHN1Y2ggdGhl
CisvLyBzdGF0ZXMgb2YgdGhlIGxvY2sgYXJlOgorLy8KKy8vICAgMDogbG9jayBhdmFpbGFibGUg
YW5kIG5vYm9keSB3YWl0aW5nCisvLyAgIDE6IGxvY2sgYXZhaWxhYmxlIGFuZCB0aGVyZSBtYXkg
YmUgdGhyZWFkcyB3YWl0aW5nCisvLyAgIDI6IGxvY2sgdGFrZW4gYW5kIG5vIHRocmVhZHMgd2Fp
dGluZworLy8gPj0zOiBsb2NrIHRha2VuIGFuZCB0aHJlYWRzIHdhaXRpbmcKKy8vCisvLyBJdCBt
YXkgYmUgcG9zc2libGUgdG8gZGVzaWduIGFuIGV2ZW4gYmV0dGVyIGxvY2sgaW1wbGVtZW50YXRp
b24gYmFzZWQgb24gYXRvbWljIGluY3JlbWVudHMgcmF0aGVyCisvLyB0aGFuIGF0b21pYyArPTIv
LT0yLgorLy8KKy8vIE5vdGUgdGhhdCBiZWNhdXNlIFBhcmtpbmdMb3QgdXNlcyB0aGlzIGxvY2sg
aW50ZXJuYWxseSwgd2Ugd291bGQgcHJvYmFibHkgcmVuYW1lIHRoaXMgbG9jaworLy8gaW1wbGVt
ZW50YXRpb24gdG8gc29tZXRoaW5nIGxpa2UgQm9vdHN0cmFwTG9jayBvciBldmVuIG1ha2UgaXQg
cGFydCBvZiBhbiBhbm9ueW1vdXMgbmFtZXNwYWNlCisvLyBpbnNpZGUgUGFya2luZ0xvdC4KKy8v
CisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3ODQxCisKIC8v
IFRoaXMgaXMgYSBzdHJ1Y3Qgd2l0aG91dCBhIGNvbnN0cnVjdG9yIG9yIGRlc3RydWN0b3Igc28g
dGhhdCBpdCBjYW4gYmUgc3RhdGljYWxseSBpbml0aWFsaXplZC4KIC8vIFVzZSBMb2NrIGluIGlu
c3RhbmNlIHZhcmlhYmxlcy4KIHN0cnVjdCBMb2NrQmFzZSB7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QYXJraW5nTG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJraW5nTG90
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1BhcmtpbmdMb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYXJraW5n
TG90LmgiCisKKyNpbmNsdWRlICJIYXNoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSAiTG9jay5oIgor
I2luY2x1ZGUgIlN0cmluZ1ByaW50U3RyZWFtLmgiCisjaW5jbHVkZSAiVGhyZWFkU3BlY2lmaWMu
aCIKKyNpbmNsdWRlICJUaHJlYWRpbmdQcmltaXRpdmVzLmgiCisjaW5jbHVkZSAiVmVjdG9yLmgi
CisjaW5jbHVkZSA8Y29uZGl0aW9uX3ZhcmlhYmxlPgorI2luY2x1ZGUgPG11dGV4PgorI2luY2x1
ZGUgPHRocmVhZD4KKworbmFtZXNwYWNlIFdURiB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgdmVy
Ym9zZSA9IGZhbHNlOworCitzdHJ1Y3QgVGhyZWFkRGF0YSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgCisgICAgVGhyZWFkRGF0YSgpOworICAgIH5UaHJlYWRE
YXRhKCk7CisKKyAgICBUaHJlYWRJZGVudGlmaWVyIHRocmVhZElkZW50aWZpZXI7CisgICAgCisg
ICAgYm9vbCBzaG91bGRQYXJrIHsgZmFsc2UgfTsKKyAgICBzdGQ6Om11dGV4IHBhcmtpbmdMb2Nr
OworICAgIHN0ZDo6Y29uZGl0aW9uX3ZhcmlhYmxlIHBhcmtpbmdDb25kaXRpb247CisKKyAgICBj
b25zdCB2b2lkKiBhZGRyZXNzOworICAgIFRocmVhZERhdGEqIG5leHRJblF1ZXVlIHsgbnVsbHB0
ciB9OworfTsKKworZW51bSBjbGFzcyBEZXF1ZXVlUmVzdWx0IHsKKyAgICBJZ25vcmUsCisgICAg
UmVtb3ZlQW5kQ29udGludWUsCisgICAgUmVtb3ZlQW5kU3RvcAorfTsKKworc3RydWN0IEJ1Y2tl
dCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdm9pZCBlbnF1
ZXVlKFRocmVhZERhdGEqIGRhdGEpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBlbnF1ZXVlaW5nICIs
IFJhd1BvaW50ZXIoZGF0YSksICIgd2l0aCBhZGRyZXNzID0gIiwgUmF3UG9pbnRlcihkYXRhLT5h
ZGRyZXNzKSwgIiBvbnRvICIsIFJhd1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgQVNT
RVJUKGRhdGEtPmFkZHJlc3MpOworICAgICAgICBBU1NFUlQoIWRhdGEtPm5leHRJblF1ZXVlKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChxdWV1ZVRhaWwpIHsKKyAgICAgICAgICAgIHF1ZXVlVGFp
bC0+bmV4dEluUXVldWUgPSBkYXRhOworICAgICAgICAgICAgcXVldWVUYWlsID0gZGF0YTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHF1ZXVlSGVhZCA9IGRhdGE7
CisgICAgICAgIHF1ZXVlVGFpbCA9IGRhdGE7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGdlbmVyaWNEZXF1ZXVlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nIGZyb20gYnVja2V0IGF0ICIsIFJh
d1BvaW50ZXIodGhpcyksICJcbiIpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghcXVldWVIZWFk
KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRv
U3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZW1wdHkuXG4iKSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGlzIGxvb3AgaXMgYSB2ZXJ5IGNsZXZlciBh
Ym9taW5hdGlvbi4gVGhlIGluZHVjdGlvbiB2YXJpYWJsZXMgYXJlIHRoZSBwb2ludGVyIHRvIHRo
ZQorICAgICAgICAvLyBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5vZGUsIGFuZCB0aGUgcG9pbnRl
ciB0byB0aGUgcHJldmlvdXMgbm9kZS4gVGhpcyBnaXZlcyB1cyBldmVyeXRoaW5nCisgICAgICAg
IC8vIHdlIG5lZWQgdG8gYm90aCBwcm9jZWVkIGZvcndhcmQgdG8gdGhlIG5leHQgbm9kZSwgYW5k
IHRvIHJlbW92ZSBub2RlcyB3aGlsZSBtYWludGFpbmluZyB0aGUKKyAgICAgICAgLy8gcXVldWVI
ZWFkL3F1ZXVlVGFpbCBhbmQgYWxsIG9mIHRoZSBuZXh0SW5RdWV1ZSBsaW5rcy4gRm9yIGV4YW1w
bGUsIHdoZW4gd2UgYXJlIGF0IHRoZSBoZWFkCisgICAgICAgIC8vIGVsZW1lbnQsIHRoZW4gcmVt
b3ZhbCBtZWFucyByZXdpcmluZyBxdWV1ZUhlYWQsIGFuZCBpZiBpdCB3YXMgYWxzbyBlcXVhbCB0
byBxdWV1ZVRhaWwsIHRoZW4KKyAgICAgICAgLy8gd2UnZCB3YW50IHF1ZXVlVGFpbCB0byBiZSBz
ZXQgdG8gbnVsbHB0ci4gVGhpcyB3b3JrcyBiZWNhdXNlOgorICAgICAgICAvLworICAgICAgICAv
LyAgICAgY3VycmVudFB0ciA9PSAmcXVldWVIZWFkCisgICAgICAgIC8vICAgICBwcmV2aW91cyA9
PSBudWxscHRyCisgICAgICAgIC8vCisgICAgICAgIC8vIFdlIHJlbW92ZSBieSBzZXR0aW5nICpj
dXJyZW50UHRyID0gKCpjdXJyZW50UHRyKS0+bmV4dEluUXVldWUsIGkuZS4gY2hhbmdpbmcgdGhl
IHBvaW50ZXIKKyAgICAgICAgLy8gdGhhdCB1c2VkIHRvIHBvaW50IHRvIHRoaXMgbm9kZSB0byBp
bnN0ZWFkIHBvaW50IHRvIHRoaXMgbm9kZSdzIHN1Y2Nlc3Nvci4gQW5vdGhlciBleGFtcGxlOgor
ICAgICAgICAvLyBpZiB3ZSB3ZXJlIGF0IHRoZSBzZWNvbmQgbm9kZSBpbiB0aGUgcXVldWUsIHRo
ZW4gd2UnZCBoYXZlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgY3VycmVudFB0ciA9PSAm
cXVldWVIZWFkLT5uZXh0SW5RdWV1ZQorICAgICAgICAvLyAgICAgcHJldmlvdXMgPT0gcXVldWVI
ZWFkCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgbm9kZSBpcyBub3QgZXF1YWwgdG8g
cXVldWVUYWlsLCB0aGVuIHJlbW92aW5nIGl0IHNpbXBseSBtZWFucyBtYWtpbmcKKyAgICAgICAg
Ly8gcXVldWVIZWFkLT5uZXh0SW5RdWV1ZSBwb2ludCB0byBxdWV1ZUhlYWQtPm5leHRJblF1ZXVl
LT5uZXh0SW5RdWV1ZSAod2hpY2ggdGhlIGFsZ29yaXRobQorICAgICAgICAvLyBhY2hpZXZlcyBi
eSBtdXRhdGluZyAqY3VycmVudFB0cikuIElmIHRoaXMgbm9kZSBpcyBlcXVhbCB0byBxdWV1ZVRh
aWwsIHRoZW4gd2Ugd2FudCB0byBzZXQKKyAgICAgICAgLy8gcXVldWVUYWlsIHRvIHByZXZpb3Vz
LCB3aGljaCBpbiB0aGlzIGNhc2UgaXMgcXVldWVIZWFkIC0gdGh1cyBtYWtpbmcgdGhlIHF1ZXVl
IGxvb2sgbGlrZSBhCisgICAgICAgIC8vIHByb3BlciBvbmUtZWxlbWVudCBxdWV1ZSB3aXRoIHF1
ZXVlSGVhZCA9PSBxdWV1ZVRhaWwuCisgICAgICAgIGJvb2wgc2hvdWxkQ29udGludWUgPSB0cnVl
OworICAgICAgICBUaHJlYWREYXRhKiogY3VycmVudFB0ciA9ICZxdWV1ZUhlYWQ7CisgICAgICAg
IFRocmVhZERhdGEqIHByZXZpb3VzID0gbnVsbHB0cjsKKyAgICAgICAgd2hpbGUgKHNob3VsZENv
bnRpbnVlKSB7CisgICAgICAgICAgICBUaHJlYWREYXRhKiBjdXJyZW50ID0gKmN1cnJlbnRQdHI7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogZ290IHRocmVhZCAiLCBSYXdQb2ludGVyKGN1cnJlbnQp
LCAiXG4iKSk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnQpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBEZXF1ZXVlUmVzdWx0IHJlc3VsdCA9IGZ1bmN0b3IoY3VycmVudCk7
CisgICAgICAgICAgICBzd2l0Y2ggKHJlc3VsdCkgeworICAgICAgICAgICAgY2FzZSBEZXF1ZXVl
UmVzdWx0OjpJZ25vcmU6CisgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBjdXJyZW50UHRy
ID0gIiwgUmF3UG9pbnRlcihjdXJyZW50UHRyKSwgIiwgKmN1cnJlbnRQdHIgPSAiLCBSYXdQb2lu
dGVyKCpjdXJyZW50UHRyKSwgIlxuIikpOworICAgICAgICAgICAgICAgIHByZXZpb3VzID0gY3Vy
cmVudDsKKyAgICAgICAgICAgICAgICBjdXJyZW50UHRyID0gJigqY3VycmVudFB0ciktPm5leHRJ
blF1ZXVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEZXF1ZXVl
UmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZToKKyAgICAgICAgICAgIGNhc2UgRGVxdWV1ZVJlc3Vs
dDo6UmVtb3ZlQW5kU3RvcDoKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRlcXVldWVp
bmcgIiwgUmF3UG9pbnRlcihjdXJyZW50KSwgIiBmcm9tICIsIFJhd1BvaW50ZXIodGhpcyksICJc
biIpKTsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudCA9PSBxdWV1ZVRhaWwpCisgICAgICAg
ICAgICAgICAgICAgIHF1ZXVlVGFpbCA9IHByZXZpb3VzOworICAgICAgICAgICAgICAgICpjdXJy
ZW50UHRyID0gY3VycmVudC0+bmV4dEluUXVldWU7CisgICAgICAgICAgICAgICAgY3VycmVudC0+
bmV4dEluUXVldWUgPSBudWxscHRyOworICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRGVx
dWV1ZVJlc3VsdDo6UmVtb3ZlQW5kU3RvcCkKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkQ29u
dGludWUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIEFTU0VSVCghIXF1ZXVlSGVhZCA9PSAhIXF1ZXVlVGFpbCk7Cisg
ICAgfQorICAgIAorICAgIFRocmVhZERhdGEqIGRlcXVldWUoKQorICAgIHsKKyAgICAgICAgVGhy
ZWFkRGF0YSogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICAgICAgZ2VuZXJpY0RlcXVldWUoCisgICAg
ICAgICAgICBbJl0gKFRocmVhZERhdGEqIGVsZW1lbnQpIC0+IERlcXVldWVSZXN1bHQgeworICAg
ICAgICAgICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIERl
cXVldWVSZXN1bHQ6OlJlbW92ZUFuZFN0b3A7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBUaHJlYWREYXRhKiBxdWV1ZUhlYWQgeyBudWxscHRy
IH07CisgICAgVGhyZWFkRGF0YSogcXVldWVUYWlsIHsgbnVsbHB0ciB9OworCisgICAgLy8gVGhp
cyBsb2NrIHByb3RlY3RzIHRoZSBlbnRpcmUgYnVja2V0LiBUaG91IHNoYWxsIG5vdCBtYWtlIGNo
YW5nZXMgdG8gQnVja2V0IHdpdGhvdXQgaG9sZGluZworICAgIC8vIHRoaXMgbG9jay4KKyAgICBM
b2NrIGxvY2s7CisKKyAgICAvLyBQdXQgc29tZSBkaXN0YW5lIGJldHdlZW4gYnVja2V0cyBpbiBt
ZW1vcnkuIFRoaXMgaXMgb25lIG9mIHNldmVyYWwgbWl0aWdhdGlvbnMgYWdhaW5zdCBmYWxzZQor
ICAgIC8vIHNoYXJpbmcuCisgICAgY2hhciBwYWRkaW5nWzY0XTsKK307CisKK3N0cnVjdCBIYXNo
dGFibGUgeworICAgIHVuc2lnbmVkIHNpemU7CisgICAgQXRvbWljPEJ1Y2tldCo+IGRhdGFbMV07
CisKKyAgICBzdGF0aWMgSGFzaHRhYmxlKiBjcmVhdGUodW5zaWduZWQgc2l6ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChzaXplID49IDEpOworICAgICAgICAKKyAgICAgICAgSGFzaHRhYmxlKiBy
ZXN1bHQgPSBzdGF0aWNfY2FzdDxIYXNodGFibGUqPigKKyAgICAgICAgICAgIGZhc3RaZXJvZWRN
YWxsb2Moc2l6ZW9mKEhhc2h0YWJsZSkgKyBzaXplb2YoQXRvbWljPEJ1Y2tldCo+KSAqIChzaXpl
IC0gMSkpKTsKKyAgICAgICAgcmVzdWx0LT5zaXplID0gc2l6ZTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEhhc2h0YWJsZSogaGFzaHRh
YmxlKQorICAgIHsKKyAgICAgICAgZmFzdEZyZWUoaGFzaHRhYmxlKTsKKyAgICB9Cit9OworCitU
aHJlYWRTcGVjaWZpYzxUaHJlYWREYXRhPiogdGhyZWFkRGF0YTsKK0F0b21pYzxIYXNodGFibGUq
PiBoYXNodGFibGU7CitBdG9taWM8dW5zaWduZWQ+IG51bVRocmVhZHM7CisKKy8vIFdpdGggNjQg
Ynl0ZXMgb2YgcGFkZGluZyBwZXIgYnVja2V0LCBhc3N1bWluZyBhIGhhc2h0YWJsZSBpcyBmdWxs
eSBwb3B1bGF0ZWQgd2l0aCBidWNrZXRzLCB0aGUKKy8vIG1lbW9yeSB1c2FnZSBwZXIgdGhyZWFk
IHdpbGwgc3RpbGwgYmUgbGVzcyB0aGFuIDFLQi4KK2NvbnN0IHVuc2lnbmVkIG1heExvYWRGYWN0
b3IgPSAzOworCitjb25zdCB1bnNpZ25lZCBncm93dGhGYWN0b3IgPSAyOworCit1bnNpZ25lZCBo
YXNoQWRkcmVzcyhjb25zdCB2b2lkKiBhZGRyZXNzKQoreworICAgIHJldHVybiBXVEY6OlB0ckhh
c2g8Y29uc3Qgdm9pZCo+OjpoYXNoKGFkZHJlc3MpOworfQorCisvLyBMb2NrcyB0aGUgaGFzaHRh
YmxlLiBUaGlzIHJlbG9vcHMgaW4gY2FzZSBvZiByZWhhc2hpbmcsIHNvIHRoZSBjdXJyZW50IGhh
c2h0YWJsZSBtYXkgYmUgZGlmZmVyZW50CisvLyBhZnRlciB0aGlzIHJldHVybnMgdGhhbiB3aGVu
IHlvdSBjYWxsZWQgaXQuIEd1YXJhbnRlZXMgdGhhdCB0aGVyZSBpcyBhIGhhc2h0YWJsZS4gVGhp
cyBpcyBwcmV0dHkKKy8vIHNsb3cgYW5kIG5vdCBzY2FsYWJsZSwgc28gaXQncyBvbmx5IHVzZWQg
ZHVyaW5nIHRocmVhZCBjcmVhdGlvbiBhbmQgZm9yIGRlYnVnZ2luZy90ZXN0aW5nLgorVmVjdG9y
PEJ1Y2tldCo+IGxvY2tIYXNodGFibGUoKQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFz
aHRhYmxlKiBjdXJyZW50SGFzaHRhYmxlOworCisgICAgICAgIGN1cnJlbnRIYXNodGFibGUgPSBo
YXNodGFibGUubG9hZCgpOworICAgICAgICBpZiAoIWN1cnJlbnRIYXNodGFibGUpIHsKKyAgICAg
ICAgICAgIC8vIFRyeSB0byBiZSB0aGUgZmlyc3QgdG8gY3JlYXRlIHRoZSBoYXNodGFibGUuCisg
ICAgICAgICAgICBjdXJyZW50SGFzaHRhYmxlID0gSGFzaHRhYmxlOjpjcmVhdGUobWF4TG9hZEZh
Y3Rvcik7CisgICAgICAgICAgICBpZiAoIWhhc2h0YWJsZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG51
bGxwdHIsIGN1cnJlbnRIYXNodGFibGUpKSB7CisgICAgICAgICAgICAgICAgSGFzaHRhYmxlOjpk
ZXN0cm95KGN1cnJlbnRIYXNodGFibGUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGNyZWF0ZWQgaW5pdGlhbCBoYXNodGFi
bGUgIiwgUmF3UG9pbnRlcihjdXJyZW50SGFzaHRhYmxlKSwgIlxuIikpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gTm93IGZpbmQgYWxsIG9mIHRoZSBidWNrZXRzLiBUaGlzIG1ha2VzIHN1cmUg
dGhhdCB0aGUgaGFzaHRhYmxlIGlzIGZ1bGwgb2YgYnVja2V0cyBzbyB0aGF0CisgICAgICAgIC8v
IHdlIGNhbiBsb2NrIGFsbCBvZiB0aGUgYnVja2V0cywgbm90IGp1c3QgdGhlIG9uZXMgdGhhdCBh
cmUgbWF0ZXJpYWxpemVkLgorICAgICAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0czsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gY3VycmVudEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykgeworICAg
ICAgICAgICAgQXRvbWljPEJ1Y2tldCo+JiBidWNrZXRQb2ludGVyID0gY3VycmVudEhhc2h0YWJs
ZS0+ZGF0YVtpXTsKKworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIEJ1
Y2tldCogYnVja2V0ID0gYnVja2V0UG9pbnRlci5sb2FkKCk7CisKKyAgICAgICAgICAgICAgICBp
ZiAoIWJ1Y2tldCkgeworICAgICAgICAgICAgICAgICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghYnVja2V0UG9pbnRlci5jb21wYXJlRXhjaGFuZ2VX
ZWFrKG51bGxwdHIsIGJ1Y2tldCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBi
dWNrZXQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJ1Y2tldHMuYXBw
ZW5kKGJ1Y2tldCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLyBOb3cgbG9jayB0aGUgYnVja2V0cyBpbiB0aGUgcmlnaHQgb3Jk
ZXIuCisgICAgICAgIHN0ZDo6c29ydChidWNrZXRzLmJlZ2luKCksIGJ1Y2tldHMuZW5kKCkpOwor
ICAgICAgICBmb3IgKEJ1Y2tldCogYnVja2V0IDogYnVja2V0cykKKyAgICAgICAgICAgIGJ1Y2tl
dC0+bG9jay5sb2NrKCk7CisKKyAgICAgICAgLy8gSWYgdGhlIGhhc2h0YWJsZSBkaWRuJ3QgY2hh
bmdlICh3YXNuJ3QgcmVoYXNoZWQpIHdoaWxlIHdlIHdlcmUgbG9ja2luZyBpdCwgdGhlbiB3ZSBv
d24gaXQKKyAgICAgICAgLy8gbm93LgorICAgICAgICBpZiAoaGFzaHRhYmxlLmxvYWQoKSA9PSBj
dXJyZW50SGFzaHRhYmxlKQorICAgICAgICAgICAgcmV0dXJuIGJ1Y2tldHM7CisKKyAgICAgICAg
Ly8gVGhlIGhhc2h0YWJsZSByZWhhc2hlZC4gVW5sb2NrIGV2ZXJ5dGhpbmcgYW5kIHRyeSBhZ2Fp
bi4KKyAgICAgICAgZm9yIChCdWNrZXQqIGJ1Y2tldCA6IGJ1Y2tldHMpCisgICAgICAgICAgICBi
dWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgfQorfQorCit2b2lkIHVubG9ja0hhc2h0YWJsZShj
b25zdCBWZWN0b3I8QnVja2V0Kj4mIGJ1Y2tldHMpCit7CisgICAgZm9yIChCdWNrZXQqIGJ1Y2tl
dCA6IGJ1Y2tldHMpCisgICAgICAgIGJ1Y2tldC0+bG9jay51bmxvY2soKTsKK30KKworLy8gUmVo
YXNoIHRoZSBoYXNodGFibGUgdG8gaGFuZGxlIG51bVRocmVhZHMgdGhyZWFkcy4KK3ZvaWQgZW5z
dXJlSGFzaHRhYmxlU2l6ZSh1bnNpZ25lZCBudW1UaHJlYWRzKQoreworICAgIC8vIFdlIHRyeSB0
byBlbnN1cmUgdGhhdCB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlIHVzZWQgZm9yIHRocmVhZCBx
dWV1ZXMgaXMgYWx3YXlzIGxhcmdlIGVub3VnaAorICAgIC8vIHRvIGF2b2lkIGNvbGxpc2lvbnMu
IFNvLCBzaW5jZSB3ZSBzdGFydGVkIGEgbmV3IHRocmVhZCwgd2UgbWF5IG5lZWQgdG8gaW5jcmVh
c2UgdGhlIHNpemUgb2YgdGhlCisgICAgLy8gaGFzaHRhYmxlLiBUaGlzIGRvZXMganVzdCB0aGF0
LiBOb3RlIHRoYXQgd2UgbmV2ZXIgZnJlZSB0aGUgb2xkIHNwaW5lLCBzaW5jZSB3ZSBuZXZlciBs
b2NrCisgICAgLy8gYXJvdW5kIHNwaW5lIGFjY2Vzc2VzIChpLmUuIHRoZSAiaGFzaHRhYmxlIiBn
bG9iYWwgdmFyaWFibGUpLgorCisgICAgLy8gRmlyc3QgZG8gYSBmYXN0IGNoZWNrIHRvIHNlZSBp
ZiByZWhhc2hpbmcgaXMgbmVlZGVkLgorICAgIEhhc2h0YWJsZSogb2xkSGFzaHRhYmxlID0gaGFz
aHRhYmxlLmxvYWQoKTsKKyAgICBpZiAob2xkSGFzaHRhYmxlICYmIHN0YXRpY19jYXN0PGRvdWJs
ZT4ob2xkSGFzaHRhYmxlLT5zaXplKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4obnVtVGhyZWFkcykg
Pj0gbWF4TG9hZEZhY3RvcikgeworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBubyBuZWVkIHRvIHJlaGFzaCBiZWNh
dXNlICIsIG9sZEhhc2h0YWJsZS0+c2l6ZSwgIiAvICIsIG51bVRocmVhZHMsICIgPj0gIiwgbWF4
TG9hZEZhY3RvciwgIlxuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gU2Vl
bXMgbGlrZSB3ZSAqbWlnaHQqIGhhdmUgdG8gcmVoYXNoLCBzbyBsb2NrIHRoZSBoYXNodGFibGUg
YW5kIHRyeSBhZ2Fpbi4KKyAgICBWZWN0b3I8QnVja2V0Kj4gYnVja2V0c1RvVW5sb2NrID0gbG9j
a0hhc2h0YWJsZSgpOworCisgICAgLy8gQ2hlY2sgYWdhaW4sIHNpbmNlIHRoZSBoYXNodGFibGUg
Y291bGQgaGF2ZSByZWhhc2hlZCB3aGlsZSB3ZSB3ZXJlIGxvY2tpbmcgaXQuIEFsc28sCisgICAg
Ly8gbG9ja0hhc2h0YWJsZSgpIGNyZWF0ZXMgYW4gaW5pdGlhbCBoYXNodGFibGUgZm9yIHVzLgor
ICAgIG9sZEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgaWYgKG9sZEhhc2h0YWJs
ZSAmJiBzdGF0aWNfY2FzdDxkb3VibGU+KG9sZEhhc2h0YWJsZS0+c2l6ZSkgLyBzdGF0aWNfY2Fz
dDxkb3VibGU+KG51bVRocmVhZHMpID49IG1heExvYWRGYWN0b3IpIHsKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjog
YWZ0ZXIgbG9ja2luZywgbm8gbmVlZCB0byByZWhhc2ggYmVjYXVzZSAiLCBvbGRIYXNodGFibGUt
PnNpemUsICIgLyAiLCBudW1UaHJlYWRzLCAiID49ICIsIG1heExvYWRGYWN0b3IsICJcbiIpKTsK
KyAgICAgICAgdW5sb2NrSGFzaHRhYmxlKGJ1Y2tldHNUb1VubG9jayk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBWZWN0b3I8QnVja2V0Kj4gcmV1c2FibGVCdWNrZXRzID0gYnVja2V0
c1RvVW5sb2NrOworCisgICAgLy8gT0ssIG5vdyB3ZSByZXNpemUuIEZpcnN0IHdlIGdhdGhlciBh
bGwgdGhyZWFkIGRhdGFzIGZyb20gdGhlIG9sZCBoYXNodGFibGUuIFRoZXNlIHRocmVhZCBkYXRh
cworICAgIC8vIGFyZSBwbGFjZWQgaW50byB0aGUgdmVjdG9yIGluIHF1ZXVlIG9yZGVyLgorICAg
IFZlY3RvcjxUaHJlYWREYXRhKj4gdGhyZWFkRGF0YXM7CisgICAgZm9yIChCdWNrZXQqIGJ1Y2tl
dCA6IHJldXNhYmxlQnVja2V0cykgeworICAgICAgICB3aGlsZSAoVGhyZWFkRGF0YSogdGhyZWFk
RGF0YSA9IGJ1Y2tldC0+ZGVxdWV1ZSgpKQorICAgICAgICAgICAgdGhyZWFkRGF0YXMuYXBwZW5k
KHRocmVhZERhdGEpOworICAgIH0KKworICAgIHVuc2lnbmVkIG5ld1NpemUgPSBudW1UaHJlYWRz
ICogZ3Jvd3RoRmFjdG9yICogbWF4TG9hZEZhY3RvcjsKKyAgICBSRUxFQVNFX0FTU0VSVChuZXdT
aXplID4gb2xkSGFzaHRhYmxlLT5zaXplKTsKKyAgICAKKyAgICBIYXNodGFibGUqIG5ld0hhc2h0
YWJsZSA9IEhhc2h0YWJsZTo6Y3JlYXRlKG5ld1NpemUpOworICAgIGlmICh2ZXJib3NlKQorICAg
ICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogY3JlYXRlZCBuZXcgaGFz
aHRhYmxlOiAiLCBSYXdQb2ludGVyKG5ld0hhc2h0YWJsZSksICJcbiIpKTsKKyAgICBmb3IgKFRo
cmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykgeworICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiByZWhh
c2hpbmcgdGhyZWFkIGRhdGEgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIiB3aXRoIGFkZHJl
c3MgPSAiLCBSYXdQb2ludGVyKHRocmVhZERhdGEtPmFkZHJlc3MpLCAiXG4iKSk7CisgICAgICAg
IHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyh0aHJlYWREYXRhLT5hZGRyZXNzKTsKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXggPSBoYXNoICUgbmV3SGFzaHRhYmxlLT5zaXplOworICAgICAgICBp
ZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgp
LCAiOiBpbmRleCA9ICIsIGluZGV4LCAiXG4iKSk7CisgICAgICAgIEJ1Y2tldCogYnVja2V0ID0g
bmV3SGFzaHRhYmxlLT5kYXRhW2luZGV4XS5sb2FkKCk7CisgICAgICAgIGlmICghYnVja2V0KSB7
CisgICAgICAgICAgICBpZiAocmV1c2FibGVCdWNrZXRzLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBidWNrZXQgPSBuZXcgQnVja2V0KCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgYnVja2V0ID0gcmV1c2FibGVCdWNrZXRzLnRha2VMYXN0KCk7CisgICAgICAgICAgICBu
ZXdIYXNodGFibGUtPmRhdGFbaW5kZXhdLnN0b3JlKGJ1Y2tldCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJ1Y2tldC0+ZW5xdWV1ZSh0aHJlYWREYXRhKTsKKyAgICB9CisgICAgCisg
ICAgLy8gQXQgdGhpcyBwb2ludCB0aGVyZSBtYXkgYmUgc29tZSBidWNrZXRzIGxlZnQgdW5yZXVz
ZWQuIFRoaXMgY291bGQgZWFzaWx5IGhhcHBlbiBpZiB0aGUKKyAgICAvLyBudW1iZXIgb2YgZW5x
dWV1ZWQgdGhyZWFkcyByaWdodCBub3cgaXMgbG93IGJ1dCB0aGUgaGlnaCB3YXRlcm1hcmsgb2Yg
dGhlIG51bWJlciBvZiB0aHJlYWRzCisgICAgLy8gZW5xdWV1ZWQgd2FzIGhpZ2guIFdlIHBsYWNl
IHRoZXNlIGJ1Y2tldHMgaW50byB0aGUgaGFzaHRhYmxlIGJhc2ljYWxseSBhdCByYW5kb20sIGp1
c3QgdG8KKyAgICAvLyBtYWtlIHN1cmUgd2UgZG9uJ3QgbGVhayB0aGVtLgorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBuZXdIYXNodGFibGUtPnNpemUgJiYgIXJldXNhYmxlQnVja2V0cy5p
c0VtcHR5KCk7ICsraSkgeworICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFB0ciA9IG5l
d0hhc2h0YWJsZS0+ZGF0YVtpXTsKKyAgICAgICAgaWYgKGJ1Y2tldFB0ci5sb2FkKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnVja2V0UHRyLnN0b3JlKHJldXNhYmxlQnVja2V0
cy50YWtlTGFzdCgpKTsKKyAgICB9CisgICAgCisgICAgLy8gU2luY2Ugd2UgaW5jcmVhc2VkIHRo
ZSBzaXplIG9mIHRoZSBoYXNodGFibGUsIHdlIHNob3VsZCBoYXZlIGV4aGF1c3RlZCBvdXIgcHJl
YWxsb2NhdGVkCisgICAgLy8gYnVja2V0cyBieSBub3cuCisgICAgQVNTRVJUKHJldXNhYmxlQnVj
a2V0cy5pc0VtcHR5KCkpOworICAgIAorICAgIC8vIE9LLCByaWdodCBub3cgdGhlIG9sZCBoYXNo
dGFibGUgaXMgbG9ja2VkIHVwIGFuZCB0aGUgbmV3IGhhc2h0YWJsZSBpcyByZWFkeSB0byByb2Nr
IGFuZAorICAgIC8vIHJvbGwuIEFmdGVyIHdlIGluc3RhbGwgdGhlIG5ldyBoYXNodGFibGUsIHdl
IGNhbiByZWxlYXNlIGFsbCBidWNrZXQgbG9ja3MuCisgICAgCisgICAgYm9vbCByZXN1bHQgPSBo
YXNodGFibGUuY29tcGFyZUV4Y2hhbmdlU3Ryb25nKG9sZEhhc2h0YWJsZSwgbmV3SGFzaHRhYmxl
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQpOworCisgICAgdW5sb2NrSGFzaHRhYmxlKGJ1
Y2tldHNUb1VubG9jayk7Cit9CisKK1RocmVhZERhdGE6OlRocmVhZERhdGEoKQorICAgIDogdGhy
ZWFkSWRlbnRpZmllcihjdXJyZW50VGhyZWFkKCkpCit7CisgICAgdW5zaWduZWQgY3VycmVudE51
bVRocmVhZHM7CisgICAgZm9yICg7OykgeworICAgICAgICB1bnNpZ25lZCBvbGROdW1UaHJlYWRz
ID0gbnVtVGhyZWFkcy5sb2FkKCk7CisgICAgICAgIGN1cnJlbnROdW1UaHJlYWRzID0gb2xkTnVt
VGhyZWFkcyArIDE7CisgICAgICAgIGlmIChudW1UaHJlYWRzLmNvbXBhcmVFeGNoYW5nZVdlYWso
b2xkTnVtVGhyZWFkcywgY3VycmVudE51bVRocmVhZHMpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgZW5zdXJlSGFzaHRhYmxlU2l6ZShjdXJyZW50TnVtVGhyZWFkcyk7Cit9CisK
K1RocmVhZERhdGE6On5UaHJlYWREYXRhKCkKK3sKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHVu
c2lnbmVkIG9sZE51bVRocmVhZHMgPSBudW1UaHJlYWRzLmxvYWQoKTsKKyAgICAgICAgaWYgKG51
bVRocmVhZHMuY29tcGFyZUV4Y2hhbmdlV2VhayhvbGROdW1UaHJlYWRzLCBvbGROdW1UaHJlYWRz
IC0gMSkpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK1RocmVhZERhdGEqIG15VGhy
ZWFkRGF0YSgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGluaXRpYWxpemVPbmNlOwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBpbml0aWFsaXplT25jZSwKKyAgICAgICAgW10g
eworICAgICAgICAgICAgdGhyZWFkRGF0YSA9IG5ldyBUaHJlYWRTcGVjaWZpYzxUaHJlYWREYXRh
PigpOworICAgICAgICB9KTsKKworICAgIHJldHVybiAqdGhyZWFkRGF0YTsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KK2Jvb2wgZW5xdWV1ZShjb25zdCB2b2lkKiBhZGRyZXNzLCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVz
cyhhZGRyZXNzKTsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgSGFzaHRhYmxlKiBteUhhc2h0
YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gaGFzaCAl
IG15SGFzaHRhYmxlLT5zaXplOworICAgICAgICBBdG9taWM8QnVja2V0Kj4mIGJ1Y2tldFBvaW50
ZXIgPSBteUhhc2h0YWJsZS0+ZGF0YVtpbmRleF07CisgICAgICAgIEJ1Y2tldCogYnVja2V0Owor
ICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBidWNrZXQgPSBidWNrZXRQb2ludGVyLmxv
YWQoKTsKKyAgICAgICAgICAgIGlmICghYnVja2V0KSB7CisgICAgICAgICAgICAgICAgYnVja2V0
ID0gbmV3IEJ1Y2tldCgpOworICAgICAgICAgICAgICAgIGlmICghYnVja2V0UG9pbnRlci5jb21w
YXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIGJ1Y2tldCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIGJ1Y2tldDsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRU
aHJlYWQoKSwgIjogZW5xdWV1ZWluZyBvbnRvIGJ1Y2tldCAiLCBSYXdQb2ludGVyKGJ1Y2tldCks
ICIgd2l0aCBpbmRleCAiLCBpbmRleCwgIiBmb3IgYWRkcmVzcyAiLCBSYXdQb2ludGVyKGFkZHJl
c3MpLCAiIHdpdGggaGFzaCAiLCBoYXNoLCAiXG4iKSk7CisgICAgICAgIGJ1Y2tldC0+bG9jay5s
b2NrKCk7CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhh
dmUgcmVoYXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlmIChoYXNodGFibGUubG9hZCgpICE9IG15
SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIFRocmVhZERhdGEqIHRocmVhZERh
dGEgPSBmdW5jdG9yKCk7CisgICAgICAgIGJvb2wgcmVzdWx0OworICAgICAgICBpZiAodGhyZWFk
RGF0YSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
Zyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IHByb2NlZWRpbmcgdG8gZW5xdWV1ZSAiLCBS
YXdQb2ludGVyKHRocmVhZERhdGEpLCAiXG4iKSk7CisgICAgICAgICAgICBidWNrZXQtPmVucXVl
dWUodGhyZWFkRGF0YSk7CisgICAgICAgICAgICByZXN1bHQgPSB0cnVlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICBidWNrZXQtPmxvY2sudW5s
b2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorYm9vbCBkZXF1ZXVlKGNvbnN0IHZvaWQqIGFkZHJlc3MsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2codG9T
dHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBkZXF1ZXVlaW5nIGFkZHJlc3MgIiwgUmF3UG9pbnRl
cihhZGRyZXNzKSwgIlxuIikpOworICAgIHVuc2lnbmVkIGhhc2ggPSBoYXNoQWRkcmVzcyhhZGRy
ZXNzKTsKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50
VGhyZWFkKCksICI6IGhhc2ggPSAiLCBoYXNoLCAiXG4iKSk7CisKKyAgICBmb3IgKDs7KSB7Cisg
ICAgICAgIEhhc2h0YWJsZSogbXlIYXNodGFibGUgPSBoYXNodGFibGUubG9hZCgpOworICAgICAg
ICBpZiAoIW15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogbm8gaGFzaHRhYmxl
LlxuIikpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHVu
c2lnbmVkIGluZGV4ID0gaGFzaCAlIG15SGFzaHRhYmxlLT5zaXplOworICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiBp
bmRleCA9ICIsIGluZGV4LCAiXG4iKSk7CisgICAgICAgIEJ1Y2tldCogYnVja2V0ID0gbXlIYXNo
dGFibGUtPmRhdGFbaW5kZXhdLmxvYWQoKTsKKyAgICAgICAgaWYgKCFidWNrZXQpIHsKKyAgICAg
ICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiBubyBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiLlxu
IikpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwg
IjogbG9ja2luZyBidWNrZXQgYXQgIiwgUmF3UG9pbnRlcihidWNrZXQpLCAiXG4iKSk7CisgICAg
ICAgIGJ1Y2tldC0+bG9jay5sb2NrKCk7CisgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAg
ICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGxvY2tlZCBidWNrZXQgYXQg
IiwgUmF3UG9pbnRlcihidWNrZXQpLCAiXG4iKSk7CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCB0aGUgaGFzaHRhYmxlIGNvdWxkIGhhdmUgcmVoYXNoZWQgdW5kZXIgdXMuCisgICAgICAgIGlm
IChoYXNodGFibGUubG9hZCgpICE9IG15SGFzaHRhYmxlKSB7CisgICAgICAgICAgICBpZiAodmVy
Ym9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwg
IjogaGFzaHRhYmxlIGNoYW5nZWQuXG4iKSk7CisgICAgICAgICAgICBidWNrZXQtPmxvY2sudW5s
b2NrKCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6
IGZvdW5kIGJ1Y2tldC5cbiIpKTsKKyAgICAgICAgYnVja2V0LT5nZW5lcmljRGVxdWV1ZShmdW5j
dG9yKTsKKyAgICAgICAgYm9vbCByZXN1bHQgPSAhIWJ1Y2tldC0+cXVldWVIZWFkOworICAgICAg
ICBidWNrZXQtPmxvY2sudW5sb2NrKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
fQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCBQYXJraW5nTG90OjpwYXJrQ29u
ZGl0aW9uYWxseShjb25zdCB2b2lkKiBhZGRyZXNzLCBzdGQ6OmZ1bmN0aW9uPGJvb2woKT4gdmFs
aWRhdGlvbikKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhj
dXJyZW50VGhyZWFkKCksICI6IHBhcmtpbmcuXG4iKSk7CisgICAgCisgICAgVGhyZWFkRGF0YSog
bWUgPSBteVRocmVhZERhdGEoKTsKKworICAgIEFTU0VSVCghbWUtPnNob3VsZFBhcmspOworICAg
IAorICAgIGJvb2wgcmVzdWx0ID0gZW5xdWV1ZSgKKyAgICAgICAgYWRkcmVzcywKKyAgICAgICAg
WyZdICgpIC0+IFRocmVhZERhdGEqIHsKKyAgICAgICAgICAgIGlmICghdmFsaWRhdGlvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgICAgICBtZS0+YWRkcmVz
cyA9IGFkZHJlc3M7CisgICAgICAgICAgICBtZS0+c2hvdWxkUGFyayA9IHRydWU7CisgICAgICAg
ICAgICByZXR1cm4gbWU7CisgICAgICAgIH0pOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKHRvU3Ry
aW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogcGFya2luZyBzZWxmOiAiLCBSYXdQb2ludGVyKG1lKSwg
IlxuIikpOworICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2Nr
ZXIobWUtPnBhcmtpbmdMb2NrKTsKKyAgICAgICAgd2hpbGUgKG1lLT5zaG91bGRQYXJrKQorICAg
ICAgICAgICAgbWUtPnBhcmtpbmdDb25kaXRpb24ud2FpdChsb2NrZXIpOworCisgICAgICAgIG1l
LT5hZGRyZXNzID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRh
dGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBhcmtlZCBzZWxmOiAiLCBSYXdQ
b2ludGVyKG1lKSwgIlxuIikpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFBhcmtpbmdM
b3Q6OnVucGFya09uZShjb25zdCB2b2lkKiBhZGRyZXNzKQoreworICAgIGlmICh2ZXJib3NlKQor
ICAgICAgICBkYXRhTG9nKHRvU3RyaW5nKGN1cnJlbnRUaHJlYWQoKSwgIjogdW5wYXJraW5nIG9u
ZS5cbiIpKTsKKworICAgIFRocmVhZERhdGEqIHRocmVhZERhdGEgPSBudWxscHRyOworICAgIGJv
b2wgcmVzdWx0ID0gZGVxdWV1ZSgKKyAgICAgICAgYWRkcmVzcywKKyAgICAgICAgWyZdIChUaHJl
YWREYXRhKiBlbGVtZW50KSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+YWRkcmVzcyAhPSBh
ZGRyZXNzKQorICAgICAgICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpJZ25vcmU7Cisg
ICAgICAgICAgICB0aHJlYWREYXRhID0gZWxlbWVudDsKKyAgICAgICAgICAgIHJldHVybiBEZXF1
ZXVlUmVzdWx0OjpSZW1vdmVBbmRTdG9wOworICAgICAgICB9KTsKKworICAgIGlmICghdGhyZWFk
RGF0YSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQVNTRVJUKHRocmVhZERhdGEtPnNo
b3VsZFBhcmspOworICAgIAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11
dGV4PiBsb2NrZXIodGhyZWFkRGF0YS0+cGFya2luZ0xvY2spOworICAgICAgICB0aHJlYWREYXRh
LT5zaG91bGRQYXJrID0gZmFsc2U7CisgICAgICAgIHRocmVhZERhdGEtPnBhcmtpbmdDb25kaXRp
b24ubm90aWZ5X2FsbCgpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQg
UGFya2luZ0xvdDo6dW5wYXJrQWxsKGNvbnN0IHZvaWQqIGFkZHJlc3MpCit7CisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3VycmVudFRocmVhZCgpLCAiOiB1bnBh
cmtpbmcgYWxsIGZyb20gIiwgUmF3UG9pbnRlcihhZGRyZXNzKSwgIi5cbiIpKTsKKyAgICAKKyAg
ICBWZWN0b3I8VGhyZWFkRGF0YSosIDg+IHRocmVhZERhdGFzOworICAgIGRlcXVldWUoCisgICAg
ICAgIGFkZHJlc3MsCisgICAgICAgIFsmXSAoVGhyZWFkRGF0YSogZWxlbWVudCkgeworICAgICAg
ICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJy
ZW50VGhyZWFkKCksICI6IE9ic2VydmluZyBlbGVtZW50IHdpdGggYWRkcmVzcyA9ICIsIFJhd1Bv
aW50ZXIoZWxlbWVudC0+YWRkcmVzcyksICJcbiIpKTsKKyAgICAgICAgICAgIGlmIChlbGVtZW50
LT5hZGRyZXNzICE9IGFkZHJlc3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIERlcXVldWVSZXN1
bHQ6Oklnbm9yZTsKKyAgICAgICAgICAgIHRocmVhZERhdGFzLmFwcGVuZChlbGVtZW50KTsKKyAg
ICAgICAgICAgIHJldHVybiBEZXF1ZXVlUmVzdWx0OjpSZW1vdmVBbmRDb250aW51ZTsKKyAgICAg
ICAgfSk7CisKKyAgICBmb3IgKFRocmVhZERhdGEqIHRocmVhZERhdGEgOiB0aHJlYWREYXRhcykg
eworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2codG9TdHJpbmcoY3Vy
cmVudFRocmVhZCgpLCAiOiB1bnBhcmtpbmcgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhKSwgIiB3
aXRoIGFkZHJlc3MgIiwgUmF3UG9pbnRlcih0aHJlYWREYXRhLT5hZGRyZXNzKSwgIlxuIikpOwor
ICAgICAgICBBU1NFUlQodGhyZWFkRGF0YS0+c2hvdWxkUGFyayk7CisgICAgICAgIHN0ZDo6dW5p
cXVlX2xvY2s8c3RkOjptdXRleD4gbG9ja2VyKHRocmVhZERhdGEtPnBhcmtpbmdMb2NrKTsKKyAg
ICAgICAgdGhyZWFkRGF0YS0+c2hvdWxkUGFyayA9IGZhbHNlOworICAgICAgICB0aHJlYWREYXRh
LT5wYXJraW5nQ29uZGl0aW9uLm5vdGlmeV9hbGwoKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgZGF0YUxvZyh0b1N0cmluZyhjdXJyZW50VGhyZWFkKCksICI6IGRvbmUgdW5w
YXJraW5nLlxuIikpOworfQorCit2b2lkIFBhcmtpbmdMb3Q6OmZvckVhY2goc3RkOjpmdW5jdGlv
bjx2b2lkKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqKT4gY2FsbGJhY2spCit7CisgICAg
VmVjdG9yPEJ1Y2tldCo+IGJ1Y2tldHNUb1VubG9jayA9IGxvY2tIYXNodGFibGUoKTsKKworICAg
IEhhc2h0YWJsZSogY3VycmVudEhhc2h0YWJsZSA9IGhhc2h0YWJsZS5sb2FkKCk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gY3VycmVudEhhc2h0YWJsZS0+c2l6ZTsgaS0tOykgeworICAgICAgICBC
dWNrZXQqIGJ1Y2tldCA9IGN1cnJlbnRIYXNodGFibGUtPmRhdGFbaV0ubG9hZCgpOworICAgICAg
ICBpZiAoIWJ1Y2tldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmb3IgKFRocmVh
ZERhdGEqIGN1cnJlbnRUaHJlYWREYXRhID0gYnVja2V0LT5xdWV1ZUhlYWQ7IGN1cnJlbnRUaHJl
YWREYXRhOyBjdXJyZW50VGhyZWFkRGF0YSA9IGN1cnJlbnRUaHJlYWREYXRhLT5uZXh0SW5RdWV1
ZSkKKyAgICAgICAgICAgIGNhbGxiYWNrKGN1cnJlbnRUaHJlYWREYXRhLT50aHJlYWRJZGVudGlm
aWVyLCBjdXJyZW50VGhyZWFkRGF0YS0+YWRkcmVzcyk7CisgICAgfQorICAgIAorICAgIHVubG9j
a0hhc2h0YWJsZShidWNrZXRzVG9VbmxvY2spOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJ
bmRleDogU291cmNlL1dURi93dGYvUGFya2luZ0xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1BhcmtpbmdMb3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1Bhcmtp
bmdMb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV1RGX1BhcmtpbmdMb3RfaAor
I2RlZmluZSBXVEZfUGFya2luZ0xvdF9oCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1
ZGUgPHd0Zi9BdG9taWNzLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCitjbGFzcyBQYXJraW5nTG90IHsKKyAgICBQYXJraW5nTG90KCkgPSBk
ZWxldGU7CisgICAgUGFya2luZ0xvdChjb25zdCBQYXJraW5nTG90JikgPSBkZWxldGU7CisKK3B1
YmxpYzoKKyAgICAvLyBQYXJrcyB0aGUgdGhyZWFkIGluIGEgcXVldWUgYXNzb2NpYXRlZCB3aXRo
IHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5ub3QgYmUgbnVsbC4gVGhlCisgICAgLy8gcGFy
a2luZyBvbmx5IHN1Y2NlZWRzIGlmIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJldHVybnMgdHJ1
ZSB3aGlsZSB0aGUgcXVldWUgbG9jayBpcyBoZWxkLgorICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgdGhyZWFkIGFjdHVhbGx5IHNsZXB0LCBvciBmYWxzZSBpZiBpdCByZXR1cm5lZCBxdWlja2x5
IGJlY2F1c2Ugb2YKKyAgICAvLyB2YWxpZGF0aW9uIGZhaWx1cmUuCisgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBib29sIHBhcmtDb25kaXRpb25hbGx5KGNvbnN0IHZvaWQqIGFkZHJlc3Ms
IHN0ZDo6ZnVuY3Rpb248Ym9vbCgpPiB2YWxpZGF0aW9uKTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFU+CisgICAgc3RhdGljIGJvb2wgY29tcGFyZUFuZFBhcmsoY29uc3Qg
QXRvbWljPFQ+KiBhZGRyZXNzLCBVIGV4cGVjdGVkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHBh
cmtDb25kaXRpb25hbGx5KAorICAgICAgICAgICAgYWRkcmVzcywKKyAgICAgICAgICAgIFthZGRy
ZXNzLCBleHBlY3RlZF0gKCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgVSB2YWx1ZSA9IGFk
ZHJlc3MtPmxvYWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgPT0gZXhwZWN0ZWQ7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBVbnBhcmtzIG9uZSB0aHJlYWQgZnJv
bSB0aGUgcXVldWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBhZGRyZXNzLCB3aGljaCBjYW5u
b3QgYmUgbnVsbC4KKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlcmUgbWF5IHN0aWxsIGJlIG90
aGVyIHRocmVhZHMgb24gdGhhdCBxdWV1ZSwgb3IgZmFsc2UgaWYgdGhlcmUgZGVmaW5pdGVseQor
ICAgIC8vIGFyZSBubyBtb3JlIHRocmVhZHMgb24gdGhlIHF1ZXVlLgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgYm9vbCB1bnBhcmtPbmUoY29uc3Qgdm9pZCogYWRkcmVzcyk7CisKKyAg
ICAvLyBVbnBhcmtzIGV2ZXJ5IHRocmVhZCBmcm9tIHRoZSBxdWV1ZSBhc3NvY2lhdGVkIHdpdGgg
dGhlIGdpdmVuIGFkZHJlc3MsIHdoaWNoIGNhbm5vdCBiZSBudWxsLgorICAgIFdURl9FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB1bnBhcmtBbGwoY29uc3Qgdm9pZCogYWRkcmVzcyk7CisKKyAg
ICAvLyBMb2NrcyB0aGUgcGFya2luZyBsb3QgYW5kIHdhbGtzIGFsbCBvZiB0aGUgcGFya2VkIHRo
cmVhZHMgYW5kIHRoZSBhZGRyZXNzZXMgdGhleSBhcmUgd2FpdGluZworICAgIC8vIG9uLiBUaHJl
YWRzIHRoYXQgYXJlIG9uIHRoZSBzYW1lIHF1ZXVlIGFyZSBndWFyYW50ZWVkIHRvIGJlIHdhbGtl
ZCBmcm9tIGZpcnN0IHRvIGxhc3QsIGJ1dCB0aGUKKyAgICAvLyBxdWV1ZXMgbWF5IGJlIHJhbmRv
bWx5IGludGVybGVhdmVkLiBGb3IgZXhhbXBsZSwgaWYgdGhlIHF1ZXVlIGZvciBhZGRyZXNzIEEx
IGhhcyBUMSBhbmQgVDIgYW5kCisgICAgLy8gdGhlIHF1ZXVlIGZvciBhZGRyZXNzIEEyIGhhcyBU
MyBhbmQgVDQsIHRoZW4geW91IG1pZ2h0IHNlZSBpdGVyYXRpb24gb3JkZXJzIGxpa2U6CisgICAg
Ly8KKyAgICAvLyBBMSxUMSBBMSxUMiBBMixUMyBBMixUNAorICAgIC8vIEEyLFQzIEEyLFQ0IEEx
LFQxIEExLFQyCisgICAgLy8gQTEsVDEgQTIsVDMgQTEsVDIgQTIsVDQKKyAgICAvLyBBMSxUMSBB
MixUMyBBMixUNCBBMSxUMgorICAgIC8vCisgICAgLy8gQXMgd2VsbCBhcyBtYW55IG90aGVyIHBv
c3NpYmxlIGludGVybGVhdmVzIHRoYXQgYWxsIGhhdmUgVDEgYmVmb3JlIFQyIGFuZCBUMyBiZWZv
cmUgVDQgYnV0IGFyZQorICAgIC8vIG90aGVyd2lzZSB1bmNvbnN0cmFpbmVkLiBUaGlzIG1ldGhv
ZCBpcyB1c2VmdWwgcHJpbWFyaWx5IGZvciBkZWJ1Z2dpbmcuIEl0J3MgYWxzbyB1c2VkIGJ5IHVu
aXQKKyAgICAvLyB0ZXN0cy4KKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgZm9y
RWFjaChzdGQ6OmZ1bmN0aW9uPHZvaWQoVGhyZWFkSWRlbnRpZmllciwgY29uc3Qgdm9pZCopPik7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpQYXJraW5nTG90OworCisj
ZW5kaWYgLy8gV1RGX1BhcmtpbmdMb3RfaAorCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODgyMjkpCisrKyBUb29scy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxNS0wOC0xMCAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIFdURiBzaG91bGQgaGF2ZSBhIFBh
cmtpbmdMb3QgZm9yIHBhcmtpbmcgc2xlZXBpbmcgdGhyZWFkcywgc28gdGhhdCBsb2NrcyBjYW4g
Zml0IGluIDEuNiBiaXRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDc2NjUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIFRlc3RXZWJLaXRBUEkvQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qOgorICAg
ICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL0xvY2suY3BwOgorICAgICAg
ICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvUGFya2luZ0xvdC5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisKIDIwMTUtMDgtMTAgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm4uZmFibGV0QGNyZi5jYW5vbi5m
cj4KIAogICAgICAgICBDb21waWxlIHdhcm5pbmcgKC1Xc2lnbi1jb21wYXJlKSBvbiAzMi1iaXRz
IGF0IFdlYkNvcmUvcGxhdGZvcm0vRmlsZVN5c3RlbS5jcHAKSW5kZXg6IFRvb2xzL1Rlc3RXZWJL
aXRBUEkvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTg4MjI5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9D
TWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCBzZXQoVGVzdFdU
Rl9TT1VSQ0VTCiAgICAgJHtURVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL01lZGlhVGltZS5j
cHAKICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTWV0YUFsbG9jYXRvci5jcHAK
ICAgICAke1RFU1RXRUJLSVRBUElfRElSfS9UZXN0cy9XVEYvTmFrZWRQdHIuY3BwCisgICAgJHtU
RVNUV0VCS0lUQVBJX0RJUn0vVGVzdHMvV1RGL1BhcmtpbmdMb3QuY3BwCiAgICAgJHtURVNUV0VC
S0lUQVBJX0RJUn0vVGVzdHMvV1RGL1JlZEJsYWNrVHJlZS5jcHAKICAgICAke1RFU1RXRUJLSVRB
UElfRElSfS9UZXN0cy9XVEYvUmVmLmNwcAogICAgICR7VEVTVFdFQktJVEFQSV9ESVJ9L1Rlc3Rz
L1dURi9SZWZQdHIuY3BwCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEku
dmN4cHJvai9UZXN0V2ViS2l0QVBJLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0V2ViS2l0QVBJLnZjeHByb2ovVGVzdFdlYktpdEFQSS52Y3hwcm9qCShyZXZp
c2lvbiAxODgyMjkpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkudmN4cHJv
ai9UZXN0V2ViS2l0QVBJLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTMyNiw2ICszMjYsNyBA
QAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV1RGXE1ldGFBbGxvY2F0b3IuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV1RGXE5ha2VkUHRyLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxPcHRpb25hbC5jcHAiIC8+
CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcUGFya2luZ0xvdC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxUZXN0c1xXVEZcUmVkQmxhY2tUcmVlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFRlc3RzXFdURlxSZWYuY3BwIiAvPgogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cVGVzdHNcV1RGXFJlZkNvdW50ZXIuY3BwIiAvPgpJbmRl
eDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE4ODIyOSkKKysrIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xMSw2ICsxMSw3IEBACiAJCTBGMTM5RTc4MUE0MjNBNkIwMEY1OTBGNSAvKiBQ
bGF0Zm9ybVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0
aWVzQ29jb2EubW0gKi87IH07CiAJCTBGMTM5RTc5MUE0MjQ1NzAwMEY1OTBGNSAvKiBQbGF0Zm9y
bVV0aWxpdGllc0NvY29hLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYxMzlFNzIxQTQyM0EyQjAwRjU5MEY1IC8qIFBsYXRmb3JtVXRpbGl0aWVzQ29j
b2EubW0gKi87IH07CiAJCTBGM0I5NEE3MUE3NzI2NzQwMERFMzI3MiAvKiBXS1dlYlZpZXdFdmFs
dWF0ZUphdmFTY3JpcHQubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZhbHVhdGVKYXZh
U2NyaXB0Lm1tICovOyB9OworCQkwRkU0NDc5OTFCNzZGMUVCMDA5NDk4RUIgLyogUGFya2luZ0xv
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0
NDc5NzFCNzZGMUUzMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgKi87IH07CiAJCTBGRkM0NUE2
MUI3M0VCRUIwMDg1QkQ2MiAvKiBMb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRkM0NUE0MUI3M0VCRTIwMDg1QkQ2MiAvKiBMb2NrLmNwcCAq
LzsgfTsKIAkJMUEwMkM4NzAxMjVENENGRDAwRTNGNEJEIC8qIGZpbmQuaHRtbCBpbiBDb3B5IFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTAyQzg0QjEyNUQ0
QTVFMDBFM0Y0QkQgLyogZmluZC5odG1sICovOyB9OwogCQkxQTUwQUEyMDFBMkE1MUZDMDBGNEMz
NDUgLyogY2xvc2UtZnJvbS13aXRoaW4tY3JlYXRlLXBhZ2UuaHRtbCBpbiBDb3B5IFJlc291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTUwQUExRjFBMkE0RUE1MDBG
NEMzNDUgLyogY2xvc2UtZnJvbS13aXRoaW4tY3JlYXRlLXBhZ2UuaHRtbCAqLzsgfTsKQEAgLTQy
OSw2ICs0MzAsNyBAQAogCQkwRjNCOTRBNTFBNzcyNjZDMDBERTMyNzIgLyogV0tXZWJWaWV3RXZh
bHVhdGVKYXZhU2NyaXB0Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gV0tXZWJWaWV3RXZhbHVhdGVKYXZhU2NyaXB0Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkM2QzRDQjE0MTAyN0UwMDA1QjdGMEMgLyogUmVkQmxhY2tUcmVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlZEJsYWNrVHJlZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRh
QWxsb2NhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1ldGFB
bGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkU0NDc5NzFCNzZG
MUUzMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQYXJraW5nTG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGQzQ1QTQxQjczRUJFMjAwODVCRDYyIC8qIExvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0NDY0MDEyMTY3QTgzMDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExheW91dFVuaXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxNEYzQjExMjE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGht
ZXRpY09wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2F0dXJhdGVkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTEwNiw2ICsxMTA4LDcgQEAKIAkJCQk5M0E0MjdBQzE4MERBNjBGMDBDRDI0RDcg
LyogTW92ZU9ubHkuaCAqLywKIAkJCQlGRUI2Rjc0RTFCMkJBNDRFMDA5RTQ5MjIgLyogTmFrZWRQ
dHIuY3BwICovLAogCQkJCTFBRkRFNjU0MTk1M0IyQzAwMEM0OEZGQSAvKiBPcHRpb25hbC5jcHAg
Ki8sCisJCQkJMEZFNDQ3OTcxQjc2RjFFMzAwOTQ5OEVCIC8qIFBhcmtpbmdMb3QuY3BwICovLAog
CQkJCTBGQzZDNENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICovLAogCQkJ
CTkzQTQyN0FBMTgwREEyNjQwMENEMjRENyAvKiBSZWYuY3BwICovLAogCQkJCTg2QkQxOTk3MUEy
REIwNUIwMDZEQ0YwQSAvKiBSZWZDb3VudGVyLmNwcCAqLywKQEAgLTE2MjYsNiArMTYyOSw3IEBA
CiAJCQkJN0NDRTdFRDcxQTQxMUE3RTAwNDQ3QzRDIC8qIFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJl
Y3RUb1VSTENyYXNoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdGMUMxQTQxMUFFNjAwNDQ3
QzRDIC8qIFdpbGxTZW5kU3VibWl0RXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdF
RDgxQTQxMUE3RTAwNDQ3QzRDIC8qIFdpbGxTZW5kU3VibWl0RXZlbnQubW0gaW4gU291cmNlcyAq
LywKKwkJCQkwRkU0NDc5OTFCNzZGMUVCMDA5NDk4RUIgLyogUGFya2luZ0xvdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3Q0NFN0VEOTFBNDExQTdFMDA0NDdDNEMgLyogV2luZG93bGVzc1dlYlZp
ZXdXaXRoTWVkaWEubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0YyRTFBNDExQjEwMDA0NDdD
NEMgLyogV0tCcm93c2luZ0NvbnRleHRHcm91cFRlc3QubW0gaW4gU291cmNlcyAqLywKIAkJCQk3
Q0NFN0YyRjFBNDExQjEwMDA0NDdDNEMgLyogV0tCcm93c2luZ0NvbnRleHRMb2FkRGVsZWdhdGVU
ZXN0Lm1tIGluIFNvdXJjZXMgKi8sCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dU
Ri9Mb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9M
b2NrLmNwcAkocmV2aXNpb24gMTg4MjI5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvTG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8d3RmL0J5dGVMb2NrLmg+CiAjaW5jbHVkZSA8d3Rm
L0xvY2suaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZ1ByaW1pdGl2ZXMuaD4KQEAgLTk3LDQgKzk4LDM5IEBAIFRFU1QoV1RGX0xvY2ssIE1hbnlD
b250ZW50ZWRMb25nU2VjdGlvbnMKICAgICBydW5Mb2NrVGVzdDxMb2NrPigxMCwgMTAsIDEwMDAw
LCAxMDAwKTsKIH0KIAorVEVTVChXVEZfQnl0ZUxvY2ssIFVuY29udGVudGVkU2hvcnRTZWN0aW9u
KQoreworICAgIHJ1bkxvY2tUZXN0PEJ5dGVMb2NrPigxLCAxLCAxLCAxMDAwMDAwMCk7Cit9CisK
K1RFU1QoV1RGX0J5dGVMb2NrLCBVbmNvbnRlbnRlZExvbmdTZWN0aW9uKQoreworICAgIHJ1bkxv
Y2tUZXN0PEJ5dGVMb2NrPigxLCAxLCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVM
b2NrLCBDb250ZW50ZWRTaG9ydFNlY3Rpb24pCit7CisgICAgcnVuTG9ja1Rlc3Q8Qnl0ZUxvY2s+
KDEsIDEwLCAxLCAxMDAwMDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBDb250ZW50ZWRM
b25nU2VjdGlvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMSwgMTAsIDEwMDAwLCAx
MDAwMCk7Cit9CisKK1RFU1QoV1RGX0J5dGVMb2NrLCBNYW55Q29udGVudGVkU2hvcnRTZWN0aW9u
cykKK3sKKyAgICBydW5Mb2NrVGVzdDxCeXRlTG9jaz4oMTAsIDEwLCAxLCA1MDAwMDApOworfQor
CitURVNUKFdURl9CeXRlTG9jaywgTWFueUNvbnRlbnRlZExvbmdTZWN0aW9ucykKK3sKKyAgICBy
dW5Mb2NrVGVzdDxCeXRlTG9jaz4oMTAsIDEwLCAxMDAwMCwgMTAwMCk7Cit9CisKK1RFU1QoV1RG
X0J5dGVMb2NrLCBTZWN0aW9uQWRkcmVzc0NvbGxpc2lvbikKK3sKKyAgICBydW5Mb2NrVGVzdDxC
eXRlTG9jaz4oNCwgMiwgMTAwMDAsIDIwMDApOworfQorCiB9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dURi9QYXJraW5nTG90
LmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1Bhcmtp
bmdMb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPGNvbmRpdGlvbl92YXJpYWJsZT4KKyNpbmNs
dWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXJraW5nTG90Lmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmdQcmltaXRpdmVzLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBUZXN0V2ViS2l0QVBJIHsKKworbmFtZXNwYWNlIHsK
Kworc3RydWN0IFNpbmdsZUxhdGNoVGVzdCB7CisgICAgdm9pZCBpbml0aWFsaXplKHVuc2lnbmVk
IG51bVRocmVhZHMpCisgICAgeworICAgICAgICAvLyBUaGlzIGltcGxlbWVudHMgYSBmYWlyIChG
SUZPKSBzZW1hcGhvcmUsIGFuZCBpdCBzdGFydHMgb3V0IHVuYXZhaWxhYmxlLgorICAgICAgICBz
ZW1hcGhvcmUuc3RvcmUoMCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBu
dW1UaHJlYWRzOyBpLS07KSB7CisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCgKKyAgICAgICAg
ICAgICAgICBjcmVhdGVUaHJlYWQoCisgICAgICAgICAgICAgICAgICAgICJQYXJraW5nIFRlc3Qg
VGhyZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgWyZdICgpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEVYUEVDVF9ORSgwdSwgY3VycmVudFRocmVhZCgpKTsKKworICAgICAgICAgICAgICAg
ICAgICAgICAgZG93bigpOworCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OmxvY2tfZ3Vh
cmQ8c3RkOjptdXRleD4gbG9ja2VyKGxvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgYXdh
a2UuYWRkKGN1cnJlbnRUaHJlYWQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0QXdv
a2VuID0gY3VycmVudFRocmVhZCgpOworICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9u
Lm5vdGlmeV9vbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCB1bnBhcmtPbmUodW5zaWduZWQgc2luZ2xlVW5wYXJrSW5kZXgpCisgICAg
eworICAgICAgICBFWFBFQ1RfRVEoMHUsIGxhc3RBd29rZW4pOworICAgICAgICAKKyAgICAgICAg
dW5zaWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CisgICAgICAgIFZlY3RvcjxUaHJlYWRJ
ZGVudGlmaWVyLCA4PiBxdWV1ZTsKKyAgICAgICAgUGFya2luZ0xvdDo6Zm9yRWFjaCgKKyAgICAg
ICAgICAgIFsmXSAoVGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyLCBjb25zdCB2b2lk
KiBhZGRyZXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9yZSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgcXVldWUuYXBw
ZW5kKHRocmVhZElkZW50aWZpZXIpOworCisgICAgICAgICAgICAgICAgbnVtV2FpdGluZ09uQWRk
cmVzcysrOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgRVhQRUNUX0xFKG51bVdhaXRpbmdP
bkFkZHJlc3MsIHRocmVhZHMuc2l6ZSgpIC0gc2luZ2xlVW5wYXJrSW5kZXgpOworCisgICAgICAg
IHVwKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11
dGV4PiBsb2NrZXIobG9jayk7CisgICAgICAgICAgICB3aGlsZSAoYXdha2Uuc2l6ZSgpIDwgc2lu
Z2xlVW5wYXJrSW5kZXggKyAxKQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbi53YWl0KGxvY2tl
cik7CisgICAgICAgICAgICBFWFBFQ1RfTkUoMHUsIGxhc3RBd29rZW4pOworICAgICAgICAgICAg
aWYgKCFxdWV1ZS5pc0VtcHR5KCkgJiYgcXVldWVbMF0gIT0gbGFzdEF3b2tlbikgeworICAgICAg
ICAgICAgICAgIGRhdGFMb2coIldva2UgdXAgd3JvbmcgdGhyZWFkOiBxdWV1ZSA9ICIsIGxpc3RE
dW1wKHF1ZXVlKSwgIiwgbGFzdCBhd29rZW4gPSAiLCBsYXN0QXdva2VuLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICBFWFBFQ1RfRVEocXVldWVbMF0sIGxhc3RBd29rZW4pOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgbGFzdEF3b2tlbiA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2
b2lkIGZpbmlzaCh1bnNpZ25lZCBudW1TaW5nbGVVbnBhcmtzKQorICAgIHsKKyAgICAgICAgdW5z
aWduZWQgbnVtV2FpdGluZ09uQWRkcmVzcyA9IDA7CisgICAgICAgIFBhcmtpbmdMb3Q6OmZvckVh
Y2goCisgICAgICAgICAgICBbJl0gKFRocmVhZElkZW50aWZpZXIsIGNvbnN0IHZvaWQqIGFkZHJl
c3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWRkcmVzcyAhPSAmc2VtYXBob3JlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
bnVtV2FpdGluZ09uQWRkcmVzcysrOworICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAg
ICBFWFBFQ1RfTEUobnVtV2FpdGluZ09uQWRkcmVzcywgdGhyZWFkcy5zaXplKCkgLSBudW1TaW5n
bGVVbnBhcmtzKTsKKworICAgICAgICBzZW1hcGhvcmUuc3RvcmUodGhyZWFkcy5zaXplKCkgLSBu
dW1TaW5nbGVVbnBhcmtzKTsKKyAgICAgICAgUGFya2luZ0xvdDo6dW5wYXJrQWxsKCZzZW1hcGhv
cmUpOworCisgICAgICAgIG51bVdhaXRpbmdPbkFkZHJlc3MgPSAwOworICAgICAgICBQYXJraW5n
TG90Ojpmb3JFYWNoKAorICAgICAgICAgICAgWyZdIChUaHJlYWRJZGVudGlmaWVyLCBjb25zdCB2
b2lkKiBhZGRyZXNzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFkZHJlc3MgIT0gJnNlbWFwaG9y
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgbnVtV2FpdGluZ09uQWRkcmVzcysrOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAg
RVhQRUNUX0VRKDB1LCBudW1XYWl0aW5nT25BZGRyZXNzKTsKKyAgICAKKyAgICAgICAgeworICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfbG9jazxzdGQ6Om11dGV4PiBsb2NrZXIobG9jayk7CisgICAg
ICAgICAgICB3aGlsZSAoYXdha2Uuc2l6ZSgpIDwgdGhyZWFkcy5zaXplKCkpCisgICAgICAgICAg
ICAgICAgY29uZGl0aW9uLndhaXQobG9ja2VyKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAo
VGhyZWFkSWRlbnRpZmllciB0aHJlYWRJZGVudGlmaWVyIDogdGhyZWFkcykKKyAgICAgICAgICAg
IHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKHRocmVhZElkZW50aWZpZXIpOworICAgIH0KKworICAg
IC8vIFNlbWFwaG9yZSBvcGVyYXRpb25zLgorICAgIHZvaWQgZG93bigpCisgICAgeworICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpbnQgb2xkU2VtYXBob3JlVmFsdWUgPSBzZW1hcGhv
cmUubG9hZCgpOworICAgICAgICAgICAgaW50IG5ld1NlbWFwaG9yZVZhbHVlID0gb2xkU2VtYXBo
b3JlVmFsdWUgLSAxOworICAgICAgICAgICAgaWYgKCFzZW1hcGhvcmUuY29tcGFyZUV4Y2hhbmdl
V2VhayhvbGRTZW1hcGhvcmVWYWx1ZSwgbmV3U2VtYXBob3JlVmFsdWUpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAob2xkU2VtYXBob3Jl
VmFsdWUgPiAwKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgYWNxdWlyZWQgdGhlIHNlbWFwaG9y
ZS4gRG9uZS4KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdC4KKyAgICAgICAgICAgIGlmIChQ
YXJraW5nTG90Ojpjb21wYXJlQW5kUGFyaygmc2VtYXBob3JlLCBuZXdTZW1hcGhvcmVWYWx1ZSkp
IHsKKyAgICAgICAgICAgICAgICAvLyBXZSBkaWQgd2FpdCwgYW5kIHRoZW4gZ290IHdva2VuIHVw
LiBUaGlzIG1lYW5zIHRoYXQgc29tZW9uZSB3aG8gdXAnZCB0aGUgc2VtYXBob3JlCisgICAgICAg
ICAgICAgICAgLy8gcGFzc2VkIG93bmVyc2hpcCBvbnRvIHVzLgorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gV2UgbmV2ZXIgcGFya2VkLCBi
ZWNhdXNlIHRoZSBzZW1hcGhvcmUgdmFsdWUgY2hhbmdlZC4gVW5kbyBvdXIgZGVjcmVtZW50IGFu
ZCB0cnkgYWdhaW4uCisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgaW50
IG9sZFNlbWFwaG9yZVZhbHVlID0gc2VtYXBob3JlLmxvYWQoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2VtYXBob3JlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU2VtYXBob3JlVmFsdWUsIG9sZFNl
bWFwaG9yZVZhbHVlICsgMSkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHZvaWQgdXAoKQorICAgIHsKKyAgICAgICAgaW50
IG9sZFNlbWFwaG9yZVZhbHVlOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBvbGRT
ZW1hcGhvcmVWYWx1ZSA9IHNlbWFwaG9yZS5sb2FkKCk7CisgICAgICAgICAgICBpZiAoc2VtYXBo
b3JlLmNvbXBhcmVFeGNoYW5nZVdlYWsob2xkU2VtYXBob3JlVmFsdWUsIG9sZFNlbWFwaG9yZVZh
bHVlICsgMSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAv
LyBDaGVjayBpZiBhbnlvbmUgd2FzIHdhaXRpbmcgb24gdGhlIHNlbWFwaG9yZS4gSWYgdGhleSB3
ZXJlLCB0aGVuIHBhc3Mgb3duZXJzaGlwIHRvIHRoZW0uCisgICAgICAgIGlmIChvbGRTZW1hcGhv
cmVWYWx1ZSA8IDApCisgICAgICAgICAgICBQYXJraW5nTG90Ojp1bnBhcmtPbmUoJnNlbWFwaG9y
ZSk7CisgICAgfQorICAgIAorICAgIEF0b21pYzxpbnQ+IHNlbWFwaG9yZTsKKyAgICBzdGQ6Om11
dGV4IGxvY2s7CisgICAgc3RkOjpjb25kaXRpb25fdmFyaWFibGUgY29uZGl0aW9uOworICAgIEhh
c2hTZXQ8VGhyZWFkSWRlbnRpZmllcj4gYXdha2U7CisgICAgVmVjdG9yPFRocmVhZElkZW50aWZp
ZXI+IHRocmVhZHM7CisgICAgVGhyZWFkSWRlbnRpZmllciBsYXN0QXdva2VuIHsgMCB9OworfTsK
Kwordm9pZCBydW5QYXJraW5nVGVzdCh1bnNpZ25lZCBudW1MYXRjaGVzLCB1bnNpZ25lZCBkZWxh
eSwgdW5zaWduZWQgbnVtVGhyZWFkcywgdW5zaWduZWQgbnVtU2luZ2xlVW5wYXJrcykKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2luZ2xlTGF0Y2hUZXN0W10+IHRlc3RzID0gc3RkOjptYWtlX3Vu
aXF1ZTxTaW5nbGVMYXRjaFRlc3RbXT4obnVtTGF0Y2hlcyk7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGxhdGNoSW5kZXggPSBudW1MYXRjaGVzOyBsYXRjaEluZGV4LS07KQorICAgICAgICB0ZXN0c1ts
YXRjaEluZGV4XS5pbml0aWFsaXplKG51bVRocmVhZHMpOworCisgICAgZm9yICh1bnNpZ25lZCB1
bnBhcmtJbmRleCA9IDA7IHVucGFya0luZGV4IDwgbnVtU2luZ2xlVW5wYXJrczsgKyt1bnBhcmtJ
bmRleCkgeworICAgICAgICB1c2xlZXAoZGVsYXkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGxh
dGNoSW5kZXggPSBudW1MYXRjaGVzOyBsYXRjaEluZGV4LS07KQorICAgICAgICAgICAgdGVzdHNb
bGF0Y2hJbmRleF0udW5wYXJrT25lKHVucGFya0luZGV4KTsKKyAgICB9CisKKyAgICBmb3IgKHVu
c2lnbmVkIGxhdGNoSW5kZXggPSBudW1MYXRjaGVzOyBsYXRjaEluZGV4LS07KQorICAgICAgICB0
ZXN0c1tsYXRjaEluZGV4XS5maW5pc2gobnVtU2luZ2xlVW5wYXJrcyk7Cit9CisKK3ZvaWQgcmVw
ZWF0UGFya2luZ1Rlc3QodW5zaWduZWQgbnVtUmVwZWF0cywgdW5zaWduZWQgbnVtTGF0Y2hlcywg
dW5zaWduZWQgZGVsYXksIHVuc2lnbmVkIG51bVRocmVhZHMsIHVuc2lnbmVkIG51bVNpbmdsZVVu
cGFya3MpCit7CisgICAgd2hpbGUgKG51bVJlcGVhdHMtLSkKKyAgICAgICAgcnVuUGFya2luZ1Rl
c3QobnVtTGF0Y2hlcywgZGVsYXksIG51bVRocmVhZHMsIG51bVNpbmdsZVVucGFya3MpOworfQor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworVEVTVChXVEZfUGFya2luZ0xvdCwgVW5wYXJr
QWxsT25lRmFzdCkKK3sKKyAgICByZXBlYXRQYXJraW5nVGVzdCgxMDAwMCwgMSwgMCwgMSwgMCk7
Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya0FsbEh1bmRyZWRGYXN0KQoreworICAg
IHJlcGVhdFBhcmtpbmdUZXN0KDEwMDAsIDEsIDAsIDEwMCwgMCk7Cit9CisKK1RFU1QoV1RGX1Bh
cmtpbmdMb3QsIFVucGFya09uZU9uZUZhc3QpCit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAw
MCwgMSwgMCwgMSwgMSk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya09uZUh1bmRy
ZWRGYXN0KQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEwMCwgMSwgMCwgMTAwLCAxMDApOwor
fQorCitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtPbmVGaWZ0eVRoZW5GaWZ0eUFsbEZhc3Qp
Cit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMjAwLCAxLCAwLCAxMDAsIDUwKTsKK30KKworVEVT
VChXVEZfUGFya2luZ0xvdCwgVW5wYXJrQWxsT25lKQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0
KDEwMCwgMSwgMTAwMDAsIDEsIDApOworfQorCitURVNUKFdURl9QYXJraW5nTG90LCBVbnBhcmtB
bGxIdW5kcmVkKQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEwMCwgMSwgMTAwMDAsIDEwMCwg
MCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya09uZU9uZSkKK3sKKyAgICByZXBl
YXRQYXJraW5nVGVzdCgxMCwgMSwgMTAwMDAsIDEsIDEpOworfQorCitURVNUKFdURl9QYXJraW5n
TG90LCBVbnBhcmtPbmVIdW5kcmVkKQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDEsIDEsIDEw
MDAwLCAxMDAsIDEwMCk7Cit9CisKK1RFU1QoV1RGX1BhcmtpbmdMb3QsIFVucGFya09uZUZpZnR5
VGhlbkZpZnR5QWxsKQoreworICAgIHJlcGVhdFBhcmtpbmdUZXN0KDIsIDEsIDEwMDAwLCAxMDAs
IDUwKTsKK30KKworVEVTVChXVEZfUGFya2luZ0xvdCwgSHVuZHJlZFVucGFya0FsbE9uZUZhc3Qp
Cit7CisgICAgcmVwZWF0UGFya2luZ1Rlc3QoMTAwLCAxMDAsIDAsIDEsIDApOworfQorCitURVNU
KFdURl9QYXJraW5nTG90LCBIdW5kcmVkVW5wYXJrQWxsT25lKQoreworICAgIHJlcGVhdFBhcmtp
bmdUZXN0KDEsIDEwMCwgMTAwMDAsIDEsIDApOworfQorCit9IC8vIG5hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJCisK
</data>
<flag name="review"
          id="283863"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>