<?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>167714</bug_id>
          
          <creation_ts>2017-02-01 15:48:14 -0800</creation_ts>
          <short_desc>Add a SIGILL crash analyzer to make debugging SIGILLs easier.</short_desc>
          <delta_ts>2017-02-03 05:00:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1272308</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-01 15:48:14 -0800</bug_when>
    <thetext>We&apos;ll start with just supporting this for OS(DARWIN).

With this feature, we can now get crash diagnostics like the following:

Filtered syslog:
Timestamp              	Thread     Type        Activity             PID
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: BEGIN SIGILL analysis
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: x0: ffff0000ffffffff x1: ffff0000ffffffff x2: 0000000000000001 x3: 000000000000009a
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: x4: 0000000000000005 x5: 0000000000000060 x6: 0000000000000000 x7: 0000000000000000
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: x8: 0000000104a00018 x9: 0000000000000000 x10: 0000000000000001 x11: 0000000000000001
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: x12: 0000000000000000 x13: 00000001043ac1b8 x14: 000000016fd0bce0 x15: 000000016fd09708
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: x16: 0000000000000000 x17: 0000000104a082e8 x18: 0000000000000000 x19: 0000000000000000
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: x20: 0000000000000000 x21: 0000000000000000 x22: 0000000000000000 x23: 0000000000000000
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: x24: 0000000000000000 x25: 0000000000000000 x26: 0000000000000000 x27: ffff000000000000
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: x28: ffff000000000002 fp: 000000016fd096c0 lr: 0000000153c1d744
2017-02-01 14:06:20.1410 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: sp: 000000016fd09640 pc: 0000000155c17bec cpsr: 20000000
2017-02-01 14:06:20.1411 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: pc 0x155c17bec is in valid JIT executable memory
2017-02-01 14:06:20.1411 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: instruction bits at pc 0x155c17bec is: 0x00000000
2017-02-01 14:06:20.1411 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: pc 0x155c17bec belongs to CodeBlock 0x104240760 of type DFG
2017-02-01 14:06:20.1411 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: JITCode 0x1051bd000 [0x155c17580-0x155c17f20]:
2017-02-01 14:06:20.1411 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: [0x155c17580-0x155c1759c]: a9bf7bfd 910003fd d280ec10 f2a08490 f2c00030 f80103b0 d10203a1 d2905b11
2017-02-01 14:06:20.1411 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: [0x155c175a0-0x155c175bc]: f2a09411 f2c00031 f87f6a30 eb01021f 540034e8 d10203bf f81f03bb f81f83bc
2017-02-01 14:06:20.1411 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: [0x155c175c0-0x155c175dc]: b2503ffb b27f037c f2400bbf 54000060 52800150 d4200000 b2503ff0 eb10037f
...
2017-02-01 14:06:20.1412 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: [0x155c17f00-0x155c17f1c]: 17801710 00000000 00000000 00000000 00000000 00000000 00000000 00000000
2017-02-01 14:06:20.1412 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: Disassembly:
2017-02-01 14:06:20.1412 -0800	0x29d81 1024 0x0 3711 JavaScriptCore:          0x155c17580:    stp    fp, lr, [sp, #-16]!
2017-02-01 14:06:20.1412 -0800	0x29d81 1024 0x0 3711 JavaScriptCore:          0x155c17584:    mov    fp, sp
2017-02-01 14:06:20.1412 -0800	0x29d81 1024 0x0 3711 JavaScriptCore:          0x155c17588:    movz   x16, #1888
2017-02-01 14:06:20.1412 -0800	0x29d81 1024 0x0 3711 JavaScriptCore:          0x155c1758c:    movk   x16, #1060, lsl #16
...
2017-02-01 14:06:20.1455 -0800	0x29d81 1024 0x0 3711 JavaScriptCore:          0x155c17be8:    mov    x1, x0
2017-02-01 14:06:20.1455 -0800	0x29d81 1024 0x0 3711 JavaScriptCore:        * 0x155c17bec:    .long  00000000    &lt;=========================
2017-02-01 14:06:20.1455 -0800	0x29d81 1024 0x0 3711 JavaScriptCore:          0x155c17bf0:    tst    w1, #0x7fffffff
...
2017-02-01 14:06:20.1465 -0800	0x29d81 1024 0x0 3711 JavaScriptCore:          0x155c17f1c:    .long  00000000
2017-02-01 14:06:20.1465 -0800	0x29d81 1024 0x0 3711 JavaScriptCore: END SIGILL analysis

Patch coming soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272309</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-02-01 15:48:56 -0800</bug_when>
    <thetext>&lt;rdar://problem/30318237&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272312</commentid>
    <comment_count>2</comment_count>
      <attachid>300361</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-01 16:03:43 -0800</bug_when>
    <thetext>Created attachment 300361
proposed patch.

Let&apos;s try this on the EWSs to make sure it doesn&apos;t hurt other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272317</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-01 16:05:01 -0800</bug_when>
    <thetext>Attachment 300361 did not pass style-queue:


ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:61:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:124:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 20 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>1272329</commentid>
    <comment_count>4</comment_count>
      <attachid>300370</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-01 16:31:09 -0800</bug_when>
    <thetext>Created attachment 300370
proposed patch.

Let&apos;s try the EWS again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272330</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-01 16:33:12 -0800</bug_when>
    <thetext>Attachment 300370 did not pass style-queue:


ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:61:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:124:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 20 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>1272331</commentid>
    <comment_count>6</comment_count>
      <attachid>300371</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-01 16:35:53 -0800</bug_when>
    <thetext>Created attachment 300371
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272332</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-01 16:38:11 -0800</bug_when>
    <thetext>Attachment 300371 did not pass style-queue:


ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:61:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:124:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 20 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>1272337</commentid>
    <comment_count>8</comment_count>
      <attachid>300373</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-01 17:05:34 -0800</bug_when>
    <thetext>Created attachment 300373
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272339</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-01 17:08:23 -0800</bug_when>
    <thetext>Attachment 300373 did not pass style-queue:


ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:61:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:124:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 20 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>1272351</commentid>
    <comment_count>10</comment_count>
      <attachid>300375</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-01 17:52:14 -0800</bug_when>
    <thetext>Created attachment 300375
proposed patch: with speculative fix for Windows build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272353</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-01 17:55:11 -0800</bug_when>
    <thetext>Attachment 300375 did not pass style-queue:


ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:61:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:97:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:124:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 20 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>1272391</commentid>
    <comment_count>12</comment_count>
      <attachid>300389</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-01 22:58:22 -0800</bug_when>
    <thetext>Created attachment 300389
proposed patch: with another windows fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272392</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-01 23:00:55 -0800</bug_when>
    <thetext>Attachment 300389 did not pass style-queue:


ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:64:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:102:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:129:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 3 in 20 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>1272510</commentid>
    <comment_count>14</comment_count>
      <attachid>300389</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-02 10:17:13 -0800</bug_when>
    <thetext>Comment on attachment 300389
proposed patch: with another windows fix.

Ready for a review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272524</commentid>
    <comment_count>15</comment_count>
      <attachid>300389</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-02 10:42:01 -0800</bug_when>
    <thetext>Comment on attachment 300389
proposed patch: with another windows fix.

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

&gt; Source/JavaScriptCore/heap/Heap.cpp:2031
&gt; +void Heap::forEachCodeBlockIgnoringJITPlansImpl(const ScopedLambda&lt;bool(CodeBlock*)&gt;&amp; func)
&gt; +{
&gt; +    return m_codeBlocks-&gt;iterate(func);
&gt; +}

So I guess the idea is that this could crash if we&apos;re racing, but we don&apos;t care &apos;cause we were going down anyway?

&gt; Source/JavaScriptCore/tools/VMInspector.cpp:63
&gt; +auto VMInspector::lock(unsigned timeoutInSeconds) -&gt; Expected&lt;LockToken, Error&gt;

Seconds for timeout

&gt; Source/JavaScriptCore/tools/VMInspector.cpp:77
&gt; +#if !OS(WINDOWS)
&gt; +        (static_cast&lt;unsigned (*)(unsigned)&gt;(sleep))(1);
&gt; +#endif

I wonder if WTF::sleep(Seconds) works from signal handlers.  It probably doesn&apos;t, but you could fix that.

Basically you just need it to stop using ParkingLot for sleeping, since that grabs locks.  Just make it call usleep on POSIX and its equivalent on Windows, I think just Sleep().

&gt; Source/JavaScriptCore/tools/VMInspector.h:49
&gt; +    Expected&lt;LockToken, Error&gt; lock(unsigned timeout = std::numeric_limits&lt;unsigned&gt;::max());

should be Seconds timeout = Seconds::infinity()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272564</commentid>
    <comment_count>16</comment_count>
      <attachid>300389</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-02 11:49:54 -0800</bug_when>
    <thetext>Comment on attachment 300389
proposed patch: with another windows fix.

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

&gt;&gt; Source/JavaScriptCore/heap/Heap.cpp:2031
&gt;&gt; +}
&gt; 
&gt; So I guess the idea is that this could crash if we&apos;re racing, but we don&apos;t care &apos;cause we were going down anyway?

This is safe to call from VMInspector because:
1. CodeBlocks are added to the CodeBlockSet from the main thread before they are given to the JIT plans.  Those codeBlocks will have a null jitCode, but VMInspector checks for that. 
2. CodeBlockSet::iterate() will acquire the CodeBlockSet lock before iterating.  This ensures that a CodeBlock won&apos;t be GCed while we&apos;re iterating.
3. VMInspector first does a tryLock on the CodeBlockSet&apos;s lock first to ensure that it is safe for the current thread to lock it before calling Heap::forEachCodeBlockIgnoringJITPlans().  Therefore, there&apos;s no risk of re-entering the lock.

Hence, there is no race, and should not be a crash from this iteration.  I&apos;ll add a comment in VMInspector to document why this is safe.

&gt;&gt; Source/JavaScriptCore/tools/VMInspector.cpp:63
&gt;&gt; +auto VMInspector::lock(unsigned timeoutInSeconds) -&gt; Expected&lt;LockToken, Error&gt;
&gt; 
&gt; Seconds for timeout

Will fix.

&gt;&gt; Source/JavaScriptCore/tools/VMInspector.cpp:77
&gt;&gt; +#endif
&gt; 
&gt; I wonder if WTF::sleep(Seconds) works from signal handlers.  It probably doesn&apos;t, but you could fix that.
&gt; 
&gt; Basically you just need it to stop using ParkingLot for sleeping, since that grabs locks.  Just make it call usleep on POSIX and its equivalent on Windows, I think just Sleep().

sigaction&apos;s man page explicitly states that sleep() is safe to call from signal handlers.  There&apos;s no mention of usleep() nor nanosleep() (which usleep() is built on).  The man pages for usleep() and nanosleep() also do not say anything about signal safety.  We also don&apos;t care about the Windows port yet because we&apos;re not supporting signal handlers on Windows yet.  

For these reasons, I will leave this code as is.

&gt;&gt; Source/JavaScriptCore/tools/VMInspector.h:49
&gt;&gt; +    Expected&lt;LockToken, Error&gt; lock(unsigned timeout = std::numeric_limits&lt;unsigned&gt;::max());
&gt; 
&gt; should be Seconds timeout = Seconds::infinity()

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272672</commentid>
    <comment_count>17</comment_count>
      <attachid>300459</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-02 15:13:28 -0800</bug_when>
    <thetext>Created attachment 300459
proposed patch with Fil&apos;s feedback + the feature is now disabled by default.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272675</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-02 15:15:15 -0800</bug_when>
    <thetext>Attachment 300459 did not pass style-queue:


ERROR: Source/JavaScriptCore/API/JSVirtualMachinePrivate.h:26:  Use #pragma once instead of #ifndef for header guard.  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:64:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:103:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/tools/VMInspector.cpp:130:  This { should be at the end of the previous line  [whitespace/braces] [4]
Total errors found: 4 in 22 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>1272683</commentid>
    <comment_count>19</comment_count>
      <attachid>300459</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-02 15:28:23 -0800</bug_when>
    <thetext>Comment on attachment 300459
proposed patch with Fil&apos;s feedback + the feature is now disabled by default.

Nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272687</commentid>
    <comment_count>20</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-02 15:34:43 -0800</bug_when>
    <thetext>Thanks for the review.  Landed in r211603: &lt;http://trac.webkit.org/r211603&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272722</commentid>
    <comment_count>21</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-02 16:28:21 -0800</bug_when>
    <thetext>Follow up build fix for CLOOP build landed in r211609: &lt;http://trac.webkit.org/r211609&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272788</commentid>
    <comment_count>22</comment_count>
      <attachid>300459</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-02 21:15:55 -0800</bug_when>
    <thetext>Comment on attachment 300459
proposed patch with Fil&apos;s feedback + the feature is now disabled by default.

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

&gt; Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp:172
&gt; +    sigaction(SIGILL, &amp;oldSigIllAction, nullptr);

Why call this here? What does this do when called from here? Why not just directly call the old handler?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272790</commentid>
    <comment_count>23</comment_count>
      <attachid>300459</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-02 21:27:02 -0800</bug_when>
    <thetext>Comment on attachment 300459
proposed patch with Fil&apos;s feedback + the feature is now disabled by default.

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

&gt;&gt; Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp:172
&gt;&gt; +    sigaction(SIGILL, &amp;oldSigIllAction, nullptr);
&gt; 
&gt; Why call this here? What does this do when called from here? Why not just directly call the old handler?

This uninstalls this crash handler and restores the old one.  When we return from this handler, the SIGILL will fire again and the old one will be called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1272877</commentid>
    <comment_count>24</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2017-02-03 05:00:36 -0800</bug_when>
    <thetext>(In reply to comment #20)
&gt; Thanks for the review.  Landed in r211603: &lt;http://trac.webkit.org/r211603&gt;.

It broke The Linux AArch64 build:
../../Source/JavaScriptCore/tools/SigillCrashAnalyzer.cpp:36:24: fatal error: A64DOpcode.h: No such file or directory
 #include &quot;A64DOpcode.h&quot;
                        ^
compilation terminated.

fix landed in https://trac.webkit.org/changeset/211630</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300361</attachid>
            <date>2017-02-01 16:03:43 -0800</date>
            <delta_ts>2017-02-01 16:31:09 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-167714.patch</filename>
            <type>text/plain</type>
            <size>41023</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE3LTAyLTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNp
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBh
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6
OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6aWxsZWdhbEluc3Ry
dWN0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmlsbGVnYWxJbnN0cnVjdGlv
bik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnNJ
bXBsKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5z
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpPcHRpb25z
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6OmhhbmRs
ZUNyYXNoKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUNyYXNoSGFuZGxlcik6CisgICAgICAg
IChKU0M6OmVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIpOgorICAgICAgICAoSlNDOjpTaWdpbGxD
cmFzaEFuYWx5emVyOjphbmFseXplKToKKyAgICAgICAgKEpTQzo6U2lnaWxsQ3Jhc2hBbmFseXpl
cjo6ZHVtcENvZGVCbG9jayk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5o
OiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6aW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rv
cjo6YWRkKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnJlbW92ZSk6CisgICAgICAgIChK
U0M6OmVuc3VyZUlzU2FmZVRvTG9jayk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjppdGVyYXRlKToKKwogMjAxNy0wMi0w
MSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFVzZSBndWFyYW50ZWVkIFJ1bkxvb3AgaW5zdGVhZCBvZiBSdW5Mb29wOjpjdXJy
ZW50IGZvciBkaXNwYXRjaGluZyBpbnNwZWN0b3IgR0MgZXZlbnQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDYgKzkwNyw4IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3Qu
Y3BwCiAgICAgdG9vbHMvSlNEb2xsYXJWTS5jcHAKICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAorICAgIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCisgICAgdG9vbHMvVk1J
bnNwZWN0b3IuY3BwCiAKICAgICB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwCiAgICAgd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMzMiw2ICsyMzMyLDEw
IEBACiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlCMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyRTZBN0IxRDZF
QTYyQzAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2Nv
cGUuY3BwICovOyB9OworCQlGRTMwMjJEMjFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi87
IH07CisJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyB9OworCQlGRTMwMjJE
NjFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZN
SW5zcGVjdG9yLmNwcCAqLzsgfTsKKwkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5z
cGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKIAkJRkUzMThG
REYxQ0FDOTgyNzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMThGREQx
Q0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICov
OyB9OwogCQlGRTMxOEZFMDFDQUM5ODJGMDBERkNDNTQgLyogRUNNQVNjcmlwdFNwZWNJbnRlcm5h
bEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUzMThGREUxQ0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5j
dGlvbnMuaCAqLzsgfTsKIAkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzQyMjEx
MUQ2QjgxOEMwMDMyQkU4OCAvKiBUaHJvd1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ4NzEsNiArNDg3NSwxMCBAQAogCQlGRTIwQ0U5
QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3Au
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTElu
dENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocm93U2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUz
MDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENDFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0
OTMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1J
bnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMThGREQxQ0FDOEM1
MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzE4RkRFMUNBQzhDNTMw
MERGQ0M1NCAvKiBFQ01BU2NyaXB0U3BlY0ludGVybmFsRnVuY3Rpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8q
IFRocm93U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjgwOSw4ICs2ODE3LDEyIEBACiAJ
CQkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLywKIAkJCQlGRTM4
NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJ
RkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLywKKwkJ
CQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8s
CisJCQkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAq
LywKIAkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8s
CiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovLAor
CQkJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8sCisJCQkJ
RkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTg3OTQsNiArODgw
Niw3IEBACiAJCQkJRkUzOTEzNTYxQjc5NEY4RjAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MERFOUEwOTFCRTdENjlFMDA1RDg5RDkgLyogTExJbnRBc3Nl
bWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTMwMjJEMzFFM0Q3M0E1MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENF
OUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04ODUwLDYgKzg4NjMsNyBAQAogCQkJCTE0NzM0MUQ2MURDMDJFQjkwMEFBMjlCQSAvKiBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5RDNFRDlDNTA2
NEREMEE4NDY2QTNBIC8qIE1vZHVsZVNjb3BlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZB
NzYyMDcxREI5MjQzMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2
ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDczNDFEMDFEQzAyREI0MDBB
QTI5QkEgLyogTmF0aXZlRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzEwLDYgKzk3
MjQsNyBAQAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBB
cmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5QTIyODM1MUQzNUQ3MUUwMEQ4RTA2NyAv
KiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzMDIyRDYxRTQyODU3MzAw
QkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZC
ODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDA2LDYgKzEwNDIxLDcgQEAKIAkJCQk3OUIwMENCRTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzkx
NjBEQkQxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkUzMDIyRDIxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3
NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIu
aAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
Uk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDg0LDYgKzEwODQs
MTIgQEAgcHVibGljOgogICAgICAgICBpbnNuKGV4Y2VwbkdlbmVyYXRpb24oRXhjZXBuT3BfSEFM
VCwgaW1tLCAwKSk7CiAgICAgfQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBv
c2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIGluc24o
MHgwKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGxkcChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJ0MiwgUmVnaXN0ZXJJRCBy
biwgUGFpclBvc3RJbmRleCBzaW1tKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAy
MTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MSw2ICs0NDEsMTIgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbHo8NjQ+KGRlc3QsIGRlc3QpOwogICAgIH0K
IAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2b2lkIGlsbGVn
YWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbGxlZ2FsSW5zdHJ1
Y3Rpb24oKTsKKyAgICB9CisKICAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5sc2w8MzI+KGRlc3QsIHNyYywgc2hpZnRBbW91bnQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzI3LDYgKzMyNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGN0ekFmdGVyQnNmPDMyPihk
c3QpOwogICAgIH0KIAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAg
ICB2b2lkIGlsbGVnYWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5p
bGxlZ2FsSW5zdHJ1Y3Rpb24oKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsc2hpZnQzMihSZWdp
c3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KHNoaWZ0X2Ftb3VudCA9PSBYODZSZWdpc3RlcnM6OmVjeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMjExMzAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1OSw2ICsyNTksNyBAQCBwcml2YXRlOgogICAgIH0g
T25lQnl0ZU9wY29kZUlEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgT1AyX1VEMiAg
ICAgICAgICAgICA9IDB4QiwKICAgICAgICAgT1AyX01PVlNEX1ZzZFdzZCAgICA9IDB4MTAsCiAg
ICAgICAgIE9QMl9NT1ZTRF9Xc2RWc2QgICAgPSAweDExLAogICAgICAgICBPUDJfTU9WU1NfVnNk
V3NkICAgID0gMHgxMCwKQEAgLTY4MSw2ICs2ODIsMTIgQEAgcHVibGljOgogICAgIH0KICNlbmRp
ZiAvLyBDUFUoWDg2XzY0KQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2Vz
LgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcChPUDJfVUQyKTsKKyAgICB9CisKICAgICB2b2lkIGluY19yKFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQNV9F
diwgR1JPVVAxX09QX0FERCwgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNSw2ICsyMDI1LDExIEBAIHZvaWQgSGVhcDo6Zm9y
RWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4gbV9jb2RlQmxvY2tzLT5pdGVy
YXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBs
YW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mIGZ1bmMpCit7Cisg
ICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5jKTsKK30KKwogdm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgaWYgKFVOTElL
RUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFByb3RlY3RlZENlbGwo
Y29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaENvZGVCbG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhjb25zdCBGdW5jdG9y
Jik7CiAKICAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsg
fQogICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hhbmRsZVN0YWNr
OyB9CkBAIC00NzAsNiArNDcxLDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNW
aXNpdGVkKCk7CiAgICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mKTsKKyAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJ
Z25vcmluZ0pJVFBsYW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4m
KTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdm9pZCBICiAgICAgZm9yRWFjaENvZGVCbG9ja0ltcGwoc2NvcGVkTGFt
YmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxh
bnMoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdK
SVRQbGFuc0ltcGwoc2NvcGVkTGFtYmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaFBy
b3RlY3RlZENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNs
dWRlICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0xNDQsNiArMTQ1LDEwIEBAIGJvb2wg
T3B0aW9uczo6aXNBdmFpbGFibGUoT3B0aW9uczo6SUQgaWQKICAgICBpZiAoaWQgPT0gbWF4U2lu
Z2xlQWxsb2NhdGlvblNpemVJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKKyNpZiBP
UyhEQVJXSU4pCisgICAgaWYgKGlkID09IHVzZVNpZ2lsbENyYXNoQW5hbHl6ZXJJRCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQyOSw2
ICs0MzQsOCBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBl
bHNlCiAgICAgICAgIGZhc3RTZXRNYXhTaW5nbGVBbGxvY2F0aW9uU2l6ZShzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKTsKICNlbmRpZgorICAgIGlmIChPcHRpb25zOjp1c2VTaWdp
bGxDcmFzaEFuYWx5emVyKCkpCisgICAgICAgIGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsK
IH0KIAogdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3
IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAgICB2KGJvb2ws
IHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdn
aW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0
aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBv
dmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKKyAgICB2KGJvb2wsIHVzZVNpZ2lsbENy
YXNoQW5hbHl6ZXIsIHRydWUsIENvbmZpZ3VyYWJsZSwgImxvZ3MgZGF0YSBhYm91dCBTSUdJTEwg
Y3Jhc2hlcyIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwg
IndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2Yg
TiBtaWxsaXNlY29uZHMpIikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJWTUVudHJ5U2NvcGUuaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUg
IldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldl
YWtNYXBEYXRhLmgiCkBAIC0zNDksMTAgKzM1MCwxNCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgICAgIFdhdGNoZG9nJiB3YXRjaGRvZyA9IGVuc3VyZVdh
dGNoZG9nKCk7CiAgICAgICAgIHdhdGNoZG9nLnNldFRpbWVMaW1pdCh0aW1lb3V0TWlsbGlzKTsK
ICAgICB9CisKKyAgICBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKS5hZGQodGhpcyk7CiB9CiAKIFZN
Ojp+Vk0oKQogeworICAgIFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpLnJlbW92ZSh0aGlzKTsKKwog
ICAgIC8vIE5ldmVyIEdDLCBldmVyIGFnYWluLgogICAgIGhlYXAuaW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIx
MTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MjQxLDcgKzI0Miw3IEBAIHN0cnVjdCBTY3JhdGNoQnVmZmVyIHsKICNwcmFnbWEgd2FybmluZyhw
b3ApCiAjZW5kaWYKIAotY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+
IHsKK2NsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiBwdWJsaWM6CiAgICAgLy8gV2ViQ29yZSBoYXMgYSBv
bmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBWTXM7CiAgICAgLy8gZWl0aGVyIGNyZWF0
ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCkBAIC03Nzgs
MTEgKzc3OSwxNSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2Vu
PiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAorICAgIFZNKiBtX3ByZXY7
IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorICAgIFZNKiBtX25leHQ7IC8v
IFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorCiAgICAgLy8gRnJpZW5kcyBmb3Ig
ZXhjZXB0aW9uIGNoZWNraW5nIHB1cnBvc2Ugb25seS4KICAgICBmcmllbmQgY2xhc3MgSGVhcDsK
ICAgICBmcmllbmQgY2xhc3MgQ2F0Y2hTY29wZTsKICAgICBmcmllbmQgY2xhc3MgRXhjZXB0aW9u
U2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFRocm93U2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPjsKIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzA3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpZ2lsbENyYXNoQW5hbHl6ZXIuaCIKKworI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNSW5zcGVj
dG9yLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCisj
ZW5kaWYKKworI2lmIEhBVkUoU0lHTkFMX0gpCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTaWduYWxDb250ZXh0OworCitjbGFzcyBTaWdp
bGxDcmFzaEFuYWx5emVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFuYWx5emUoU2lnbmFsQ29udGV4
dCYpOworCitwcml2YXRlOgorICAgIHZvaWQgZHVtcENvZGVCbG9jayhDb2RlQmxvY2sqLCB2b2lk
KiBtYWNoaW5lUEMpOworCisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyAgICBBNjRET3Bj
b2RlIGFybTY0T3Bjb2RlOworI2VuZGlmCit9OworCisjaWYgT1MoREFSV0lOKQorCisjZGVmaW5l
IGxvZyhmb3JtYXQsIC4uLikgXAorICAgIG9zX2xvZ19pbmZvKE9TX0xPR19ERUZBVUxULCBmb3Jt
YXQsICMjX19WQV9BUkdTX18pCisKKyNpZiBDUFUoWDg2XzY0KQorc3RydWN0IFNpZ25hbENvbnRl
eHQgeworICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNvbnRleHQpCisgICAgICAgIDog
bWNvbnRleHQobWNvbnRleHQpCisgICAgICAgICwgbWFjaGluZVBDKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KG1jb250ZXh0LT5fX3NzLl9fcmlwKSkKKyAgICAgICAgLCBzdGFja1BvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4obWNvbnRleHQtPl9fc3MuX19yc3ApKQorICAgICAgICAsIGZy
YW1lUG9pbnRlcihyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KG1jb250ZXh0LT5fX3NzLl9f
cmJwKSkKKyAgICB7IH0KKworICAgIHZvaWQgZHVtcCgpCisgICAgeworI2RlZmluZSBGT1JfRUFD
SF9SRUdJU1RFUih2KSBcCisgICAgICAgIHYocmF4KSBcCisgICAgICAgIHYocmJ4KSBcCisgICAg
ICAgIHYocmN4KSBcCisgICAgICAgIHYocmR4KSBcCisgICAgICAgIHYocmRpKSBcCisgICAgICAg
IHYocnNpKSBcCisgICAgICAgIHYocmJwKSBcCisgICAgICAgIHYocnNwKSBcCisgICAgICAgIHYo
cjgpIFwKKyAgICAgICAgdihyOSkgXAorICAgICAgICB2KHIxMCkgXAorICAgICAgICB2KHIxMSkg
XAorICAgICAgICB2KHIxMikgXAorICAgICAgICB2KHIxMykgXAorICAgICAgICB2KHIxNCkgXAor
ICAgICAgICB2KHIxNSkgXAorICAgICAgICB2KHJpcCkgXAorICAgICAgICB2KHJmbGFncykgXAor
ICAgICAgICB2KGNzKSBcCisgICAgICAgIHYoZnMpIFwKKyAgICAgICAgdihncykKKworI2RlZmlu
ZSBEVU1QX1JFR0lTVEVSKF9fcmVnKSBcCisgICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcg
IjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcp
KTsKKyAgICAgICAgRk9SX0VBQ0hfUkVHSVNURVIoRFVNUF9SRUdJU1RFUikKKyN1bmRlZiBGT1Jf
RUFDSF9SRUdJU1RFUgorICAgIH0KKworICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIHZv
aWQqIG1hY2hpbmVQQzsKKyAgICB2b2lkKiBzdGFja1BvaW50ZXI7CisgICAgdm9pZCogZnJhbWVQ
b2ludGVyOworfTsKKyNlbmRpZiAvLyBDUFUoWDg2XzY0KQorCisjaWYgQ1BVKEFSTTY0KQorc3Ry
dWN0IFNpZ25hbENvbnRleHQgeworICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNvbnRl
eHQpCisgICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCisgICAgICAgICwgbWFjaGluZVBDKHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5fX3NzLl9fcGMpKQorICAgICAgICAsIHN0
YWNrUG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fX3NwKSkK
KyAgICAgICAgLCBmcmFtZVBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihtY29u
dGV4dC0+X19zcy5fX2ZwKSkKKyAgICB7IH0KKworICAgIHZvaWQgZHVtcCgpCisgICAgeworICAg
ICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI4OyBpICs9IDQpIHsKKyAgICAg
ICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHggeCVkOiAl
MDE2bGx4IiwKKyAgICAgICAgICAgICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sCisgICAg
ICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hbaSsxXSwKKyAgICAgICAgICAgICAg
ICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAorICAgICAgICAgICAgICAgIGkrMywgbWNv
bnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChpIDwgMjkp
OworICAgICAgICBsb2coInglZDogJTAxNmxseCBmcDogJTAxNmxseCBscjogJTAxNmxseCIsCisg
ICAgICAgICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sIG1jb250ZXh0LT5fX3NzLl9fZnAs
IG1jb250ZXh0LT5fX3NzLl9fbHIpOworICAgICAgICBsb2coInNwOiAlMDE2bGx4IHBjOiAlMDE2
bGx4IGNwc3I6ICUwOHgiLAorICAgICAgICAgICAgbWNvbnRleHQtPl9fc3MuX19zcCwgbWNvbnRl
eHQtPl9fc3MuX19wYywgbWNvbnRleHQtPl9fc3MuX19jcHNyKTsKKyAgICB9CisKKyAgICBtY29u
dGV4dF90JiBtY29udGV4dDsKKyAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQ
b2ludGVyOworICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKK307CisjZW5kaWYgLy8gQ1BVKFg4Nl82
NCkKKworc3RydWN0IHNpZ2FjdGlvbiBvbGRTaWdJbGxBY3Rpb247CisKK3N0YXRpYyB2b2lkIGhh
bmRsZUNyYXNoKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKQoreworICAgIHNpZ2FjdGlvbihT
SUdJTEwsICZvbGRTaWdJbGxBY3Rpb24sIG51bGxwdHIpOworCisgICAgU2lnbmFsQ29udGV4dCBj
b250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAg
U2lnaWxsQ3Jhc2hBbmFseXplciYgYW5hbHl6ZXIgPSBlbnN1cmVTaWdpbGxDcmFzaEFuYWx5emVy
KCk7CisgICAgYW5hbHl6ZXIuYW5hbHl6ZShjb250ZXh0KTsKK30KKworc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUNyYXNoSGFuZGxlcigpCit7CisgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247Cisg
ICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBz
aWdpbmZvX3QgKiwgdm9pZCAqKT4oaGFuZGxlQ3Jhc2gpOworICAgIHNpZ2ZpbGxzZXQoJmFjdGlv
bi5zYV9tYXNrKTsKKyAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgIHNpZ2Fj
dGlvbihTSUdJTEwsICZhY3Rpb24sICZvbGRTaWdJbGxBY3Rpb24pOworfQorCisjZWxzZQorCitz
dGF0aWMgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGluaXRpYWxpemVDcmFzaEhhbmRsZXIo
KQoreworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyAvLyBOb3Qgc3VwcG9ydGVkIGZvciB0aGlz
IHBsYXRmb3JtLgorfQorCisjZW5kaWYgLy8gT1MoREFSV0lOKQorCitTaWdpbGxDcmFzaEFuYWx5
emVyJiBlbnN1cmVTaWdpbGxDcmFzaEFuYWx5emVyKCkKK3sKKyAgICBzdGF0aWMgU2lnaWxsQ3Jh
c2hBbmFseXplciogYW5hbHl6ZXI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAgICAgICBpbml0aWFsaXplQ3Jhc2hIYW5k
bGVyKCk7CisgICAgICAgIGFuYWx5emVyID0gbmV3IFNpZ2lsbENyYXNoQW5hbHl6ZXI7CisgICAg
fSk7CisgICAgcmV0dXJuICphbmFseXplcjsKK30KKwordm9pZCBTaWdpbGxDcmFzaEFuYWx5emVy
OjphbmFseXplKFNpZ25hbENvbnRleHQmIGNvbnRleHQpCit7CisgICAgbG9nKCJCRUdJTiBTSUdJ
TEwgYW5hbHlzaXMiKTsKKworICAgIFsmXSAoKSB7CisgICAgICAgIC8vIEZpcnN0LCBkdW1wIHRo
ZSBzaWduYWwgY29udGV4dCBpbmZvIHNvIHRoYXQgd2UnbGwgYXQgbGVhc3QgaGF2ZSB0aGUgc2Ft
ZSBpbmZvCisgICAgICAgIC8vIHRoYXQgdGhlIGRlZmF1bHQgY3Jhc2ggaGFuZGxlciB3b3VsZCBn
aXZlbiB1cyBpbiBjYXNlIHRoaXMgY3Jhc2ggYW5hbHl6ZXIKKyAgICAgICAgLy8gaXRzZWxmIGNy
YXNoZXMuCisgICAgICAgIGNvbnRleHQuZHVtcCgpOworCisgICAgICAgIFZNSW5zcGVjdG9yJiBp
bnNwZWN0b3IgPSBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKTsKKworICAgICAgICAvLyBVc2UgYSB0
aW1lb3V0IHBlcmlvZCBvZiAyIHNlY29uZHMuIFRoZSBjbGllbnQgaXMgYWJvdXQgdG8gY3Jhc2gs
IGFuZCB3ZSBkb24ndAorICAgICAgICAvLyB3YW50IHRvIHR1cm4gdGhlIGNyYXNoIGludG8gYSBo
YW5nIGJ5IHJlLXRyeWluZyB0aGUgbG9jayBmb3IgdG9vIGxvbmcuCisgICAgICAgIGF1dG8gZXhw
ZWN0ZWRMb2NrVG9rZW4gPSBpbnNwZWN0b3IubG9jaygyKTsKKyAgICAgICAgaWYgKCFleHBlY3Rl
ZExvY2tUb2tlbikgeworICAgICAgICAgICAgQVNTRVJUKGV4cGVjdGVkTG9ja1Rva2VuLmVycm9y
KCkgPT0gVk1JbnNwZWN0b3I6OkVycm9yOjpUaW1lZE91dCk7CisgICAgICAgICAgICBsb2coIkVS
Uk9SOiBVbmFibGUgdG8gYW5hbHl6ZSBTSUdJTEwuIFRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIHRv
IGl0ZXJhdGUgVk1zLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGF1dG8gbG9ja1Rva2VuID0gZXhwZWN0ZWRMb2NrVG9rZW4udmFsdWUoKTsKKworICAgICAgICB2
b2lkKiBwYyA9IGNvbnRleHQubWFjaGluZVBDOworICAgICAgICBhdXRvIGlzSW5KSVRNZW1vcnkg
PSBpbnNwZWN0b3IuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkobG9ja1Rva2VuLCBwYyk7CisgICAg
ICAgIGlmICghaXNJbkpJVE1lbW9yeSkgeworICAgICAgICAgICAgbG9nKCJFUlJPUjogVGltZWQg
b3V0OiBub3QgYWJsZSB0byBkZXRlcm1pbmUgaWYgcGMgJXAgaXMgaW4gdmFsaWQgSklUIGV4ZWN1
dGFibGUgbWVtb3J5IiwgcGMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmICghaXNJbkpJVE1lbW9yeS52YWx1ZSgpKSB7CisgICAgICAgICAgICBsb2coInBjICVw
IGlzIE5PVCBpbiB2YWxpZCBKSVQgZXhlY3V0YWJsZSBtZW1vcnkiLCBwYyk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbG9nKCJwYyAlcCBpcyBpbiB2YWxpZCBKSVQg
ZXhlY3V0YWJsZSBtZW1vcnkiLCBwYyk7CisKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIHNpemVf
dCBwY0FzU2l6ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwYyk7CisgICAgICAgIGlmIChw
Y0FzU2l6ZSAhPSByb3VuZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1aW50MzJfdCk+KHBjQXNTaXpl
KSkgeworICAgICAgICAgICAgbG9nKCJwYyAlcCBpcyBOT1QgcHJvcGVybHkgYWxpZ25lZCIsIHBj
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGtub3cg
aXQncyBzYWZlIHRvIHJlYWQgdGhlIHdvcmQgYXQgdGhlIFBDIGJlY2F1c2Ugd2UncmUgaGFuZGxp
bmcgYSBTSUdJTEwuCisgICAgICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQgaGF2ZSBjcmFzaGVk
IHdpdGggYSBTSUdCVVMgaW5zdGVhZC4KKyAgICAgICAgdWludDMyX3Qgd29yZEF0UEMgPSAqcmVp
bnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHBjKTsKKyAgICAgICAgbG9nKCJpbnN0cnVjdGlvbiBi
aXRzIGF0IHBjICVwIGlzOiAweCUwOHgiLCBwYywgd29yZEF0UEMpOworI2VuZGlmCisKKyAgICAg
ICAgYXV0byBleHBlY3RlZENvZGVCbG9jayA9IGluc3BlY3Rvci5jb2RlQmxvY2tGb3JNYWNoaW5l
UEMobG9ja1Rva2VuLCBwYyk7CisgICAgICAgIGlmICghZXhwZWN0ZWRDb2RlQmxvY2spIHsKKyAg
ICAgICAgICAgIGlmIChleHBlY3RlZENvZGVCbG9jay5lcnJvcigpID09IFZNSW5zcGVjdG9yOjpF
cnJvcjo6VGltZWRPdXQpCisgICAgICAgICAgICAgICAgbG9nKCJFUlJPUjogVGltZWQgb3V0OiBu
b3QgYWJsZSB0byBkZXRlcm1pbmUgaWYgcGMgJXAgaXMgaW4gYSB2YWxpZCBDb2RlQmxvY2siLCBw
Yyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKCJUaGUgY3VycmVudCB0
aHJlYWQgZG9lcyBub3Qgb3duIGFueSBWTSBKU0xvY2siKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4cGVjdGVkQ29kZUJs
b2NrLnZhbHVlKCk7CisgICAgICAgIGlmICghY29kZUJsb2NrKSB7CisgICAgICAgICAgICBsb2co
Im1hY2hpbmUgUEMgJXAgZG9lcyBub3QgYmVsb25nIHRvIGFueSBDb2RlQmxvY2sgaW4gdGhlIGN1
cnJlbnRseSBlbnRlcmVkIFZNIiwgcGMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgbG9nKCJwYyAlcCBiZWxvbmdzIHRvIENvZGVCbG9jayAlcCBvZiB0eXBlICVz
IiwgcGMsIGNvZGVCbG9jaywgSklUQ29kZTo6dHlwZU5hbWUoY29kZUJsb2NrLT5qaXRUeXBlKCkp
KTsKKworICAgICAgICBkdW1wQ29kZUJsb2NrKGNvZGVCbG9jaywgcGMpOworICAgIH0gKCk7CisK
KyAgICBsb2coIkVORCBTSUdJTEwgYW5hbHlzaXMiKTsKK30KKwordm9pZCBTaWdpbGxDcmFzaEFu
YWx5emVyOjpkdW1wQ29kZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiBtYWNoaW5l
UEMpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2st
PmppdENvZGUoKS5nZXQoKTsKKworICAgIC8vIER1bXAgdGhlIHJhdyBiaXRzIG9mIHRoZSBjb2Rl
LgorICAgIHVpbnQzMl90KiBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihqaXRD
b2RlLT5zdGFydCgpKTsKKyAgICB1aW50MzJfdCogZW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
MzJfdCo+KGppdENvZGUtPmVuZCgpKTsKKyAgICBsb2coIkpJVENvZGUgJXAgWyVwLSVwXToiLCBq
aXRDb2RlLCBzdGFydCwgZW5kKTsKKyAgICBpZiAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgdWlu
dDMyX3QqIHAgPSBzdGFydDsKKyAgICAgICAgd2hpbGUgKHAgKyA4IDw9IGVuZCkgeworICAgICAg
ICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUw
OHgiLCBwLCBwKzcsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0sIHBbNl0sIHBb
N10pOworICAgICAgICAgICAgcCArPSA4OworICAgICAgICB9CisgICAgICAgIGlmIChwICsgNyA8
PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4
eCAlMDh4ICUwOHgiLCBwLCBwKzYsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0s
IHBbNl0pOworICAgICAgICBlbHNlIGlmIChwICsgNiA8PSBlbmQpCisgICAgICAgICAgICBsb2co
IlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4IiwgcCwgcCs1LCBwWzBdLCBw
WzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVdKTsKKyAgICAgICAgZWxzZSBpZiAocCArIDUgPD0g
ZW5kKQorICAgICAgICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHgi
LCBwLCBwKzQsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0pOworICAgICAgICBlbHNlIGlm
IChwICsgNCA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4
ICUwOHgiLCBwLCBwKzMsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10pOworICAgICAgICBpZiAocCAr
IDMgPD0gZW5kKQorICAgICAgICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHggJTA4eCIsIHAs
IHArMiwgcFswXSwgcFsxXSwgcFsyXSk7CisgICAgICAgIGVsc2UgaWYgKHAgKyAyIDw9IGVuZCkK
KyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAlMDh4IiwgcCwgcCsxLCBwWzBdLCBwWzFd
KTsKKyAgICAgICAgZWxzZSBpZiAocCArIDEgPD0gZW5kKQorICAgICAgICAgICAgbG9nKCJbJXAt
JXBdOiAlMDh4IiwgcCwgcCwgcFswXSk7CisgICAgfQorCisgICAgLy8gRHVtcCB0aGUgZGlzYXNz
ZW1ibHkgb2YgdGhlIGNvZGUuCisgICAgbG9nKCJEaXNhc3NlbWJseToiKTsKKyAgICB1aW50MzJf
dCogY3VycmVudFBDID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGppdENvZGUtPmV4ZWN1
dGFibGVBZGRyZXNzKCkpOworICAgIHNpemVfdCBieXRlQ291bnQgPSBqaXRDb2RlLT5zaXplKCk7
CisgICAgd2hpbGUgKGJ5dGVDb3VudCkgeworICAgICAgICBjaGFyIHBjU3RyaW5nWzI0XTsKKyAg
ICAgICAgaWYgKGN1cnJlbnRQQyA9PSBtYWNoaW5lUEMpIHsKKyAgICAgICAgICAgIHNucHJpbnRm
KHBjU3RyaW5nLCBzaXplb2YocGNTdHJpbmcpLCAiKiAweCVseCIsIHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgbG9uZz4oY3VycmVudFBDKSk7CisgICAgICAgICAgICBsb2coIiUyMHM6ICVzICAg
IDw9PT09PT09PT09PT09PT09PT09PT09PT09IiwgcGNTdHJpbmcsIGFybTY0T3Bjb2RlLmRpc2Fz
c2VtYmxlKGN1cnJlbnRQQykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25wcmlu
dGYocGNTdHJpbmcsIHNpemVvZihwY1N0cmluZyksICIweCVseCIsIHJlaW50ZXJwcmV0X2Nhc3Q8
dW5zaWduZWQgbG9uZz4oY3VycmVudFBDKSk7CisgICAgICAgICAgICBsb2coIiUyMHM6ICVzIiwg
cGNTdHJpbmcsIGFybTY0T3Bjb2RlLmRpc2Fzc2VtYmxlKGN1cnJlbnRQQykpOworICAgICAgICB9
CisgICAgICAgIGN1cnJlbnRQQysrOworICAgICAgICBieXRlQ291bnQgLT0gc2l6ZW9mKHVpbnQz
Ml90KTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworICAgIFVO
VVNFRF9QQVJBTShtYWNoaW5lUEMpOworICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisjZW5k
aWYKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBTaWdp
bGxDcmFzaEFuYWx5emVyOworCitTaWdpbGxDcmFzaEFuYWx5emVyJiBlbnN1cmVTaWdpbGxDcmFz
aEFuYWx5emVyKCk7CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKKworI2luY2x1
ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgorI2luY2x1ZGUgIkhl
YXBJbmxpbmVzLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5j
bHVkZSA8d3RmL0V4cGVjdGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitWTUluc3BlY3RvciYg
Vk1JbnNwZWN0b3I6Omluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgVk1JbnNwZWN0b3IqIG1hbmFn
ZXI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uo
b25jZSwgW10geworICAgICAgICBtYW5hZ2VyID0gbmV3IFZNSW5zcGVjdG9yKCk7CisgICAgfSk7
CisgICAgcmV0dXJuICptYW5hZ2VyOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjphZGQoVk0qIHZt
KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBtX2xpc3QuYXBw
ZW5kKHZtKTsKK30KKwordm9pZCBWTUluc3BlY3Rvcjo6cmVtb3ZlKFZNKiB2bSkKK3sKKyAgICBh
dXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgbV9saXN0LnJlbW92ZSh2bSk7Cit9
CisKK2F1dG8gVk1JbnNwZWN0b3I6OmxvY2sodW5zaWduZWQgdGltZW91dEluU2Vjb25kcykgLT4g
RXhwZWN0ZWQ8TG9ja1Rva2VuLCBFcnJvcj4KK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBi
ZSBjYWxsZWQgZnJvbSBhIHNpZ25hbCBoYW5kbGVyIChlLmcuIHZpYSB2aXNpdCgpKS4gSGVuY2Us
CisgICAgLy8gaXQgc2hvdWxkIG9ubHkgdXNlIEFQSXMgdGhhdCBhcmUgc2FmZSB0byBjYWxsIGZy
b20gc2lnbmFsIGhhbmRsZXJzLiBUaGlzIGlzCisgICAgLy8gd2h5IHdlIHVzZSB1bmlzdGQuaCdz
IHNsZWVwKCkgaW5zdGVhZCBvZiBpdHMgYWx0ZXJuYXRpdmVzLgorCisgICAgdW5zaWduZWQgbWF4
UmV0cmllcyA9IHRpbWVvdXRJblNlY29uZHM7IC8vIHNpbmNlIHNlY29uZHNQZXJTbGVlcCA9PSAx
LgorCisgICAgYm9vbCBsb2NrZWQgPSBtX2xvY2sudHJ5TG9jaygpOworICAgIHVuc2lnbmVkIHRy
eUNvdW50ID0gMDsKKyAgICB3aGlsZSAoIWxvY2tlZCAmJiB0cnlDb3VudCA8PSBtYXhSZXRyaWVz
KSB7CisgICAgICAgIC8vIFdlIHdhbnQgdGhlIHZlcnNpb24gb2Ygc2xlZXAgZnJvbSB1bmlzdGQu
aC4gQ2FzdCB0byBkaXNhbWJpZ3VhdGUuCisgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCAo
KikodW5zaWduZWQpPihzbGVlcCkpKDEpOworICAgICAgICBsb2NrZWQgPSBtX2xvY2sudHJ5TG9j
aygpOworICAgIH0KKworICAgIGlmICghbG9ja2VkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhw
ZWN0ZWQoRXJyb3I6OlRpbWVkT3V0KTsKKyAgICByZXR1cm4gTG9ja1Rva2VuOjpMb2NrZWRWYWx1
ZTsKK30KKworc3RhdGljIGJvb2wgZW5zdXJlSXNTYWZlVG9Mb2NrKExvY2smIGxvY2spCit7Cisg
ICAgdW5zaWduZWQgbWF4UmV0cmllcyA9IDI7CisgICAgdW5zaWduZWQgdHJ5Q291bnQgPSAwOwor
ICAgIHdoaWxlICh0cnlDb3VudCA8PSBtYXhSZXRyaWVzKSB7CisgICAgICAgIGJvb2wgc3VjY2Vz
cyA9IGxvY2sudHJ5TG9jaygpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAg
bG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
ICAgIHRyeUNvdW50Kys7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK307CisKK2F1dG8gVk1J
bnNwZWN0b3I6OmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KFZNSW5zcGVjdG9yOjpMb2NrVG9rZW4s
IHZvaWQqIG1hY2hpbmVQQykgLT4gRXhwZWN0ZWQ8Ym9vbCwgRXJyb3I+Cit7CisgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOworICAgIGJvb2wgaGFzVGltZW91dCA9IGZhbHNlOworICAgIGl0ZXJhdGUo
WyZdIChWTSYgdm0pIC0+IEZ1bmN0b3JTdGF0dXMgeworICAgICAgICBhdXRvIGFsbG9jYXRvciA9
IHZtLmV4ZWN1dGFibGVBbGxvY2F0b3I7CisgICAgICAgIGF1dG8mIGxvY2sgPSBhbGxvY2F0b3Iu
Z2V0TG9jaygpOworCisgICAgICAgIGJvb2wgaXNTYWZlVG9Mb2NrID0gZW5zdXJlSXNTYWZlVG9M
b2NrKGxvY2spOworICAgICAgICBpZiAoIWlzU2FmZVRvTG9jaykgeworICAgICAgICAgICAgaGFz
VGltZW91dCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1czo6Q29udGlu
dWU7IC8vIFNraXAgdGhpcyBWTS4KKyAgICAgICAgfQorCisgICAgICAgIExvY2tIb2xkZXIgZXhl
Y3V0YWJsZUFsbG9jYXRvckxvY2tlcihsb2NrKTsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5pc1Zh
bGlkRXhlY3V0YWJsZU1lbW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyLCBtYWNoaW5lUEMp
KSB7CisgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gRnVuY3Rv
clN0YXR1czo6RG9uZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1czo6
Q29udGludWU7CisgICAgfSk7CisKKyAgICBpZiAoIWZvdW5kICYmIGhhc1RpbWVvdXQpCisgICAg
ICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6VGltZWRPdXQpOworICAgIHJldHVybiBm
b3VuZDsKK30KKworYXV0byBWTUluc3BlY3Rvcjo6Y29kZUJsb2NrRm9yTWFjaGluZVBDKFZNSW5z
cGVjdG9yOjpMb2NrVG9rZW4sIHZvaWQqIG1hY2hpbmVQQykgLT4gRXhwZWN0ZWQ8Q29kZUJsb2Nr
KiwgRXJyb3I+Cit7CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGJv
b2wgaGFzVGltZW91dCA9IGZhbHNlOworICAgIGl0ZXJhdGUoWyZdIChWTSYgdm0pIHsKKyAgICAg
ICAgaWYgKCF2bS5hcGlMb2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSkKKyAgICAg
ICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsKKworICAgICAgICAvLyBIZWFw
Ojpmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucygpIHVzZXMgQ29kZUJsb2NrU2V0Ojpp
dGVyYXRlKCksIGFuZAorICAgICAgICAvLyBDb2RlQmxvY2tTZXQ6Oml0ZXJhdGUoKSBuZWVkcyB0
byBiZSBhYmxlIHRvIGFjcXVpcmUgaXRzIGxvY2suIE1ha2Ugc3VyZSBpdCdzCisgICAgICAgIC8v
IHNhZmUgdG8gcHJvY2VlZCB3aXRoIGNhbGxpbmcgZm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklU
UGxhbnMoKS4KKyAgICAgICAgYXV0byYgbG9jayA9IHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0
TG9jaygpOworICAgICAgICBib29sIGlzU2FmZVRvTG9jayA9IGVuc3VyZUlzU2FmZVRvTG9jayhs
b2NrKTsKKyAgICAgICAgaWYgKCFpc1NhZmVUb0xvY2spIHsKKyAgICAgICAgICAgIGhhc1RpbWVv
dXQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAv
LyBTa2lwIHRoaXMgVk0uCisgICAgICAgIH0KKworICAgICAgICB2bS5oZWFwLmZvckVhY2hDb2Rl
QmxvY2tJZ25vcmluZ0pJVFBsYW5zKFsmXSAoQ29kZUJsb2NrKiBjYikgeworICAgICAgICAgICAg
SklUQ29kZSogaml0Q29kZSA9IGNiLT5qaXRDb2RlKCkuZ2V0KCk7CisgICAgICAgICAgICBpZiAo
IWppdENvZGUpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY29kZUJsb2NrIGlzIGEgcmVw
bGFjZW1lbnQgY29kZUJsb2NrIHdoaWNoIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nCisgICAg
ICAgICAgICAgICAgLy8gY29tcGlsZWQsIGl0cyBqaXRDb2RlIHdpbGwgYmUgbnVsbCwgYW5kIHdl
IGNhbiBkaXNyZWdhcmQgaXQgYXMgYSBtYXRjaCBmb3IKKyAgICAgICAgICAgICAgICAvLyB0aGUg
bWFjaGluZVBDIHdlJ3JlIHNlYXJjaGluZyBmb3IuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIUpJVENvZGU6OmlzSklUKGpp
dENvZGUtPmppdFR5cGUoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgICAgICBpZiAoaml0Q29kZS0+Y29udGFpbnMobWFjaGluZVBDKSkgeworICAgICAgICAgICAg
ICAgIGNvZGVCbG9jayA9IGNiOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICAgICAg
aWYgKGNvZGVCbG9jaykKKyAgICAgICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpEb25lOwor
ICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1czo6Q29udGludWU7CisgICAgfSk7CisKKyAgICBp
ZiAoIWNvZGVCbG9jayAmJiBoYXNUaW1lb3V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0
ZWQoRXJyb3I6OlRpbWVkT3V0KTsKKyAgICByZXR1cm4gY29kZUJsb2NrOworfQorCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rv
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3Bl
Y3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZN
LmgiCisjaW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvRXhw
ZWN0ZWQuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgVk1JbnNwZWN0b3IgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgRXJyb3IgeworICAgICAg
ICBOb25lLAorICAgICAgICBUaW1lZE91dAorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIExvY2tU
b2tlbiB7IExvY2tlZFZhbHVlIH07CisKKyAgICBzdGF0aWMgVk1JbnNwZWN0b3ImIGluc3RhbmNl
KCk7CisKKyAgICB2b2lkIGFkZChWTSopOworICAgIHZvaWQgcmVtb3ZlKFZNKik7CisKKyAgICBF
eHBlY3RlZDxMb2NrVG9rZW4sIEVycm9yPiBsb2NrKHVuc2lnbmVkIHRpbWVvdXQgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOworCisgICAgRXhwZWN0ZWQ8Ym9vbCwgRXJy
b3I+IGlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KExvY2tUb2tlbiwgdm9pZCopOworICAgIEV4cGVj
dGVkPENvZGVCbG9jayosIEVycm9yPiBjb2RlQmxvY2tGb3JNYWNoaW5lUEMoTG9ja1Rva2VuLCB2
b2lkKik7CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBGdW5jdG9yU3RhdHVzIHsKKyAgICAg
ICAgQ29udGludWUsCisgICAgICAgIERvbmUKKyAgICB9OworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdG9yPiB2b2lkIGl0ZXJhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoVk0qIHZtID0gbV9saXN0LmhlYWQoKTsgdm07IHZtID0gdm0tPm5leHQoKSkg
eworICAgICAgICAgICAgRnVuY3RvclN0YXR1cyBzdGF0dXMgPSBmdW5jdG9yKCp2bSk7CisgICAg
ICAgICAgICBpZiAoc3RhdHVzID09IEZ1bmN0b3JTdGF0dXM6OkRvbmUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgTG9jayBtX2xvY2s7CisgICAgRG91
Ymx5TGlua2VkTGlzdDxWTT4gbV9saXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxv
ZwkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNy0wMi0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBs
ZS5jb20+CisKKyAgICAgICAgQWRkIGEgU0lHSUxMIGNyYXNoIGFuYWx5emVyIHRvIG1ha2UgZGVi
dWdnaW5nIFNJR0lMTHMgZWFzaWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTY3NzE0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDMxODIzNz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9T
dGRMaWJFeHRyYXMuaDoKKwogMjAxNy0wMS0yNiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxl
LmNvbT4KIAogICAgICAgICBIYXJkZW4gaG93IHRoZSBjb21waWxlciByZWZlcmVuY2VzIEdDIG9i
amVjdHMKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4OSw3
IEBAIHVzaW5nIFdURjo6aXNDb21waWxhdGlvblRocmVhZDsKIHVzaW5nIFdURjo6aXNQb2ludGVy
QWxpZ25lZDsKIHVzaW5nIFdURjo6aXNTdGF0ZWxlc3NMYW1iZGE7CiB1c2luZyBXVEY6OmlzOEJ5
dGVBbGlnbmVkOwordXNpbmcgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mOwogdXNpbmcgV1RGOjpz
YWZlQ2FzdDsKIHVzaW5nIFdURjo6dHJ5QmluYXJ5U2VhcmNoOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300370</attachid>
            <date>2017-02-01 16:31:09 -0800</date>
            <delta_ts>2017-02-01 16:35:53 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-167714.patch</filename>
            <type>text/plain</type>
            <size>41382</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE3LTAyLTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNp
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBh
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6
OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6aWxsZWdhbEluc3Ry
dWN0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmlsbGVnYWxJbnN0cnVjdGlv
bik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnNJ
bXBsKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5z
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpPcHRpb25z
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6OmhhbmRs
ZUNyYXNoKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUNyYXNoSGFuZGxlcik6CisgICAgICAg
IChKU0M6OmVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIpOgorICAgICAgICAoSlNDOjpTaWdpbGxD
cmFzaEFuYWx5emVyOjphbmFseXplKToKKyAgICAgICAgKEpTQzo6U2lnaWxsQ3Jhc2hBbmFseXpl
cjo6ZHVtcENvZGVCbG9jayk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5o
OiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6aW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rv
cjo6YWRkKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnJlbW92ZSk6CisgICAgICAgIChK
U0M6OmVuc3VyZUlzU2FmZVRvTG9jayk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjppdGVyYXRlKToKKwogMjAxNy0wMi0w
MSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFVzZSBndWFyYW50ZWVkIFJ1bkxvb3AgaW5zdGVhZCBvZiBSdW5Mb29wOjpjdXJy
ZW50IGZvciBkaXNwYXRjaGluZyBpbnNwZWN0b3IgR0MgZXZlbnQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDYgKzkwNyw4IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3Qu
Y3BwCiAgICAgdG9vbHMvSlNEb2xsYXJWTS5jcHAKICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAorICAgIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCisgICAgdG9vbHMvVk1J
bnNwZWN0b3IuY3BwCiAKICAgICB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwCiAgICAgd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMzMiw2ICsyMzMyLDEw
IEBACiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlCMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyRTZBN0IxRDZF
QTYyQzAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2Nv
cGUuY3BwICovOyB9OworCQlGRTMwMjJEMjFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi87
IH07CisJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyB9OworCQlGRTMwMjJE
NjFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZN
SW5zcGVjdG9yLmNwcCAqLzsgfTsKKwkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5z
cGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKIAkJRkUzMThG
REYxQ0FDOTgyNzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMThGREQx
Q0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICov
OyB9OwogCQlGRTMxOEZFMDFDQUM5ODJGMDBERkNDNTQgLyogRUNNQVNjcmlwdFNwZWNJbnRlcm5h
bEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUzMThGREUxQ0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5j
dGlvbnMuaCAqLzsgfTsKIAkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzQyMjEx
MUQ2QjgxOEMwMDMyQkU4OCAvKiBUaHJvd1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ4NzEsNiArNDg3NSwxMCBAQAogCQlGRTIwQ0U5
QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3Au
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTElu
dENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocm93U2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUz
MDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENDFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0
OTMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1J
bnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMThGREQxQ0FDOEM1
MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzE4RkRFMUNBQzhDNTMw
MERGQ0M1NCAvKiBFQ01BU2NyaXB0U3BlY0ludGVybmFsRnVuY3Rpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8q
IFRocm93U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjgwOSw4ICs2ODE3LDEyIEBACiAJ
CQkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLywKIAkJCQlGRTM4
NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJ
RkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLywKKwkJ
CQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8s
CisJCQkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAq
LywKIAkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8s
CiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovLAor
CQkJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8sCisJCQkJ
RkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTg3OTQsNiArODgw
Niw3IEBACiAJCQkJRkUzOTEzNTYxQjc5NEY4RjAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MERFOUEwOTFCRTdENjlFMDA1RDg5RDkgLyogTExJbnRBc3Nl
bWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTMwMjJEMzFFM0Q3M0E1MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENF
OUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04ODUwLDYgKzg4NjMsNyBAQAogCQkJCTE0NzM0MUQ2MURDMDJFQjkwMEFBMjlCQSAvKiBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5RDNFRDlDNTA2
NEREMEE4NDY2QTNBIC8qIE1vZHVsZVNjb3BlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZB
NzYyMDcxREI5MjQzMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2
ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDczNDFEMDFEQzAyREI0MDBB
QTI5QkEgLyogTmF0aXZlRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzEwLDYgKzk3
MjQsNyBAQAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBB
cmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5QTIyODM1MUQzNUQ3MUUwMEQ4RTA2NyAv
KiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzMDIyRDYxRTQyODU3MzAw
QkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZC
ODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDA2LDYgKzEwNDIxLDcgQEAKIAkJCQk3OUIwMENCRTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzkx
NjBEQkQxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkUzMDIyRDIxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3
NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIu
aAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
Uk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDg0LDYgKzEwODQs
MTIgQEAgcHVibGljOgogICAgICAgICBpbnNuKGV4Y2VwbkdlbmVyYXRpb24oRXhjZXBuT3BfSEFM
VCwgaW1tLCAwKSk7CiAgICAgfQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBv
c2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIGluc24o
MHgwKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGxkcChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJ0MiwgUmVnaXN0ZXJJRCBy
biwgUGFpclBvc3RJbmRleCBzaW1tKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAy
MTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MSw2ICs0NDEsMTIgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbHo8NjQ+KGRlc3QsIGRlc3QpOwogICAgIH0K
IAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2b2lkIGlsbGVn
YWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbGxlZ2FsSW5zdHJ1
Y3Rpb24oKTsKKyAgICB9CisKICAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5sc2w8MzI+KGRlc3QsIHNyYywgc2hpZnRBbW91bnQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzI3LDYgKzMyNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGN0ekFmdGVyQnNmPDMyPihk
c3QpOwogICAgIH0KIAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAg
ICB2b2lkIGlsbGVnYWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5p
bGxlZ2FsSW5zdHJ1Y3Rpb24oKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsc2hpZnQzMihSZWdp
c3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KHNoaWZ0X2Ftb3VudCA9PSBYODZSZWdpc3RlcnM6OmVjeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMjExMzAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1OSw2ICsyNTksNyBAQCBwcml2YXRlOgogICAgIH0g
T25lQnl0ZU9wY29kZUlEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgT1AyX1VEMiAg
ICAgICAgICAgICA9IDB4QiwKICAgICAgICAgT1AyX01PVlNEX1ZzZFdzZCAgICA9IDB4MTAsCiAg
ICAgICAgIE9QMl9NT1ZTRF9Xc2RWc2QgICAgPSAweDExLAogICAgICAgICBPUDJfTU9WU1NfVnNk
V3NkICAgID0gMHgxMCwKQEAgLTY4MSw2ICs2ODIsMTIgQEAgcHVibGljOgogICAgIH0KICNlbmRp
ZiAvLyBDUFUoWDg2XzY0KQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2Vz
LgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcChPUDJfVUQyKTsKKyAgICB9CisKICAgICB2b2lkIGluY19yKFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQNV9F
diwgR1JPVVAxX09QX0FERCwgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNSw2ICsyMDI1LDExIEBAIHZvaWQgSGVhcDo6Zm9y
RWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4gbV9jb2RlQmxvY2tzLT5pdGVy
YXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBs
YW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mIGZ1bmMpCit7Cisg
ICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5jKTsKK30KKwogdm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgaWYgKFVOTElL
RUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFByb3RlY3RlZENlbGwo
Y29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaENvZGVCbG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhjb25zdCBGdW5jdG9y
Jik7CiAKICAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsg
fQogICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hhbmRsZVN0YWNr
OyB9CkBAIC00NzAsNiArNDcxLDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNW
aXNpdGVkKCk7CiAgICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mKTsKKyAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJ
Z25vcmluZ0pJVFBsYW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4m
KTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdm9pZCBICiAgICAgZm9yRWFjaENvZGVCbG9ja0ltcGwoc2NvcGVkTGFt
YmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxh
bnMoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdK
SVRQbGFuc0ltcGwoc2NvcGVkTGFtYmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaFBy
b3RlY3RlZENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNs
dWRlICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0xNDQsNiArMTQ1LDEwIEBAIGJvb2wg
T3B0aW9uczo6aXNBdmFpbGFibGUoT3B0aW9uczo6SUQgaWQKICAgICBpZiAoaWQgPT0gbWF4U2lu
Z2xlQWxsb2NhdGlvblNpemVJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKKyNpZiBP
UyhEQVJXSU4pCisgICAgaWYgKGlkID09IHVzZVNpZ2lsbENyYXNoQW5hbHl6ZXJJRCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQyOSw2
ICs0MzQsOCBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBl
bHNlCiAgICAgICAgIGZhc3RTZXRNYXhTaW5nbGVBbGxvY2F0aW9uU2l6ZShzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKTsKICNlbmRpZgorICAgIGlmIChPcHRpb25zOjp1c2VTaWdp
bGxDcmFzaEFuYWx5emVyKCkpCisgICAgICAgIGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsK
IH0KIAogdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3
IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAgICB2KGJvb2ws
IHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdn
aW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0
aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBv
dmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKKyAgICB2KGJvb2wsIHVzZVNpZ2lsbENy
YXNoQW5hbHl6ZXIsIHRydWUsIENvbmZpZ3VyYWJsZSwgImxvZ3MgZGF0YSBhYm91dCBTSUdJTEwg
Y3Jhc2hlcyIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwg
IndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2Yg
TiBtaWxsaXNlY29uZHMpIikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJWTUVudHJ5U2NvcGUuaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUg
IldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldl
YWtNYXBEYXRhLmgiCkBAIC0zNDksMTAgKzM1MCwxNCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgICAgIFdhdGNoZG9nJiB3YXRjaGRvZyA9IGVuc3VyZVdh
dGNoZG9nKCk7CiAgICAgICAgIHdhdGNoZG9nLnNldFRpbWVMaW1pdCh0aW1lb3V0TWlsbGlzKTsK
ICAgICB9CisKKyAgICBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKS5hZGQodGhpcyk7CiB9CiAKIFZN
Ojp+Vk0oKQogeworICAgIFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpLnJlbW92ZSh0aGlzKTsKKwog
ICAgIC8vIE5ldmVyIEdDLCBldmVyIGFnYWluLgogICAgIGhlYXAuaW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIx
MTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MjQxLDcgKzI0Miw3IEBAIHN0cnVjdCBTY3JhdGNoQnVmZmVyIHsKICNwcmFnbWEgd2FybmluZyhw
b3ApCiAjZW5kaWYKIAotY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+
IHsKK2NsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiBwdWJsaWM6CiAgICAgLy8gV2ViQ29yZSBoYXMgYSBv
bmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBWTXM7CiAgICAgLy8gZWl0aGVyIGNyZWF0
ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCkBAIC03Nzgs
MTEgKzc3OSwxNSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2Vu
PiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAorICAgIFZNKiBtX3ByZXY7
IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorICAgIFZNKiBtX25leHQ7IC8v
IFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorCiAgICAgLy8gRnJpZW5kcyBmb3Ig
ZXhjZXB0aW9uIGNoZWNraW5nIHB1cnBvc2Ugb25seS4KICAgICBmcmllbmQgY2xhc3MgSGVhcDsK
ICAgICBmcmllbmQgY2xhc3MgQ2F0Y2hTY29wZTsKICAgICBmcmllbmQgY2xhc3MgRXhjZXB0aW9u
U2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFRocm93U2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPjsKIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpZ2lsbENyYXNoQW5hbHl6ZXIuaCIKKworI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNSW5zcGVj
dG9yLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCisj
ZW5kaWYKKworI2lmIEhBVkUoU0lHTkFMX0gpCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTaWduYWxDb250ZXh0OworCitjbGFzcyBTaWdp
bGxDcmFzaEFuYWx5emVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFuYWx5emUoU2lnbmFsQ29udGV4
dCYpOworCitwcml2YXRlOgorICAgIHZvaWQgZHVtcENvZGVCbG9jayhDb2RlQmxvY2sqLCB2b2lk
KiBtYWNoaW5lUEMpOworCisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyAgICBBNjRET3Bj
b2RlIGFybTY0T3Bjb2RlOworI2VuZGlmCit9OworCisjaWYgT1MoREFSV0lOKQorCisjaWYgVVNF
KE9TX0xPRykKKworI2RlZmluZSBsb2coZm9ybWF0LCAuLi4pIFwKKyAgICBvc19sb2dfaW5mbyhP
U19MT0dfREVGQVVMVCwgZm9ybWF0LCAjI19fVkFfQVJHU19fKQorCisjZWxzZSAvLyBVU0UoT1Nf
TE9HKQorCisjZGVmaW5lIGxvZyhmb3JtYXQsIC4uLikgXAorICAgIGRhdGFMb2dGKGZvcm1hdCwg
IyNfX1ZBX0FSR1NfXykKKyAgICAKKyNlbmRpZiAvLyBVU0UoT1NfTE9HKQorCisjaWYgQ1BVKFg4
Nl82NCkKK3N0cnVjdCBTaWduYWxDb250ZXh0IHsKKyAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0
X3QmIG1jb250ZXh0KQorICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQorICAgICAgICAsIG1h
Y2hpbmVQQyhyZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fX3JpcCkpCisg
ICAgICAgICwgc3RhY2tQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5f
X3NzLl9fcnNwKSkKKyAgICAgICAgLCBmcmFtZVBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDxDYWxs
RnJhbWUqPihtY29udGV4dC0+X19zcy5fX3JicCkpCisgICAgeyB9CisKKyAgICB2b2lkIGR1bXAo
KQorICAgIHsKKyNkZWZpbmUgRk9SX0VBQ0hfUkVHSVNURVIodikgXAorICAgICAgICB2KHJheCkg
XAorICAgICAgICB2KHJieCkgXAorICAgICAgICB2KHJjeCkgXAorICAgICAgICB2KHJkeCkgXAor
ICAgICAgICB2KHJkaSkgXAorICAgICAgICB2KHJzaSkgXAorICAgICAgICB2KHJicCkgXAorICAg
ICAgICB2KHJzcCkgXAorICAgICAgICB2KHI4KSBcCisgICAgICAgIHYocjkpIFwKKyAgICAgICAg
dihyMTApIFwKKyAgICAgICAgdihyMTEpIFwKKyAgICAgICAgdihyMTIpIFwKKyAgICAgICAgdihy
MTMpIFwKKyAgICAgICAgdihyMTQpIFwKKyAgICAgICAgdihyMTUpIFwKKyAgICAgICAgdihyaXAp
IFwKKyAgICAgICAgdihyZmxhZ3MpIFwKKyAgICAgICAgdihjcykgXAorICAgICAgICB2KGZzKSBc
CisgICAgICAgIHYoZ3MpCisKKyNkZWZpbmUgRFVNUF9SRUdJU1RFUihfX3JlZykgXAorICAgICAg
ICBsb2coIlJlZ2lzdGVyICIgI19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
bWNvbnRleHQtPl9fc3MuX18jI19fcmVnKSk7CisgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERV
TVBfUkVHSVNURVIpCisjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKKyAgICB9CisKKyAgICBtY29u
dGV4dF90JiBtY29udGV4dDsKKyAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQ
b2ludGVyOworICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKK307CisjZW5kaWYgLy8gQ1BVKFg4Nl82
NCkKKworI2lmIENQVShBUk02NCkKK3N0cnVjdCBTaWduYWxDb250ZXh0IHsKKyAgICBTaWduYWxD
b250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0KQorICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0
KQorICAgICAgICAsIG1hY2hpbmVQQyhyZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+
X19zcy5fX3BjKSkKKyAgICAgICAgLCBzdGFja1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obWNvbnRleHQtPl9fc3MuX19zcCkpCisgICAgICAgICwgZnJhbWVQb2ludGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8Q2FsbEZyYW1lKj4obWNvbnRleHQtPl9fc3MuX19mcCkpCisgICAgeyB9CisKKyAg
ICB2b2lkIGR1bXAoKQorICAgIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7
IGkgPCAyODsgaSArPSA0KSB7CisgICAgICAgICAgICBsb2coInglZDogJTAxNmxseCB4JWQ6ICUw
MTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCIsCisgICAgICAgICAgICAgICAgaSwgbWNv
bnRleHQtPl9fc3MuX194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgbWNvbnRleHQtPl9fc3Mu
X194W2krMV0sCisgICAgICAgICAgICAgICAgaSsyLCBtY29udGV4dC0+X19zcy5fX3hbaSsyXSwK
KyAgICAgICAgICAgICAgICBpKzMsIG1jb250ZXh0LT5fX3NzLl9feFtpKzNdKTsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQoaSA8IDI5KTsKKyAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6
ICUwMTZsbHggbHI6ICUwMTZsbHgiLAorICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194
W2ldLCBtY29udGV4dC0+X19zcy5fX2ZwLCBtY29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAg
bG9nKCJzcDogJTAxNmxseCBwYzogJTAxNmxseCBjcHNyOiAlMDh4IiwKKyAgICAgICAgICAgIG1j
b250ZXh0LT5fX3NzLl9fc3AsIG1jb250ZXh0LT5fX3NzLl9fcGMsIG1jb250ZXh0LT5fX3NzLl9f
Y3Bzcik7CisgICAgfQorCisgICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgdm9pZCogbWFj
aGluZVBDOworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKKyAgICB2b2lkKiBmcmFtZVBvaW50ZXI7
Cit9OworCisjZW5kaWYgLy8gQ1BVKEFSTTY0KQorCitzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0ls
bEFjdGlvbjsKKworc3RhdGljIHZvaWQgaGFuZGxlQ3Jhc2goaW50LCBzaWdpbmZvX3QqLCB2b2lk
KiB1YXApCit7CisgICAgc2lnYWN0aW9uKFNJR0lMTCwgJm9sZFNpZ0lsbEFjdGlvbiwgbnVsbHB0
cik7CisKKyAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+
KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBTaWdpbGxDcmFzaEFuYWx5emVyJiBhbmFseXplciA9
IGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsKKyAgICBhbmFseXplci5hbmFseXplKGNvbnRl
eHQpOworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3Jhc2hIYW5kbGVyKCkKK3sKKyAgICBz
dHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkICgqKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopPihoYW5kbGVDcmFz
aCk7CisgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgIGFjdGlvbi5zYV9mbGFn
cyA9IFNBX1NJR0lORk87CisgICAgc2lnYWN0aW9uKFNJR0lMTCwgJmFjdGlvbiwgJm9sZFNpZ0ls
bEFjdGlvbik7Cit9CisKKyNlbHNlIC8vIE9TKERBUldJTikKKworI2RlZmluZSBsb2coZm9ybWF0
LCAuLi4pIGRvIHsgfSB3aGlsZSAoZmFsc2UpCisgICAgCitzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7
CisgICAgU2lnbmFsQ29udGV4dCgpIHsgfQorCisgICAgdm9pZCBkdW1wKCkgeyB9CisKKyAgICB2
b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworICAgIHZvaWQqIGZyYW1l
UG9pbnRlcjsKK307CisKK3N0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgaW5pdGlh
bGl6ZUNyYXNoSGFuZGxlcigpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7IC8vIE5vdCBz
dXBwb3J0ZWQgZm9yIHRoaXMgcGxhdGZvcm0uCit9CisKKyNlbmRpZiAvLyBPUyhEQVJXSU4pCisK
K1NpZ2lsbENyYXNoQW5hbHl6ZXImIGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKQoreworICAg
IHN0YXRpYyBTaWdpbGxDcmFzaEFuYWx5emVyKiBhbmFseXplcjsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGlu
aXRpYWxpemVDcmFzaEhhbmRsZXIoKTsKKyAgICAgICAgYW5hbHl6ZXIgPSBuZXcgU2lnaWxsQ3Jh
c2hBbmFseXplcjsKKyAgICB9KTsKKyAgICByZXR1cm4gKmFuYWx5emVyOworfQorCit2b2lkIFNp
Z2lsbENyYXNoQW5hbHl6ZXI6OmFuYWx5emUoU2lnbmFsQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBsb2coIkJFR0lOIFNJR0lMTCBhbmFseXNpcyIpOworCisgICAgWyZdICgpIHsKKyAgICAgICAg
Ly8gRmlyc3QsIGR1bXAgdGhlIHNpZ25hbCBjb250ZXh0IGluZm8gc28gdGhhdCB3ZSdsbCBhdCBs
ZWFzdCBoYXZlIHRoZSBzYW1lIGluZm8KKyAgICAgICAgLy8gdGhhdCB0aGUgZGVmYXVsdCBjcmFz
aCBoYW5kbGVyIHdvdWxkIGdpdmVuIHVzIGluIGNhc2UgdGhpcyBjcmFzaCBhbmFseXplcgorICAg
ICAgICAvLyBpdHNlbGYgY3Jhc2hlcy4KKyAgICAgICAgY29udGV4dC5kdW1wKCk7CisKKyAgICAg
ICAgVk1JbnNwZWN0b3ImIGluc3BlY3RvciA9IFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpOworCisg
ICAgICAgIC8vIFVzZSBhIHRpbWVvdXQgcGVyaW9kIG9mIDIgc2Vjb25kcy4gVGhlIGNsaWVudCBp
cyBhYm91dCB0byBjcmFzaCwgYW5kIHdlIGRvbid0CisgICAgICAgIC8vIHdhbnQgdG8gdHVybiB0
aGUgY3Jhc2ggaW50byBhIGhhbmcgYnkgcmUtdHJ5aW5nIHRoZSBsb2NrIGZvciB0b28gbG9uZy4K
KyAgICAgICAgYXV0byBleHBlY3RlZExvY2tUb2tlbiA9IGluc3BlY3Rvci5sb2NrKDIpOworICAg
ICAgICBpZiAoIWV4cGVjdGVkTG9ja1Rva2VuKSB7CisgICAgICAgICAgICBBU1NFUlQoZXhwZWN0
ZWRMb2NrVG9rZW4uZXJyb3IoKSA9PSBWTUluc3BlY3Rvcjo6RXJyb3I6OlRpbWVkT3V0KTsKKyAg
ICAgICAgICAgIGxvZygiRVJST1I6IFVuYWJsZSB0byBhbmFseXplIFNJR0lMTC4gVGltZWQgb3V0
IHdoaWxlIHdhaXRpbmcgdG8gaXRlcmF0ZSBWTXMuIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgYXV0byBsb2NrVG9rZW4gPSBleHBlY3RlZExvY2tUb2tlbi52YWx1
ZSgpOworCisgICAgICAgIHZvaWQqIHBjID0gY29udGV4dC5tYWNoaW5lUEM7CisgICAgICAgIGF1
dG8gaXNJbkpJVE1lbW9yeSA9IGluc3BlY3Rvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShsb2Nr
VG9rZW4sIHBjKTsKKyAgICAgICAgaWYgKCFpc0luSklUTWVtb3J5KSB7CisgICAgICAgICAgICBs
b2coIkVSUk9SOiBUaW1lZCBvdXQ6IG5vdCBhYmxlIHRvIGRldGVybWluZSBpZiBwYyAlcCBpcyBp
biB2YWxpZCBKSVQgZXhlY3V0YWJsZSBtZW1vcnkiLCBwYyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0luSklUTWVtb3J5LnZhbHVlKCkpIHsKKyAgICAg
ICAgICAgIGxvZygicGMgJXAgaXMgTk9UIGluIHZhbGlkIEpJVCBleGVjdXRhYmxlIG1lbW9yeSIs
IHBjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsb2coInBjICVw
IGlzIGluIHZhbGlkIEpJVCBleGVjdXRhYmxlIG1lbW9yeSIsIHBjKTsKKworI2lmIENQVShBUk02
NCkKKyAgICAgICAgc2l6ZV90IHBjQXNTaXplID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHBj
KTsKKyAgICAgICAgaWYgKHBjQXNTaXplICE9IHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVp
bnQzMl90KT4ocGNBc1NpemUpKSB7CisgICAgICAgICAgICBsb2coInBjICVwIGlzIE5PVCBwcm9w
ZXJseSBhbGlnbmVkIiwgcGMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2Uga25vdyBpdCdzIHNhZmUgdG8gcmVhZCB0aGUgd29yZCBhdCB0aGUgUEMgYmVj
YXVzZSB3ZSdyZSBoYW5kbGluZyBhIFNJR0lMTC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3
b3VsZCBoYXZlIGNyYXNoZWQgd2l0aCBhIFNJR0JVUyBpbnN0ZWFkLgorICAgICAgICB1aW50MzJf
dCB3b3JkQXRQQyA9ICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocGMpOworICAgICAgICBs
b2coImluc3RydWN0aW9uIGJpdHMgYXQgcGMgJXAgaXM6IDB4JTA4eCIsIHBjLCB3b3JkQXRQQyk7
CisjZW5kaWYKKworICAgICAgICBhdXRvIGV4cGVjdGVkQ29kZUJsb2NrID0gaW5zcGVjdG9yLmNv
ZGVCbG9ja0Zvck1hY2hpbmVQQyhsb2NrVG9rZW4sIHBjKTsKKyAgICAgICAgaWYgKCFleHBlY3Rl
ZENvZGVCbG9jaykgeworICAgICAgICAgICAgaWYgKGV4cGVjdGVkQ29kZUJsb2NrLmVycm9yKCkg
PT0gVk1JbnNwZWN0b3I6OkVycm9yOjpUaW1lZE91dCkKKyAgICAgICAgICAgICAgICBsb2coIkVS
Uk9SOiBUaW1lZCBvdXQ6IG5vdCBhYmxlIHRvIGRldGVybWluZSBpZiBwYyAlcCBpcyBpbiBhIHZh
bGlkIENvZGVCbG9jayIsIHBjKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBs
b2coIlRoZSBjdXJyZW50IHRocmVhZCBkb2VzIG5vdCBvd24gYW55IFZNIEpTTG9jayIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhwZWN0ZWRDb2RlQmxvY2sudmFsdWUoKTsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2spIHsK
KyAgICAgICAgICAgIGxvZygibWFjaGluZSBQQyAlcCBkb2VzIG5vdCBiZWxvbmcgdG8gYW55IENv
ZGVCbG9jayBpbiB0aGUgY3VycmVudGx5IGVudGVyZWQgVk0iLCBwYyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsb2coInBjICVwIGJlbG9uZ3MgdG8gQ29kZUJs
b2NrICVwIG9mIHR5cGUgJXMiLCBwYywgY29kZUJsb2NrLCBKSVRDb2RlOjp0eXBlTmFtZShjb2Rl
QmxvY2stPmppdFR5cGUoKSkpOworCisgICAgICAgIGR1bXBDb2RlQmxvY2soY29kZUJsb2NrLCBw
Yyk7CisgICAgfSAoKTsKKworICAgIGxvZygiRU5EIFNJR0lMTCBhbmFseXNpcyIpOworfQorCit2
b2lkIFNpZ2lsbENyYXNoQW5hbHl6ZXI6OmR1bXBDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIHZvaWQqIG1hY2hpbmVQQykKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgSklUQ29kZSogaml0
Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLmdldCgpOworCisgICAgLy8gRHVtcCB0aGUgcmF3
IGJpdHMgb2YgdGhlIGNvZGUuCisgICAgdWludDMyX3QqIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGppdENvZGUtPnN0YXJ0KCkpOworICAgIHVpbnQzMl90KiBlbmQgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oaml0Q29kZS0+ZW5kKCkpOworICAgIGxvZygiSklUQ29k
ZSAlcCBbJXAtJXBdOiIsIGppdENvZGUsIHN0YXJ0LCBlbmQpOworICAgIGlmIChzdGFydCA8IGVu
ZCkgeworICAgICAgICB1aW50MzJfdCogcCA9IHN0YXJ0OworICAgICAgICB3aGlsZSAocCArIDgg
PD0gZW5kKSB7CisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHgg
JTA4eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArNywgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0
XSwgcFs1XSwgcFs2XSwgcFs3XSk7CisgICAgICAgICAgICBwICs9IDg7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHAgKyA3IDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAl
MDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArNiwgcFswXSwgcFsxXSwgcFsyXSwg
cFszXSwgcFs0XSwgcFs1XSwgcFs2XSk7CisgICAgICAgIGVsc2UgaWYgKHAgKyA2IDw9IGVuZCkK
KyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHgi
LCBwLCBwKzUsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pOworICAgICAgICBl
bHNlIGlmIChwICsgNSA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4
eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArNCwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSk7
CisgICAgICAgIGVsc2UgaWYgKHAgKyA0IDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVw
XTogJTA4eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArMywgcFswXSwgcFsxXSwgcFsyXSwgcFszXSk7
CisgICAgICAgIGlmIChwICsgMyA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUw
OHggJTA4eCAlMDh4IiwgcCwgcCsyLCBwWzBdLCBwWzFdLCBwWzJdKTsKKyAgICAgICAgZWxzZSBp
ZiAocCArIDIgPD0gZW5kKQorICAgICAgICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHgiLCBw
LCBwKzEsIHBbMF0sIHBbMV0pOworICAgICAgICBlbHNlIGlmIChwICsgMSA8PSBlbmQpCisgICAg
ICAgICAgICBsb2coIlslcC0lcF06ICUwOHgiLCBwLCBwLCBwWzBdKTsKKyAgICB9CisKKyAgICAv
LyBEdW1wIHRoZSBkaXNhc3NlbWJseSBvZiB0aGUgY29kZS4KKyAgICBsb2coIkRpc2Fzc2VtYmx5
OiIpOworICAgIHVpbnQzMl90KiBjdXJyZW50UEMgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oaml0Q29kZS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgc2l6ZV90IGJ5dGVDb3VudCA9
IGppdENvZGUtPnNpemUoKTsKKyAgICB3aGlsZSAoYnl0ZUNvdW50KSB7CisgICAgICAgIGNoYXIg
cGNTdHJpbmdbMjRdOworICAgICAgICBpZiAoY3VycmVudFBDID09IG1hY2hpbmVQQykgeworICAg
ICAgICAgICAgc25wcmludGYocGNTdHJpbmcsIHNpemVvZihwY1N0cmluZyksICIqIDB4JWx4Iiwg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihjdXJyZW50UEMpKTsKKyAgICAgICAgICAg
IGxvZygiJTIwczogJXMgICAgPD09PT09PT09PT09PT09PT09PT09PT09PT0iLCBwY1N0cmluZywg
YXJtNjRPcGNvZGUuZGlzYXNzZW1ibGUoY3VycmVudFBDKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzbnByaW50ZihwY1N0cmluZywgc2l6ZW9mKHBjU3RyaW5nKSwgIjB4JWx4Iiwg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihjdXJyZW50UEMpKTsKKyAgICAgICAgICAg
IGxvZygiJTIwczogJXMiLCBwY1N0cmluZywgYXJtNjRPcGNvZGUuZGlzYXNzZW1ibGUoY3VycmVu
dFBDKSk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFBDKys7CisgICAgICAgIGJ5dGVDb3Vu
dCAtPSBzaXplb2YodWludDMyX3QpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNv
ZGVCbG9jayk7CisgICAgVU5VU0VEX1BBUkFNKG1hY2hpbmVQQyk7CisgICAgLy8gTm90IGltcGxl
bWVudGVkIHlldC4KKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFs
eXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFNpZ2lsbENyYXNoQW5hbHl6ZXI7CisKK1NpZ2lsbENyYXNoQW5hbHl6ZXIm
IGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWTUluc3Bl
Y3Rvci5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0
LmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRl
IDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7
CisKK1ZNSW5zcGVjdG9yJiBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBW
TUluc3BlY3RvciogbWFuYWdlcjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAg
ICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIG1hbmFnZXIgPSBuZXcgVk1JbnNw
ZWN0b3IoKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKm1hbmFnZXI7Cit9CisKK3ZvaWQgVk1JbnNw
ZWN0b3I6OmFkZChWTSogdm0pCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgIG1fbGlzdC5hcHBlbmQodm0pOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjpyZW1vdmUo
Vk0qIHZtKQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBtX2xp
c3QucmVtb3ZlKHZtKTsKK30KKworYXV0byBWTUluc3BlY3Rvcjo6bG9jayh1bnNpZ25lZCB0aW1l
b3V0SW5TZWNvbmRzKSAtPiBFeHBlY3RlZDxMb2NrVG9rZW4sIEVycm9yPgoreworICAgIC8vIFRo
aXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIgKGUuZy4gdmlh
IHZpc2l0KCkpLiBIZW5jZSwKKyAgICAvLyBpdCBzaG91bGQgb25seSB1c2UgQVBJcyB0aGF0IGFy
ZSBzYWZlIHRvIGNhbGwgZnJvbSBzaWduYWwgaGFuZGxlcnMuIFRoaXMgaXMKKyAgICAvLyB3aHkg
d2UgdXNlIHVuaXN0ZC5oJ3Mgc2xlZXAoKSBpbnN0ZWFkIG9mIGl0cyBhbHRlcm5hdGl2ZXMuCisK
KyAgICB1bnNpZ25lZCBtYXhSZXRyaWVzID0gdGltZW91dEluU2Vjb25kczsgLy8gc2luY2Ugc2Vj
b25kc1BlclNsZWVwID09IDEuCisKKyAgICBib29sIGxvY2tlZCA9IG1fbG9jay50cnlMb2NrKCk7
CisgICAgdW5zaWduZWQgdHJ5Q291bnQgPSAwOworICAgIHdoaWxlICghbG9ja2VkICYmIHRyeUNv
dW50IDw9IG1heFJldHJpZXMpIHsKKyAgICAgICAgLy8gV2Ugd2FudCB0aGUgdmVyc2lvbiBvZiBz
bGVlcCBmcm9tIHVuaXN0ZC5oLiBDYXN0IHRvIGRpc2FtYmlndWF0ZS4KKyAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkICgqKSh1bnNpZ25lZCk+KHNsZWVwKSkoMSk7CisgICAgICAgIGxvY2tl
ZCA9IG1fbG9jay50cnlMb2NrKCk7CisgICAgfQorCisgICAgaWYgKCFsb2NrZWQpCisgICAgICAg
IHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6VGltZWRPdXQpOworICAgIHJldHVybiBMb2Nr
VG9rZW46OkxvY2tlZFZhbHVlOworfQorCitzdGF0aWMgYm9vbCBlbnN1cmVJc1NhZmVUb0xvY2so
TG9jayYgbG9jaykKK3sKKyAgICB1bnNpZ25lZCBtYXhSZXRyaWVzID0gMjsKKyAgICB1bnNpZ25l
ZCB0cnlDb3VudCA9IDA7CisgICAgd2hpbGUgKHRyeUNvdW50IDw9IG1heFJldHJpZXMpIHsKKyAg
ICAgICAgYm9vbCBzdWNjZXNzID0gbG9jay50cnlMb2NrKCk7CisgICAgICAgIGlmIChzdWNjZXNz
KSB7CisgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgdHJ5Q291bnQrKzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfTsKKworYXV0byBWTUluc3BlY3Rvcjo6aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoVk1JbnNw
ZWN0b3I6OkxvY2tUb2tlbiwgdm9pZCogbWFjaGluZVBDKSAtPiBFeHBlY3RlZDxib29sLCBFcnJv
cj4KK3sKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFs
c2U7CisgICAgaXRlcmF0ZShbJl0gKFZNJiB2bSkgLT4gRnVuY3RvclN0YXR1cyB7CisgICAgICAg
IGF1dG8gYWxsb2NhdG9yID0gdm0uZXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICAgICAgYXV0byYg
bG9jayA9IGFsbG9jYXRvci5nZXRMb2NrKCk7CisKKyAgICAgICAgYm9vbCBpc1NhZmVUb0xvY2sg
PSBlbnN1cmVJc1NhZmVUb0xvY2sobG9jayk7CisgICAgICAgIGlmICghaXNTYWZlVG9Mb2NrKSB7
CisgICAgICAgICAgICBoYXNUaW1lb3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBGdW5j
dG9yU3RhdHVzOjpDb250aW51ZTsgLy8gU2tpcCB0aGlzIFZNLgorICAgICAgICB9CisKKyAgICAg
ICAgTG9ja0hvbGRlciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKGxvY2spOworICAgICAgICBp
ZiAoYWxsb2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JM
b2NrZXIsIG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAg
ICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpEb25lOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsKKyAgICB9KTsKKworICAgIGlmICghZm91bmQgJiYg
aGFzVGltZW91dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpUaW1lZE91
dCk7CisgICAgcmV0dXJuIGZvdW5kOworfQorCithdXRvIFZNSW5zcGVjdG9yOjpjb2RlQmxvY2tG
b3JNYWNoaW5lUEMoVk1JbnNwZWN0b3I6OkxvY2tUb2tlbiwgdm9pZCogbWFjaGluZVBDKSAtPiBF
eHBlY3RlZDxDb2RlQmxvY2sqLCBFcnJvcj4KK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9
IG51bGxwdHI7CisgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7CisgICAgaXRlcmF0ZShbJl0g
KFZNJiB2bSkgeworICAgICAgICBpZiAoIXZtLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xk
aW5nTG9jaygpKQorICAgICAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOwor
CisgICAgICAgIC8vIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5zKCkgdXNl
cyBDb2RlQmxvY2tTZXQ6Oml0ZXJhdGUoKSwgYW5kCisgICAgICAgIC8vIENvZGVCbG9ja1NldDo6
aXRlcmF0ZSgpIG5lZWRzIHRvIGJlIGFibGUgdG8gYWNxdWlyZSBpdHMgbG9jay4gTWFrZSBzdXJl
IGl0J3MKKyAgICAgICAgLy8gc2FmZSB0byBwcm9jZWVkIHdpdGggY2FsbGluZyBmb3JFYWNoQ29k
ZUJsb2NrSWdub3JpbmdKSVRQbGFucygpLgorICAgICAgICBhdXRvJiBsb2NrID0gdm0uaGVhcC5j
b2RlQmxvY2tTZXQoKS5nZXRMb2NrKCk7CisgICAgICAgIGJvb2wgaXNTYWZlVG9Mb2NrID0gZW5z
dXJlSXNTYWZlVG9Mb2NrKGxvY2spOworICAgICAgICBpZiAoIWlzU2FmZVRvTG9jaykgeworICAg
ICAgICAgICAgaGFzVGltZW91dCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gRnVuY3RvclN0
YXR1czo6Q29udGludWU7IC8vIFNraXAgdGhpcyBWTS4KKyAgICAgICAgfQorCisgICAgICAgIHZt
LmhlYXAuZm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnMoWyZdIChDb2RlQmxvY2sqIGNi
KSB7CisgICAgICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY2ItPmppdENvZGUoKS5nZXQoKTsK
KyAgICAgICAgICAgIGlmICghaml0Q29kZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBj
b2RlQmxvY2sgaXMgYSByZXBsYWNlbWVudCBjb2RlQmxvY2sgd2hpY2ggaXMgaW4gdGhlIHByb2Nl
c3Mgb2YgYmVpbmcKKyAgICAgICAgICAgICAgICAvLyBjb21waWxlZCwgaXRzIGppdENvZGUgd2ls
bCBiZSBudWxsLCBhbmQgd2UgY2FuIGRpc3JlZ2FyZCBpdCBhcyBhIG1hdGNoIGZvcgorICAgICAg
ICAgICAgICAgIC8vIHRoZSBtYWNoaW5lUEMgd2UncmUgc2VhcmNoaW5nIGZvci4KKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgh
SklUQ29kZTo6aXNKSVQoaml0Q29kZS0+aml0VHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChqaXRDb2RlLT5jb250YWlucyhtYWNoaW5lUEMp
KSB7CisgICAgICAgICAgICAgICAgY29kZUJsb2NrID0gY2I7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0pOworICAgICAgICBpZiAoY29kZUJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIEZ1bmN0
b3JTdGF0dXM6OkRvbmU7CisgICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsK
KyAgICB9KTsKKworICAgIGlmICghY29kZUJsb2NrICYmIGhhc1RpbWVvdXQpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6VGltZWRPdXQpOworICAgIHJldHVybiBjb2RlQmxv
Y2s7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1ZNSW5zcGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgor
I2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBWTUluc3BlY3RvciB7CitwdWJsaWM6CisgICAgZW51bSBjbGFz
cyBFcnJvciB7CisgICAgICAgIE5vbmUsCisgICAgICAgIFRpbWVkT3V0CisgICAgfTsKKworICAg
IGVudW0gY2xhc3MgTG9ja1Rva2VuIHsgTG9ja2VkVmFsdWUgfTsKKworICAgIHN0YXRpYyBWTUlu
c3BlY3RvciYgaW5zdGFuY2UoKTsKKworICAgIHZvaWQgYWRkKFZNKik7CisgICAgdm9pZCByZW1v
dmUoVk0qKTsKKworICAgIEV4cGVjdGVkPExvY2tUb2tlbiwgRXJyb3I+IGxvY2sodW5zaWduZWQg
dGltZW91dCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisKKyAgICBF
eHBlY3RlZDxib29sLCBFcnJvcj4gaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoTG9ja1Rva2VuLCB2
b2lkKik7CisgICAgRXhwZWN0ZWQ8Q29kZUJsb2NrKiwgRXJyb3I+IGNvZGVCbG9ja0Zvck1hY2hp
bmVQQyhMb2NrVG9rZW4sIHZvaWQqKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEZ1bmN0
b3JTdGF0dXMgeworICAgICAgICBDb250aW51ZSwKKyAgICAgICAgRG9uZQorICAgIH07CisgICAg
dGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChWTSogdm0gPSBtX2xpc3QuaGVhZCgpOyB2bTsg
dm0gPSB2bS0+bmV4dCgpKSB7CisgICAgICAgICAgICBGdW5jdG9yU3RhdHVzIHN0YXR1cyA9IGZ1
bmN0b3IoKnZtKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gRnVuY3RvclN0YXR1czo6RG9u
ZSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2Nr
IG1fbG9jazsKKyAgICBEb3VibHlMaW5rZWRMaXN0PFZNPiBtX2xpc3Q7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE3LTAyLTAxICBNYXJrIExh
bSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBTSUdJTEwgY3Jhc2ggYW5h
bHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNpZXIuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3MTQKKyAgICAgICAgPHJkYXI6Ly9w
cm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorCiAyMDE3LTAxLTI2ICBTYWFtIEJhcmF0
aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEhhcmRlbiBob3cgdGhlIGNvbXBpbGVy
IHJlZmVyZW5jZXMgR0Mgb2JqZWN0cwpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9u
IDIxMTMwMSkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC00ODksNiArNDg5LDcgQEAgdXNpbmcgV1RGOjppc0NvbXBpbGF0aW9uVGhyZWFkOwogdXNp
bmcgV1RGOjppc1BvaW50ZXJBbGlnbmVkOwogdXNpbmcgV1RGOjppc1N0YXRlbGVzc0xhbWJkYTsK
IHVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7Cit1c2luZyBXVEY6OnJvdW5kVXBUb011bHRpcGxl
T2Y7CiB1c2luZyBXVEY6OnNhZmVDYXN0OwogdXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFyY2g7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300371</attachid>
            <date>2017-02-01 16:35:53 -0800</date>
            <delta_ts>2017-02-01 17:05:34 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-167714.patch</filename>
            <type>text/plain</type>
            <size>41390</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE3LTAyLTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNp
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBh
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6
OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6aWxsZWdhbEluc3Ry
dWN0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmlsbGVnYWxJbnN0cnVjdGlv
bik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnNJ
bXBsKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5z
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpPcHRpb25z
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6OmhhbmRs
ZUNyYXNoKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUNyYXNoSGFuZGxlcik6CisgICAgICAg
IChKU0M6OmVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIpOgorICAgICAgICAoSlNDOjpTaWdpbGxD
cmFzaEFuYWx5emVyOjphbmFseXplKToKKyAgICAgICAgKEpTQzo6U2lnaWxsQ3Jhc2hBbmFseXpl
cjo6ZHVtcENvZGVCbG9jayk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5o
OiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6aW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rv
cjo6YWRkKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnJlbW92ZSk6CisgICAgICAgIChK
U0M6OmVuc3VyZUlzU2FmZVRvTG9jayk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjppdGVyYXRlKToKKwogMjAxNy0wMi0w
MSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFVzZSBndWFyYW50ZWVkIFJ1bkxvb3AgaW5zdGVhZCBvZiBSdW5Mb29wOjpjdXJy
ZW50IGZvciBkaXNwYXRjaGluZyBpbnNwZWN0b3IgR0MgZXZlbnQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDYgKzkwNyw4IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3Qu
Y3BwCiAgICAgdG9vbHMvSlNEb2xsYXJWTS5jcHAKICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAorICAgIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCisgICAgdG9vbHMvVk1J
bnNwZWN0b3IuY3BwCiAKICAgICB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwCiAgICAgd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMzMiw2ICsyMzMyLDEw
IEBACiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlCMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyRTZBN0IxRDZF
QTYyQzAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2Nv
cGUuY3BwICovOyB9OworCQlGRTMwMjJEMjFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi87
IH07CisJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyB9OworCQlGRTMwMjJE
NjFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZN
SW5zcGVjdG9yLmNwcCAqLzsgfTsKKwkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5z
cGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKIAkJRkUzMThG
REYxQ0FDOTgyNzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMThGREQx
Q0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICov
OyB9OwogCQlGRTMxOEZFMDFDQUM5ODJGMDBERkNDNTQgLyogRUNNQVNjcmlwdFNwZWNJbnRlcm5h
bEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUzMThGREUxQ0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5j
dGlvbnMuaCAqLzsgfTsKIAkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzQyMjEx
MUQ2QjgxOEMwMDMyQkU4OCAvKiBUaHJvd1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ4NzEsNiArNDg3NSwxMCBAQAogCQlGRTIwQ0U5
QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3Au
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTElu
dENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocm93U2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUz
MDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENDFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0
OTMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1J
bnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMThGREQxQ0FDOEM1
MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzE4RkRFMUNBQzhDNTMw
MERGQ0M1NCAvKiBFQ01BU2NyaXB0U3BlY0ludGVybmFsRnVuY3Rpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8q
IFRocm93U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjgwOSw4ICs2ODE3LDEyIEBACiAJ
CQkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLywKIAkJCQlGRTM4
NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJ
RkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLywKKwkJ
CQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8s
CisJCQkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAq
LywKIAkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8s
CiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovLAor
CQkJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8sCisJCQkJ
RkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTg3OTQsNiArODgw
Niw3IEBACiAJCQkJRkUzOTEzNTYxQjc5NEY4RjAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MERFOUEwOTFCRTdENjlFMDA1RDg5RDkgLyogTExJbnRBc3Nl
bWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTMwMjJEMzFFM0Q3M0E1MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENF
OUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04ODUwLDYgKzg4NjMsNyBAQAogCQkJCTE0NzM0MUQ2MURDMDJFQjkwMEFBMjlCQSAvKiBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5RDNFRDlDNTA2
NEREMEE4NDY2QTNBIC8qIE1vZHVsZVNjb3BlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZB
NzYyMDcxREI5MjQzMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2
ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDczNDFEMDFEQzAyREI0MDBB
QTI5QkEgLyogTmF0aXZlRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzEwLDYgKzk3
MjQsNyBAQAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBB
cmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5QTIyODM1MUQzNUQ3MUUwMEQ4RTA2NyAv
KiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzMDIyRDYxRTQyODU3MzAw
QkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZC
ODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDA2LDYgKzEwNDIxLDcgQEAKIAkJCQk3OUIwMENCRTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzkx
NjBEQkQxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkUzMDIyRDIxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3
NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIu
aAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
Uk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDg0LDYgKzEwODQs
MTIgQEAgcHVibGljOgogICAgICAgICBpbnNuKGV4Y2VwbkdlbmVyYXRpb24oRXhjZXBuT3BfSEFM
VCwgaW1tLCAwKSk7CiAgICAgfQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBv
c2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIGluc24o
MHgwKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGxkcChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJ0MiwgUmVnaXN0ZXJJRCBy
biwgUGFpclBvc3RJbmRleCBzaW1tKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAy
MTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MSw2ICs0NDEsMTIgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbHo8NjQ+KGRlc3QsIGRlc3QpOwogICAgIH0K
IAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2b2lkIGlsbGVn
YWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbGxlZ2FsSW5zdHJ1
Y3Rpb24oKTsKKyAgICB9CisKICAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5sc2w8MzI+KGRlc3QsIHNyYywgc2hpZnRBbW91bnQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzI3LDYgKzMyNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGN0ekFmdGVyQnNmPDMyPihk
c3QpOwogICAgIH0KIAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAg
ICB2b2lkIGlsbGVnYWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5p
bGxlZ2FsSW5zdHJ1Y3Rpb24oKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsc2hpZnQzMihSZWdp
c3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KHNoaWZ0X2Ftb3VudCA9PSBYODZSZWdpc3RlcnM6OmVjeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMjExMzAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1OSw2ICsyNTksNyBAQCBwcml2YXRlOgogICAgIH0g
T25lQnl0ZU9wY29kZUlEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgT1AyX1VEMiAg
ICAgICAgICAgICA9IDB4QiwKICAgICAgICAgT1AyX01PVlNEX1ZzZFdzZCAgICA9IDB4MTAsCiAg
ICAgICAgIE9QMl9NT1ZTRF9Xc2RWc2QgICAgPSAweDExLAogICAgICAgICBPUDJfTU9WU1NfVnNk
V3NkICAgID0gMHgxMCwKQEAgLTY4MSw2ICs2ODIsMTIgQEAgcHVibGljOgogICAgIH0KICNlbmRp
ZiAvLyBDUFUoWDg2XzY0KQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2Vz
LgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcChPUDJfVUQyKTsKKyAgICB9CisKICAgICB2b2lkIGluY19yKFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQNV9F
diwgR1JPVVAxX09QX0FERCwgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNSw2ICsyMDI1LDExIEBAIHZvaWQgSGVhcDo6Zm9y
RWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4gbV9jb2RlQmxvY2tzLT5pdGVy
YXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBs
YW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mIGZ1bmMpCit7Cisg
ICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5jKTsKK30KKwogdm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgaWYgKFVOTElL
RUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFByb3RlY3RlZENlbGwo
Y29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaENvZGVCbG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhjb25zdCBGdW5jdG9y
Jik7CiAKICAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsg
fQogICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hhbmRsZVN0YWNr
OyB9CkBAIC00NzAsNiArNDcxLDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNW
aXNpdGVkKCk7CiAgICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mKTsKKyAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJ
Z25vcmluZ0pJVFBsYW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4m
KTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdm9pZCBICiAgICAgZm9yRWFjaENvZGVCbG9ja0ltcGwoc2NvcGVkTGFt
YmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxh
bnMoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdK
SVRQbGFuc0ltcGwoc2NvcGVkTGFtYmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaFBy
b3RlY3RlZENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNs
dWRlICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0xNDQsNiArMTQ1LDEwIEBAIGJvb2wg
T3B0aW9uczo6aXNBdmFpbGFibGUoT3B0aW9uczo6SUQgaWQKICAgICBpZiAoaWQgPT0gbWF4U2lu
Z2xlQWxsb2NhdGlvblNpemVJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKKyNpZiBP
UyhEQVJXSU4pCisgICAgaWYgKGlkID09IHVzZVNpZ2lsbENyYXNoQW5hbHl6ZXJJRCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQyOSw2
ICs0MzQsOCBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBl
bHNlCiAgICAgICAgIGZhc3RTZXRNYXhTaW5nbGVBbGxvY2F0aW9uU2l6ZShzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKTsKICNlbmRpZgorICAgIGlmIChPcHRpb25zOjp1c2VTaWdp
bGxDcmFzaEFuYWx5emVyKCkpCisgICAgICAgIGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsK
IH0KIAogdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3
IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAgICB2KGJvb2ws
IHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdn
aW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0
aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBv
dmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKKyAgICB2KGJvb2wsIHVzZVNpZ2lsbENy
YXNoQW5hbHl6ZXIsIHRydWUsIENvbmZpZ3VyYWJsZSwgImxvZ3MgZGF0YSBhYm91dCBTSUdJTEwg
Y3Jhc2hlcyIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwg
IndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2Yg
TiBtaWxsaXNlY29uZHMpIikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJWTUVudHJ5U2NvcGUuaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUg
IldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldl
YWtNYXBEYXRhLmgiCkBAIC0zNDksMTAgKzM1MCwxNCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgICAgIFdhdGNoZG9nJiB3YXRjaGRvZyA9IGVuc3VyZVdh
dGNoZG9nKCk7CiAgICAgICAgIHdhdGNoZG9nLnNldFRpbWVMaW1pdCh0aW1lb3V0TWlsbGlzKTsK
ICAgICB9CisKKyAgICBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKS5hZGQodGhpcyk7CiB9CiAKIFZN
Ojp+Vk0oKQogeworICAgIFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpLnJlbW92ZSh0aGlzKTsKKwog
ICAgIC8vIE5ldmVyIEdDLCBldmVyIGFnYWluLgogICAgIGhlYXAuaW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIx
MTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MjQxLDcgKzI0Miw3IEBAIHN0cnVjdCBTY3JhdGNoQnVmZmVyIHsKICNwcmFnbWEgd2FybmluZyhw
b3ApCiAjZW5kaWYKIAotY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+
IHsKK2NsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiBwdWJsaWM6CiAgICAgLy8gV2ViQ29yZSBoYXMgYSBv
bmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBWTXM7CiAgICAgLy8gZWl0aGVyIGNyZWF0
ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCkBAIC03Nzgs
MTEgKzc3OSwxNSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2Vu
PiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAorICAgIFZNKiBtX3ByZXY7
IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorICAgIFZNKiBtX25leHQ7IC8v
IFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorCiAgICAgLy8gRnJpZW5kcyBmb3Ig
ZXhjZXB0aW9uIGNoZWNraW5nIHB1cnBvc2Ugb25seS4KICAgICBmcmllbmQgY2xhc3MgSGVhcDsK
ICAgICBmcmllbmQgY2xhc3MgQ2F0Y2hTY29wZTsKICAgICBmcmllbmQgY2xhc3MgRXhjZXB0aW9u
U2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFRocm93U2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPjsKIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpZ2lsbENyYXNoQW5hbHl6ZXIuaCIKKworI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNSW5zcGVj
dG9yLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCisj
ZW5kaWYKKworI2lmIEhBVkUoU0lHTkFMX0gpCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTaWduYWxDb250ZXh0OworCitjbGFzcyBTaWdp
bGxDcmFzaEFuYWx5emVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFuYWx5emUoU2lnbmFsQ29udGV4
dCYpOworCitwcml2YXRlOgorICAgIHZvaWQgZHVtcENvZGVCbG9jayhDb2RlQmxvY2sqLCB2b2lk
KiBtYWNoaW5lUEMpOworCisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyAgICBBNjRET3Bj
b2RlIGFybTY0T3Bjb2RlOworI2VuZGlmCit9OworCisjaWYgT1MoREFSV0lOKQorCisjaWYgVVNF
KE9TX0xPRykKKworI2RlZmluZSBsb2coZm9ybWF0LCAuLi4pIFwKKyAgICBvc19sb2dfaW5mbyhP
U19MT0dfREVGQVVMVCwgZm9ybWF0LCAjI19fVkFfQVJHU19fKQorCisjZWxzZSAvLyBVU0UoT1Nf
TE9HKQorCisjZGVmaW5lIGxvZyhmb3JtYXQsIC4uLikgXAorICAgIGRhdGFMb2dGKGZvcm1hdCwg
IyNfX1ZBX0FSR1NfXykKKyAgICAKKyNlbmRpZiAvLyBVU0UoT1NfTE9HKQorCisjaWYgQ1BVKFg4
Nl82NCkKK3N0cnVjdCBTaWduYWxDb250ZXh0IHsKKyAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0
X3QmIG1jb250ZXh0KQorICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQorICAgICAgICAsIG1h
Y2hpbmVQQyhyZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fX3JpcCkpCisg
ICAgICAgICwgc3RhY2tQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5f
X3NzLl9fcnNwKSkKKyAgICAgICAgLCBmcmFtZVBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDxDYWxs
RnJhbWUqPihtY29udGV4dC0+X19zcy5fX3JicCkpCisgICAgeyB9CisKKyAgICB2b2lkIGR1bXAo
KQorICAgIHsKKyNkZWZpbmUgRk9SX0VBQ0hfUkVHSVNURVIodikgXAorICAgICAgICB2KHJheCkg
XAorICAgICAgICB2KHJieCkgXAorICAgICAgICB2KHJjeCkgXAorICAgICAgICB2KHJkeCkgXAor
ICAgICAgICB2KHJkaSkgXAorICAgICAgICB2KHJzaSkgXAorICAgICAgICB2KHJicCkgXAorICAg
ICAgICB2KHJzcCkgXAorICAgICAgICB2KHI4KSBcCisgICAgICAgIHYocjkpIFwKKyAgICAgICAg
dihyMTApIFwKKyAgICAgICAgdihyMTEpIFwKKyAgICAgICAgdihyMTIpIFwKKyAgICAgICAgdihy
MTMpIFwKKyAgICAgICAgdihyMTQpIFwKKyAgICAgICAgdihyMTUpIFwKKyAgICAgICAgdihyaXAp
IFwKKyAgICAgICAgdihyZmxhZ3MpIFwKKyAgICAgICAgdihjcykgXAorICAgICAgICB2KGZzKSBc
CisgICAgICAgIHYoZ3MpCisKKyNkZWZpbmUgRFVNUF9SRUdJU1RFUihfX3JlZykgXAorICAgICAg
ICBsb2coIlJlZ2lzdGVyICIgI19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
bWNvbnRleHQtPl9fc3MuX18jI19fcmVnKSk7CisgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERV
TVBfUkVHSVNURVIpCisjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKKyAgICB9CisKKyAgICBtY29u
dGV4dF90JiBtY29udGV4dDsKKyAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQ
b2ludGVyOworICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKK307CisjZW5kaWYgLy8gQ1BVKFg4Nl82
NCkKKworI2lmIENQVShBUk02NCkKK3N0cnVjdCBTaWduYWxDb250ZXh0IHsKKyAgICBTaWduYWxD
b250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0KQorICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0
KQorICAgICAgICAsIG1hY2hpbmVQQyhyZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+
X19zcy5fX3BjKSkKKyAgICAgICAgLCBzdGFja1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obWNvbnRleHQtPl9fc3MuX19zcCkpCisgICAgICAgICwgZnJhbWVQb2ludGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8Q2FsbEZyYW1lKj4obWNvbnRleHQtPl9fc3MuX19mcCkpCisgICAgeyB9CisKKyAg
ICB2b2lkIGR1bXAoKQorICAgIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGZvciAoaSA9IDA7
IGkgPCAyODsgaSArPSA0KSB7CisgICAgICAgICAgICBsb2coInglZDogJTAxNmxseCB4JWQ6ICUw
MTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCIsCisgICAgICAgICAgICAgICAgaSwgbWNv
bnRleHQtPl9fc3MuX194W2ldLAorICAgICAgICAgICAgICAgIGkrMSwgbWNvbnRleHQtPl9fc3Mu
X194W2krMV0sCisgICAgICAgICAgICAgICAgaSsyLCBtY29udGV4dC0+X19zcy5fX3hbaSsyXSwK
KyAgICAgICAgICAgICAgICBpKzMsIG1jb250ZXh0LT5fX3NzLl9feFtpKzNdKTsKKyAgICAgICAg
fQorICAgICAgICBBU1NFUlQoaSA8IDI5KTsKKyAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggZnA6
ICUwMTZsbHggbHI6ICUwMTZsbHgiLAorICAgICAgICAgICAgaSwgbWNvbnRleHQtPl9fc3MuX194
W2ldLCBtY29udGV4dC0+X19zcy5fX2ZwLCBtY29udGV4dC0+X19zcy5fX2xyKTsKKyAgICAgICAg
bG9nKCJzcDogJTAxNmxseCBwYzogJTAxNmxseCBjcHNyOiAlMDh4IiwKKyAgICAgICAgICAgIG1j
b250ZXh0LT5fX3NzLl9fc3AsIG1jb250ZXh0LT5fX3NzLl9fcGMsIG1jb250ZXh0LT5fX3NzLl9f
Y3Bzcik7CisgICAgfQorCisgICAgbWNvbnRleHRfdCYgbWNvbnRleHQ7CisgICAgdm9pZCogbWFj
aGluZVBDOworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKKyAgICB2b2lkKiBmcmFtZVBvaW50ZXI7
Cit9OworCisjZW5kaWYgLy8gQ1BVKEFSTTY0KQorCitzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0ls
bEFjdGlvbjsKKworc3RhdGljIHZvaWQgaGFuZGxlQ3Jhc2goaW50LCBzaWdpbmZvX3QqLCB2b2lk
KiB1YXApCit7CisgICAgc2lnYWN0aW9uKFNJR0lMTCwgJm9sZFNpZ0lsbEFjdGlvbiwgbnVsbHB0
cik7CisKKyAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+
KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBTaWdpbGxDcmFzaEFuYWx5emVyJiBhbmFseXplciA9
IGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsKKyAgICBhbmFseXplci5hbmFseXplKGNvbnRl
eHQpOworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3Jhc2hIYW5kbGVyKCkKK3sKKyAgICBz
dHJ1Y3Qgc2lnYWN0aW9uIGFjdGlvbjsKKyAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRl
cnByZXRfY2FzdDx2b2lkICgqKShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopPihoYW5kbGVDcmFz
aCk7CisgICAgc2lnZmlsbHNldCgmYWN0aW9uLnNhX21hc2spOworICAgIGFjdGlvbi5zYV9mbGFn
cyA9IFNBX1NJR0lORk87CisgICAgc2lnYWN0aW9uKFNJR0lMTCwgJmFjdGlvbiwgJm9sZFNpZ0ls
bEFjdGlvbik7Cit9CisKKyNlbHNlIC8vIE9TKERBUldJTikKKworI2RlZmluZSBsb2coZm9ybWF0
LCAuLi4pIGRvIHsgfSB3aGlsZSAoZmFsc2UpCisgICAgCitzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7
CisgICAgU2lnbmFsQ29udGV4dCgpIHsgfQorCisgICAgdm9pZCBkdW1wKCkgeyB9CisKKyAgICB2
b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworICAgIHZvaWQqIGZyYW1l
UG9pbnRlcjsKK307CisKK3N0YXRpYyBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgaW5pdGlh
bGl6ZUNyYXNoSGFuZGxlcigpCit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsg
Ly8gTm90IHN1cHBvcnRlZCBmb3IgdGhpcyBwbGF0Zm9ybS4KK30KKworI2VuZGlmIC8vIE9TKERB
UldJTikKKworU2lnaWxsQ3Jhc2hBbmFseXplciYgZW5zdXJlU2lnaWxsQ3Jhc2hBbmFseXplcigp
Cit7CisgICAgc3RhdGljIFNpZ2lsbENyYXNoQW5hbHl6ZXIqIGFuYWx5emVyOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAg
ICAgICAgaW5pdGlhbGl6ZUNyYXNoSGFuZGxlcigpOworICAgICAgICBhbmFseXplciA9IG5ldyBT
aWdpbGxDcmFzaEFuYWx5emVyOworICAgIH0pOworICAgIHJldHVybiAqYW5hbHl6ZXI7Cit9CisK
K3ZvaWQgU2lnaWxsQ3Jhc2hBbmFseXplcjo6YW5hbHl6ZShTaWduYWxDb250ZXh0JiBjb250ZXh0
KQoreworICAgIGxvZygiQkVHSU4gU0lHSUxMIGFuYWx5c2lzIik7CisKKyAgICBbJl0gKCkgewor
ICAgICAgICAvLyBGaXJzdCwgZHVtcCB0aGUgc2lnbmFsIGNvbnRleHQgaW5mbyBzbyB0aGF0IHdl
J2xsIGF0IGxlYXN0IGhhdmUgdGhlIHNhbWUgaW5mbworICAgICAgICAvLyB0aGF0IHRoZSBkZWZh
dWx0IGNyYXNoIGhhbmRsZXIgd291bGQgZ2l2ZW4gdXMgaW4gY2FzZSB0aGlzIGNyYXNoIGFuYWx5
emVyCisgICAgICAgIC8vIGl0c2VsZiBjcmFzaGVzLgorICAgICAgICBjb250ZXh0LmR1bXAoKTsK
KworICAgICAgICBWTUluc3BlY3RvciYgaW5zcGVjdG9yID0gVk1JbnNwZWN0b3I6Omluc3RhbmNl
KCk7CisKKyAgICAgICAgLy8gVXNlIGEgdGltZW91dCBwZXJpb2Qgb2YgMiBzZWNvbmRzLiBUaGUg
Y2xpZW50IGlzIGFib3V0IHRvIGNyYXNoLCBhbmQgd2UgZG9uJ3QKKyAgICAgICAgLy8gd2FudCB0
byB0dXJuIHRoZSBjcmFzaCBpbnRvIGEgaGFuZyBieSByZS10cnlpbmcgdGhlIGxvY2sgZm9yIHRv
byBsb25nLgorICAgICAgICBhdXRvIGV4cGVjdGVkTG9ja1Rva2VuID0gaW5zcGVjdG9yLmxvY2so
Mik7CisgICAgICAgIGlmICghZXhwZWN0ZWRMb2NrVG9rZW4pIHsKKyAgICAgICAgICAgIEFTU0VS
VChleHBlY3RlZExvY2tUb2tlbi5lcnJvcigpID09IFZNSW5zcGVjdG9yOjpFcnJvcjo6VGltZWRP
dXQpOworICAgICAgICAgICAgbG9nKCJFUlJPUjogVW5hYmxlIHRvIGFuYWx5emUgU0lHSUxMLiBU
aW1lZCBvdXQgd2hpbGUgd2FpdGluZyB0byBpdGVyYXRlIFZNcy4iKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBhdXRvIGxvY2tUb2tlbiA9IGV4cGVjdGVkTG9ja1Rv
a2VuLnZhbHVlKCk7CisKKyAgICAgICAgdm9pZCogcGMgPSBjb250ZXh0Lm1hY2hpbmVQQzsKKyAg
ICAgICAgYXV0byBpc0luSklUTWVtb3J5ID0gaW5zcGVjdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVt
b3J5KGxvY2tUb2tlbiwgcGMpOworICAgICAgICBpZiAoIWlzSW5KSVRNZW1vcnkpIHsKKyAgICAg
ICAgICAgIGxvZygiRVJST1I6IFRpbWVkIG91dDogbm90IGFibGUgdG8gZGV0ZXJtaW5lIGlmIHBj
ICVwIGlzIGluIHZhbGlkIEpJVCBleGVjdXRhYmxlIG1lbW9yeSIsIHBjKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWlzSW5KSVRNZW1vcnkudmFsdWUoKSkg
eworICAgICAgICAgICAgbG9nKCJwYyAlcCBpcyBOT1QgaW4gdmFsaWQgSklUIGV4ZWN1dGFibGUg
bWVtb3J5IiwgcGMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGxv
ZygicGMgJXAgaXMgaW4gdmFsaWQgSklUIGV4ZWN1dGFibGUgbWVtb3J5IiwgcGMpOworCisjaWYg
Q1BVKEFSTTY0KQorICAgICAgICBzaXplX3QgcGNBc1NpemUgPSByZWludGVycHJldF9jYXN0PHNp
emVfdD4ocGMpOworICAgICAgICBpZiAocGNBc1NpemUgIT0gcm91bmRVcFRvTXVsdGlwbGVPZjxz
aXplb2YodWludDMyX3QpPihwY0FzU2l6ZSkpIHsKKyAgICAgICAgICAgIGxvZygicGMgJXAgaXMg
Tk9UIHByb3Blcmx5IGFsaWduZWQiLCBwYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICAvLyBXZSBrbm93IGl0J3Mgc2FmZSB0byByZWFkIHRoZSB3b3JkIGF0IHRo
ZSBQQyBiZWNhdXNlIHdlJ3JlIGhhbmRsaW5nIGEgU0lHSUxMLgorICAgICAgICAvLyBPdGhlcndp
c2UsIHdlIHdvdWxkIGhhdmUgY3Jhc2hlZCB3aXRoIGEgU0lHQlVTIGluc3RlYWQuCisgICAgICAg
IHVpbnQzMl90IHdvcmRBdFBDID0gKnJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihwYyk7Cisg
ICAgICAgIGxvZygiaW5zdHJ1Y3Rpb24gYml0cyBhdCBwYyAlcCBpczogMHglMDh4IiwgcGMsIHdv
cmRBdFBDKTsKKyNlbmRpZgorCisgICAgICAgIGF1dG8gZXhwZWN0ZWRDb2RlQmxvY2sgPSBpbnNw
ZWN0b3IuY29kZUJsb2NrRm9yTWFjaGluZVBDKGxvY2tUb2tlbiwgcGMpOworICAgICAgICBpZiAo
IWV4cGVjdGVkQ29kZUJsb2NrKSB7CisgICAgICAgICAgICBpZiAoZXhwZWN0ZWRDb2RlQmxvY2su
ZXJyb3IoKSA9PSBWTUluc3BlY3Rvcjo6RXJyb3I6OlRpbWVkT3V0KQorICAgICAgICAgICAgICAg
IGxvZygiRVJST1I6IFRpbWVkIG91dDogbm90IGFibGUgdG8gZGV0ZXJtaW5lIGlmIHBjICVwIGlz
IGluIGEgdmFsaWQgQ29kZUJsb2NrIiwgcGMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGxvZygiVGhlIGN1cnJlbnQgdGhyZWFkIGRvZXMgbm90IG93biBhbnkgVk0gSlNMb2Nr
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBleHBlY3RlZENvZGVCbG9jay52YWx1ZSgpOworICAgICAgICBpZiAoIWNvZGVC
bG9jaykgeworICAgICAgICAgICAgbG9nKCJtYWNoaW5lIFBDICVwIGRvZXMgbm90IGJlbG9uZyB0
byBhbnkgQ29kZUJsb2NrIGluIHRoZSBjdXJyZW50bHkgZW50ZXJlZCBWTSIsIHBjKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGxvZygicGMgJXAgYmVsb25ncyB0
byBDb2RlQmxvY2sgJXAgb2YgdHlwZSAlcyIsIHBjLCBjb2RlQmxvY2ssIEpJVENvZGU6OnR5cGVO
YW1lKGNvZGVCbG9jay0+aml0VHlwZSgpKSk7CisKKyAgICAgICAgZHVtcENvZGVCbG9jayhjb2Rl
QmxvY2ssIHBjKTsKKyAgICB9ICgpOworCisgICAgbG9nKCJFTkQgU0lHSUxMIGFuYWx5c2lzIik7
Cit9CisKK3ZvaWQgU2lnaWxsQ3Jhc2hBbmFseXplcjo6ZHVtcENvZGVCbG9jayhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgdm9pZCogbWFjaGluZVBDKQoreworI2lmIENQVShBUk02NCkKKyAgICBKSVRD
b2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCkuZ2V0KCk7CisKKyAgICAvLyBEdW1w
IHRoZSByYXcgYml0cyBvZiB0aGUgY29kZS4KKyAgICB1aW50MzJfdCogc3RhcnQgPSByZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4oaml0Q29kZS0+c3RhcnQoKSk7CisgICAgdWludDMyX3QqIGVu
ZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihqaXRDb2RlLT5lbmQoKSk7CisgICAgbG9n
KCJKSVRDb2RlICVwIFslcC0lcF06Iiwgaml0Q29kZSwgc3RhcnQsIGVuZCk7CisgICAgaWYgKHN0
YXJ0IDwgZW5kKSB7CisgICAgICAgIHVpbnQzMl90KiBwID0gc3RhcnQ7CisgICAgICAgIHdoaWxl
IChwICsgOCA8PSBlbmQpIHsKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAlMDh4ICUw
OHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4IiwgcCwgcCs3LCBwWzBdLCBwWzFdLCBwWzJdLCBw
WzNdLCBwWzRdLCBwWzVdLCBwWzZdLCBwWzddKTsKKyAgICAgICAgICAgIHAgKz0gODsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocCArIDcgPD0gZW5kKQorICAgICAgICAgICAgbG9nKCJbJXAtJXBd
OiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4IiwgcCwgcCs2LCBwWzBdLCBwWzFd
LCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVdLCBwWzZdKTsKKyAgICAgICAgZWxzZSBpZiAocCArIDYg
PD0gZW5kKQorICAgICAgICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHggJTA4eCAlMDh4ICUw
OHggJTA4eCIsIHAsIHArNSwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSk7Cisg
ICAgICAgIGVsc2UgaWYgKHAgKyA1IDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTog
JTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4IiwgcCwgcCs0LCBwWzBdLCBwWzFdLCBwWzJdLCBwWzNd
LCBwWzRdKTsKKyAgICAgICAgZWxzZSBpZiAocCArIDQgPD0gZW5kKQorICAgICAgICAgICAgbG9n
KCJbJXAtJXBdOiAlMDh4ICUwOHggJTA4eCAlMDh4IiwgcCwgcCszLCBwWzBdLCBwWzFdLCBwWzJd
LCBwWzNdKTsKKyAgICAgICAgaWYgKHAgKyAzIDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVw
LSVwXTogJTA4eCAlMDh4ICUwOHgiLCBwLCBwKzIsIHBbMF0sIHBbMV0sIHBbMl0pOworICAgICAg
ICBlbHNlIGlmIChwICsgMiA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHgg
JTA4eCIsIHAsIHArMSwgcFswXSwgcFsxXSk7CisgICAgICAgIGVsc2UgaWYgKHAgKyAxIDw9IGVu
ZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCIsIHAsIHAsIHBbMF0pOworICAgIH0K
KworICAgIC8vIER1bXAgdGhlIGRpc2Fzc2VtYmx5IG9mIHRoZSBjb2RlLgorICAgIGxvZygiRGlz
YXNzZW1ibHk6Iik7CisgICAgdWludDMyX3QqIGN1cnJlbnRQQyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihqaXRDb2RlLT5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICBzaXplX3QgYnl0
ZUNvdW50ID0gaml0Q29kZS0+c2l6ZSgpOworICAgIHdoaWxlIChieXRlQ291bnQpIHsKKyAgICAg
ICAgY2hhciBwY1N0cmluZ1syNF07CisgICAgICAgIGlmIChjdXJyZW50UEMgPT0gbWFjaGluZVBD
KSB7CisgICAgICAgICAgICBzbnByaW50ZihwY1N0cmluZywgc2l6ZW9mKHBjU3RyaW5nKSwgIiog
MHglbHgiLCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KGN1cnJlbnRQQykpOworICAg
ICAgICAgICAgbG9nKCIlMjBzOiAlcyAgICA8PT09PT09PT09PT09PT09PT09PT09PT09PSIsIHBj
U3RyaW5nLCBhcm02NE9wY29kZS5kaXNhc3NlbWJsZShjdXJyZW50UEMpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHNucHJpbnRmKHBjU3RyaW5nLCBzaXplb2YocGNTdHJpbmcpLCAi
MHglbHgiLCByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGxvbmc+KGN1cnJlbnRQQykpOworICAg
ICAgICAgICAgbG9nKCIlMjBzOiAlcyIsIHBjU3RyaW5nLCBhcm02NE9wY29kZS5kaXNhc3NlbWJs
ZShjdXJyZW50UEMpKTsKKyAgICAgICAgfQorICAgICAgICBjdXJyZW50UEMrKzsKKyAgICAgICAg
Ynl0ZUNvdW50IC09IHNpemVvZih1aW50MzJfdCk7CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0oY29kZUJsb2NrKTsKKyAgICBVTlVTRURfUEFSQU0obWFjaGluZVBDKTsKKyAgICAvLyBO
b3QgaW1wbGVtZW50ZWQgeWV0LgorI2VuZGlmCit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXpl
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxD
cmFzaEFuYWx5emVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1l
c3BhY2UgSlNDIHsKKworY2xhc3MgU2lnaWxsQ3Jhc2hBbmFseXplcjsKKworU2lnaWxsQ3Jhc2hB
bmFseXplciYgZW5zdXJlU2lnaWxsQ3Jhc2hBbmFseXplcigpOworCit9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlZNSW5zcGVjdG9yLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2Rl
QmxvY2tTZXQuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorI2luY2x1ZGUgPG11dGV4Pgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsKKworVk1JbnNwZWN0b3ImIFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpCit7CisgICAg
c3RhdGljIFZNSW5zcGVjdG9yKiBtYW5hZ2VyOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2UsIFtdIHsKKyAgICAgICAgbWFuYWdlciA9IG5l
dyBWTUluc3BlY3RvcigpOworICAgIH0pOworICAgIHJldHVybiAqbWFuYWdlcjsKK30KKwordm9p
ZCBWTUluc3BlY3Rvcjo6YWRkKFZNKiB2bSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KG1fbG9jayk7CisgICAgbV9saXN0LmFwcGVuZCh2bSk7Cit9CisKK3ZvaWQgVk1JbnNwZWN0b3I6
OnJlbW92ZShWTSogdm0pCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
ICAgIG1fbGlzdC5yZW1vdmUodm0pOworfQorCithdXRvIFZNSW5zcGVjdG9yOjpsb2NrKHVuc2ln
bmVkIHRpbWVvdXRJblNlY29uZHMpIC0+IEV4cGVjdGVkPExvY2tUb2tlbiwgRXJyb3I+Cit7Cisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkgYmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlciAo
ZS5nLiB2aWEgdmlzaXQoKSkuIEhlbmNlLAorICAgIC8vIGl0IHNob3VsZCBvbmx5IHVzZSBBUElz
IHRoYXQgYXJlIHNhZmUgdG8gY2FsbCBmcm9tIHNpZ25hbCBoYW5kbGVycy4gVGhpcyBpcworICAg
IC8vIHdoeSB3ZSB1c2UgdW5pc3RkLmgncyBzbGVlcCgpIGluc3RlYWQgb2YgaXRzIGFsdGVybmF0
aXZlcy4KKworICAgIHVuc2lnbmVkIG1heFJldHJpZXMgPSB0aW1lb3V0SW5TZWNvbmRzOyAvLyBz
aW5jZSBzZWNvbmRzUGVyU2xlZXAgPT0gMS4KKworICAgIGJvb2wgbG9ja2VkID0gbV9sb2NrLnRy
eUxvY2soKTsKKyAgICB1bnNpZ25lZCB0cnlDb3VudCA9IDA7CisgICAgd2hpbGUgKCFsb2NrZWQg
JiYgdHJ5Q291bnQgPD0gbWF4UmV0cmllcykgeworICAgICAgICAvLyBXZSB3YW50IHRoZSB2ZXJz
aW9uIG9mIHNsZWVwIGZyb20gdW5pc3RkLmguIENhc3QgdG8gZGlzYW1iaWd1YXRlLgorICAgICAg
ICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgKCopKHVuc2lnbmVkKT4oc2xlZXApKSgxKTsKKyAgICAg
ICAgbG9ja2VkID0gbV9sb2NrLnRyeUxvY2soKTsKKyAgICB9CisKKyAgICBpZiAoIWxvY2tlZCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpUaW1lZE91dCk7CisgICAgcmV0
dXJuIExvY2tUb2tlbjo6TG9ja2VkVmFsdWU7Cit9CisKK3N0YXRpYyBib29sIGVuc3VyZUlzU2Fm
ZVRvTG9jayhMb2NrJiBsb2NrKQoreworICAgIHVuc2lnbmVkIG1heFJldHJpZXMgPSAyOworICAg
IHVuc2lnbmVkIHRyeUNvdW50ID0gMDsKKyAgICB3aGlsZSAodHJ5Q291bnQgPD0gbWF4UmV0cmll
cykgeworICAgICAgICBib29sIHN1Y2Nlc3MgPSBsb2NrLnRyeUxvY2soKTsKKyAgICAgICAgaWYg
KHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGxvY2sudW5sb2NrKCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICB0cnlDb3VudCsrOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9OworCithdXRvIFZNSW5zcGVjdG9yOjppc1ZhbGlkRXhlY3V0YWJsZU1lbW9y
eShWTUluc3BlY3Rvcjo6TG9ja1Rva2VuLCB2b2lkKiBtYWNoaW5lUEMpIC0+IEV4cGVjdGVkPGJv
b2wsIEVycm9yPgoreworICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICBib29sIGhhc1RpbWVv
dXQgPSBmYWxzZTsKKyAgICBpdGVyYXRlKFsmXSAoVk0mIHZtKSAtPiBGdW5jdG9yU3RhdHVzIHsK
KyAgICAgICAgYXV0byBhbGxvY2F0b3IgPSB2bS5leGVjdXRhYmxlQWxsb2NhdG9yOworICAgICAg
ICBhdXRvJiBsb2NrID0gYWxsb2NhdG9yLmdldExvY2soKTsKKworICAgICAgICBib29sIGlzU2Fm
ZVRvTG9jayA9IGVuc3VyZUlzU2FmZVRvTG9jayhsb2NrKTsKKyAgICAgICAgaWYgKCFpc1NhZmVU
b0xvY2spIHsKKyAgICAgICAgICAgIGhhc1RpbWVvdXQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIEZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgVk0uCisgICAgICAgIH0K
KworICAgICAgICBMb2NrSG9sZGVyIGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIobG9jayk7Cisg
ICAgICAgIGlmIChhbGxvY2F0b3IuaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoZXhlY3V0YWJsZUFs
bG9jYXRvckxvY2tlciwgbWFjaGluZVBDKSkgeworICAgICAgICAgICAgZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkRvbmU7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOworICAgIH0pOworCisgICAgaWYgKCFm
b3VuZCAmJiBoYXNUaW1lb3V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6
OlRpbWVkT3V0KTsKKyAgICByZXR1cm4gZm91bmQ7Cit9CisKK2F1dG8gVk1JbnNwZWN0b3I6OmNv
ZGVCbG9ja0Zvck1hY2hpbmVQQyhWTUluc3BlY3Rvcjo6TG9ja1Rva2VuLCB2b2lkKiBtYWNoaW5l
UEMpIC0+IEV4cGVjdGVkPENvZGVCbG9jayosIEVycm9yPgoreworICAgIENvZGVCbG9jayogY29k
ZUJsb2NrID0gbnVsbHB0cjsKKyAgICBib29sIGhhc1RpbWVvdXQgPSBmYWxzZTsKKyAgICBpdGVy
YXRlKFsmXSAoVk0mIHZtKSB7CisgICAgICAgIGlmICghdm0uYXBpTG9jaygpLmN1cnJlbnRUaHJl
YWRJc0hvbGRpbmdMb2NrKCkpCisgICAgICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1czo6Q29u
dGludWU7CisKKyAgICAgICAgLy8gSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxh
bnMoKSB1c2VzIENvZGVCbG9ja1NldDo6aXRlcmF0ZSgpLCBhbmQKKyAgICAgICAgLy8gQ29kZUJs
b2NrU2V0OjppdGVyYXRlKCkgbmVlZHMgdG8gYmUgYWJsZSB0byBhY3F1aXJlIGl0cyBsb2NrLiBN
YWtlIHN1cmUgaXQncworICAgICAgICAvLyBzYWZlIHRvIHByb2NlZWQgd2l0aCBjYWxsaW5nIGZv
ckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5zKCkuCisgICAgICAgIGF1dG8mIGxvY2sgPSB2
bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKTsKKyAgICAgICAgYm9vbCBpc1NhZmVUb0xv
Y2sgPSBlbnN1cmVJc1NhZmVUb0xvY2sobG9jayk7CisgICAgICAgIGlmICghaXNTYWZlVG9Mb2Nr
KSB7CisgICAgICAgICAgICBoYXNUaW1lb3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBG
dW5jdG9yU3RhdHVzOjpDb250aW51ZTsgLy8gU2tpcCB0aGlzIFZNLgorICAgICAgICB9CisKKyAg
ICAgICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhbJl0gKENvZGVC
bG9jayogY2IpIHsKKyAgICAgICAgICAgIEpJVENvZGUqIGppdENvZGUgPSBjYi0+aml0Q29kZSgp
LmdldCgpOworICAgICAgICAgICAgaWYgKCFqaXRDb2RlKSB7CisgICAgICAgICAgICAgICAgLy8g
SWYgdGhlIGNvZGVCbG9jayBpcyBhIHJlcGxhY2VtZW50IGNvZGVCbG9jayB3aGljaCBpcyBpbiB0
aGUgcHJvY2VzcyBvZiBiZWluZworICAgICAgICAgICAgICAgIC8vIGNvbXBpbGVkLCBpdHMgaml0
Q29kZSB3aWxsIGJlIG51bGwsIGFuZCB3ZSBjYW4gZGlzcmVnYXJkIGl0IGFzIGEgbWF0Y2ggZm9y
CisgICAgICAgICAgICAgICAgLy8gdGhlIG1hY2hpbmVQQyB3ZSdyZSBzZWFyY2hpbmcgZm9yLgor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKCFKSVRDb2RlOjppc0pJVChqaXRDb2RlLT5qaXRUeXBlKCkpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGppdENvZGUtPmNvbnRhaW5zKG1h
Y2hpbmVQQykpIHsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2sgPSBjYjsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChjb2RlQmxvY2spCisgICAgICAgICAgICByZXR1
cm4gRnVuY3RvclN0YXR1czo6RG9uZTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkNv
bnRpbnVlOworICAgIH0pOworCisgICAgaWYgKCFjb2RlQmxvY2sgJiYgaGFzVGltZW91dCkKKyAg
ICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpUaW1lZE91dCk7CisgICAgcmV0dXJu
IGNvZGVCbG9jazsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9Eb3VibHlMaW5rZWRM
aXN0Lmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4K
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZNSW5zcGVjdG9yIHsKK3B1YmxpYzoKKyAgICBl
bnVtIGNsYXNzIEVycm9yIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgVGltZWRPdXQKKyAgICB9
OworCisgICAgZW51bSBjbGFzcyBMb2NrVG9rZW4geyBMb2NrZWRWYWx1ZSB9OworCisgICAgc3Rh
dGljIFZNSW5zcGVjdG9yJiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBhZGQoVk0qKTsKKyAgICB2
b2lkIHJlbW92ZShWTSopOworCisgICAgRXhwZWN0ZWQ8TG9ja1Rva2VuLCBFcnJvcj4gbG9jayh1
bnNpZ25lZCB0aW1lb3V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsK
KworICAgIEV4cGVjdGVkPGJvb2wsIEVycm9yPiBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShMb2Nr
VG9rZW4sIHZvaWQqKTsKKyAgICBFeHBlY3RlZDxDb2RlQmxvY2sqLCBFcnJvcj4gY29kZUJsb2Nr
Rm9yTWFjaGluZVBDKExvY2tUb2tlbiwgdm9pZCopOworCitwcml2YXRlOgorICAgIGVudW0gY2xh
c3MgRnVuY3RvclN0YXR1cyB7CisgICAgICAgIENvbnRpbnVlLAorICAgICAgICBEb25lCisgICAg
fTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKFZNKiB2bSA9IG1fbGlzdC5oZWFk
KCk7IHZtOyB2bSA9IHZtLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIEZ1bmN0b3JTdGF0dXMgc3Rh
dHVzID0gZnVuY3Rvcigqdm0pOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBGdW5jdG9yU3Rh
dHVzOjpEb25lKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIExvY2sgbV9sb2NrOworICAgIERvdWJseUxpbmtlZExpc3Q8Vk0+IG1fbGlzdDsKK307CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMDItMDEg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIFNJR0lMTCBj
cmFzaCBhbmFseXplciB0byBtYWtlIGRlYnVnZ2luZyBTSUdJTExzIGVhc2llci4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzcxNAorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzAzMTgyMzc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisKIDIwMTctMDEtMjYgIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgSGFyZGVuIGhvdyB0aGUg
Y29tcGlsZXIgcmVmZXJlbmNlcyBHQyBvYmplY3RzCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRM
aWJFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAko
cmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4OSw2ICs0ODksNyBAQCB1c2luZyBXVEY6OmlzQ29tcGlsYXRpb25UaHJl
YWQ7CiB1c2luZyBXVEY6OmlzUG9pbnRlckFsaWduZWQ7CiB1c2luZyBXVEY6OmlzU3RhdGVsZXNz
TGFtYmRhOwogdXNpbmcgV1RGOjppczhCeXRlQWxpZ25lZDsKK3VzaW5nIFdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZjsKIHVzaW5nIFdURjo6c2FmZUNhc3Q7CiB1c2luZyBXVEY6OnRyeUJpbmFyeVNl
YXJjaDsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300373</attachid>
            <date>2017-02-01 17:05:34 -0800</date>
            <delta_ts>2017-02-01 17:52:14 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-167714.patch</filename>
            <type>text/plain</type>
            <size>41578</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE3LTAyLTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNp
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBh
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6
OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6aWxsZWdhbEluc3Ry
dWN0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmlsbGVnYWxJbnN0cnVjdGlv
bik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnNJ
bXBsKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5z
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpPcHRpb25z
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6OmhhbmRs
ZUNyYXNoKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUNyYXNoSGFuZGxlcik6CisgICAgICAg
IChKU0M6OmVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIpOgorICAgICAgICAoSlNDOjpTaWdpbGxD
cmFzaEFuYWx5emVyOjphbmFseXplKToKKyAgICAgICAgKEpTQzo6U2lnaWxsQ3Jhc2hBbmFseXpl
cjo6ZHVtcENvZGVCbG9jayk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5o
OiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6aW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rv
cjo6YWRkKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnJlbW92ZSk6CisgICAgICAgIChK
U0M6OmVuc3VyZUlzU2FmZVRvTG9jayk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjppdGVyYXRlKToKKwogMjAxNy0wMi0w
MSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFVzZSBndWFyYW50ZWVkIFJ1bkxvb3AgaW5zdGVhZCBvZiBSdW5Mb29wOjpjdXJy
ZW50IGZvciBkaXNwYXRjaGluZyBpbnNwZWN0b3IgR0MgZXZlbnQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDYgKzkwNyw4IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3Qu
Y3BwCiAgICAgdG9vbHMvSlNEb2xsYXJWTS5jcHAKICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAorICAgIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCisgICAgdG9vbHMvVk1J
bnNwZWN0b3IuY3BwCiAKICAgICB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwCiAgICAgd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMzMiw2ICsyMzMyLDEw
IEBACiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlCMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyRTZBN0IxRDZF
QTYyQzAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2Nv
cGUuY3BwICovOyB9OworCQlGRTMwMjJEMjFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi87
IH07CisJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyB9OworCQlGRTMwMjJE
NjFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZN
SW5zcGVjdG9yLmNwcCAqLzsgfTsKKwkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5z
cGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKIAkJRkUzMThG
REYxQ0FDOTgyNzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMThGREQx
Q0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICov
OyB9OwogCQlGRTMxOEZFMDFDQUM5ODJGMDBERkNDNTQgLyogRUNNQVNjcmlwdFNwZWNJbnRlcm5h
bEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUzMThGREUxQ0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5j
dGlvbnMuaCAqLzsgfTsKIAkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzQyMjEx
MUQ2QjgxOEMwMDMyQkU4OCAvKiBUaHJvd1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ4NzEsNiArNDg3NSwxMCBAQAogCQlGRTIwQ0U5
QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3Au
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTElu
dENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocm93U2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUz
MDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENDFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0
OTMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1J
bnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMThGREQxQ0FDOEM1
MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzE4RkRFMUNBQzhDNTMw
MERGQ0M1NCAvKiBFQ01BU2NyaXB0U3BlY0ludGVybmFsRnVuY3Rpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8q
IFRocm93U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjgwOSw4ICs2ODE3LDEyIEBACiAJ
CQkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLywKIAkJCQlGRTM4
NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJ
RkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLywKKwkJ
CQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8s
CisJCQkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAq
LywKIAkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8s
CiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovLAor
CQkJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8sCisJCQkJ
RkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTg3OTQsNiArODgw
Niw3IEBACiAJCQkJRkUzOTEzNTYxQjc5NEY4RjAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MERFOUEwOTFCRTdENjlFMDA1RDg5RDkgLyogTExJbnRBc3Nl
bWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTMwMjJEMzFFM0Q3M0E1MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENF
OUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04ODUwLDYgKzg4NjMsNyBAQAogCQkJCTE0NzM0MUQ2MURDMDJFQjkwMEFBMjlCQSAvKiBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5RDNFRDlDNTA2
NEREMEE4NDY2QTNBIC8qIE1vZHVsZVNjb3BlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZB
NzYyMDcxREI5MjQzMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2
ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDczNDFEMDFEQzAyREI0MDBB
QTI5QkEgLyogTmF0aXZlRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzEwLDYgKzk3
MjQsNyBAQAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBB
cmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5QTIyODM1MUQzNUQ3MUUwMEQ4RTA2NyAv
KiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzMDIyRDYxRTQyODU3MzAw
QkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZC
ODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDA2LDYgKzEwNDIxLDcgQEAKIAkJCQk3OUIwMENCRTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzkx
NjBEQkQxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkUzMDIyRDIxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3
NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIu
aAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
Uk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDg0LDYgKzEwODQs
MTIgQEAgcHVibGljOgogICAgICAgICBpbnNuKGV4Y2VwbkdlbmVyYXRpb24oRXhjZXBuT3BfSEFM
VCwgaW1tLCAwKSk7CiAgICAgfQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBv
c2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIGluc24o
MHgwKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGxkcChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJ0MiwgUmVnaXN0ZXJJRCBy
biwgUGFpclBvc3RJbmRleCBzaW1tKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAy
MTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MSw2ICs0NDEsMTIgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbHo8NjQ+KGRlc3QsIGRlc3QpOwogICAgIH0K
IAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2b2lkIGlsbGVn
YWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbGxlZ2FsSW5zdHJ1
Y3Rpb24oKTsKKyAgICB9CisKICAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5sc2w8MzI+KGRlc3QsIHNyYywgc2hpZnRBbW91bnQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzI3LDYgKzMyNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGN0ekFmdGVyQnNmPDMyPihk
c3QpOwogICAgIH0KIAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAg
ICB2b2lkIGlsbGVnYWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5p
bGxlZ2FsSW5zdHJ1Y3Rpb24oKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsc2hpZnQzMihSZWdp
c3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KHNoaWZ0X2Ftb3VudCA9PSBYODZSZWdpc3RlcnM6OmVjeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMjExMzAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1OSw2ICsyNTksNyBAQCBwcml2YXRlOgogICAgIH0g
T25lQnl0ZU9wY29kZUlEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgT1AyX1VEMiAg
ICAgICAgICAgICA9IDB4QiwKICAgICAgICAgT1AyX01PVlNEX1ZzZFdzZCAgICA9IDB4MTAsCiAg
ICAgICAgIE9QMl9NT1ZTRF9Xc2RWc2QgICAgPSAweDExLAogICAgICAgICBPUDJfTU9WU1NfVnNk
V3NkICAgID0gMHgxMCwKQEAgLTY4MSw2ICs2ODIsMTIgQEAgcHVibGljOgogICAgIH0KICNlbmRp
ZiAvLyBDUFUoWDg2XzY0KQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2Vz
LgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcChPUDJfVUQyKTsKKyAgICB9CisKICAgICB2b2lkIGluY19yKFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQNV9F
diwgR1JPVVAxX09QX0FERCwgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNSw2ICsyMDI1LDExIEBAIHZvaWQgSGVhcDo6Zm9y
RWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4gbV9jb2RlQmxvY2tzLT5pdGVy
YXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBs
YW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mIGZ1bmMpCit7Cisg
ICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5jKTsKK30KKwogdm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgaWYgKFVOTElL
RUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFByb3RlY3RlZENlbGwo
Y29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaENvZGVCbG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhjb25zdCBGdW5jdG9y
Jik7CiAKICAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsg
fQogICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hhbmRsZVN0YWNr
OyB9CkBAIC00NzAsNiArNDcxLDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNW
aXNpdGVkKCk7CiAgICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mKTsKKyAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJ
Z25vcmluZ0pJVFBsYW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4m
KTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdm9pZCBICiAgICAgZm9yRWFjaENvZGVCbG9ja0ltcGwoc2NvcGVkTGFt
YmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxh
bnMoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdK
SVRQbGFuc0ltcGwoc2NvcGVkTGFtYmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaFBy
b3RlY3RlZENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNs
dWRlICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0xNDQsNiArMTQ1LDEwIEBAIGJvb2wg
T3B0aW9uczo6aXNBdmFpbGFibGUoT3B0aW9uczo6SUQgaWQKICAgICBpZiAoaWQgPT0gbWF4U2lu
Z2xlQWxsb2NhdGlvblNpemVJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKKyNpZiBP
UyhEQVJXSU4pCisgICAgaWYgKGlkID09IHVzZVNpZ2lsbENyYXNoQW5hbHl6ZXJJRCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQyOSw2
ICs0MzQsOCBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBl
bHNlCiAgICAgICAgIGZhc3RTZXRNYXhTaW5nbGVBbGxvY2F0aW9uU2l6ZShzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKTsKICNlbmRpZgorICAgIGlmIChPcHRpb25zOjp1c2VTaWdp
bGxDcmFzaEFuYWx5emVyKCkpCisgICAgICAgIGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsK
IH0KIAogdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3
IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAgICB2KGJvb2ws
IHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdn
aW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0
aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBv
dmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKKyAgICB2KGJvb2wsIHVzZVNpZ2lsbENy
YXNoQW5hbHl6ZXIsIHRydWUsIENvbmZpZ3VyYWJsZSwgImxvZ3MgZGF0YSBhYm91dCBTSUdJTEwg
Y3Jhc2hlcyIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwg
IndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2Yg
TiBtaWxsaXNlY29uZHMpIikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJWTUVudHJ5U2NvcGUuaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUg
IldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldl
YWtNYXBEYXRhLmgiCkBAIC0zNDksMTAgKzM1MCwxNCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgICAgIFdhdGNoZG9nJiB3YXRjaGRvZyA9IGVuc3VyZVdh
dGNoZG9nKCk7CiAgICAgICAgIHdhdGNoZG9nLnNldFRpbWVMaW1pdCh0aW1lb3V0TWlsbGlzKTsK
ICAgICB9CisKKyAgICBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKS5hZGQodGhpcyk7CiB9CiAKIFZN
Ojp+Vk0oKQogeworICAgIFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpLnJlbW92ZSh0aGlzKTsKKwog
ICAgIC8vIE5ldmVyIEdDLCBldmVyIGFnYWluLgogICAgIGhlYXAuaW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIx
MTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MjQxLDcgKzI0Miw3IEBAIHN0cnVjdCBTY3JhdGNoQnVmZmVyIHsKICNwcmFnbWEgd2FybmluZyhw
b3ApCiAjZW5kaWYKIAotY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+
IHsKK2NsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiBwdWJsaWM6CiAgICAgLy8gV2ViQ29yZSBoYXMgYSBv
bmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBWTXM7CiAgICAgLy8gZWl0aGVyIGNyZWF0
ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCkBAIC03Nzgs
MTEgKzc3OSwxNSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2Vu
PiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAorICAgIFZNKiBtX3ByZXY7
IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorICAgIFZNKiBtX25leHQ7IC8v
IFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorCiAgICAgLy8gRnJpZW5kcyBmb3Ig
ZXhjZXB0aW9uIGNoZWNraW5nIHB1cnBvc2Ugb25seS4KICAgICBmcmllbmQgY2xhc3MgSGVhcDsK
ICAgICBmcmllbmQgY2xhc3MgQ2F0Y2hTY29wZTsKICAgICBmcmllbmQgY2xhc3MgRXhjZXB0aW9u
U2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFRocm93U2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPjsKIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURBVElPTikK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpZ2lsbENyYXNoQW5hbHl6ZXIuaCIKKworI2luY2x1ZGUg
IkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZNSW5zcGVj
dG9yLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyNpbmNsdWRlICJBNjRET3Bjb2RlLmgiCisj
ZW5kaWYKKworI2lmIEhBVkUoU0lHTkFMX0gpCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjZW5kaWYK
KworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTaWduYWxDb250ZXh0OworCitjbGFzcyBTaWdp
bGxDcmFzaEFuYWx5emVyIHsKK3B1YmxpYzoKKyAgICB2b2lkIGFuYWx5emUoU2lnbmFsQ29udGV4
dCYpOworCitwcml2YXRlOgorICAgIHZvaWQgZHVtcENvZGVCbG9jayhDb2RlQmxvY2sqLCB2b2lk
KiBtYWNoaW5lUEMpOworCisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyAgICBBNjRET3Bj
b2RlIGFybTY0T3Bjb2RlOworI2VuZGlmCit9OworCisjaWYgT1MoREFSV0lOKQorCisjaWYgVVNF
KE9TX0xPRykKKworI2RlZmluZSBsb2coZm9ybWF0LCAuLi4pIFwKKyAgICBvc19sb2dfaW5mbyhP
U19MT0dfREVGQVVMVCwgZm9ybWF0LCAjI19fVkFfQVJHU19fKQorCisjZWxzZSAvLyBVU0UoT1Nf
TE9HKQorCisjZGVmaW5lIGxvZyhmb3JtYXQsIC4uLikgXAorICAgIGRhdGFMb2dGKGZvcm1hdCwg
IyNfX1ZBX0FSR1NfXykKKyAgICAKKyNlbmRpZiAvLyBVU0UoT1NfTE9HKQorCisjaWYgQ1BVKFg4
Nl82NCkKK3N0cnVjdCBTaWduYWxDb250ZXh0IHsKKyAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0
X3QmIG1jb250ZXh0KQorICAgICAgICA6IG1jb250ZXh0KG1jb250ZXh0KQorICAgICAgICAsIG1h
Y2hpbmVQQyhyZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fX3JpcCkpCisg
ICAgICAgICwgc3RhY2tQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5f
X3NzLl9fcnNwKSkKKyAgICAgICAgLCBmcmFtZVBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDxDYWxs
RnJhbWUqPihtY29udGV4dC0+X19zcy5fX3JicCkpCisgICAgeyB9CisKKyAgICB2b2lkIGR1bXAo
KQorICAgIHsKKyNkZWZpbmUgRk9SX0VBQ0hfUkVHSVNURVIodikgXAorICAgICAgICB2KHJheCkg
XAorICAgICAgICB2KHJieCkgXAorICAgICAgICB2KHJjeCkgXAorICAgICAgICB2KHJkeCkgXAor
ICAgICAgICB2KHJkaSkgXAorICAgICAgICB2KHJzaSkgXAorICAgICAgICB2KHJicCkgXAorICAg
ICAgICB2KHJzcCkgXAorICAgICAgICB2KHI4KSBcCisgICAgICAgIHYocjkpIFwKKyAgICAgICAg
dihyMTApIFwKKyAgICAgICAgdihyMTEpIFwKKyAgICAgICAgdihyMTIpIFwKKyAgICAgICAgdihy
MTMpIFwKKyAgICAgICAgdihyMTQpIFwKKyAgICAgICAgdihyMTUpIFwKKyAgICAgICAgdihyaXAp
IFwKKyAgICAgICAgdihyZmxhZ3MpIFwKKyAgICAgICAgdihjcykgXAorICAgICAgICB2KGZzKSBc
CisgICAgICAgIHYoZ3MpCisKKyNkZWZpbmUgRFVNUF9SRUdJU1RFUihfX3JlZykgXAorICAgICAg
ICBsb2coIlJlZ2lzdGVyICIgI19fcmVnICI6ICVwIiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
bWNvbnRleHQtPl9fc3MuX18jI19fcmVnKSk7CisgICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERV
TVBfUkVHSVNURVIpCisjdW5kZWYgRk9SX0VBQ0hfUkVHSVNURVIKKyAgICB9CisKKyAgICBtY29u
dGV4dF90JiBtY29udGV4dDsKKyAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQ
b2ludGVyOworICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKK307CisKKyNlbGlmIENQVShBUk02NCkK
Kworc3RydWN0IFNpZ25hbENvbnRleHQgeworICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYg
bWNvbnRleHQpCisgICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCisgICAgICAgICwgbWFjaGlu
ZVBDKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5fX3NzLl9fcGMpKQorICAgICAg
ICAsIHN0YWNrUG9pbnRlcihyZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5f
X3NwKSkKKyAgICAgICAgLCBmcmFtZVBvaW50ZXIocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUq
PihtY29udGV4dC0+X19zcy5fX2ZwKSkKKyAgICB7IH0KKworICAgIHZvaWQgZHVtcCgpCisgICAg
eworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDI4OyBpICs9IDQpIHsK
KyAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHgg
eCVkOiAlMDE2bGx4IiwKKyAgICAgICAgICAgICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0s
CisgICAgICAgICAgICAgICAgaSsxLCBtY29udGV4dC0+X19zcy5fX3hbaSsxXSwKKyAgICAgICAg
ICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9feFtpKzJdLAorICAgICAgICAgICAgICAgIGkr
MywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOworICAgICAgICB9CisgICAgICAgIEFTU0VSVChp
IDwgMjkpOworICAgICAgICBsb2coInglZDogJTAxNmxseCBmcDogJTAxNmxseCBscjogJTAxNmxs
eCIsCisgICAgICAgICAgICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sIG1jb250ZXh0LT5fX3Nz
Ll9fZnAsIG1jb250ZXh0LT5fX3NzLl9fbHIpOworICAgICAgICBsb2coInNwOiAlMDE2bGx4IHBj
OiAlMDE2bGx4IGNwc3I6ICUwOHgiLAorICAgICAgICAgICAgbWNvbnRleHQtPl9fc3MuX19zcCwg
bWNvbnRleHQtPl9fc3MuX19wYywgbWNvbnRleHQtPl9fc3MuX19jcHNyKTsKKyAgICB9CisKKyAg
ICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCog
c3RhY2tQb2ludGVyOworICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKK307CisKKyNlbHNlCisKK3N0
cnVjdCBTaWduYWxDb250ZXh0IHsKKyAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmKSB7IH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoKSB7IH0KKyAgICAKKyAgICB2b2lkKiBtYWNoaW5lUEM7Cisg
ICAgdm9pZCogc3RhY2tQb2ludGVyOworICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKK307CisgICAg
CisjZW5kaWYKKworc3RydWN0IHNpZ2FjdGlvbiBvbGRTaWdJbGxBY3Rpb247CisKK3N0YXRpYyB2
b2lkIGhhbmRsZUNyYXNoKGludCwgc2lnaW5mb190Kiwgdm9pZCogdWFwKQoreworICAgIHNpZ2Fj
dGlvbihTSUdJTEwsICZvbGRTaWdJbGxBY3Rpb24sIG51bGxwdHIpOworCisgICAgU2lnbmFsQ29u
dGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7
CisgICAgU2lnaWxsQ3Jhc2hBbmFseXplciYgYW5hbHl6ZXIgPSBlbnN1cmVTaWdpbGxDcmFzaEFu
YWx5emVyKCk7CisgICAgYW5hbHl6ZXIuYW5hbHl6ZShjb250ZXh0KTsKK30KKworc3RhdGljIHZv
aWQgaW5pdGlhbGl6ZUNyYXNoSGFuZGxlcigpCit7CisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFS
TTY0KQorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWN0aW9uOworICAgIGFjdGlvbi5zYV9zaWdhY3Rp
b24gPSByZWludGVycHJldF9jYXN0PHZvaWQgKCopKGludCwgc2lnaW5mb190ICosIHZvaWQgKik+
KGhhbmRsZUNyYXNoKTsKKyAgICBzaWdmaWxsc2V0KCZhY3Rpb24uc2FfbWFzayk7CisgICAgYWN0
aW9uLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKyAgICBzaWdhY3Rpb24oU0lHSUxMLCAmYWN0aW9u
LCAmb2xkU2lnSWxsQWN0aW9uKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGhhbmRsZUNyYXNo
KTsKKyNlbmRpZgorfQorCisjZWxzZSAvLyBPUyhEQVJXSU4pCisKKyNkZWZpbmUgbG9nKGZvcm1h
dCwgLi4uKSBkbyB7IH0gd2hpbGUgKGZhbHNlKQorICAgIAorc3RydWN0IFNpZ25hbENvbnRleHQg
eworICAgIFNpZ25hbENvbnRleHQoKSB7IH0KKworICAgIHZvaWQgZHVtcCgpIHsgfQorCisgICAg
dm9pZCogbWFjaGluZVBDOworICAgIHZvaWQqIHN0YWNrUG9pbnRlcjsKKyAgICB2b2lkKiBmcmFt
ZVBvaW50ZXI7Cit9OworCitzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3Jhc2hIYW5kbGVyKCkKK3sK
KyAgICAvLyBEbyBub3RoaW5nLiBOb3Qgc3VwcG9ydGVkIGZvciB0aGlzIHBsYXRmb3JtLgorfQor
CisjZW5kaWYgLy8gT1MoREFSV0lOKQorCitTaWdpbGxDcmFzaEFuYWx5emVyJiBlbnN1cmVTaWdp
bGxDcmFzaEFuYWx5emVyKCkKK3sKKyAgICBzdGF0aWMgU2lnaWxsQ3Jhc2hBbmFseXplciogYW5h
bHl6ZXI7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29u
Y2Uob25jZSwgW10geworICAgICAgICBpbml0aWFsaXplQ3Jhc2hIYW5kbGVyKCk7CisgICAgICAg
IGFuYWx5emVyID0gbmV3IFNpZ2lsbENyYXNoQW5hbHl6ZXI7CisgICAgfSk7CisgICAgcmV0dXJu
ICphbmFseXplcjsKK30KKwordm9pZCBTaWdpbGxDcmFzaEFuYWx5emVyOjphbmFseXplKFNpZ25h
bENvbnRleHQmIGNvbnRleHQpCit7CisgICAgbG9nKCJCRUdJTiBTSUdJTEwgYW5hbHlzaXMiKTsK
KworICAgIFsmXSAoKSB7CisgICAgICAgIC8vIEZpcnN0LCBkdW1wIHRoZSBzaWduYWwgY29udGV4
dCBpbmZvIHNvIHRoYXQgd2UnbGwgYXQgbGVhc3QgaGF2ZSB0aGUgc2FtZSBpbmZvCisgICAgICAg
IC8vIHRoYXQgdGhlIGRlZmF1bHQgY3Jhc2ggaGFuZGxlciB3b3VsZCBnaXZlbiB1cyBpbiBjYXNl
IHRoaXMgY3Jhc2ggYW5hbHl6ZXIKKyAgICAgICAgLy8gaXRzZWxmIGNyYXNoZXMuCisgICAgICAg
IGNvbnRleHQuZHVtcCgpOworCisgICAgICAgIFZNSW5zcGVjdG9yJiBpbnNwZWN0b3IgPSBWTUlu
c3BlY3Rvcjo6aW5zdGFuY2UoKTsKKworICAgICAgICAvLyBVc2UgYSB0aW1lb3V0IHBlcmlvZCBv
ZiAyIHNlY29uZHMuIFRoZSBjbGllbnQgaXMgYWJvdXQgdG8gY3Jhc2gsIGFuZCB3ZSBkb24ndAor
ICAgICAgICAvLyB3YW50IHRvIHR1cm4gdGhlIGNyYXNoIGludG8gYSBoYW5nIGJ5IHJlLXRyeWlu
ZyB0aGUgbG9jayBmb3IgdG9vIGxvbmcuCisgICAgICAgIGF1dG8gZXhwZWN0ZWRMb2NrVG9rZW4g
PSBpbnNwZWN0b3IubG9jaygyKTsKKyAgICAgICAgaWYgKCFleHBlY3RlZExvY2tUb2tlbikgewor
ICAgICAgICAgICAgQVNTRVJUKGV4cGVjdGVkTG9ja1Rva2VuLmVycm9yKCkgPT0gVk1JbnNwZWN0
b3I6OkVycm9yOjpUaW1lZE91dCk7CisgICAgICAgICAgICBsb2coIkVSUk9SOiBVbmFibGUgdG8g
YW5hbHl6ZSBTSUdJTEwuIFRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIHRvIGl0ZXJhdGUgVk1zLiIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGF1dG8gbG9ja1Rva2Vu
ID0gZXhwZWN0ZWRMb2NrVG9rZW4udmFsdWUoKTsKKworICAgICAgICB2b2lkKiBwYyA9IGNvbnRl
eHQubWFjaGluZVBDOworICAgICAgICBhdXRvIGlzSW5KSVRNZW1vcnkgPSBpbnNwZWN0b3IuaXNW
YWxpZEV4ZWN1dGFibGVNZW1vcnkobG9ja1Rva2VuLCBwYyk7CisgICAgICAgIGlmICghaXNJbkpJ
VE1lbW9yeSkgeworICAgICAgICAgICAgbG9nKCJFUlJPUjogVGltZWQgb3V0OiBub3QgYWJsZSB0
byBkZXRlcm1pbmUgaWYgcGMgJXAgaXMgaW4gdmFsaWQgSklUIGV4ZWN1dGFibGUgbWVtb3J5Iiwg
cGMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghaXNJbkpJ
VE1lbW9yeS52YWx1ZSgpKSB7CisgICAgICAgICAgICBsb2coInBjICVwIGlzIE5PVCBpbiB2YWxp
ZCBKSVQgZXhlY3V0YWJsZSBtZW1vcnkiLCBwYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbG9nKCJwYyAlcCBpcyBpbiB2YWxpZCBKSVQgZXhlY3V0YWJsZSBtZW1v
cnkiLCBwYyk7CisKKyNpZiBDUFUoQVJNNjQpCisgICAgICAgIHNpemVfdCBwY0FzU2l6ZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihwYyk7CisgICAgICAgIGlmIChwY0FzU2l6ZSAhPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mPHNpemVvZih1aW50MzJfdCk+KHBjQXNTaXplKSkgeworICAgICAgICAg
ICAgbG9nKCJwYyAlcCBpcyBOT1QgcHJvcGVybHkgYWxpZ25lZCIsIHBjKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFdlIGtub3cgaXQncyBzYWZlIHRvIHJl
YWQgdGhlIHdvcmQgYXQgdGhlIFBDIGJlY2F1c2Ugd2UncmUgaGFuZGxpbmcgYSBTSUdJTEwuCisg
ICAgICAgIC8vIE90aGVyd2lzZSwgd2Ugd291bGQgaGF2ZSBjcmFzaGVkIHdpdGggYSBTSUdCVVMg
aW5zdGVhZC4KKyAgICAgICAgdWludDMyX3Qgd29yZEF0UEMgPSAqcmVpbnRlcnByZXRfY2FzdDx1
aW50MzJfdCo+KHBjKTsKKyAgICAgICAgbG9nKCJpbnN0cnVjdGlvbiBiaXRzIGF0IHBjICVwIGlz
OiAweCUwOHgiLCBwYywgd29yZEF0UEMpOworI2VuZGlmCisKKyAgICAgICAgYXV0byBleHBlY3Rl
ZENvZGVCbG9jayA9IGluc3BlY3Rvci5jb2RlQmxvY2tGb3JNYWNoaW5lUEMobG9ja1Rva2VuLCBw
Yyk7CisgICAgICAgIGlmICghZXhwZWN0ZWRDb2RlQmxvY2spIHsKKyAgICAgICAgICAgIGlmIChl
eHBlY3RlZENvZGVCbG9jay5lcnJvcigpID09IFZNSW5zcGVjdG9yOjpFcnJvcjo6VGltZWRPdXQp
CisgICAgICAgICAgICAgICAgbG9nKCJFUlJPUjogVGltZWQgb3V0OiBub3QgYWJsZSB0byBkZXRl
cm1pbmUgaWYgcGMgJXAgaXMgaW4gYSB2YWxpZCBDb2RlQmxvY2siLCBwYyk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbG9nKCJUaGUgY3VycmVudCB0aHJlYWQgZG9lcyBub3Qg
b3duIGFueSBWTSBKU0xvY2siKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4cGVjdGVkQ29kZUJsb2NrLnZhbHVlKCk7Cisg
ICAgICAgIGlmICghY29kZUJsb2NrKSB7CisgICAgICAgICAgICBsb2coIm1hY2hpbmUgUEMgJXAg
ZG9lcyBub3QgYmVsb25nIHRvIGFueSBDb2RlQmxvY2sgaW4gdGhlIGN1cnJlbnRseSBlbnRlcmVk
IFZNIiwgcGMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbG9n
KCJwYyAlcCBiZWxvbmdzIHRvIENvZGVCbG9jayAlcCBvZiB0eXBlICVzIiwgcGMsIGNvZGVCbG9j
aywgSklUQ29kZTo6dHlwZU5hbWUoY29kZUJsb2NrLT5qaXRUeXBlKCkpKTsKKworICAgICAgICBk
dW1wQ29kZUJsb2NrKGNvZGVCbG9jaywgcGMpOworICAgIH0gKCk7CisKKyAgICBsb2coIkVORCBT
SUdJTEwgYW5hbHlzaXMiKTsKK30KKwordm9pZCBTaWdpbGxDcmFzaEFuYWx5emVyOjpkdW1wQ29k
ZUJsb2NrKENvZGVCbG9jayogY29kZUJsb2NrLCB2b2lkKiBtYWNoaW5lUEMpCit7CisjaWYgQ1BV
KEFSTTY0KQorICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS5nZXQo
KTsKKworICAgIC8vIER1bXAgdGhlIHJhdyBiaXRzIG9mIHRoZSBjb2RlLgorICAgIHVpbnQzMl90
KiBzdGFydCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihqaXRDb2RlLT5zdGFydCgpKTsK
KyAgICB1aW50MzJfdCogZW5kID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGppdENvZGUt
PmVuZCgpKTsKKyAgICBsb2coIkpJVENvZGUgJXAgWyVwLSVwXToiLCBqaXRDb2RlLCBzdGFydCwg
ZW5kKTsKKyAgICBpZiAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgdWludDMyX3QqIHAgPSBzdGFy
dDsKKyAgICAgICAgd2hpbGUgKHAgKyA4IDw9IGVuZCkgeworICAgICAgICAgICAgbG9nKCJbJXAt
JXBdOiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHgiLCBwLCBwKzcsIHBb
MF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0sIHBbNl0sIHBbN10pOworICAgICAgICAg
ICAgcCArPSA4OworICAgICAgICB9CisgICAgICAgIGlmIChwICsgNyA8PSBlbmQpCisgICAgICAg
ICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHgiLCBw
LCBwKzYsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0sIHBbNl0pOworICAgICAg
ICBlbHNlIGlmIChwICsgNiA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHgg
JTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4IiwgcCwgcCs1LCBwWzBdLCBwWzFdLCBwWzJdLCBwWzNd
LCBwWzRdLCBwWzVdKTsKKyAgICAgICAgZWxzZSBpZiAocCArIDUgPD0gZW5kKQorICAgICAgICAg
ICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHgiLCBwLCBwKzQsIHBbMF0s
IHBbMV0sIHBbMl0sIHBbM10sIHBbNF0pOworICAgICAgICBlbHNlIGlmIChwICsgNCA8PSBlbmQp
CisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHgiLCBwLCBwKzMs
IHBbMF0sIHBbMV0sIHBbMl0sIHBbM10pOworICAgICAgICBpZiAocCArIDMgPD0gZW5kKQorICAg
ICAgICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHggJTA4eCIsIHAsIHArMiwgcFswXSwgcFsx
XSwgcFsyXSk7CisgICAgICAgIGVsc2UgaWYgKHAgKyAyIDw9IGVuZCkKKyAgICAgICAgICAgIGxv
ZygiWyVwLSVwXTogJTA4eCAlMDh4IiwgcCwgcCsxLCBwWzBdLCBwWzFdKTsKKyAgICAgICAgZWxz
ZSBpZiAocCArIDEgPD0gZW5kKQorICAgICAgICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4IiwgcCwg
cCwgcFswXSk7CisgICAgfQorCisgICAgLy8gRHVtcCB0aGUgZGlzYXNzZW1ibHkgb2YgdGhlIGNv
ZGUuCisgICAgbG9nKCJEaXNhc3NlbWJseToiKTsKKyAgICB1aW50MzJfdCogY3VycmVudFBDID0g
cmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGppdENvZGUtPmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgIHNpemVfdCBieXRlQ291bnQgPSBqaXRDb2RlLT5zaXplKCk7CisgICAgd2hpbGUgKGJ5
dGVDb3VudCkgeworICAgICAgICBjaGFyIHBjU3RyaW5nWzI0XTsKKyAgICAgICAgaWYgKGN1cnJl
bnRQQyA9PSBtYWNoaW5lUEMpIHsKKyAgICAgICAgICAgIHNucHJpbnRmKHBjU3RyaW5nLCBzaXpl
b2YocGNTdHJpbmcpLCAiKiAweCVseCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4o
Y3VycmVudFBDKSk7CisgICAgICAgICAgICBsb2coIiUyMHM6ICVzICAgIDw9PT09PT09PT09PT09
PT09PT09PT09PT09IiwgcGNTdHJpbmcsIGFybTY0T3Bjb2RlLmRpc2Fzc2VtYmxlKGN1cnJlbnRQ
QykpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25wcmludGYocGNTdHJpbmcsIHNp
emVvZihwY1N0cmluZyksICIweCVseCIsIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4o
Y3VycmVudFBDKSk7CisgICAgICAgICAgICBsb2coIiUyMHM6ICVzIiwgcGNTdHJpbmcsIGFybTY0
T3Bjb2RlLmRpc2Fzc2VtYmxlKGN1cnJlbnRQQykpOworICAgICAgICB9CisgICAgICAgIGN1cnJl
bnRQQysrOworICAgICAgICBieXRlQ291bnQgLT0gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9Cisj
ZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShtYWNo
aW5lUEMpOworICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisjZW5kaWYKK30KKworfSAvLyBu
YW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jh
c2hBbmFseXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9T
aWdpbGxDcmFzaEFuYWx5emVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBTaWdpbGxDcmFzaEFuYWx5emVy
OworCitTaWdpbGxDcmFzaEFuYWx5emVyJiBlbnN1cmVTaWdpbGxDcmFzaEFuYWx5emVyKCk7CisK
K30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZN
SW5zcGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMv
Vk1JbnNwZWN0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkNvZGVCbG9ja1NldC5oIgorI2luY2x1ZGUgIkhlYXBJbmxpbmVzLmgiCisj
aW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0V4cGVj
dGVkLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitWTUluc3BlY3RvciYgVk1JbnNwZWN0b3I6Omlu
c3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgVk1JbnNwZWN0b3IqIG1hbmFnZXI7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10geworICAg
ICAgICBtYW5hZ2VyID0gbmV3IFZNSW5zcGVjdG9yKCk7CisgICAgfSk7CisgICAgcmV0dXJuICpt
YW5hZ2VyOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjphZGQoVk0qIHZtKQoreworICAgIGF1dG8g
bG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBtX2xpc3QuYXBwZW5kKHZtKTsKK30KKwor
dm9pZCBWTUluc3BlY3Rvcjo6cmVtb3ZlKFZNKiB2bSkKK3sKKyAgICBhdXRvIGxvY2tlciA9IGhv
bGRMb2NrKG1fbG9jayk7CisgICAgbV9saXN0LnJlbW92ZSh2bSk7Cit9CisKK2F1dG8gVk1JbnNw
ZWN0b3I6OmxvY2sodW5zaWduZWQgdGltZW91dEluU2Vjb25kcykgLT4gRXhwZWN0ZWQ8TG9ja1Rv
a2VuLCBFcnJvcj4KK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJvbSBh
IHNpZ25hbCBoYW5kbGVyIChlLmcuIHZpYSB2aXNpdCgpKS4gSGVuY2UsCisgICAgLy8gaXQgc2hv
dWxkIG9ubHkgdXNlIEFQSXMgdGhhdCBhcmUgc2FmZSB0byBjYWxsIGZyb20gc2lnbmFsIGhhbmRs
ZXJzLiBUaGlzIGlzCisgICAgLy8gd2h5IHdlIHVzZSB1bmlzdGQuaCdzIHNsZWVwKCkgaW5zdGVh
ZCBvZiBpdHMgYWx0ZXJuYXRpdmVzLgorCisgICAgdW5zaWduZWQgbWF4UmV0cmllcyA9IHRpbWVv
dXRJblNlY29uZHM7IC8vIHNpbmNlIHNlY29uZHNQZXJTbGVlcCA9PSAxLgorCisgICAgYm9vbCBs
b2NrZWQgPSBtX2xvY2sudHJ5TG9jaygpOworICAgIHVuc2lnbmVkIHRyeUNvdW50ID0gMDsKKyAg
ICB3aGlsZSAoIWxvY2tlZCAmJiB0cnlDb3VudCA8PSBtYXhSZXRyaWVzKSB7CisgICAgICAgIC8v
IFdlIHdhbnQgdGhlIHZlcnNpb24gb2Ygc2xlZXAgZnJvbSB1bmlzdGQuaC4gQ2FzdCB0byBkaXNh
bWJpZ3VhdGUuCisgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCAoKikodW5zaWduZWQpPihz
bGVlcCkpKDEpOworICAgICAgICBsb2NrZWQgPSBtX2xvY2sudHJ5TG9jaygpOworICAgIH0KKwor
ICAgIGlmICghbG9ja2VkKQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlRp
bWVkT3V0KTsKKyAgICByZXR1cm4gTG9ja1Rva2VuOjpMb2NrZWRWYWx1ZTsKK30KKworc3RhdGlj
IGJvb2wgZW5zdXJlSXNTYWZlVG9Mb2NrKExvY2smIGxvY2spCit7CisgICAgdW5zaWduZWQgbWF4
UmV0cmllcyA9IDI7CisgICAgdW5zaWduZWQgdHJ5Q291bnQgPSAwOworICAgIHdoaWxlICh0cnlD
b3VudCA8PSBtYXhSZXRyaWVzKSB7CisgICAgICAgIGJvb2wgc3VjY2VzcyA9IGxvY2sudHJ5TG9j
aygpOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgbG9jay51bmxvY2soKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHRyeUNvdW50Kys7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK307CisKK2F1dG8gVk1JbnNwZWN0b3I6OmlzVmFs
aWRFeGVjdXRhYmxlTWVtb3J5KFZNSW5zcGVjdG9yOjpMb2NrVG9rZW4sIHZvaWQqIG1hY2hpbmVQ
QykgLT4gRXhwZWN0ZWQ8Ym9vbCwgRXJyb3I+Cit7CisgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwor
ICAgIGJvb2wgaGFzVGltZW91dCA9IGZhbHNlOworICAgIGl0ZXJhdGUoWyZdIChWTSYgdm0pIC0+
IEZ1bmN0b3JTdGF0dXMgeworICAgICAgICBhdXRvIGFsbG9jYXRvciA9IHZtLmV4ZWN1dGFibGVB
bGxvY2F0b3I7CisgICAgICAgIGF1dG8mIGxvY2sgPSBhbGxvY2F0b3IuZ2V0TG9jaygpOworCisg
ICAgICAgIGJvb2wgaXNTYWZlVG9Mb2NrID0gZW5zdXJlSXNTYWZlVG9Mb2NrKGxvY2spOworICAg
ICAgICBpZiAoIWlzU2FmZVRvTG9jaykgeworICAgICAgICAgICAgaGFzVGltZW91dCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1czo6Q29udGludWU7IC8vIFNraXAgdGhp
cyBWTS4KKyAgICAgICAgfQorCisgICAgICAgIExvY2tIb2xkZXIgZXhlY3V0YWJsZUFsbG9jYXRv
ckxvY2tlcihsb2NrKTsKKyAgICAgICAgaWYgKGFsbG9jYXRvci5pc1ZhbGlkRXhlY3V0YWJsZU1l
bW9yeShleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyLCBtYWNoaW5lUEMpKSB7CisgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1czo6RG9uZTsK
KyAgICAgICAgfQorICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1czo6Q29udGludWU7CisgICAg
fSk7CisKKyAgICBpZiAoIWZvdW5kICYmIGhhc1RpbWVvdXQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChFcnJvcjo6VGltZWRPdXQpOworICAgIHJldHVybiBmb3VuZDsKK30KKworYXV0
byBWTUluc3BlY3Rvcjo6Y29kZUJsb2NrRm9yTWFjaGluZVBDKFZNSW5zcGVjdG9yOjpMb2NrVG9r
ZW4sIHZvaWQqIG1hY2hpbmVQQykgLT4gRXhwZWN0ZWQ8Q29kZUJsb2NrKiwgRXJyb3I+Cit7Cisg
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBudWxscHRyOworICAgIGJvb2wgaGFzVGltZW91dCA9
IGZhbHNlOworICAgIGl0ZXJhdGUoWyZdIChWTSYgdm0pIHsKKyAgICAgICAgaWYgKCF2bS5hcGlM
b2NrKCkuY3VycmVudFRocmVhZElzSG9sZGluZ0xvY2soKSkKKyAgICAgICAgICAgIHJldHVybiBG
dW5jdG9yU3RhdHVzOjpDb250aW51ZTsKKworICAgICAgICAvLyBIZWFwOjpmb3JFYWNoQ29kZUJs
b2NrSWdub3JpbmdKSVRQbGFucygpIHVzZXMgQ29kZUJsb2NrU2V0OjppdGVyYXRlKCksIGFuZAor
ICAgICAgICAvLyBDb2RlQmxvY2tTZXQ6Oml0ZXJhdGUoKSBuZWVkcyB0byBiZSBhYmxlIHRvIGFj
cXVpcmUgaXRzIGxvY2suIE1ha2Ugc3VyZSBpdCdzCisgICAgICAgIC8vIHNhZmUgdG8gcHJvY2Vl
ZCB3aXRoIGNhbGxpbmcgZm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnMoKS4KKyAgICAg
ICAgYXV0byYgbG9jayA9IHZtLmhlYXAuY29kZUJsb2NrU2V0KCkuZ2V0TG9jaygpOworICAgICAg
ICBib29sIGlzU2FmZVRvTG9jayA9IGVuc3VyZUlzU2FmZVRvTG9jayhsb2NrKTsKKyAgICAgICAg
aWYgKCFpc1NhZmVUb0xvY2spIHsKKyAgICAgICAgICAgIGhhc1RpbWVvdXQgPSB0cnVlOworICAg
ICAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOyAvLyBTa2lwIHRoaXMgVk0u
CisgICAgICAgIH0KKworICAgICAgICB2bS5oZWFwLmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJ
VFBsYW5zKFsmXSAoQ29kZUJsb2NrKiBjYikgeworICAgICAgICAgICAgSklUQ29kZSogaml0Q29k
ZSA9IGNiLT5qaXRDb2RlKCkuZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWppdENvZGUpIHsKKyAg
ICAgICAgICAgICAgICAvLyBJZiB0aGUgY29kZUJsb2NrIGlzIGEgcmVwbGFjZW1lbnQgY29kZUJs
b2NrIHdoaWNoIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nCisgICAgICAgICAgICAgICAgLy8g
Y29tcGlsZWQsIGl0cyBqaXRDb2RlIHdpbGwgYmUgbnVsbCwgYW5kIHdlIGNhbiBkaXNyZWdhcmQg
aXQgYXMgYSBtYXRjaCBmb3IKKyAgICAgICAgICAgICAgICAvLyB0aGUgbWFjaGluZVBDIHdlJ3Jl
IHNlYXJjaGluZyBmb3IuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIUpJVENvZGU6OmlzSklUKGppdENvZGUtPmppdFR5cGUo
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoaml0
Q29kZS0+Y29udGFpbnMobWFjaGluZVBDKSkgeworICAgICAgICAgICAgICAgIGNvZGVCbG9jayA9
IGNiOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGNvZGVCbG9jaykK
KyAgICAgICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpEb25lOworICAgICAgICByZXR1cm4g
RnVuY3RvclN0YXR1czo6Q29udGludWU7CisgICAgfSk7CisKKyAgICBpZiAoIWNvZGVCbG9jayAm
JiBoYXNUaW1lb3V0KQorICAgICAgICByZXR1cm4gbWFrZVVuZXhwZWN0ZWQoRXJyb3I6OlRpbWVk
T3V0KTsKKyAgICByZXR1cm4gY29kZUJsb2NrOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8
d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KKyNpbmNsdWRlIDx3dGYvRXhwZWN0ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgVk1JbnNwZWN0b3Ig
eworcHVibGljOgorICAgIGVudW0gY2xhc3MgRXJyb3IgeworICAgICAgICBOb25lLAorICAgICAg
ICBUaW1lZE91dAorICAgIH07CisKKyAgICBlbnVtIGNsYXNzIExvY2tUb2tlbiB7IExvY2tlZFZh
bHVlIH07CisKKyAgICBzdGF0aWMgVk1JbnNwZWN0b3ImIGluc3RhbmNlKCk7CisKKyAgICB2b2lk
IGFkZChWTSopOworICAgIHZvaWQgcmVtb3ZlKFZNKik7CisKKyAgICBFeHBlY3RlZDxMb2NrVG9r
ZW4sIEVycm9yPiBsb2NrKHVuc2lnbmVkIHRpbWVvdXQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpOworCisgICAgRXhwZWN0ZWQ8Ym9vbCwgRXJyb3I+IGlzVmFsaWRFeGVj
dXRhYmxlTWVtb3J5KExvY2tUb2tlbiwgdm9pZCopOworICAgIEV4cGVjdGVkPENvZGVCbG9jayos
IEVycm9yPiBjb2RlQmxvY2tGb3JNYWNoaW5lUEMoTG9ja1Rva2VuLCB2b2lkKik7CisKK3ByaXZh
dGU6CisgICAgZW51bSBjbGFzcyBGdW5jdG9yU3RhdHVzIHsKKyAgICAgICAgQ29udGludWUsCisg
ICAgICAgIERvbmUKKyAgICB9OworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lk
IGl0ZXJhdGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoVk0q
IHZtID0gbV9saXN0LmhlYWQoKTsgdm07IHZtID0gdm0tPm5leHQoKSkgeworICAgICAgICAgICAg
RnVuY3RvclN0YXR1cyBzdGF0dXMgPSBmdW5jdG9yKCp2bSk7CisgICAgICAgICAgICBpZiAoc3Rh
dHVzID09IEZ1bmN0b3JTdGF0dXM6OkRvbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgfQorCisgICAgTG9jayBtX2xvY2s7CisgICAgRG91Ymx5TGlua2VkTGlzdDxW
TT4gbV9saXN0OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvV1RGL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjEx
MzAxKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
MyBAQAorMjAxNy0wMi0wMSAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAg
ICAgQWRkIGEgU0lHSUxMIGNyYXNoIGFuYWx5emVyIHRvIG1ha2UgZGVidWdnaW5nIFNJR0lMTHMg
ZWFzaWVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTY3NzE0CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8zMDMxODIzNz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi9TdGRMaWJFeHRyYXMuaDoK
KwogMjAxNy0wMS0yNiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBIYXJkZW4gaG93IHRoZSBjb21waWxlciByZWZlcmVuY2VzIEdDIG9iamVjdHMKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvV1RGL3d0Zi9TdGRM
aWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDg5LDYgKzQ4OSw3IEBAIHVzaW5nIFdURjo6
aXNDb21waWxhdGlvblRocmVhZDsKIHVzaW5nIFdURjo6aXNQb2ludGVyQWxpZ25lZDsKIHVzaW5n
IFdURjo6aXNTdGF0ZWxlc3NMYW1iZGE7CiB1c2luZyBXVEY6OmlzOEJ5dGVBbGlnbmVkOwordXNp
bmcgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mOwogdXNpbmcgV1RGOjpzYWZlQ2FzdDsKIHVzaW5n
IFdURjo6dHJ5QmluYXJ5U2VhcmNoOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300375</attachid>
            <date>2017-02-01 17:52:14 -0800</date>
            <delta_ts>2017-02-01 22:58:22 -0800</delta_ts>
            <desc>proposed patch: with speculative fix for Windows build.</desc>
            <filename>bug-167714.patch</filename>
            <type>text/plain</type>
            <size>41583</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDE3LTAyLTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNp
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBh
c3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6
OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6aWxsZWdhbEluc3Ry
dWN0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmlsbGVnYWxJbnN0cnVjdGlv
bik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpY
ODZBc3NlbWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogaGVhcC9IZWFwLmNw
cDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnNJ
bXBsKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVz
Lmg6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5z
KToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpPcHRpb25z
Ojppc0F2YWlsYWJsZSk6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMp
OgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3Bw
OgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAg
ICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToK
KyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6OmhhbmRs
ZUNyYXNoKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUNyYXNoSGFuZGxlcik6CisgICAgICAg
IChKU0M6OmVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIpOgorICAgICAgICAoSlNDOjpTaWdpbGxD
cmFzaEFuYWx5emVyOjphbmFseXplKToKKyAgICAgICAgKEpTQzo6U2lnaWxsQ3Jhc2hBbmFseXpl
cjo6ZHVtcENvZGVCbG9jayk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5o
OiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpWTUluc3BlY3Rvcjo6aW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rv
cjo6YWRkKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnJlbW92ZSk6CisgICAgICAgIChK
U0M6OmVuc3VyZUlzU2FmZVRvTG9jayk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0b3IuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjppdGVyYXRlKToKKwogMjAxNy0wMi0w
MSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IFVzZSBndWFyYW50ZWVkIFJ1bkxvb3AgaW5zdGVhZCBvZiBSdW5Mb29wOjpjdXJy
ZW50IGZvciBkaXNwYXRjaGluZyBpbnNwZWN0b3IgR0MgZXZlbnQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTA3LDYgKzkwNyw4IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3Qu
Y3BwCiAgICAgdG9vbHMvSlNEb2xsYXJWTS5jcHAKICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90
eXBlLmNwcAorICAgIHRvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCisgICAgdG9vbHMvVk1J
bnNwZWN0b3IuY3BwCiAKICAgICB3YXNtL0pTV2ViQXNzZW1ibHkuY3BwCiAgICAgd2FzbS9XYXNt
QjNJUkdlbmVyYXRvci5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjMzMiw2ICsyMzMyLDEw
IEBACiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlCMTVGMDRBOTUw
MERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsgfTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYz
NDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkUyRTZBN0IxRDZF
QTYyQzAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyRTZBN0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2Nv
cGUuY3BwICovOyB9OworCQlGRTMwMjJEMjFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi87
IH07CisJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFF
M0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovOyB9OworCQlGRTMwMjJE
NjFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZN
SW5zcGVjdG9yLmNwcCAqLzsgfTsKKwkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5z
cGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKIAkJRkUzMThG
REYxQ0FDOTgyNzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMThGREQx
Q0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICov
OyB9OwogCQlGRTMxOEZFMDFDQUM5ODJGMDBERkNDNTQgLyogRUNNQVNjcmlwdFNwZWNJbnRlcm5h
bEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkUzMThGREUxQ0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5j
dGlvbnMuaCAqLzsgfTsKIAkJRkUzNDIyMTIxRDZCODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzQyMjEx
MUQ2QjgxOEMwMDMyQkU4OCAvKiBUaHJvd1Njb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ4NzEsNiArNDg3NSwxMCBAQAogCQlGRTIwQ0U5
QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNwcDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3Au
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0
MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTElu
dENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENMb29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRocm93U2NvcGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUz
MDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnaWxsQ3Jhc2hBbmFseXplci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENDFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0
OTMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1J
bnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzMThGREQxQ0FDOEM1
MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMzE4RkRFMUNBQzhDNTMw
MERGQ0M1NCAvKiBFQ01BU2NyaXB0U3BlY0ludGVybmFsRnVuY3Rpb25zLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8q
IFRocm93U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjgwOSw4ICs2ODE3LDEyIEBACiAJ
CQkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCAqLywKIAkJCQlGRTM4
NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJ
RkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCAqLywKKwkJ
CQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8s
CisJCQkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAq
LywKIAkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMzMDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8s
CiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2IC8qIFRpZXJlZE1NYXBBcnJheS5oICovLAor
CQkJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8sCisJCQkJ
RkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggKi8sCiAJCQkpOwogCQkJ
cGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTg3OTQsNiArODgw
Niw3IEBACiAJCQkJRkUzOTEzNTYxQjc5NEY4RjAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MERFOUEwOTFCRTdENjlFMDA1RDg5RDkgLyogTExJbnRBc3Nl
bWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwRkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExM
SW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQlGRTMwMjJEMzFFM0Q3M0E1MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENF
OUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTEludENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8qIExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04ODUwLDYgKzg4NjMsNyBAQAogCQkJCTE0NzM0MUQ2MURDMDJFQjkwMEFBMjlCQSAvKiBN
b2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5RDNFRDlDNTA2
NEREMEE4NDY2QTNBIC8qIE1vZHVsZVNjb3BlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZB
NzYyMDcxREI5MjQzMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2
ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDczNDFEMDFEQzAyREI0MDBB
QTI5QkEgLyogTmF0aXZlRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzEwLDYgKzk3
MjQsNyBAQAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYwMDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1
dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBB
cmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5QTIyODM1MUQzNUQ3MUUwMEQ4RTA2NyAv
KiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzMDIyRDYxRTQyODU3MzAw
QkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZC
ODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDA2LDYgKzEwNDIxLDcgQEAKIAkJCQk3OUIwMENCRTFD
NkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzkx
NjBEQkQxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJRkUzMDIyRDIxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1
dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4
QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3
NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIu
aAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
Uk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDg0LDYgKzEwODQs
MTIgQEAgcHVibGljOgogICAgICAgICBpbnNuKGV4Y2VwbkdlbmVyYXRpb24oRXhjZXBuT3BfSEFM
VCwgaW1tLCAwKSk7CiAgICAgfQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBv
c2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIGluc24o
MHgwKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lO
TElORSB2b2lkIGxkcChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJ0MiwgUmVnaXN0ZXJJRCBy
biwgUGFpclBvc3RJbmRleCBzaW1tKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAy
MTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MSw2ICs0NDEsMTIgQEAg
cHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbHo8NjQ+KGRlc3QsIGRlc3QpOwogICAgIH0K
IAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2b2lkIGlsbGVn
YWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbGxlZ2FsSW5zdHJ1
Y3Rpb24oKTsKKyAgICB9CisKICAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBtX2Fz
c2VtYmxlci5sc2w8MzI+KGRlc3QsIHNyYywgc2hpZnRBbW91bnQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZD
b21tb24uaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzI3LDYgKzMyNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGN0ekFmdGVyQnNmPDMyPihk
c3QpOwogICAgIH0KIAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAg
ICB2b2lkIGlsbGVnYWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5p
bGxlZ2FsSW5zdHJ1Y3Rpb24oKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsc2hpZnQzMihSZWdp
c3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgaWYg
KHNoaWZ0X2Ftb3VudCA9PSBYODZSZWdpc3RlcnM6OmVjeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMjExMzAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1OSw2ICsyNTksNyBAQCBwcml2YXRlOgogICAgIH0g
T25lQnl0ZU9wY29kZUlEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgT1AyX1VEMiAg
ICAgICAgICAgICA9IDB4QiwKICAgICAgICAgT1AyX01PVlNEX1ZzZFdzZCAgICA9IDB4MTAsCiAg
ICAgICAgIE9QMl9NT1ZTRF9Xc2RWc2QgICAgPSAweDExLAogICAgICAgICBPUDJfTU9WU1NfVnNk
V3NkICAgID0gMHgxMCwKQEAgLTY4MSw2ICs2ODIsMTIgQEAgcHVibGljOgogICAgIH0KICNlbmRp
ZiAvLyBDUFUoWDg2XzY0KQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2Vz
LgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0
dGVyLnR3b0J5dGVPcChPUDJfVUQyKTsKKyAgICB9CisKICAgICB2b2lkIGluY19yKFJlZ2lzdGVy
SUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQNV9F
diwgR1JPVVAxX09QX0FERCwgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAu
Y3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNSw2ICsyMDI1LDExIEBAIHZvaWQgSGVhcDo6Zm9y
RWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4gbV9jb2RlQmxvY2tzLT5pdGVy
YXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBs
YW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mIGZ1bmMpCit7Cisg
ICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5jKTsKK30KKwogdm9pZCBIZWFwOjp3
cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgaWYgKFVOTElL
RUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUsNiArMjI1LDcgQEAgcHVibGljOgogICAgIAog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFByb3RlY3RlZENlbGwo
Y29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9y
RWFjaENvZGVCbG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4gdm9pZCBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhjb25zdCBGdW5jdG9y
Jik7CiAKICAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsg
fQogICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hhbmRsZVN0YWNr
OyB9CkBAIC00NzAsNiArNDcxLDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNW
aXNpdGVkKCk7CiAgICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mKTsKKyAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJ
Z25vcmluZ0pJVFBsYW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4m
KTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdm9pZCBICiAgICAgZm9yRWFjaENvZGVCbG9ja0ltcGwoc2NvcGVkTGFt
YmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxh
bnMoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdK
SVRQbGFuc0ltcGwoc2NvcGVkTGFtYmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaFBy
b3RlY3RlZENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNs
dWRlICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0xNDQsNiArMTQ1LDEwIEBAIGJvb2wg
T3B0aW9uczo6aXNBdmFpbGFibGUoT3B0aW9uczo6SUQgaWQKICAgICBpZiAoaWQgPT0gbWF4U2lu
Z2xlQWxsb2NhdGlvblNpemVJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKKyNpZiBP
UyhEQVJXSU4pCisgICAgaWYgKGlkID09IHVzZVNpZ2lsbENyYXNoQW5hbHl6ZXJJRCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQyOSw2
ICs0MzQsOCBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBl
bHNlCiAgICAgICAgIGZhc3RTZXRNYXhTaW5nbGVBbGxvY2F0aW9uU2l6ZShzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKTsKICNlbmRpZgorICAgIGlmIChPcHRpb25zOjp1c2VTaWdp
bGxDcmFzaEFuYWx5emVyKCkpCisgICAgICAgIGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsK
IH0KIAogdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3
IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAgICB2KGJvb2ws
IHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdn
aW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0
aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBv
dmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKKyAgICB2KGJvb2wsIHVzZVNpZ2lsbENy
YXNoQW5hbHl6ZXIsIHRydWUsIENvbmZpZ3VyYWJsZSwgImxvZ3MgZGF0YSBhYm91dCBTSUdJTEwg
Y3Jhc2hlcyIpIFwKICAgICBcCiAgICAgdih1bnNpZ25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwg
IndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxlZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2Yg
TiBtaWxsaXNlY29uZHMpIikgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAi
VHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJWTUVudHJ5U2NvcGUuaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUg
IldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldl
YWtNYXBEYXRhLmgiCkBAIC0zNDksMTAgKzM1MCwxNCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwg
SGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgICAgIFdhdGNoZG9nJiB3YXRjaGRvZyA9IGVuc3VyZVdh
dGNoZG9nKCk7CiAgICAgICAgIHdhdGNoZG9nLnNldFRpbWVMaW1pdCh0aW1lb3V0TWlsbGlzKTsK
ICAgICB9CisKKyAgICBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKS5hZGQodGhpcyk7CiB9CiAKIFZN
Ojp+Vk0oKQogeworICAgIFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpLnJlbW92ZSh0aGlzKTsKKwog
ICAgIC8vIE5ldmVyIEdDLCBldmVyIGFnYWluLgogICAgIGhlYXAuaW5jcmVtZW50RGVmZXJyYWxE
ZXB0aCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIx
MTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3Iu
aD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNp
bmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAt
MjQxLDcgKzI0Miw3IEBAIHN0cnVjdCBTY3JhdGNoQnVmZmVyIHsKICNwcmFnbWEgd2FybmluZyhw
b3ApCiAjZW5kaWYKIAotY2xhc3MgVk0gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+
IHsKK2NsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERv
dWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiBwdWJsaWM6CiAgICAgLy8gV2ViQ29yZSBoYXMgYSBv
bmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0byBWTXM7CiAgICAgLy8gZWl0aGVyIGNyZWF0
ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlCkBAIC03Nzgs
MTEgKzc3OSwxNSBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2Vu
PiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2lj
UmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNSZWdpc3RyeTsKIAorICAgIFZNKiBtX3ByZXY7
IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorICAgIFZNKiBtX25leHQ7IC8v
IFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3ROb2RlLgorCiAgICAgLy8gRnJpZW5kcyBmb3Ig
ZXhjZXB0aW9uIGNoZWNraW5nIHB1cnBvc2Ugb25seS4KICAgICBmcmllbmQgY2xhc3MgSGVhcDsK
ICAgICBmcmllbmQgY2xhc3MgQ2F0Y2hTY29wZTsKICAgICBmcmllbmQgY2xhc3MgRXhjZXB0aW9u
U2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFRocm93U2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFdU
Rjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+OwogfTsKIAogI2lmIEVOQUJMRShHQ19WQUxJREFU
SU9OKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxD
cmFzaEFuYWx5emVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2lnaWxsQ3Jhc2hBbmFseXplci5oIgorCisjaW5j
bHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVk1J
bnNwZWN0b3IuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisKKyNpZiBVU0UoQVJNNjRfRElTQVNTRU1CTEVSKQorI2luY2x1ZGUgIkE2NERPcGNvZGUu
aCIKKyNlbmRpZgorCisjaWYgSEFWRShTSUdOQUxfSCkKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNl
bmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFNpZ25hbENvbnRleHQ7CisKK2NsYXNz
IFNpZ2lsbENyYXNoQW5hbHl6ZXIgeworcHVibGljOgorICAgIHZvaWQgYW5hbHl6ZShTaWduYWxD
b250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBkdW1wQ29kZUJsb2NrKENvZGVCbG9jayos
IHZvaWQqIG1hY2hpbmVQQyk7CisKKyNpZiBVU0UoQVJNNjRfRElTQVNTRU1CTEVSKQorICAgIEE2
NERPcGNvZGUgYXJtNjRPcGNvZGU7CisjZW5kaWYKK307CisKKyNpZiBPUyhEQVJXSU4pCisKKyNp
ZiBVU0UoT1NfTE9HKQorCisjZGVmaW5lIGxvZyhmb3JtYXQsIC4uLikgXAorICAgIG9zX2xvZ19p
bmZvKE9TX0xPR19ERUZBVUxULCBmb3JtYXQsICMjX19WQV9BUkdTX18pCisKKyNlbHNlIC8vIFVT
RShPU19MT0cpCisKKyNkZWZpbmUgbG9nKGZvcm1hdCwgLi4uKSBcCisgICAgZGF0YUxvZ0YoZm9y
bWF0LCAjI19fVkFfQVJHU19fKQorICAgIAorI2VuZGlmIC8vIFVTRShPU19MT0cpCisKKyNpZiBD
UFUoWDg2XzY0KQorc3RydWN0IFNpZ25hbENvbnRleHQgeworICAgIFNpZ25hbENvbnRleHQobWNv
bnRleHRfdCYgbWNvbnRleHQpCisgICAgICAgIDogbWNvbnRleHQobWNvbnRleHQpCisgICAgICAg
ICwgbWFjaGluZVBDKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5fX3NzLl9fcmlw
KSkKKyAgICAgICAgLCBzdGFja1BvaW50ZXIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obWNvbnRl
eHQtPl9fc3MuX19yc3ApKQorICAgICAgICAsIGZyYW1lUG9pbnRlcihyZWludGVycHJldF9jYXN0
PENhbGxGcmFtZSo+KG1jb250ZXh0LT5fX3NzLl9fcmJwKSkKKyAgICB7IH0KKworICAgIHZvaWQg
ZHVtcCgpCisgICAgeworI2RlZmluZSBGT1JfRUFDSF9SRUdJU1RFUih2KSBcCisgICAgICAgIHYo
cmF4KSBcCisgICAgICAgIHYocmJ4KSBcCisgICAgICAgIHYocmN4KSBcCisgICAgICAgIHYocmR4
KSBcCisgICAgICAgIHYocmRpKSBcCisgICAgICAgIHYocnNpKSBcCisgICAgICAgIHYocmJwKSBc
CisgICAgICAgIHYocnNwKSBcCisgICAgICAgIHYocjgpIFwKKyAgICAgICAgdihyOSkgXAorICAg
ICAgICB2KHIxMCkgXAorICAgICAgICB2KHIxMSkgXAorICAgICAgICB2KHIxMikgXAorICAgICAg
ICB2KHIxMykgXAorICAgICAgICB2KHIxNCkgXAorICAgICAgICB2KHIxNSkgXAorICAgICAgICB2
KHJpcCkgXAorICAgICAgICB2KHJmbGFncykgXAorICAgICAgICB2KGNzKSBcCisgICAgICAgIHYo
ZnMpIFwKKyAgICAgICAgdihncykKKworI2RlZmluZSBEVU1QX1JFR0lTVEVSKF9fcmVnKSBcCisg
ICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcgIjogJXAiLCByZWludGVycHJldF9jYXN0PHZv
aWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcpKTsKKyAgICAgICAgRk9SX0VBQ0hfUkVHSVNU
RVIoRFVNUF9SRUdJU1RFUikKKyN1bmRlZiBGT1JfRUFDSF9SRUdJU1RFUgorICAgIH0KKworICAg
IG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIHZvaWQqIG1hY2hpbmVQQzsKKyAgICB2b2lkKiBz
dGFja1BvaW50ZXI7CisgICAgdm9pZCogZnJhbWVQb2ludGVyOworfTsKKworI2VsaWYgQ1BVKEFS
TTY0KQorCitzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CisgICAgU2lnbmFsQ29udGV4dChtY29udGV4
dF90JiBtY29udGV4dCkKKyAgICAgICAgOiBtY29udGV4dChtY29udGV4dCkKKyAgICAgICAgLCBt
YWNoaW5lUEMocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obWNvbnRleHQtPl9fc3MuX19wYykpCisg
ICAgICAgICwgc3RhY2tQb2ludGVyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5f
X3NzLl9fc3ApKQorICAgICAgICAsIGZyYW1lUG9pbnRlcihyZWludGVycHJldF9jYXN0PENhbGxG
cmFtZSo+KG1jb250ZXh0LT5fX3NzLl9fZnApKQorICAgIHsgfQorCisgICAgdm9pZCBkdW1wKCkK
KyAgICB7CisgICAgICAgIGludCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjg7IGkgKz0g
NCkgeworICAgICAgICAgICAgbG9nKCJ4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAx
NmxseCB4JWQ6ICUwMTZsbHgiLAorICAgICAgICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9f
eFtpXSwKKyAgICAgICAgICAgICAgICBpKzEsIG1jb250ZXh0LT5fX3NzLl9feFtpKzFdLAorICAg
ICAgICAgICAgICAgIGkrMiwgbWNvbnRleHQtPl9fc3MuX194W2krMl0sCisgICAgICAgICAgICAg
ICAgaSszLCBtY29udGV4dC0+X19zcy5fX3hbaSszXSk7CisgICAgICAgIH0KKyAgICAgICAgQVNT
RVJUKGkgPCAyOSk7CisgICAgICAgIGxvZygieCVkOiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxyOiAl
MDE2bGx4IiwKKyAgICAgICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtpXSwgbWNvbnRleHQt
Pl9fc3MuX19mcCwgbWNvbnRleHQtPl9fc3MuX19scik7CisgICAgICAgIGxvZygic3A6ICUwMTZs
bHggcGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCisgICAgICAgICAgICBtY29udGV4dC0+X19zcy5f
X3NwLCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29udGV4dC0+X19zcy5fX2Nwc3IpOworICAgIH0K
KworICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIHZvaWQqIG1hY2hpbmVQQzsKKyAgICB2
b2lkKiBzdGFja1BvaW50ZXI7CisgICAgdm9pZCogZnJhbWVQb2ludGVyOworfTsKKworI2Vsc2UK
Kworc3RydWN0IFNpZ25hbENvbnRleHQgeworICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYp
IHsgfQorICAgIAorICAgIHZvaWQgZHVtcCgpIHsgfQorICAgIAorICAgIHZvaWQqIG1hY2hpbmVQ
QzsKKyAgICB2b2lkKiBzdGFja1BvaW50ZXI7CisgICAgdm9pZCogZnJhbWVQb2ludGVyOworfTsK
KyAgICAKKyNlbmRpZgorCitzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0lsbEFjdGlvbjsKKworc3Rh
dGljIHZvaWQgaGFuZGxlQ3Jhc2goaW50LCBzaWdpbmZvX3QqLCB2b2lkKiB1YXApCit7CisgICAg
c2lnYWN0aW9uKFNJR0lMTCwgJm9sZFNpZ0lsbEFjdGlvbiwgbnVsbHB0cik7CisKKyAgICBTaWdu
YWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250
ZXh0KTsKKyAgICBTaWdpbGxDcmFzaEFuYWx5emVyJiBhbmFseXplciA9IGVuc3VyZVNpZ2lsbENy
YXNoQW5hbHl6ZXIoKTsKKyAgICBhbmFseXplci5hbmFseXplKGNvbnRleHQpOworfQorCitzdGF0
aWMgdm9pZCBpbml0aWFsaXplQ3Jhc2hIYW5kbGVyKCkKK3sKKyNpZiBDUFUoWDg2XzY0KSB8fCBD
UFUoQVJNNjQpCisgICAgc3RydWN0IHNpZ2FjdGlvbiBhY3Rpb247CisgICAgYWN0aW9uLnNhX3Np
Z2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAoKikoaW50LCBzaWdpbmZvX3QgKiwgdm9p
ZCAqKT4oaGFuZGxlQ3Jhc2gpOworICAgIHNpZ2ZpbGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAg
ICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZPOworICAgIHNpZ2FjdGlvbihTSUdJTEwsICZh
Y3Rpb24sICZvbGRTaWdJbGxBY3Rpb24pOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxl
Q3Jhc2gpOworI2VuZGlmCit9CisKKyNlbHNlIC8vIE9TKERBUldJTikKKworI2RlZmluZSBsb2co
Zm9ybWF0LCAuLi4pIGRvIHsgfSB3aGlsZSAoZmFsc2UpCisgICAgCitzdHJ1Y3QgU2lnbmFsQ29u
dGV4dCB7CisgICAgU2lnbmFsQ29udGV4dCgpIHsgfQorCisgICAgdm9pZCBkdW1wKCkgeyB9CisK
KyAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworICAgIHZvaWQq
IGZyYW1lUG9pbnRlcjsKK307CisKK3N0YXRpYyB2b2lkIGluaXRpYWxpemVDcmFzaEhhbmRsZXIo
KQoreworICAgIC8vIERvIG5vdGhpbmcuIE5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgcGxhdGZvcm0u
Cit9CisKKyNlbmRpZiAvLyBPUyhEQVJXSU4pCisKK1NpZ2lsbENyYXNoQW5hbHl6ZXImIGVuc3Vy
ZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKQoreworICAgIHN0YXRpYyBTaWdpbGxDcmFzaEFuYWx5emVy
KiBhbmFseXplcjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNh
bGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGluaXRpYWxpemVDcmFzaEhhbmRsZXIoKTsKKyAg
ICAgICAgYW5hbHl6ZXIgPSBuZXcgU2lnaWxsQ3Jhc2hBbmFseXplcjsKKyAgICB9KTsKKyAgICBy
ZXR1cm4gKmFuYWx5emVyOworfQorCit2b2lkIFNpZ2lsbENyYXNoQW5hbHl6ZXI6OmFuYWx5emUo
U2lnbmFsQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBsb2coIkJFR0lOIFNJR0lMTCBhbmFseXNp
cyIpOworCisgICAgWyZdICgpIHsKKyAgICAgICAgLy8gRmlyc3QsIGR1bXAgdGhlIHNpZ25hbCBj
b250ZXh0IGluZm8gc28gdGhhdCB3ZSdsbCBhdCBsZWFzdCBoYXZlIHRoZSBzYW1lIGluZm8KKyAg
ICAgICAgLy8gdGhhdCB0aGUgZGVmYXVsdCBjcmFzaCBoYW5kbGVyIHdvdWxkIGdpdmVuIHVzIGlu
IGNhc2UgdGhpcyBjcmFzaCBhbmFseXplcgorICAgICAgICAvLyBpdHNlbGYgY3Jhc2hlcy4KKyAg
ICAgICAgY29udGV4dC5kdW1wKCk7CisKKyAgICAgICAgVk1JbnNwZWN0b3ImIGluc3BlY3RvciA9
IFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpOworCisgICAgICAgIC8vIFVzZSBhIHRpbWVvdXQgcGVy
aW9kIG9mIDIgc2Vjb25kcy4gVGhlIGNsaWVudCBpcyBhYm91dCB0byBjcmFzaCwgYW5kIHdlIGRv
bid0CisgICAgICAgIC8vIHdhbnQgdG8gdHVybiB0aGUgY3Jhc2ggaW50byBhIGhhbmcgYnkgcmUt
dHJ5aW5nIHRoZSBsb2NrIGZvciB0b28gbG9uZy4KKyAgICAgICAgYXV0byBleHBlY3RlZExvY2tU
b2tlbiA9IGluc3BlY3Rvci5sb2NrKDIpOworICAgICAgICBpZiAoIWV4cGVjdGVkTG9ja1Rva2Vu
KSB7CisgICAgICAgICAgICBBU1NFUlQoZXhwZWN0ZWRMb2NrVG9rZW4uZXJyb3IoKSA9PSBWTUlu
c3BlY3Rvcjo6RXJyb3I6OlRpbWVkT3V0KTsKKyAgICAgICAgICAgIGxvZygiRVJST1I6IFVuYWJs
ZSB0byBhbmFseXplIFNJR0lMTC4gVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgdG8gaXRlcmF0ZSBW
TXMuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0byBsb2Nr
VG9rZW4gPSBleHBlY3RlZExvY2tUb2tlbi52YWx1ZSgpOworCisgICAgICAgIHZvaWQqIHBjID0g
Y29udGV4dC5tYWNoaW5lUEM7CisgICAgICAgIGF1dG8gaXNJbkpJVE1lbW9yeSA9IGluc3BlY3Rv
ci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShsb2NrVG9rZW4sIHBjKTsKKyAgICAgICAgaWYgKCFp
c0luSklUTWVtb3J5KSB7CisgICAgICAgICAgICBsb2coIkVSUk9SOiBUaW1lZCBvdXQ6IG5vdCBh
YmxlIHRvIGRldGVybWluZSBpZiBwYyAlcCBpcyBpbiB2YWxpZCBKSVQgZXhlY3V0YWJsZSBtZW1v
cnkiLCBwYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFp
c0luSklUTWVtb3J5LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGxvZygicGMgJXAgaXMgTk9UIGlu
IHZhbGlkIEpJVCBleGVjdXRhYmxlIG1lbW9yeSIsIHBjKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBsb2coInBjICVwIGlzIGluIHZhbGlkIEpJVCBleGVjdXRhYmxl
IG1lbW9yeSIsIHBjKTsKKworI2lmIENQVShBUk02NCkKKyAgICAgICAgc2l6ZV90IHBjQXNTaXpl
ID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHBjKTsKKyAgICAgICAgaWYgKHBjQXNTaXplICE9
IHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQzMl90KT4ocGNBc1NpemUpKSB7CisgICAg
ICAgICAgICBsb2coInBjICVwIGlzIE5PVCBwcm9wZXJseSBhbGlnbmVkIiwgcGMpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2Uga25vdyBpdCdzIHNhZmUg
dG8gcmVhZCB0aGUgd29yZCBhdCB0aGUgUEMgYmVjYXVzZSB3ZSdyZSBoYW5kbGluZyBhIFNJR0lM
TC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBoYXZlIGNyYXNoZWQgd2l0aCBhIFNJ
R0JVUyBpbnN0ZWFkLgorICAgICAgICB1aW50MzJfdCB3b3JkQXRQQyA9ICpyZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4ocGMpOworICAgICAgICBsb2coImluc3RydWN0aW9uIGJpdHMgYXQgcGMg
JXAgaXM6IDB4JTA4eCIsIHBjLCB3b3JkQXRQQyk7CisjZW5kaWYKKworICAgICAgICBhdXRvIGV4
cGVjdGVkQ29kZUJsb2NrID0gaW5zcGVjdG9yLmNvZGVCbG9ja0Zvck1hY2hpbmVQQyhsb2NrVG9r
ZW4sIHBjKTsKKyAgICAgICAgaWYgKCFleHBlY3RlZENvZGVCbG9jaykgeworICAgICAgICAgICAg
aWYgKGV4cGVjdGVkQ29kZUJsb2NrLmVycm9yKCkgPT0gVk1JbnNwZWN0b3I6OkVycm9yOjpUaW1l
ZE91dCkKKyAgICAgICAgICAgICAgICBsb2coIkVSUk9SOiBUaW1lZCBvdXQ6IG5vdCBhYmxlIHRv
IGRldGVybWluZSBpZiBwYyAlcCBpcyBpbiBhIHZhbGlkIENvZGVCbG9jayIsIHBjKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2coIlRoZSBjdXJyZW50IHRocmVhZCBkb2Vz
IG5vdCBvd24gYW55IFZNIEpTTG9jayIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhwZWN0ZWRDb2RlQmxvY2sudmFsdWUo
KTsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIGxvZygibWFjaGluZSBQ
QyAlcCBkb2VzIG5vdCBiZWxvbmcgdG8gYW55IENvZGVCbG9jayBpbiB0aGUgY3VycmVudGx5IGVu
dGVyZWQgVk0iLCBwYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBsb2coInBjICVwIGJlbG9uZ3MgdG8gQ29kZUJsb2NrICVwIG9mIHR5cGUgJXMiLCBwYywgY29k
ZUJsb2NrLCBKSVRDb2RlOjp0eXBlTmFtZShjb2RlQmxvY2stPmppdFR5cGUoKSkpOworCisgICAg
ICAgIGR1bXBDb2RlQmxvY2soY29kZUJsb2NrLCBwYyk7CisgICAgfSAoKTsKKworICAgIGxvZygi
RU5EIFNJR0lMTCBhbmFseXNpcyIpOworfQorCit2b2lkIFNpZ2lsbENyYXNoQW5hbHl6ZXI6OmR1
bXBDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZvaWQqIG1hY2hpbmVQQykKK3sKKyNp
ZiBDUFUoQVJNNjQpCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgp
LmdldCgpOworCisgICAgLy8gRHVtcCB0aGUgcmF3IGJpdHMgb2YgdGhlIGNvZGUuCisgICAgdWlu
dDMyX3QqIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGppdENvZGUtPnN0YXJ0
KCkpOworICAgIHVpbnQzMl90KiBlbmQgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oaml0
Q29kZS0+ZW5kKCkpOworICAgIGxvZygiSklUQ29kZSAlcCBbJXAtJXBdOiIsIGppdENvZGUsIHN0
YXJ0LCBlbmQpOworICAgIGlmIChzdGFydCA8IGVuZCkgeworICAgICAgICB1aW50MzJfdCogcCA9
IHN0YXJ0OworICAgICAgICB3aGlsZSAocCArIDggPD0gZW5kKSB7CisgICAgICAgICAgICBsb2co
IlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCIsIHAsIHAr
NywgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSwgcFs3XSk7CisgICAg
ICAgICAgICBwICs9IDg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHAgKyA3IDw9IGVuZCkKKyAg
ICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4
eCIsIHAsIHArNiwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSk7Cisg
ICAgICAgIGVsc2UgaWYgKHAgKyA2IDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTog
JTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHgiLCBwLCBwKzUsIHBbMF0sIHBbMV0sIHBbMl0s
IHBbM10sIHBbNF0sIHBbNV0pOworICAgICAgICBlbHNlIGlmIChwICsgNSA8PSBlbmQpCisgICAg
ICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArNCwg
cFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSk7CisgICAgICAgIGVsc2UgaWYgKHAgKyA0IDw9
IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAlMDh4ICUwOHggJTA4eCIsIHAs
IHArMywgcFswXSwgcFsxXSwgcFsyXSwgcFszXSk7CisgICAgICAgIGlmIChwICsgMyA8PSBlbmQp
CisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4IiwgcCwgcCsyLCBwWzBd
LCBwWzFdLCBwWzJdKTsKKyAgICAgICAgZWxzZSBpZiAocCArIDIgPD0gZW5kKQorICAgICAgICAg
ICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHgiLCBwLCBwKzEsIHBbMF0sIHBbMV0pOworICAgICAg
ICBlbHNlIGlmIChwICsgMSA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHgi
LCBwLCBwLCBwWzBdKTsKKyAgICB9CisKKyAgICAvLyBEdW1wIHRoZSBkaXNhc3NlbWJseSBvZiB0
aGUgY29kZS4KKyAgICBsb2coIkRpc2Fzc2VtYmx5OiIpOworICAgIHVpbnQzMl90KiBjdXJyZW50
UEMgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oaml0Q29kZS0+ZXhlY3V0YWJsZUFkZHJl
c3MoKSk7CisgICAgc2l6ZV90IGJ5dGVDb3VudCA9IGppdENvZGUtPnNpemUoKTsKKyAgICB3aGls
ZSAoYnl0ZUNvdW50KSB7CisgICAgICAgIGNoYXIgcGNTdHJpbmdbMjRdOworICAgICAgICBpZiAo
Y3VycmVudFBDID09IG1hY2hpbmVQQykgeworICAgICAgICAgICAgc25wcmludGYocGNTdHJpbmcs
IHNpemVvZihwY1N0cmluZyksICIqIDB4JWx4IiwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs
b25nPihjdXJyZW50UEMpKTsKKyAgICAgICAgICAgIGxvZygiJTIwczogJXMgICAgPD09PT09PT09
PT09PT09PT09PT09PT09PT0iLCBwY1N0cmluZywgYXJtNjRPcGNvZGUuZGlzYXNzZW1ibGUoY3Vy
cmVudFBDKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbnByaW50ZihwY1N0cmlu
Zywgc2l6ZW9mKHBjU3RyaW5nKSwgIjB4JWx4IiwgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBs
b25nPihjdXJyZW50UEMpKTsKKyAgICAgICAgICAgIGxvZygiJTIwczogJXMiLCBwY1N0cmluZywg
YXJtNjRPcGNvZGUuZGlzYXNzZW1ibGUoY3VycmVudFBDKSk7CisgICAgICAgIH0KKyAgICAgICAg
Y3VycmVudFBDKys7CisgICAgICAgIGJ5dGVDb3VudCAtPSBzaXplb2YodWludDMyX3QpOworICAg
IH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNvZGVCbG9jayk7CisgICAgVU5VU0VEX1BBUkFN
KG1hY2hpbmVQQyk7CisgICAgLy8gTm90IGltcGxlbWVudGVkIHlldC4KKyNlbmRpZgorfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdp
bGxDcmFzaEFuYWx5emVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFNpZ2lsbENyYXNoQW5h
bHl6ZXI7CisKK1NpZ2lsbENyYXNoQW5hbHl6ZXImIGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIo
KTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvVk1JbnNwZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9WTUluc3BlY3Rvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJWTUluc3BlY3Rvci5oIgorCisjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0LmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMu
aCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYv
RXhwZWN0ZWQuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1ZNSW5zcGVjdG9yJiBWTUluc3BlY3Rv
cjo6aW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBWTUluc3BlY3RvciogbWFuYWdlcjsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7
CisgICAgICAgIG1hbmFnZXIgPSBuZXcgVk1JbnNwZWN0b3IoKTsKKyAgICB9KTsKKyAgICByZXR1
cm4gKm1hbmFnZXI7Cit9CisKK3ZvaWQgVk1JbnNwZWN0b3I6OmFkZChWTSogdm0pCit7CisgICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAgIG1fbGlzdC5hcHBlbmQodm0pOwor
fQorCit2b2lkIFZNSW5zcGVjdG9yOjpyZW1vdmUoVk0qIHZtKQoreworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBtX2xpc3QucmVtb3ZlKHZtKTsKK30KKworYXV0byBW
TUluc3BlY3Rvcjo6bG9jayh1bnNpZ25lZCB0aW1lb3V0SW5TZWNvbmRzKSAtPiBFeHBlY3RlZDxM
b2NrVG9rZW4sIEVycm9yPgoreworICAgIC8vIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBm
cm9tIGEgc2lnbmFsIGhhbmRsZXIgKGUuZy4gdmlhIHZpc2l0KCkpLiBIZW5jZSwKKyAgICAvLyBp
dCBzaG91bGQgb25seSB1c2UgQVBJcyB0aGF0IGFyZSBzYWZlIHRvIGNhbGwgZnJvbSBzaWduYWwg
aGFuZGxlcnMuIFRoaXMgaXMKKyAgICAvLyB3aHkgd2UgdXNlIHVuaXN0ZC5oJ3Mgc2xlZXAoKSBp
bnN0ZWFkIG9mIGl0cyBhbHRlcm5hdGl2ZXMuCisKKyAgICB1bnNpZ25lZCBtYXhSZXRyaWVzID0g
dGltZW91dEluU2Vjb25kczsgLy8gc2luY2Ugc2Vjb25kc1BlclNsZWVwID09IDEuCisKKyAgICBi
b29sIGxvY2tlZCA9IG1fbG9jay50cnlMb2NrKCk7CisgICAgdW5zaWduZWQgdHJ5Q291bnQgPSAw
OworICAgIHdoaWxlICghbG9ja2VkICYmIHRyeUNvdW50IDw9IG1heFJldHJpZXMpIHsKKyAgICAg
ICAgLy8gV2Ugd2FudCB0aGUgdmVyc2lvbiBvZiBzbGVlcCBmcm9tIHVuaXN0ZC5oLiBDYXN0IHRv
IGRpc2FtYmlndWF0ZS4KKyAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkICgqKSh1bnNpZ25l
ZCk+KHNsZWVwKSkoMSk7CisgICAgICAgIGxvY2tlZCA9IG1fbG9jay50cnlMb2NrKCk7CisgICAg
fQorCisgICAgaWYgKCFsb2NrZWQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJv
cjo6VGltZWRPdXQpOworICAgIHJldHVybiBMb2NrVG9rZW46OkxvY2tlZFZhbHVlOworfQorCitz
dGF0aWMgYm9vbCBlbnN1cmVJc1NhZmVUb0xvY2soTG9jayYgbG9jaykKK3sKKyAgICB1bnNpZ25l
ZCBtYXhSZXRyaWVzID0gMjsKKyAgICB1bnNpZ25lZCB0cnlDb3VudCA9IDA7CisgICAgd2hpbGUg
KHRyeUNvdW50IDw9IG1heFJldHJpZXMpIHsKKyAgICAgICAgYm9vbCBzdWNjZXNzID0gbG9jay50
cnlMb2NrKCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICBsb2NrLnVubG9j
aygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgdHJ5Q291
bnQrKzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfTsKKworYXV0byBWTUluc3BlY3Rvcjo6
aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoVk1JbnNwZWN0b3I6OkxvY2tUb2tlbiwgdm9pZCogbWFj
aGluZVBDKSAtPiBFeHBlY3RlZDxib29sLCBFcnJvcj4KK3sKKyAgICBib29sIGZvdW5kID0gZmFs
c2U7CisgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7CisgICAgaXRlcmF0ZShbJl0gKFZNJiB2
bSkgLT4gRnVuY3RvclN0YXR1cyB7CisgICAgICAgIGF1dG8gYWxsb2NhdG9yID0gdm0uZXhlY3V0
YWJsZUFsbG9jYXRvcjsKKyAgICAgICAgYXV0byYgbG9jayA9IGFsbG9jYXRvci5nZXRMb2NrKCk7
CisKKyAgICAgICAgYm9vbCBpc1NhZmVUb0xvY2sgPSBlbnN1cmVJc1NhZmVUb0xvY2sobG9jayk7
CisgICAgICAgIGlmICghaXNTYWZlVG9Mb2NrKSB7CisgICAgICAgICAgICBoYXNUaW1lb3V0ID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsgLy8gU2tp
cCB0aGlzIFZNLgorICAgICAgICB9CisKKyAgICAgICAgTG9ja0hvbGRlciBleGVjdXRhYmxlQWxs
b2NhdG9yTG9ja2VyKGxvY2spOworICAgICAgICBpZiAoYWxsb2NhdG9yLmlzVmFsaWRFeGVjdXRh
YmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIsIG1hY2hpbmVQQykpIHsKKyAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpE
b25lOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsK
KyAgICB9KTsKKworICAgIGlmICghZm91bmQgJiYgaGFzVGltZW91dCkKKyAgICAgICAgcmV0dXJu
IG1ha2VVbmV4cGVjdGVkKEVycm9yOjpUaW1lZE91dCk7CisgICAgcmV0dXJuIGZvdW5kOworfQor
CithdXRvIFZNSW5zcGVjdG9yOjpjb2RlQmxvY2tGb3JNYWNoaW5lUEMoVk1JbnNwZWN0b3I6Okxv
Y2tUb2tlbiwgdm9pZCogbWFjaGluZVBDKSAtPiBFeHBlY3RlZDxDb2RlQmxvY2sqLCBFcnJvcj4K
K3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7CisgICAgYm9vbCBoYXNUaW1l
b3V0ID0gZmFsc2U7CisgICAgaXRlcmF0ZShbJl0gKFZNJiB2bSkgeworICAgICAgICBpZiAoIXZt
LmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKQorICAgICAgICAgICAgcmV0
dXJuIEZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOworCisgICAgICAgIC8vIEhlYXA6OmZvckVhY2hD
b2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5zKCkgdXNlcyBDb2RlQmxvY2tTZXQ6Oml0ZXJhdGUoKSwg
YW5kCisgICAgICAgIC8vIENvZGVCbG9ja1NldDo6aXRlcmF0ZSgpIG5lZWRzIHRvIGJlIGFibGUg
dG8gYWNxdWlyZSBpdHMgbG9jay4gTWFrZSBzdXJlIGl0J3MKKyAgICAgICAgLy8gc2FmZSB0byBw
cm9jZWVkIHdpdGggY2FsbGluZyBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucygpLgor
ICAgICAgICBhdXRvJiBsb2NrID0gdm0uaGVhcC5jb2RlQmxvY2tTZXQoKS5nZXRMb2NrKCk7Cisg
ICAgICAgIGJvb2wgaXNTYWZlVG9Mb2NrID0gZW5zdXJlSXNTYWZlVG9Mb2NrKGxvY2spOworICAg
ICAgICBpZiAoIWlzU2FmZVRvTG9jaykgeworICAgICAgICAgICAgaGFzVGltZW91dCA9IHRydWU7
CisgICAgICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1czo6Q29udGludWU7IC8vIFNraXAgdGhp
cyBWTS4KKyAgICAgICAgfQorCisgICAgICAgIHZtLmhlYXAuZm9yRWFjaENvZGVCbG9ja0lnbm9y
aW5nSklUUGxhbnMoWyZdIChDb2RlQmxvY2sqIGNiKSB7CisgICAgICAgICAgICBKSVRDb2RlKiBq
aXRDb2RlID0gY2ItPmppdENvZGUoKS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghaml0Q29kZSkg
eworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjb2RlQmxvY2sgaXMgYSByZXBsYWNlbWVudCBj
b2RlQmxvY2sgd2hpY2ggaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcKKyAgICAgICAgICAgICAg
ICAvLyBjb21waWxlZCwgaXRzIGppdENvZGUgd2lsbCBiZSBudWxsLCBhbmQgd2UgY2FuIGRpc3Jl
Z2FyZCBpdCBhcyBhIG1hdGNoIGZvcgorICAgICAgICAgICAgICAgIC8vIHRoZSBtYWNoaW5lUEMg
d2UncmUgc2VhcmNoaW5nIGZvci4KKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghSklUQ29kZTo6aXNKSVQoaml0Q29kZS0+aml0
VHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlm
IChqaXRDb2RlLT5jb250YWlucyhtYWNoaW5lUEMpKSB7CisgICAgICAgICAgICAgICAgY29kZUJs
b2NrID0gY2I7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0pOworICAgICAgICBpZiAoY29kZUJs
b2NrKQorICAgICAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkRvbmU7CisgICAgICAgIHJl
dHVybiBGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsKKyAgICB9KTsKKworICAgIGlmICghY29kZUJs
b2NrICYmIGhhc1RpbWVvdXQpCisgICAgICAgIHJldHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6
VGltZWRPdXQpOworICAgIHJldHVybiBjb2RlQmxvY2s7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiVk0uaCIKKyNpbmNs
dWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBWTUluc3Bl
Y3RvciB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBFcnJvciB7CisgICAgICAgIE5vbmUsCisg
ICAgICAgIFRpbWVkT3V0CisgICAgfTsKKworICAgIGVudW0gY2xhc3MgTG9ja1Rva2VuIHsgTG9j
a2VkVmFsdWUgfTsKKworICAgIHN0YXRpYyBWTUluc3BlY3RvciYgaW5zdGFuY2UoKTsKKworICAg
IHZvaWQgYWRkKFZNKik7CisgICAgdm9pZCByZW1vdmUoVk0qKTsKKworICAgIEV4cGVjdGVkPExv
Y2tUb2tlbiwgRXJyb3I+IGxvY2sodW5zaWduZWQgdGltZW91dCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8dW5zaWduZWQ+OjptYXgoKSk7CisKKyAgICBFeHBlY3RlZDxib29sLCBFcnJvcj4gaXNWYWxp
ZEV4ZWN1dGFibGVNZW1vcnkoTG9ja1Rva2VuLCB2b2lkKik7CisgICAgRXhwZWN0ZWQ8Q29kZUJs
b2NrKiwgRXJyb3I+IGNvZGVCbG9ja0Zvck1hY2hpbmVQQyhMb2NrVG9rZW4sIHZvaWQqKTsKKwor
cHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEZ1bmN0b3JTdGF0dXMgeworICAgICAgICBDb250aW51
ZSwKKyAgICAgICAgRG9uZQorICAgIH07CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9y
IChWTSogdm0gPSBtX2xpc3QuaGVhZCgpOyB2bTsgdm0gPSB2bS0+bmV4dCgpKSB7CisgICAgICAg
ICAgICBGdW5jdG9yU3RhdHVzIHN0YXR1cyA9IGZ1bmN0b3IoKnZtKTsKKyAgICAgICAgICAgIGlm
IChzdGF0dXMgPT0gRnVuY3RvclN0YXR1czo6RG9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2NrIG1fbG9jazsKKyAgICBEb3VibHlMaW5rZWRM
aXN0PFZNPiBtX2xpc3Q7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9X
VEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMTEzMDEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEzIEBACisyMDE3LTAyLTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKwor
ICAgICAgICBBZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lH
SUxMcyBlYXNpZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjc3MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL1N0ZExpYkV4dHJh
cy5oOgorCiAyMDE3LTAxLTI2ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIEhhcmRlbiBob3cgdGhlIGNvbXBpbGVyIHJlZmVyZW5jZXMgR0Mgb2JqZWN0cwpJbmRl
eDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9XVEYvd3Rm
L1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDcgQEAgdXNpbmcg
V1RGOjppc0NvbXBpbGF0aW9uVGhyZWFkOwogdXNpbmcgV1RGOjppc1BvaW50ZXJBbGlnbmVkOwog
dXNpbmcgV1RGOjppc1N0YXRlbGVzc0xhbWJkYTsKIHVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7
Cit1c2luZyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y7CiB1c2luZyBXVEY6OnNhZmVDYXN0Owog
dXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFyY2g7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300389</attachid>
            <date>2017-02-01 22:58:22 -0800</date>
            <delta_ts>2017-02-02 15:13:28 -0800</delta_ts>
            <desc>proposed patch: with another windows fix.</desc>
            <filename>bug-167714.patch</filename>
            <type>text/plain</type>
            <size>41778</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNTM4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBA
CisyMDE3LTAyLTAxICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNp
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGlzIG9ubHkgZm9yIFg4Nl82NCBhbmQgQVJNNjQgb24gT1MoREFSV0lOKS4gIFRoZQorICAgICAg
ICBhbmFseXplciBpcyBub3QgZW5hYmxlZCBmb3IgYWxsIG90aGVyIHBvcnRzLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAg
ICAgICAgKEpTQzo6QVJNNjRBc3NlbWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk02NDo6aWxsZWdhbEluc3RydWN0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJY
ODZDb21tb246OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpYODZBc3NlbWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlv
bik6CisgICAgICAgICogaGVhcC9IZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFj
aENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnNJbXBsKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoK
KyAgICAgICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVh
Y2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMu
Y3BwOgorICAgICAgICAoSlNDOjpPcHRpb25zOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChKU0M6
OnJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5o
OgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAg
ICAgICAoSlNDOjpWTTo6flZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICog
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaWdu
YWxDb250ZXh0OjpTaWduYWxDb250ZXh0KToKKyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OmhhbmRsZUNyYXNoKToKKyAgICAgICAgKEpTQzo6aW5pdGlh
bGl6ZUNyYXNoSGFuZGxlcik6CisgICAgICAgIChKU0M6OmVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6
ZXIpOgorICAgICAgICAoSlNDOjpTaWdpbGxDcmFzaEFuYWx5emVyOjphbmFseXplKToKKyAgICAg
ICAgKEpTQzo6U2lnaWxsQ3Jhc2hBbmFseXplcjo6ZHVtcENvZGVCbG9jayk6CisgICAgICAgICog
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5oOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9WTUlu
c3BlY3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6aW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6Vk1JbnNw
ZWN0b3I6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OmVuc3VyZUlzU2FmZVRvTG9jayk6CisgICAg
ICAgICogdG9vbHMvVk1JbnNwZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVj
dG9yOjppdGVyYXRlKToKKwogMjAxNy0wMi0wMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IFVzZSBndWFyYW50ZWVkIFJ1bkxv
b3AgaW5zdGVhZCBvZiBSdW5Mb29wOjpjdXJyZW50IGZvciBkaXNwYXRjaGluZyBpbnNwZWN0b3Ig
R0MgZXZlbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9u
IDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtOTA3LDYgKzkwNyw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAg
ICAgdG9vbHMvRnVuY3Rpb25XaGl0ZWxpc3QuY3BwCiAgICAgdG9vbHMvSlNEb2xsYXJWTS5jcHAK
ICAgICB0b29scy9KU0RvbGxhclZNUHJvdG90eXBlLmNwcAorICAgIHRvb2xzL1NpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwCisgICAgdG9vbHMvVk1JbnNwZWN0b3IuY3BwCiAKICAgICB3YXNtL0pTV2Vi
QXNzZW1ibHkuY3BwCiAgICAgd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMjMzMiw2ICsyMzMyLDEwIEBACiAJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQz
MCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEZFMjBDRTlCMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCAqLzsg
fTsKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERG
MzQzMCAvKiBMTEludENMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkUyRTZBN0IxRDZFQTYyQzAwNjBGODk2IC8qIFRocm93U2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyRTZBN0Ex
RDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovOyB9OworCQlGRTMwMjJEMjFFM0Q3
M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyog
U2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi87IH07CisJCUZFMzAyMkQzMUUzRDczQTUwMEJBQzQ5
MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEMTFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hB
bmFseXplci5oICovOyB9OworCQlGRTMwMjJENjFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUz
MDIyRDQxRTQyODU2NzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKKwkJRkUzMDIy
RDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1J
bnNwZWN0b3IuaCAqLzsgfTsKIAkJRkUzMThGREYxQ0FDOTgyNzAwREZDQzU0IC8qIEVDTUFTY3Jp
cHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRkUzMThGREQxQ0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRT
cGVjSW50ZXJuYWxGdW5jdGlvbnMuY3BwICovOyB9OwogCQlGRTMxOEZFMDFDQUM5ODJGMDBERkND
NTQgLyogRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMThGREUxQ0FDOEM1MzAwREZDQzU0IC8q
IEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaCAqLzsgfTsKIAkJRkUzNDIyMTIxRDZC
ODFDMzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEZFMzQyMjExMUQ2QjgxOEMwMDMyQkU4OCAvKiBUaHJvd1Njb3Bl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ4
NzEsNiArNDg3NSwxMCBAQAogCQlGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMTEludENMb29wLmNw
cDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludENMb29wLmg7IHBhdGggPSBsbGludC9MTEludENM
b29wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFMkU2QTdBMUQ2RUE1RkUwMDYw
Rjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFRocm93U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJE
MDFFM0Q3Mzk2MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2ls
bENyYXNoQW5hbHl6ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2lnaWxs
Q3Jhc2hBbmFseXplci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJENDFF
NDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlGRTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRkUzMThGREQxQ0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50
ZXJuYWxGdW5jdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUZFMzE4RkRFMUNBQzhDNTMwMERGQ0M1NCAvKiBFQ01BU2NyaXB0U3BlY0ludGVy
bmFsRnVuY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVDTUFTY3Jp
cHRTcGVjSW50ZXJuYWxGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUzNDIyMTExRDZCODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGhyb3dTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtNjgwOSw4ICs2ODE3LDEyIEBACiAJCQkJRkUzODRFRTIxQUREQjdBRDAwNTVERTJDIC8q
IEpTRG9sbGFyVk0uaCAqLywKIAkJCQlGRTM4NEVFMzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xs
YXJWTVByb3RvdHlwZS5jcHAgKi8sCiAJCQkJRkUzODRFRTQxQUREQjdBRDAwNTVERTJDIC8qIEpT
RG9sbGFyVk1Qcm90b3R5cGUuaCAqLywKKwkJCQlGRTMwMjJEMDFFM0Q3Mzk2MDBCQUM0OTMgLyog
U2lnaWxsQ3Jhc2hBbmFseXplci5jcHAgKi8sCisJCQkJRkUzMDIyRDExRTNENzM5NjAwQkFDNDkz
IC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCAqLywKIAkJCQk4NkI1ODIyQzE0RDIyRjVGMDBBOUMz
MDYgLyogUHJvZmlsZVRyZWVOb2RlLmggKi8sCiAJCQkJODZCNTgyNkExNEQzNUQ1MTAwQTlDMzA2
IC8qIFRpZXJlZE1NYXBBcnJheS5oICovLAorCQkJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAv
KiBWTUluc3BlY3Rvci5jcHAgKi8sCisJCQkJRkUzMDIyRDUxRTQyODU2NzAwQkFDNDkzIC8qIFZN
SW5zcGVjdG9yLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IHRvb2xzOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTg3OTQsNiArODgwNiw3IEBACiAJCQkJRkUzOTEzNTYxQjc5NEY4RjAw
RURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MERFOUEwOTFC
RTdENjlFMDA1RDg5RDkgLyogTExJbnRBc3NlbWJseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
RkM0NUExNEJEMTVGNTAwQjgxMTU0IC8qIExMSW50Q2FsbExpbmtJbmZvLmggaW4gSGVhZGVycyAq
LywKKwkJCQlGRTMwMjJEMzFFM0Q3M0E1MDBCQUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENBMTRCQkIxNkMwMEJGRTI3MiAvKiBMTElu
dENvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDMxNEJCRDE2NzAwQkZFMjcyIC8q
IExMSW50RGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODUwLDYgKzg4NjMsNyBAQAogCQkJCTE0
NzM0MUQ2MURDMDJFQjkwMEFBMjlCQSAvKiBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc5RDNFRDlDNTA2NEREMEE4NDY2QTNBIC8qIE1vZHVsZVNjb3BlRGF0
YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBNzYyMDcxREI5MjQzMzAwQjdBMkZEIC8qIE11dGF0
b3JTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8q
IFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjky
OTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5
MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDczNDFEMDFEQzAyREI0MDBBQTI5QkEgLyogTmF0aXZlRXhlY3V0YWJsZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05NzEwLDYgKzk3MjQsNyBAQAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYw
MDU2MDlEOSAvKiBBbGxvY2F0b3JBdHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc5QTIyODM1MUQzNUQ3MUUwMEQ4RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJRkUzMDIyRDYxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyog
QVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1
MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDA2LDYg
KzEwNDIxLDcgQEAKIAkJCQk3OUIwMENCRTFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzkxNjBEQkQxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5
UmV2b2tlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAv
KiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzMDIyRDIxRTNENzNBNTAw
QkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNw
YWNlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk02NEFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMDg0LDYgKzEwODQsMTIgQEAgcHVibGljOgogICAgICAgICBpbnNuKGV4
Y2VwbkdlbmVyYXRpb24oRXhjZXBuT3BfSEFMVCwgaW1tLCAwKSk7CiAgICAgfQogCisgICAgLy8g
T25seSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0
aW9uKCkKKyAgICB7CisgICAgICAgIGluc24oMHgwKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxp
bnQgZGF0YXNpemU+CiAgICAgQUxXQVlTX0lOTElORSB2b2lkIGxkcChSZWdpc3RlcklEIHJ0LCBS
ZWdpc3RlcklEIHJ0MiwgUmVnaXN0ZXJJRCBybiwgUGFpclBvc3RJbmRleCBzaW1tKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02
NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk02NC5oCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTQ0MSw2ICs0NDEsMTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5j
bHo8NjQ+KGRlc3QsIGRlc3QpOwogICAgIH0KIAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGlu
ZyBwdXJwb3Nlcy4KKyAgICB2b2lkIGlsbGVnYWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5pbGxlZ2FsSW5zdHJ1Y3Rpb24oKTsKKyAgICB9CisKICAgICB2b2lkIGxz
aGlmdDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewogICAgICAgICBtX2Fzc2VtYmxlci5sc2w8MzI+KGRlc3QsIHNyYywgc2hp
ZnRBbW91bnQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMjExMzAxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OCwgMjAxNC0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOCwgMjAxNC0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzI3LDYgKzMyNywxMiBAQCBwdWJsaWM6
CiAgICAgICAgIGN0ekFmdGVyQnNmPDMyPihkc3QpOwogICAgIH0KIAorICAgIC8vIE9ubHkgdXNl
ZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2b2lkIGlsbGVnYWxJbnN0cnVjdGlvbigpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbGxlZ2FsSW5zdHJ1Y3Rpb24oKTsKKyAgICB9Cisg
ICAgCiAgICAgdm9pZCBsc2hpZnQzMihSZWdpc3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKICAgICAgICAgaWYgKHNoaWZ0X2Ftb3VudCA9PSBYODZSZWdpc3RlcnM6
OmVjeCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3Nl
bWJsZXIuaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9YODZBc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1OSw2
ICsyNTksNyBAQCBwcml2YXRlOgogICAgIH0gT25lQnl0ZU9wY29kZUlEOwogCiAgICAgdHlwZWRl
ZiBlbnVtIHsKKyAgICAgICAgT1AyX1VEMiAgICAgICAgICAgICA9IDB4QiwKICAgICAgICAgT1Ay
X01PVlNEX1ZzZFdzZCAgICA9IDB4MTAsCiAgICAgICAgIE9QMl9NT1ZTRF9Xc2RWc2QgICAgPSAw
eDExLAogICAgICAgICBPUDJfTU9WU1NfVnNkV3NkICAgID0gMHgxMCwKQEAgLTY4MSw2ICs2ODIs
MTIgQEAgcHVibGljOgogICAgIH0KICNlbmRpZiAvLyBDUFUoWDg2XzY0KQogCisgICAgLy8gT25s
eSB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9u
KCkKKyAgICB7CisgICAgICAgIG1fZm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfVUQyKTsKKyAgICB9
CisKICAgICB2b2lkIGluY19yKFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3Jt
YXR0ZXIub25lQnl0ZU9wKE9QX0dST1VQNV9FdiwgR1JPVVAxX09QX0FERCwgZHN0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAyNSw2
ICsyMDI1LDExIEBAIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAg
ICByZXR1cm4gbV9jb2RlQmxvY2tzLT5pdGVyYXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OmZv
ckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9v
bChDb2RlQmxvY2sqKT4mIGZ1bmMpCit7CisgICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0
ZShmdW5jKTsKK30KKwogdm9pZCBIZWFwOjp3cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0Nl
bGwqIGZyb20pCiB7CiAgICAgaWYgKFVOTElLRUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkg
ewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjExMzAxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUs
NiArMjI1LDcgQEAgcHVibGljOgogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IHZvaWQgZm9yRWFjaFByb3RlY3RlZENlbGwoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaENvZGVCbG9jayhjb25zdCBGdW5jdG9yJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ29kZUJsb2NrSWdu
b3JpbmdKSVRQbGFucyhjb25zdCBGdW5jdG9yJik7CiAKICAgICBIYW5kbGVTZXQqIGhhbmRsZVNl
dCgpIHsgcmV0dXJuICZtX2hhbmRsZVNldDsgfQogICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFj
aygpIHsgcmV0dXJuICZtX2hhbmRsZVN0YWNrOyB9CkBAIC00NzAsNiArNDcxLDcgQEAgcHJpdmF0
ZToKICAgICBzaXplX3QgdGhyZWFkQnl0ZXNWaXNpdGVkKCk7CiAgICAgCiAgICAgdm9pZCBmb3JF
YWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mKTsK
KyAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5zSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mKTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JT
aG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2aXNpb24gMjExMzAxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3
MywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiBpbmxpbmUgdm9pZCBICiAgICAgZm9y
RWFjaENvZGVCbG9ja0ltcGwoc2NvcGVkTGFtYmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMp
KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9y
RWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnMoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAg
ICBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFuc0ltcGwoc2NvcGVkTGFtYmRhUmVmPGJv
b2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4g
aW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaFByb3RlY3RlZENlbGwoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKIHsKICAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTEz
MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIKICNp
bmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNsdWRlICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCiAj
aW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+
CkBAIC0xNDQsNiArMTQ1LDEwIEBAIGJvb2wgT3B0aW9uczo6aXNBdmFpbGFibGUoT3B0aW9uczo6
SUQgaWQKICAgICBpZiAoaWQgPT0gbWF4U2luZ2xlQWxsb2NhdGlvblNpemVJRCkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAjZW5kaWYKKyNpZiBPUyhEQVJXSU4pCisgICAgaWYgKGlkID09IHVzZVNp
Z2lsbENyYXNoQW5hbHl6ZXJJRCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQyOSw2ICs0MzQsOCBAQCBzdGF0aWMgdm9pZCByZWNvbXB1
dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBlbHNlCiAgICAgICAgIGZhc3RTZXRNYXhTaW5nbGVB
bGxvY2F0aW9uU2l6ZShzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpKTsKICNlbmRp
ZgorICAgIGlmIChPcHRpb25zOjp1c2VTaWdpbGxDcmFzaEFuYWx5emVyKCkpCisgICAgICAgIGVu
c3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsKIH0KIAogdm9pZCBPcHRpb25zOjppbml0aWFsaXpl
KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9u
IDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMzkzLDYgKzM5Myw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9u
U3RyaW5nOwogICAgIFwKICAgICB2KGJvb2wsIHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3Rl
ZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdnaW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBc
CiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmlj
dGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBvdmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIp
IFwKKyAgICB2KGJvb2wsIHVzZVNpZ2lsbENyYXNoQW5hbHl6ZXIsIHRydWUsIENvbmZpZ3VyYWJs
ZSwgImxvZ3MgZGF0YSBhYm91dCBTSUdJTEwgY3Jhc2hlcyIpIFwKICAgICBcCiAgICAgdih1bnNp
Z25lZCwgd2F0Y2hkb2csIDAsIE5vcm1hbCwgIndhdGNoZG9nIHRpbWVvdXQgKDAgPSBEaXNhYmxl
ZCwgTiA9IGEgdGltZW91dCBwZXJpb2Qgb2YgTiBtaWxsaXNlY29uZHMpIikgXAogICAgIFwKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDIxMTMwMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAyLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCiAjaW5jbHVkZSAi
VW5saW5rZWRDb2RlQmxvY2suaCIKICNpbmNsdWRlICJWTUVudHJ5U2NvcGUuaCIKKyNpbmNsdWRl
ICJWTUluc3BlY3Rvci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgiCiAjaW5jbHVkZSAiV2Vha0dD
TWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtNYXBEYXRhLmgiCkBAIC0zNDksMTAgKzM1MCwx
NCBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5cGUpCiAgICAgICAgIFdh
dGNoZG9nJiB3YXRjaGRvZyA9IGVuc3VyZVdhdGNoZG9nKCk7CiAgICAgICAgIHdhdGNoZG9nLnNl
dFRpbWVMaW1pdCh0aW1lb3V0TWlsbGlzKTsKICAgICB9CisKKyAgICBWTUluc3BlY3Rvcjo6aW5z
dGFuY2UoKS5hZGQodGhpcyk7CiB9CiAKIFZNOjp+Vk0oKQogeworICAgIFZNSW5zcGVjdG9yOjpp
bnN0YW5jZSgpLnJlbW92ZSh0aGlzKTsKKwogICAgIC8vIE5ldmVyIEdDLCBldmVyIGFnYWluLgog
ICAgIGhlYXAuaW5jcmVtZW50RGVmZXJyYWxEZXB0aCgpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDIxMTMwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRl
IDx3dGYvQnVtcFBvaW50ZXJBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4K
ICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KKyNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5o
PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgpAQCAtMjQxLDcgKzI0Miw3IEBAIHN0cnVjdCBTY3JhdGNo
QnVmZmVyIHsKICNwcmFnbWEgd2FybmluZyhwb3ApCiAjZW5kaWYKIAotY2xhc3MgVk0gOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8Vk0+IHsKK2NsYXNzIFZNIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFZNPiwgcHVibGljIERvdWJseUxpbmtlZExpc3ROb2RlPFZNPiB7CiBwdWJs
aWM6CiAgICAgLy8gV2ViQ29yZSBoYXMgYSBvbmUtdG8tb25lIG1hcHBpbmcgb2YgdGhyZWFkcyB0
byBWTXM7CiAgICAgLy8gZWl0aGVyIGNyZWF0ZSgpIG9yIGNyZWF0ZUxlYWtlZCgpIHNob3VsZCBv
bmx5IGJlIGNhbGxlZCBvbmNlCkBAIC03NzgsMTEgKzc3OSwxNSBAQCBwcml2YXRlOgogICAgIHN0
ZDo6dW5pcXVlX3B0cjxTaGFkb3dDaGlja2VuPiBtX3NoYWRvd0NoaWNrZW47CiAgICAgc3RkOjp1
bmlxdWVfcHRyPEJ5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk+IG1fYnl0ZWNvZGVJbnRyaW5zaWNS
ZWdpc3RyeTsKIAorICAgIFZNKiBtX3ByZXY7IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExp
c3ROb2RlLgorICAgIFZNKiBtX25leHQ7IC8vIFJlcXVpcmVkIGJ5IERvdWJseUxpbmtlZExpc3RO
b2RlLgorCiAgICAgLy8gRnJpZW5kcyBmb3IgZXhjZXB0aW9uIGNoZWNraW5nIHB1cnBvc2Ugb25s
eS4KICAgICBmcmllbmQgY2xhc3MgSGVhcDsKICAgICBmcmllbmQgY2xhc3MgQ2F0Y2hTY29wZTsK
ICAgICBmcmllbmQgY2xhc3MgRXhjZXB0aW9uU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIFRocm93
U2NvcGU7CisgICAgZnJpZW5kIGNsYXNzIFdURjo6RG91Ymx5TGlua2VkTGlzdE5vZGU8Vk0+Owog
fTsKIAogI2lmIEVOQUJMRShHQ19WQUxJREFUSU9OKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2ln
aWxsQ3Jhc2hBbmFseXplci5oIgorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKKyNpbmNsdWRlIDxtdXRleD4K
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKKyNpZiBVU0UoQVJNNjRfRElTQVNTRU1C
TEVSKQorI2luY2x1ZGUgIkE2NERPcGNvZGUuaCIKKyNlbmRpZgorCisjaWYgSEFWRShTSUdOQUxf
SCkKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgSlNDIHsKKworc3Ry
dWN0IFNpZ25hbENvbnRleHQ7CisKK2NsYXNzIFNpZ2lsbENyYXNoQW5hbHl6ZXIgeworcHVibGlj
OgorICAgIHZvaWQgYW5hbHl6ZShTaWduYWxDb250ZXh0Jik7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBkdW1wQ29kZUJsb2NrKENvZGVCbG9jayosIHZvaWQqIG1hY2hpbmVQQyk7CisKKyNpZiBVU0Uo
QVJNNjRfRElTQVNTRU1CTEVSKQorICAgIEE2NERPcGNvZGUgYXJtNjRPcGNvZGU7CisjZW5kaWYK
K307CisKKyNpZiBPUyhEQVJXSU4pCisKKyNpZiBVU0UoT1NfTE9HKQorCisjZGVmaW5lIGxvZyhm
b3JtYXQsIC4uLikgXAorICAgIG9zX2xvZ19pbmZvKE9TX0xPR19ERUZBVUxULCBmb3JtYXQsICMj
X19WQV9BUkdTX18pCisKKyNlbHNlIC8vIFVTRShPU19MT0cpCisKKyNkZWZpbmUgbG9nKGZvcm1h
dCwgLi4uKSBcCisgICAgZGF0YUxvZ0YoZm9ybWF0LCAjI19fVkFfQVJHU19fKQorICAgIAorI2Vu
ZGlmIC8vIFVTRShPU19MT0cpCisKKyNpZiBDUFUoWDg2XzY0KQorc3RydWN0IFNpZ25hbENvbnRl
eHQgeworICAgIFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNvbnRleHQpCisgICAgICAgIDog
bWNvbnRleHQobWNvbnRleHQpCisgICAgICAgICwgbWFjaGluZVBDKHJlaW50ZXJwcmV0X2Nhc3Q8
dm9pZCo+KG1jb250ZXh0LT5fX3NzLl9fcmlwKSkKKyAgICAgICAgLCBzdGFja1BvaW50ZXIocmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4obWNvbnRleHQtPl9fc3MuX19yc3ApKQorICAgICAgICAsIGZy
YW1lUG9pbnRlcihyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KG1jb250ZXh0LT5fX3NzLl9f
cmJwKSkKKyAgICB7IH0KKworICAgIHZvaWQgZHVtcCgpCisgICAgeworI2RlZmluZSBGT1JfRUFD
SF9SRUdJU1RFUih2KSBcCisgICAgICAgIHYocmF4KSBcCisgICAgICAgIHYocmJ4KSBcCisgICAg
ICAgIHYocmN4KSBcCisgICAgICAgIHYocmR4KSBcCisgICAgICAgIHYocmRpKSBcCisgICAgICAg
IHYocnNpKSBcCisgICAgICAgIHYocmJwKSBcCisgICAgICAgIHYocnNwKSBcCisgICAgICAgIHYo
cjgpIFwKKyAgICAgICAgdihyOSkgXAorICAgICAgICB2KHIxMCkgXAorICAgICAgICB2KHIxMSkg
XAorICAgICAgICB2KHIxMikgXAorICAgICAgICB2KHIxMykgXAorICAgICAgICB2KHIxNCkgXAor
ICAgICAgICB2KHIxNSkgXAorICAgICAgICB2KHJpcCkgXAorICAgICAgICB2KHJmbGFncykgXAor
ICAgICAgICB2KGNzKSBcCisgICAgICAgIHYoZnMpIFwKKyAgICAgICAgdihncykKKworI2RlZmlu
ZSBEVU1QX1JFR0lTVEVSKF9fcmVnKSBcCisgICAgICAgIGxvZygiUmVnaXN0ZXIgIiAjX19yZWcg
IjogJXAiLCByZWludGVycHJldF9jYXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fXyMjX19yZWcp
KTsKKyAgICAgICAgRk9SX0VBQ0hfUkVHSVNURVIoRFVNUF9SRUdJU1RFUikKKyN1bmRlZiBGT1Jf
RUFDSF9SRUdJU1RFUgorICAgIH0KKworICAgIG1jb250ZXh0X3QmIG1jb250ZXh0OworICAgIHZv
aWQqIG1hY2hpbmVQQzsKKyAgICB2b2lkKiBzdGFja1BvaW50ZXI7CisgICAgdm9pZCogZnJhbWVQ
b2ludGVyOworfTsKKworI2VsaWYgQ1BVKEFSTTY0KQorCitzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7
CisgICAgU2lnbmFsQ29udGV4dChtY29udGV4dF90JiBtY29udGV4dCkKKyAgICAgICAgOiBtY29u
dGV4dChtY29udGV4dCkKKyAgICAgICAgLCBtYWNoaW5lUEMocmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4obWNvbnRleHQtPl9fc3MuX19wYykpCisgICAgICAgICwgc3RhY2tQb2ludGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5fX3NzLl9fc3ApKQorICAgICAgICAsIGZyYW1lUG9p
bnRlcihyZWludGVycHJldF9jYXN0PENhbGxGcmFtZSo+KG1jb250ZXh0LT5fX3NzLl9fZnApKQor
ICAgIHsgfQorCisgICAgdm9pZCBkdW1wKCkKKyAgICB7CisgICAgICAgIGludCBpOworICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgMjg7IGkgKz0gNCkgeworICAgICAgICAgICAgbG9nKCJ4JWQ6ICUw
MTZsbHggeCVkOiAlMDE2bGx4IHglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHgiLAorICAgICAgICAg
ICAgICAgIGksIG1jb250ZXh0LT5fX3NzLl9feFtpXSwKKyAgICAgICAgICAgICAgICBpKzEsIG1j
b250ZXh0LT5fX3NzLl9feFtpKzFdLAorICAgICAgICAgICAgICAgIGkrMiwgbWNvbnRleHQtPl9f
c3MuX194W2krMl0sCisgICAgICAgICAgICAgICAgaSszLCBtY29udGV4dC0+X19zcy5fX3hbaSsz
XSk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKGkgPCAyOSk7CisgICAgICAgIGxvZygieCVk
OiAlMDE2bGx4IGZwOiAlMDE2bGx4IGxyOiAlMDE2bGx4IiwKKyAgICAgICAgICAgIGksIG1jb250
ZXh0LT5fX3NzLl9feFtpXSwgbWNvbnRleHQtPl9fc3MuX19mcCwgbWNvbnRleHQtPl9fc3MuX19s
cik7CisgICAgICAgIGxvZygic3A6ICUwMTZsbHggcGM6ICUwMTZsbHggY3BzcjogJTA4eCIsCisg
ICAgICAgICAgICBtY29udGV4dC0+X19zcy5fX3NwLCBtY29udGV4dC0+X19zcy5fX3BjLCBtY29u
dGV4dC0+X19zcy5fX2Nwc3IpOworICAgIH0KKworICAgIG1jb250ZXh0X3QmIG1jb250ZXh0Owor
ICAgIHZvaWQqIG1hY2hpbmVQQzsKKyAgICB2b2lkKiBzdGFja1BvaW50ZXI7CisgICAgdm9pZCog
ZnJhbWVQb2ludGVyOworfTsKKworI2Vsc2UKKworc3RydWN0IFNpZ25hbENvbnRleHQgeworICAg
IFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYpIHsgfQorICAgIAorICAgIHZvaWQgZHVtcCgpIHsg
fQorICAgIAorICAgIHZvaWQqIG1hY2hpbmVQQzsKKyAgICB2b2lkKiBzdGFja1BvaW50ZXI7Cisg
ICAgdm9pZCogZnJhbWVQb2ludGVyOworfTsKKyAgICAKKyNlbmRpZgorCitzdHJ1Y3Qgc2lnYWN0
aW9uIG9sZFNpZ0lsbEFjdGlvbjsKKworc3RhdGljIHZvaWQgaGFuZGxlQ3Jhc2goaW50LCBzaWdp
bmZvX3QqLCB2b2lkKiB1YXApCit7CisgICAgc2lnYWN0aW9uKFNJR0lMTCwgJm9sZFNpZ0lsbEFj
dGlvbiwgbnVsbHB0cik7CisKKyAgICBTaWduYWxDb250ZXh0IGNvbnRleHQoc3RhdGljX2Nhc3Q8
dWNvbnRleHRfdCo+KHVhcCktPnVjX21jb250ZXh0KTsKKyAgICBTaWdpbGxDcmFzaEFuYWx5emVy
JiBhbmFseXplciA9IGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsKKyAgICBhbmFseXplci5h
bmFseXplKGNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZCBpbml0aWFsaXplQ3Jhc2hIYW5kbGVy
KCkKK3sKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisgICAgc3RydWN0IHNpZ2FjdGlv
biBhY3Rpb247CisgICAgYWN0aW9uLnNhX3NpZ2FjdGlvbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCAoKikoaW50LCBzaWdpbmZvX3QgKiwgdm9pZCAqKT4oaGFuZGxlQ3Jhc2gpOworICAgIHNpZ2Zp
bGxzZXQoJmFjdGlvbi5zYV9tYXNrKTsKKyAgICBhY3Rpb24uc2FfZmxhZ3MgPSBTQV9TSUdJTkZP
OworICAgIHNpZ2FjdGlvbihTSUdJTEwsICZhY3Rpb24sICZvbGRTaWdJbGxBY3Rpb24pOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oaGFuZGxlQ3Jhc2gpOworI2VuZGlmCit9CisKKyNlbHNlIC8v
IE9TKERBUldJTikKKworI2RlZmluZSBsb2coZm9ybWF0LCAuLi4pIGRvIHsgfSB3aGlsZSAoZmFs
c2UpCisgICAgCitzdHJ1Y3QgU2lnbmFsQ29udGV4dCB7CisgICAgU2lnbmFsQ29udGV4dCgpIHsg
fQorCisgICAgdm9pZCBkdW1wKCkgeyB9CisKKyAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgdm9p
ZCogc3RhY2tQb2ludGVyOworICAgIHZvaWQqIGZyYW1lUG9pbnRlcjsKK307CisKK3N0YXRpYyB2
b2lkIGluaXRpYWxpemVDcmFzaEhhbmRsZXIoKQoreworICAgIC8vIERvIG5vdGhpbmcuIE5vdCBz
dXBwb3J0ZWQgZm9yIHRoaXMgcGxhdGZvcm0uCit9CisKKyNlbmRpZiAvLyBPUyhEQVJXSU4pCisK
K1NpZ2lsbENyYXNoQW5hbHl6ZXImIGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKQoreworICAg
IHN0YXRpYyBTaWdpbGxDcmFzaEFuYWx5emVyKiBhbmFseXplcjsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGlu
aXRpYWxpemVDcmFzaEhhbmRsZXIoKTsKKyAgICAgICAgYW5hbHl6ZXIgPSBuZXcgU2lnaWxsQ3Jh
c2hBbmFseXplcjsKKyAgICB9KTsKKyAgICByZXR1cm4gKmFuYWx5emVyOworfQorCit2b2lkIFNp
Z2lsbENyYXNoQW5hbHl6ZXI6OmFuYWx5emUoU2lnbmFsQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBsb2coIkJFR0lOIFNJR0lMTCBhbmFseXNpcyIpOworCisgICAgWyZdICgpIHsKKyAgICAgICAg
Ly8gRmlyc3QsIGR1bXAgdGhlIHNpZ25hbCBjb250ZXh0IGluZm8gc28gdGhhdCB3ZSdsbCBhdCBs
ZWFzdCBoYXZlIHRoZSBzYW1lIGluZm8KKyAgICAgICAgLy8gdGhhdCB0aGUgZGVmYXVsdCBjcmFz
aCBoYW5kbGVyIHdvdWxkIGdpdmVuIHVzIGluIGNhc2UgdGhpcyBjcmFzaCBhbmFseXplcgorICAg
ICAgICAvLyBpdHNlbGYgY3Jhc2hlcy4KKyAgICAgICAgY29udGV4dC5kdW1wKCk7CisKKyAgICAg
ICAgVk1JbnNwZWN0b3ImIGluc3BlY3RvciA9IFZNSW5zcGVjdG9yOjppbnN0YW5jZSgpOworCisg
ICAgICAgIC8vIFVzZSBhIHRpbWVvdXQgcGVyaW9kIG9mIDIgc2Vjb25kcy4gVGhlIGNsaWVudCBp
cyBhYm91dCB0byBjcmFzaCwgYW5kIHdlIGRvbid0CisgICAgICAgIC8vIHdhbnQgdG8gdHVybiB0
aGUgY3Jhc2ggaW50byBhIGhhbmcgYnkgcmUtdHJ5aW5nIHRoZSBsb2NrIGZvciB0b28gbG9uZy4K
KyAgICAgICAgYXV0byBleHBlY3RlZExvY2tUb2tlbiA9IGluc3BlY3Rvci5sb2NrKDIpOworICAg
ICAgICBpZiAoIWV4cGVjdGVkTG9ja1Rva2VuKSB7CisgICAgICAgICAgICBBU1NFUlQoZXhwZWN0
ZWRMb2NrVG9rZW4uZXJyb3IoKSA9PSBWTUluc3BlY3Rvcjo6RXJyb3I6OlRpbWVkT3V0KTsKKyAg
ICAgICAgICAgIGxvZygiRVJST1I6IFVuYWJsZSB0byBhbmFseXplIFNJR0lMTC4gVGltZWQgb3V0
IHdoaWxlIHdhaXRpbmcgdG8gaXRlcmF0ZSBWTXMuIik7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgYXV0byBsb2NrVG9rZW4gPSBleHBlY3RlZExvY2tUb2tlbi52YWx1
ZSgpOworCisgICAgICAgIHZvaWQqIHBjID0gY29udGV4dC5tYWNoaW5lUEM7CisgICAgICAgIGF1
dG8gaXNJbkpJVE1lbW9yeSA9IGluc3BlY3Rvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShsb2Nr
VG9rZW4sIHBjKTsKKyAgICAgICAgaWYgKCFpc0luSklUTWVtb3J5KSB7CisgICAgICAgICAgICBs
b2coIkVSUk9SOiBUaW1lZCBvdXQ6IG5vdCBhYmxlIHRvIGRldGVybWluZSBpZiBwYyAlcCBpcyBp
biB2YWxpZCBKSVQgZXhlY3V0YWJsZSBtZW1vcnkiLCBwYyk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFpc0luSklUTWVtb3J5LnZhbHVlKCkpIHsKKyAgICAg
ICAgICAgIGxvZygicGMgJXAgaXMgTk9UIGluIHZhbGlkIEpJVCBleGVjdXRhYmxlIG1lbW9yeSIs
IHBjKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBsb2coInBjICVw
IGlzIGluIHZhbGlkIEpJVCBleGVjdXRhYmxlIG1lbW9yeSIsIHBjKTsKKworI2lmIENQVShBUk02
NCkKKyAgICAgICAgc2l6ZV90IHBjQXNTaXplID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHBj
KTsKKyAgICAgICAgaWYgKHBjQXNTaXplICE9IHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVp
bnQzMl90KT4ocGNBc1NpemUpKSB7CisgICAgICAgICAgICBsb2coInBjICVwIGlzIE5PVCBwcm9w
ZXJseSBhbGlnbmVkIiwgcGMpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gV2Uga25vdyBpdCdzIHNhZmUgdG8gcmVhZCB0aGUgd29yZCBhdCB0aGUgUEMgYmVj
YXVzZSB3ZSdyZSBoYW5kbGluZyBhIFNJR0lMTC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3
b3VsZCBoYXZlIGNyYXNoZWQgd2l0aCBhIFNJR0JVUyBpbnN0ZWFkLgorICAgICAgICB1aW50MzJf
dCB3b3JkQXRQQyA9ICpyZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4ocGMpOworICAgICAgICBs
b2coImluc3RydWN0aW9uIGJpdHMgYXQgcGMgJXAgaXM6IDB4JTA4eCIsIHBjLCB3b3JkQXRQQyk7
CisjZW5kaWYKKworICAgICAgICBhdXRvIGV4cGVjdGVkQ29kZUJsb2NrID0gaW5zcGVjdG9yLmNv
ZGVCbG9ja0Zvck1hY2hpbmVQQyhsb2NrVG9rZW4sIHBjKTsKKyAgICAgICAgaWYgKCFleHBlY3Rl
ZENvZGVCbG9jaykgeworICAgICAgICAgICAgaWYgKGV4cGVjdGVkQ29kZUJsb2NrLmVycm9yKCkg
PT0gVk1JbnNwZWN0b3I6OkVycm9yOjpUaW1lZE91dCkKKyAgICAgICAgICAgICAgICBsb2coIkVS
Uk9SOiBUaW1lZCBvdXQ6IG5vdCBhYmxlIHRvIGRldGVybWluZSBpZiBwYyAlcCBpcyBpbiBhIHZh
bGlkIENvZGVCbG9jayIsIHBjKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBs
b2coIlRoZSBjdXJyZW50IHRocmVhZCBkb2VzIG5vdCBvd24gYW55IFZNIEpTTG9jayIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gZXhwZWN0ZWRDb2RlQmxvY2sudmFsdWUoKTsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2spIHsK
KyAgICAgICAgICAgIGxvZygibWFjaGluZSBQQyAlcCBkb2VzIG5vdCBiZWxvbmcgdG8gYW55IENv
ZGVCbG9jayBpbiB0aGUgY3VycmVudGx5IGVudGVyZWQgVk0iLCBwYyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBsb2coInBjICVwIGJlbG9uZ3MgdG8gQ29kZUJs
b2NrICVwIG9mIHR5cGUgJXMiLCBwYywgY29kZUJsb2NrLCBKSVRDb2RlOjp0eXBlTmFtZShjb2Rl
QmxvY2stPmppdFR5cGUoKSkpOworCisgICAgICAgIGR1bXBDb2RlQmxvY2soY29kZUJsb2NrLCBw
Yyk7CisgICAgfSAoKTsKKworICAgIGxvZygiRU5EIFNJR0lMTCBhbmFseXNpcyIpOworfQorCit2
b2lkIFNpZ2lsbENyYXNoQW5hbHl6ZXI6OmR1bXBDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIHZvaWQqIG1hY2hpbmVQQykKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgSklUQ29kZSogaml0
Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgpLmdldCgpOworCisgICAgLy8gRHVtcCB0aGUgcmF3
IGJpdHMgb2YgdGhlIGNvZGUuCisgICAgdWludDMyX3QqIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGppdENvZGUtPnN0YXJ0KCkpOworICAgIHVpbnQzMl90KiBlbmQgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQzMl90Kj4oaml0Q29kZS0+ZW5kKCkpOworICAgIGxvZygiSklUQ29k
ZSAlcCBbJXAtJXBdOiIsIGppdENvZGUsIHN0YXJ0LCBlbmQpOworICAgIGlmIChzdGFydCA8IGVu
ZCkgeworICAgICAgICB1aW50MzJfdCogcCA9IHN0YXJ0OworICAgICAgICB3aGlsZSAocCArIDgg
PD0gZW5kKSB7CisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHgg
JTA4eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArNywgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0
XSwgcFs1XSwgcFs2XSwgcFs3XSk7CisgICAgICAgICAgICBwICs9IDg7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHAgKyA3IDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAl
MDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArNiwgcFswXSwgcFsxXSwgcFsyXSwg
cFszXSwgcFs0XSwgcFs1XSwgcFs2XSk7CisgICAgICAgIGVsc2UgaWYgKHAgKyA2IDw9IGVuZCkK
KyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHgi
LCBwLCBwKzUsIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pOworICAgICAgICBl
bHNlIGlmIChwICsgNSA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4
eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArNCwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSk7
CisgICAgICAgIGVsc2UgaWYgKHAgKyA0IDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVw
XTogJTA4eCAlMDh4ICUwOHggJTA4eCIsIHAsIHArMywgcFswXSwgcFsxXSwgcFsyXSwgcFszXSk7
CisgICAgICAgIGlmIChwICsgMyA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUw
OHggJTA4eCAlMDh4IiwgcCwgcCsyLCBwWzBdLCBwWzFdLCBwWzJdKTsKKyAgICAgICAgZWxzZSBp
ZiAocCArIDIgPD0gZW5kKQorICAgICAgICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHgiLCBw
LCBwKzEsIHBbMF0sIHBbMV0pOworICAgICAgICBlbHNlIGlmIChwICsgMSA8PSBlbmQpCisgICAg
ICAgICAgICBsb2coIlslcC0lcF06ICUwOHgiLCBwLCBwLCBwWzBdKTsKKyAgICB9CisKKyAgICAv
LyBEdW1wIHRoZSBkaXNhc3NlbWJseSBvZiB0aGUgY29kZS4KKyAgICBsb2coIkRpc2Fzc2VtYmx5
OiIpOworICAgIHVpbnQzMl90KiBjdXJyZW50UEMgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oaml0Q29kZS0+ZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgc2l6ZV90IGJ5dGVDb3VudCA9
IGppdENvZGUtPnNpemUoKTsKKyAgICB3aGlsZSAoYnl0ZUNvdW50KSB7CisgICAgICAgIGNoYXIg
cGNTdHJpbmdbMjRdOworICAgICAgICBpZiAoY3VycmVudFBDID09IG1hY2hpbmVQQykgeworICAg
ICAgICAgICAgc25wcmludGYocGNTdHJpbmcsIHNpemVvZihwY1N0cmluZyksICIqIDB4JWx4Iiwg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihjdXJyZW50UEMpKTsKKyAgICAgICAgICAg
IGxvZygiJTIwczogJXMgICAgPD09PT09PT09PT09PT09PT09PT09PT09PT0iLCBwY1N0cmluZywg
YXJtNjRPcGNvZGUuZGlzYXNzZW1ibGUoY3VycmVudFBDKSk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzbnByaW50ZihwY1N0cmluZywgc2l6ZW9mKHBjU3RyaW5nKSwgIjB4JWx4Iiwg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBsb25nPihjdXJyZW50UEMpKTsKKyAgICAgICAgICAg
IGxvZygiJTIwczogJXMiLCBwY1N0cmluZywgYXJtNjRPcGNvZGUuZGlzYXNzZW1ibGUoY3VycmVu
dFBDKSk7CisgICAgICAgIH0KKyAgICAgICAgY3VycmVudFBDKys7CisgICAgICAgIGJ5dGVDb3Vu
dCAtPSBzaXplb2YodWludDMyX3QpOworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGNv
ZGVCbG9jayk7CisgICAgVU5VU0VEX1BBUkFNKG1hY2hpbmVQQyk7CisgICAgLy8gTm90IGltcGxl
bWVudGVkIHlldC4KKyNlbmRpZgorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxsQ3Jhc2hBbmFs
eXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIFNpZ2lsbENyYXNoQW5hbHl6ZXI7CisKK1NpZ2lsbENyYXNoQW5hbHl6ZXIm
IGVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUluc3BlY3Rvci5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZNSW5zcGVjdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWTUluc3Bl
Y3Rvci5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrU2V0
LmgiCisjaW5jbHVkZSAiSGVhcElubGluZXMuaCIKKyNpbmNsdWRlIDxtdXRleD4KKyNpbmNsdWRl
IDx3dGYvRXhwZWN0ZWQuaD4KKworI2lmICFPUyhXSU5ET1dTKQorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0MgeworCitWTUluc3BlY3RvciYgVk1JbnNwZWN0b3I6
Omluc3RhbmNlKCkKK3sKKyAgICBzdGF0aWMgVk1JbnNwZWN0b3IqIG1hbmFnZXI7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZSwgW10gewor
ICAgICAgICBtYW5hZ2VyID0gbmV3IFZNSW5zcGVjdG9yKCk7CisgICAgfSk7CisgICAgcmV0dXJu
ICptYW5hZ2VyOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjphZGQoVk0qIHZtKQoreworICAgIGF1
dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBtX2xpc3QuYXBwZW5kKHZtKTsKK30K
Kwordm9pZCBWTUluc3BlY3Rvcjo6cmVtb3ZlKFZNKiB2bSkKK3sKKyAgICBhdXRvIGxvY2tlciA9
IGhvbGRMb2NrKG1fbG9jayk7CisgICAgbV9saXN0LnJlbW92ZSh2bSk7Cit9CisKK2F1dG8gVk1J
bnNwZWN0b3I6OmxvY2sodW5zaWduZWQgdGltZW91dEluU2Vjb25kcykgLT4gRXhwZWN0ZWQ8TG9j
a1Rva2VuLCBFcnJvcj4KK3sKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgZnJv
bSBhIHNpZ25hbCBoYW5kbGVyIChlLmcuIHZpYSB2aXNpdCgpKS4gSGVuY2UsCisgICAgLy8gaXQg
c2hvdWxkIG9ubHkgdXNlIEFQSXMgdGhhdCBhcmUgc2FmZSB0byBjYWxsIGZyb20gc2lnbmFsIGhh
bmRsZXJzLiBUaGlzIGlzCisgICAgLy8gd2h5IHdlIHVzZSB1bmlzdGQuaCdzIHNsZWVwKCkgaW5z
dGVhZCBvZiBpdHMgYWx0ZXJuYXRpdmVzLgorCisgICAgdW5zaWduZWQgbWF4UmV0cmllcyA9IHRp
bWVvdXRJblNlY29uZHM7IC8vIHNpbmNlIHNlY29uZHNQZXJTbGVlcCA9PSAxLgorCisgICAgYm9v
bCBsb2NrZWQgPSBtX2xvY2sudHJ5TG9jaygpOworICAgIHVuc2lnbmVkIHRyeUNvdW50ID0gMDsK
KyAgICB3aGlsZSAoIWxvY2tlZCAmJiB0cnlDb3VudCA8PSBtYXhSZXRyaWVzKSB7CisgICAgICAg
IC8vIFdlIHdhbnQgdGhlIHZlcnNpb24gb2Ygc2xlZXAgZnJvbSB1bmlzdGQuaC4gQ2FzdCB0byBk
aXNhbWJpZ3VhdGUuCisjaWYgIU9TKFdJTkRPV1MpCisgICAgICAgIChzdGF0aWNfY2FzdDx1bnNp
Z25lZCAoKikodW5zaWduZWQpPihzbGVlcCkpKDEpOworI2VuZGlmCisgICAgICAgIGxvY2tlZCA9
IG1fbG9jay50cnlMb2NrKCk7CisgICAgfQorCisgICAgaWYgKCFsb2NrZWQpCisgICAgICAgIHJl
dHVybiBtYWtlVW5leHBlY3RlZChFcnJvcjo6VGltZWRPdXQpOworICAgIHJldHVybiBMb2NrVG9r
ZW46OkxvY2tlZFZhbHVlOworfQorCitzdGF0aWMgYm9vbCBlbnN1cmVJc1NhZmVUb0xvY2soTG9j
ayYgbG9jaykKK3sKKyAgICB1bnNpZ25lZCBtYXhSZXRyaWVzID0gMjsKKyAgICB1bnNpZ25lZCB0
cnlDb3VudCA9IDA7CisgICAgd2hpbGUgKHRyeUNvdW50IDw9IG1heFJldHJpZXMpIHsKKyAgICAg
ICAgYm9vbCBzdWNjZXNzID0gbG9jay50cnlMb2NrKCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7
CisgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgdHJ5Q291bnQrKzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fTsKKworYXV0byBWTUluc3BlY3Rvcjo6aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoVk1JbnNwZWN0
b3I6OkxvY2tUb2tlbiwgdm9pZCogbWFjaGluZVBDKSAtPiBFeHBlY3RlZDxib29sLCBFcnJvcj4K
K3sKKyAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7
CisgICAgaXRlcmF0ZShbJl0gKFZNJiB2bSkgLT4gRnVuY3RvclN0YXR1cyB7CisgICAgICAgIGF1
dG8gYWxsb2NhdG9yID0gdm0uZXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICAgICAgYXV0byYgbG9j
ayA9IGFsbG9jYXRvci5nZXRMb2NrKCk7CisKKyAgICAgICAgYm9vbCBpc1NhZmVUb0xvY2sgPSBl
bnN1cmVJc1NhZmVUb0xvY2sobG9jayk7CisgICAgICAgIGlmICghaXNTYWZlVG9Mb2NrKSB7Cisg
ICAgICAgICAgICBoYXNUaW1lb3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBGdW5jdG9y
U3RhdHVzOjpDb250aW51ZTsgLy8gU2tpcCB0aGlzIFZNLgorICAgICAgICB9CisKKyAgICAgICAg
TG9ja0hvbGRlciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKGxvY2spOworICAgICAgICBpZiAo
YWxsb2NhdG9yLmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2Nr
ZXIsIG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBGdW5jdG9yU3RhdHVzOjpEb25lOworICAgICAgICB9CisgICAgICAgIHJldHVybiBG
dW5jdG9yU3RhdHVzOjpDb250aW51ZTsKKyAgICB9KTsKKworICAgIGlmICghZm91bmQgJiYgaGFz
VGltZW91dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpUaW1lZE91dCk7
CisgICAgcmV0dXJuIGZvdW5kOworfQorCithdXRvIFZNSW5zcGVjdG9yOjpjb2RlQmxvY2tGb3JN
YWNoaW5lUEMoVk1JbnNwZWN0b3I6OkxvY2tUb2tlbiwgdm9pZCogbWFjaGluZVBDKSAtPiBFeHBl
Y3RlZDxDb2RlQmxvY2sqLCBFcnJvcj4KK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51
bGxwdHI7CisgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7CisgICAgaXRlcmF0ZShbJl0gKFZN
JiB2bSkgeworICAgICAgICBpZiAoIXZtLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5n
TG9jaygpKQorICAgICAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOworCisg
ICAgICAgIC8vIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJVFBsYW5zKCkgdXNlcyBD
b2RlQmxvY2tTZXQ6Oml0ZXJhdGUoKSwgYW5kCisgICAgICAgIC8vIENvZGVCbG9ja1NldDo6aXRl
cmF0ZSgpIG5lZWRzIHRvIGJlIGFibGUgdG8gYWNxdWlyZSBpdHMgbG9jay4gTWFrZSBzdXJlIGl0
J3MKKyAgICAgICAgLy8gc2FmZSB0byBwcm9jZWVkIHdpdGggY2FsbGluZyBmb3JFYWNoQ29kZUJs
b2NrSWdub3JpbmdKSVRQbGFucygpLgorICAgICAgICBhdXRvJiBsb2NrID0gdm0uaGVhcC5jb2Rl
QmxvY2tTZXQoKS5nZXRMb2NrKCk7CisgICAgICAgIGJvb2wgaXNTYWZlVG9Mb2NrID0gZW5zdXJl
SXNTYWZlVG9Mb2NrKGxvY2spOworICAgICAgICBpZiAoIWlzU2FmZVRvTG9jaykgeworICAgICAg
ICAgICAgaGFzVGltZW91dCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gRnVuY3RvclN0YXR1
czo6Q29udGludWU7IC8vIFNraXAgdGhpcyBWTS4KKyAgICAgICAgfQorCisgICAgICAgIHZtLmhl
YXAuZm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxhbnMoWyZdIChDb2RlQmxvY2sqIGNiKSB7
CisgICAgICAgICAgICBKSVRDb2RlKiBqaXRDb2RlID0gY2ItPmppdENvZGUoKS5nZXQoKTsKKyAg
ICAgICAgICAgIGlmICghaml0Q29kZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjb2Rl
QmxvY2sgaXMgYSByZXBsYWNlbWVudCBjb2RlQmxvY2sgd2hpY2ggaXMgaW4gdGhlIHByb2Nlc3Mg
b2YgYmVpbmcKKyAgICAgICAgICAgICAgICAvLyBjb21waWxlZCwgaXRzIGppdENvZGUgd2lsbCBi
ZSBudWxsLCBhbmQgd2UgY2FuIGRpc3JlZ2FyZCBpdCBhcyBhIG1hdGNoIGZvcgorICAgICAgICAg
ICAgICAgIC8vIHRoZSBtYWNoaW5lUEMgd2UncmUgc2VhcmNoaW5nIGZvci4KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghSklU
Q29kZTo6aXNKSVQoaml0Q29kZS0+aml0VHlwZSgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgICAgIGlmIChqaXRDb2RlLT5jb250YWlucyhtYWNoaW5lUEMpKSB7
CisgICAgICAgICAgICAgICAgY29kZUJsb2NrID0gY2I7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0pOworICAgICAgICBpZiAoY29kZUJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIEZ1bmN0b3JT
dGF0dXM6OkRvbmU7CisgICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsKKyAg
ICB9KTsKKworICAgIGlmICghY29kZUJsb2NrICYmIGhhc1RpbWVvdXQpCisgICAgICAgIHJldHVy
biBtYWtlVW5leHBlY3RlZChFcnJvcjo6VGltZWRPdXQpOworICAgIHJldHVybiBjb2RlQmxvY2s7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1ZNSW5zcGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL1ZNSW5zcGVjdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1ZNSW5zcGVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiVk0uaCIKKyNpbmNsdWRlIDx3dGYvRG91Ymx5TGlua2VkTGlzdC5oPgorI2lu
Y2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBWTUluc3BlY3RvciB7CitwdWJsaWM6CisgICAgZW51bSBjbGFzcyBF
cnJvciB7CisgICAgICAgIE5vbmUsCisgICAgICAgIFRpbWVkT3V0CisgICAgfTsKKworICAgIGVu
dW0gY2xhc3MgTG9ja1Rva2VuIHsgTG9ja2VkVmFsdWUgfTsKKworICAgIHN0YXRpYyBWTUluc3Bl
Y3RvciYgaW5zdGFuY2UoKTsKKworICAgIHZvaWQgYWRkKFZNKik7CisgICAgdm9pZCByZW1vdmUo
Vk0qKTsKKworICAgIEV4cGVjdGVkPExvY2tUb2tlbiwgRXJyb3I+IGxvY2sodW5zaWduZWQgdGlt
ZW91dCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CisKKyAgICBFeHBl
Y3RlZDxib29sLCBFcnJvcj4gaXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoTG9ja1Rva2VuLCB2b2lk
Kik7CisgICAgRXhwZWN0ZWQ8Q29kZUJsb2NrKiwgRXJyb3I+IGNvZGVCbG9ja0Zvck1hY2hpbmVQ
QyhMb2NrVG9rZW4sIHZvaWQqKTsKKworcHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIEZ1bmN0b3JT
dGF0dXMgeworICAgICAgICBDb250aW51ZSwKKyAgICAgICAgRG9uZQorICAgIH07CisgICAgdGVt
cGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgaXRlcmF0ZShjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgZm9yIChWTSogdm0gPSBtX2xpc3QuaGVhZCgpOyB2bTsgdm0g
PSB2bS0+bmV4dCgpKSB7CisgICAgICAgICAgICBGdW5jdG9yU3RhdHVzIHN0YXR1cyA9IGZ1bmN0
b3IoKnZtKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgPT0gRnVuY3RvclN0YXR1czo6RG9uZSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBMb2NrIG1f
bG9jazsKKyAgICBEb3VibHlMaW5rZWRMaXN0PFZNPiBtX2xpc3Q7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTEzMDEpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE3LTAyLTAxICBNYXJrIExhbSAg
PG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6
ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNpZXIuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9i
bGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogd3RmL1N0ZExpYkV4dHJhcy5oOgorCiAyMDE3LTAxLTI2ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgogCiAgICAgICAgIEhhcmRlbiBob3cgdGhlIGNvbXBpbGVyIHJl
ZmVyZW5jZXMgR0Mgb2JqZWN0cwpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDIx
MTMwMSkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00ODksNiArNDg5LDcgQEAgdXNpbmcgV1RGOjppc0NvbXBpbGF0aW9uVGhyZWFkOwogdXNpbmcg
V1RGOjppc1BvaW50ZXJBbGlnbmVkOwogdXNpbmcgV1RGOjppc1N0YXRlbGVzc0xhbWJkYTsKIHVz
aW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7Cit1c2luZyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y7
CiB1c2luZyBXVEY6OnNhZmVDYXN0OwogdXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFyY2g7CiAK
</data>
<flag name="review"
          id="322312"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300459</attachid>
            <date>2017-02-02 15:13:28 -0800</date>
            <delta_ts>2017-02-02 15:28:23 -0800</delta_ts>
            <desc>proposed patch with Fil&apos;s feedback + the feature is now disabled by default.</desc>
            <filename>bug-167714.patch</filename>
            <type>text/plain</type>
            <size>47499</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjExNTg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDE3LTAyLTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIgdG8gbWFrZSBkZWJ1Z2dpbmcgU0lHSUxMcyBlYXNp
ZXIuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc3
MTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzMwMzE4MjM3PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u
IGlzIG9ubHkgZm9yIFg4Nl82NCBhbmQgQVJNNjQgb24gT1MoREFSV0lOKS4gIFRoZQorICAgICAg
ICBhbmFseXplciBpcyBub3QgZW5hYmxlZCBmb3IgYWxsIG90aGVyIHBvcnRzLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBBUEkvSlNWaXJ0dWFsTWFjaGluZS5tbToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvQVJNNjRBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNNjRBc3Nl
bWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk02NDo6aWxsZWdh
bEluc3RydWN0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21t
b24uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZDb21tb246OmlsbGVnYWxJbnN0
cnVjdGlvbik6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAo
SlNDOjpYODZBc3NlbWJsZXI6OmlsbGVnYWxJbnN0cnVjdGlvbik6CisgICAgICAgICogaGVhcC9I
ZWFwLmNwcDoKKyAgICAgICAgKEpTQzo6SGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklU
UGxhbnNJbXBsKToKKyAgICAgICAgKiBoZWFwL0hlYXAuaDoKKyAgICAgICAgKiBoZWFwL0hlYXBJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJ
VFBsYW5zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpP
cHRpb25zOjppc0F2YWlsYWJsZSk6CisgICAgICAgIChKU0M6OnJlY29tcHV0ZURlcGVuZGVudE9w
dGlvbnMpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorICAgICAgICAqIHJ1bnRpbWUv
Vk0uY3BwOgorICAgICAgICAoSlNDOjpWTTo6Vk0pOgorICAgICAgICAoSlNDOjpWTTo6flZNKToK
KyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFs
eXplci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpTaWduYWxDb250ZXh0OjpTaWduYWxDb250
ZXh0KToKKyAgICAgICAgKEpTQzo6U2lnbmFsQ29udGV4dDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OmhhbmRsZUNyYXNoKToKKyAgICAgICAgKEpTQzo6aW5pdGlhbGl6ZUNyYXNoSGFuZGxlcik6Cisg
ICAgICAgIChKU0M6OmVuc3VyZVNpZ2lsbENyYXNoQW5hbHl6ZXIpOgorICAgICAgICAoSlNDOjpT
aWdpbGxDcmFzaEFuYWx5emVyOjphbmFseXplKToKKyAgICAgICAgKEpTQzo6U2lnaWxsQ3Jhc2hB
bmFseXplcjo6ZHVtcENvZGVCbG9jayk6CisgICAgICAgICogdG9vbHMvU2lnaWxsQ3Jhc2hBbmFs
eXplci5oOiBBZGRlZC4KKyAgICAgICAgKiB0b29scy9WTUluc3BlY3Rvci5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpWTUluc3BlY3Rvcjo6aW5zdGFuY2UpOgorICAgICAgICAoSlNDOjpWTUlu
c3BlY3Rvcjo6YWRkKToKKyAgICAgICAgKEpTQzo6Vk1JbnNwZWN0b3I6OnJlbW92ZSk6CisgICAg
ICAgIChKU0M6OmVuc3VyZUlzU2FmZVRvTG9jayk6CisgICAgICAgICogdG9vbHMvVk1JbnNwZWN0
b3IuaDogQWRkZWQuCisgICAgICAgIChKU0M6OlZNSW5zcGVjdG9yOjppdGVyYXRlKToKKwogMjAx
Ny0wMi0wMiAgQW5kcmVhcyBLbGluZyAgPGFrbGluZ0BhcHBsZS5jb20+CiAKICAgICAgICAgW01h
Y10gSW4tcHJvY2VzcyBtZW1vcnkgcHJlc3N1cmUgbW9uaXRvciBmb3IgV2ViQ29udGVudCBwcm9j
ZXNzZXMuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAy
MTE1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTkwOCw2ICs5MDgsOCBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IHRvb2xzL0Z1bmN0aW9uV2hpdGVsaXN0LmNwcAogICAgIHRvb2xzL0pTRG9sbGFyVk0uY3BwCiAg
ICAgdG9vbHMvSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAKKyAgICB0b29scy9TaWdpbGxDcmFzaEFu
YWx5emVyLmNwcAorICAgIHRvb2xzL1ZNSW5zcGVjdG9yLmNwcAogCiAgICAgd2FzbS9KU1dlYkFz
c2VtYmx5LmNwcAogICAgIHdhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lLm1tCShyZXZpc2lvbiAyMTE1
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmUu
aCIKICNpbXBvcnQgIkpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oIgogI2ltcG9ydCAiSlNXcmFw
cGVyTWFwLmgiCisjaW1wb3J0ICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCiAjaW1wb3J0ICJTbG90
VmlzaXRvcklubGluZXMuaCIKICNpbXBvcnQgPG11dGV4PgogI2ltcG9ydCA8d3RmL0xvY2suaD4K
QEAgLTIyNSw2ICsyMjYsMTEgQEAgLSAodm9pZClyZW1vdmVNYW5hZ2VkUmVmZXJlbmNlOihpZClv
YmplYwogICAgIH0KIH0KIAorLSAodm9pZCllbmFibGVTaWdpbGxDcmFzaEFuYWx5emVyCit7Cisg
ICAgSlNDOjplbmFibGVTaWdpbGxDcmFzaEFuYWx5emVyKCk7Cit9CisKIEBlbmQKIAogQGltcGxl
bWVudGF0aW9uIEpTVmlydHVhbE1hY2hpbmUoSW50ZXJuYWwpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQVBJL0pTVmlydHVhbE1hY2hpbmVQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9BUEkvSlNWaXJ0dWFsTWFjaGluZVByaXZh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0
ZV9oCisjZGVmaW5lIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlX2gKKworI2lmIEpTQ19PQkpDX0FQ
SV9FTkFCTEVECisKK0BpbnRlcmZhY2UgSlNWaXJ0dWFsTWFjaGluZShQcml2YXRlKQorCisvKiEK
KyBAbWV0aG9kCisgQGFic3RyYWN0IEVuYWJsZXMgU0lHSUxMIGNyYXNoIGFuYWx5c2lzIGZvciBh
bGwgSlNWaXJ0dWFsTWFjaGluZXMuCisgQGRpc2N1c3Npb24gSW5zdGFsbHMgYSBTSUdJTEwgY3Jh
c2ggaGFuZGxlciB0aGF0IHdpbGwgY29sbGVjdCBhZGRpdGlvbmFsCisgbm9uLXVzZXIgaWRlbnRp
ZnlpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNyYXNoIHNpdGUgdmlhIG9zX2xvZ19pbmZvLgor
ICovCistICh2b2lkKWVuYWJsZVNpZ2lsbENyYXNoQW5hbHl6ZXI7CisKK0BlbmQKKworI2VuZGlm
CisKKyNlbmRpZiAvLyBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZV9oCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjExNTg1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIzMzQsNiArMjMzNCwxMSBAQAogCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyog
TExJbnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTIwQ0U5QjE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgKi87IH07CiAJ
CUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTIwQ0U5QzE1RjA0QTk1MDBERjM0MzAg
LyogTExJbnRDTG9vcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUZFMkU2QTdCMUQ2RUE2MkMwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMkU2QTdBMUQ2RUE1
RkUwMDYwRjg5NiAvKiBUaHJvd1Njb3BlLmNwcCAqLzsgfTsKKwkJRkUzMDIyRDIxRTNENzNBNTAw
QkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2ls
bENyYXNoQW5hbHl6ZXIuY3BwICovOyB9OworCQlGRTMwMjJEMzFFM0Q3M0E1MDBCQUM0OTMgLyog
U2lnaWxsQ3Jhc2hBbmFseXplci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUzMDIyRDExRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6
ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlG
RTMwMjJENjFFNDI4NTczMDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzMDIyRDQxRTQyODU2NzAwQkFDNDkz
IC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKKwkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8q
IFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBGRTMwMjJENTFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNwZWN0b3IuaCAqLzsgfTsKKwkJ
RkUzMDIyRDkxRTQzQzkzNDAwQkFDNDkzIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMwMjJEODFFNDND
ODU1MDBCQUM0OTMgLyogSlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTMxOEZERjFDQUM5ODI3MDBERkND
NTQgLyogRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMxOEZERDFDQUM4QzUzMDBERkNDNTQg
LyogRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5jcHAgKi87IH07CiAJCUZFMzE4RkUw
MUNBQzk4MkYwMERGQ0M1NCAvKiBFQ01BU2NyaXB0U3BlY0ludGVybmFsRnVuY3Rpb25zLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTMxOEZERTFDQUM4
QzUzMDBERkNDNTQgLyogRUNNQVNjcmlwdFNwZWNJbnRlcm5hbEZ1bmN0aW9ucy5oICovOyB9Owog
CQlGRTM0MjIxMjFENkI4MUMzMDAzMkJFODggLyogVGhyb3dTY29wZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUzNDIyMTExRDZCODE4QzAwMzJCRTg4
IC8qIFRocm93U2NvcGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtNDg3NSw2ICs0ODgwLDExIEBACiAJCUZFMjBDRTlCMTVGMDRBOTUwMERGMzQz
MCAvKiBMTEludENMb29wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IExMSW50Q0xvb3AuY3BwOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZFMjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29w
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9
IGxsaW50L0xMSW50Q0xvb3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUyRTZB
N0ExRDZFQTVGRTAwNjBGODk2IC8qIFRocm93U2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVGhyb3dTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUZFMzAyMkQwMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdpbGxDcmFzaEFuYWx5emVyLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpZ2lsbENyYXNoQW5hbHl6
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJEMTFFM0Q3Mzk2MDBC
QUM0OTMgLyogU2lnaWxsQ3Jhc2hBbmFseXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaWdpbGxDcmFzaEFuYWx5emVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUZFMzAyMkQ0MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWTUluc3BlY3Rvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUZFMzAyMkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWTUluc3BlY3Rvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlGRTMwMjJEODFFNDNDODU1MDBCQUM0OTMgLyogSlNW
aXJ0dWFsTWFjaGluZVByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkUzMThGREQxQ0FDOEM1MzAwREZDQzU0IC8qIEVDTUFTY3JpcHRTcGVjSW50ZXJuYWxGdW5jdGlv
bnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRUNNQVNjcmlwdFNw
ZWNJbnRlcm5hbEZ1bmN0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
MzE4RkRFMUNBQzhDNTMwMERGQ0M1NCAvKiBFQ01BU2NyaXB0U3BlY0ludGVybmFsRnVuY3Rpb25z
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVDTUFTY3JpcHRTcGVjSW50ZXJu
YWxGdW5jdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkUzNDIyMTExRDZC
ODE4QzAwMzJCRTg4IC8qIFRocm93U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVGhyb3dTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTkyNyw2
ICs1OTM3LDcgQEAKIAkJCQk4NkUzQzYwRjE2N0JBQjg3MDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFj
aGluZS5oICovLAogCQkJCTg2RTNDNjEwMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNo
aW5lLm1tICovLAogCQkJCTg2RTNDNjExMTY3QkFCODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNo
aW5lSW50ZXJuYWwuaCAqLywKKwkJCQlGRTMwMjJEODFFNDNDODU1MDBCQUM0OTMgLyogSlNWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaCAqLywKIAkJCQlBNzQ4MkUzNzExNkE2OTdCMDAzQjA3MTIgLyog
SlNXZWFrT2JqZWN0TWFwUmVmSW50ZXJuYWwuaCAqLywKIAkJCQlBNzQ4MkI3QTExNjZDREVBMDAz
QjA3MTIgLyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5jcHAgKi8sCiAJCQkJQTc0ODJCNzkx
MTY2Q0RFQTAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCAqLywKQEAgLTY4
MTMsOCArNjgyNCwxMiBAQAogCQkJCUZFMzg0RUUyMUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxh
clZNLmggKi8sCiAJCQkJRkUzODRFRTMxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90
b3R5cGUuY3BwICovLAogCQkJCUZFMzg0RUU0MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmggKi8sCisJCQkJRkUzMDIyRDAxRTNENzM5NjAwQkFDNDkzIC8qIFNpZ2lsbENy
YXNoQW5hbHl6ZXIuY3BwICovLAorCQkJCUZFMzAyMkQxMUUzRDczOTYwMEJBQzQ5MyAvKiBTaWdp
bGxDcmFzaEFuYWx5emVyLmggKi8sCiAJCQkJODZCNTgyMkMxNEQyMkY1RjAwQTlDMzA2IC8qIFBy
b2ZpbGVUcmVlTm9kZS5oICovLAogCQkJCTg2QjU4MjZBMTREMzVENTEwMEE5QzMwNiAvKiBUaWVy
ZWRNTWFwQXJyYXkuaCAqLywKKwkJCQlGRTMwMjJENDFFNDI4NTY3MDBCQUM0OTMgLyogVk1JbnNw
ZWN0b3IuY3BwICovLAorCQkJCUZFMzAyMkQ1MUU0Mjg1NjcwMEJBQzQ5MyAvKiBWTUluc3BlY3Rv
ci5oICovLAogCQkJKTsKIAkJCXBhdGggPSB0b29sczsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC04Mjk4LDcgKzgzMTMsNiBAQAogCQkJCTBGMkZDQ0ZGMThBNjAwNzAwMDFBMjdGOCAv
KiBERkdUaHJlYWREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTdBMjE0NkIyOENDMDBD
RjI0NDIgLyogREZHVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyODE3RDUxRjU3
MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJQURGRjJGNzAxRTMxOURFMzAwMUVBNTRFIC8qIERGR1RpZXJVcEVudHJ5VHJpZ2dlci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRM
RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMy
QzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVE
IC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtODQ0MCw2ICs4NDU0LDcgQEAK
IAkJCQkwRjg2QTI2RjFENkY3QjMzMDBDQjBDOTIgLyogR0NUeXBlTWFwLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5OTU5RTkzMTFCRDE4MjcyMDAxQUE0MTMgLyogZ2VuZXJhdGUtY29tYmluZWQtaW5z
cGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NDMDE5Mjg0NDk2MDAxM0ZC
RUEgLyogZ2VuZXJhdGUtaW5zcGVjdG9yLXByb3RvY29sLWJpbmRpbmdzLnB5IGluIEhlYWRlcnMg
Ki8sCisJCQkJRkUzMDIyRDkxRTQzQzkzNDAwQkFDNDkzIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBRjFCRDU5OTRFMDBGNDU3NUMgLyogZ2Vu
ZXJhdGUtanMtYnVpbHRpbnMucHkgaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFQzE5RjVCM0VB
MDA5OEY1RUMgLyogZ2VuZXJhdGVfY3BwX2FsdGVybmF0ZV9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVh
ZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFRjlCMTQxQTFENDNGNjAwNzAyRTkwIC8qIGdl
bmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCkBA
IC04NzkzLDYgKzg4MDgsNyBAQAogCQkJCUZFMzkxMzU2MUI3OTRGOEYwMEVEQUY3MSAvKiBMaXZl
T2JqZWN0TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBERTlBMDkxQkU3RDY5RTAwNUQ4OUQ5
IC8qIExMSW50QXNzZW1ibHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEZDNDVBMTRCRDE1RjUw
MEI4MTE1NCAvKiBMTEludENhbGxMaW5rSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJRkUzMDIy
RDMxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNoQW5hbHl6ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFMjBDRTlFMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjQ2ODBDQTE0QkJCMTZDMDBCRkUyNzIgLyogTExJbnRDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNDY4MEQzMTRCQkQxNjcwMEJGRTI3MiAvKiBMTEludERhdGEuaCBp
biBIZWFkZXJzICovLApAQCAtODg1Miw2ICs4ODY4LDcgQEAKIAkJCQlBNzlEM0VEOUM1MDY0REQw
QTg0NjZBM0EgLyogTW9kdWxlU2NvcGVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjFGQjM5
OTFFMUY2NUZCMDBBOUJFNTAgLyogTXV0YXRvclNjaGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZBNzYyMDcxREI5MjQzMzAwQjdBMkZEIC8qIE11dGF0b3JTdGF0ZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJRkUzMDIyRDcxRTQyODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8q
IE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDczNDFEMDFEQzAy
REI0MDBBQTI5QkEgLyogTmF0aXZlRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05NzE4
LDYgKzk3MzUsNyBAQAogCQkJCTBGOTYzMDM5MUQ0MTkyQzYwMDU2MDlEOSAvKiBBbGxvY2F0b3JB
dHRyaWJ1dGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0
OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5QTIyODM1MUQzNUQ3MUUwMEQ4
RTA2NyAvKiBBcml0aFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRkUzMDIyRDYxRTQy
ODU3MzAwQkFDNDkzIC8qIFZNSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzQz
QkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTEwNDEzLDYgKzEwNDMxLDcgQEAKIAkJCQk3OUIw
MENCRTFDNkFCMDdFMDA4OEM2NUQgLyogUHJveHlPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzkxNjBEQkQxQzhFM0VDODAwOEMwODVBIC8qIFByb3h5UmV2b2tlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJRkUzMDIyRDIxRTNENzNBNTAwQkFDNDkzIC8qIFNpZ2lsbENyYXNo
QW5hbHl6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2
IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0
RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYw
QUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk02NEFzc2VtYmxlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNNjRBc3Nl
bWJsZXIuaAkocmV2aXNpb24gMjExNTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk02NEFzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMiwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQsIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMDg0LDYg
KzEwODQsMTIgQEAgcHVibGljOgogICAgICAgICBpbnNuKGV4Y2VwbkdlbmVyYXRpb24oRXhjZXBu
T3BfSEFMVCwgaW1tLCAwKSk7CiAgICAgfQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5n
IHB1cnBvc2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAg
IGluc24oMHgwKTsKKyAgICB9CisKICAgICB0ZW1wbGF0ZTxpbnQgZGF0YXNpemU+CiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIGxkcChSZWdpc3RlcklEIHJ0LCBSZWdpc3RlcklEIHJ0MiwgUmVnaXN0
ZXJJRCBybiwgUGFpclBvc3RJbmRleCBzaW1tKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk02NC5oCShyZXZp
c2lvbiAyMTE1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNNjQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTQtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0MSw2ICs0NDEs
MTIgQEAgcHVibGljOgogICAgICAgICBtX2Fzc2VtYmxlci5jbHo8NjQ+KGRlc3QsIGRlc3QpOwog
ICAgIH0KIAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nlcy4KKyAgICB2b2lk
IGlsbGVnYWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5pbGxlZ2Fs
SW5zdHJ1Y3Rpb24oKTsKKyAgICB9CisKICAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc3Jj
LCBSZWdpc3RlcklEIHNoaWZ0QW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAg
ICBtX2Fzc2VtYmxlci5sc2w8MzI+KGRlc3QsIHNyYywgc2hpZnRBbW91bnQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZDb21tb24uaAkocmV2aXNpb24gMjExNTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxNC0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMzI3LDYgKzMyNywxMiBAQCBwdWJsaWM6CiAgICAgICAgIGN0ekFmdGVyQnNm
PDMyPihkc3QpOwogICAgIH0KIAorICAgIC8vIE9ubHkgdXNlZCBmb3IgdGVzdGluZyBwdXJwb3Nl
cy4KKyAgICB2b2lkIGlsbGVnYWxJbnN0cnVjdGlvbigpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5pbGxlZ2FsSW5zdHJ1Y3Rpb24oKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBsc2hpZnQz
MihSZWdpc3RlcklEIHNoaWZ0X2Ftb3VudCwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAg
ICAgaWYgKHNoaWZ0X2Ftb3VudCA9PSBYODZSZWdpc3RlcnM6OmVjeCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAkocmV2aXNpb24gMjEx
NTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgs
IDIwMTItMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDgsIDIwMTItMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1OSw2ICsyNTksNyBAQCBwcml2YXRlOgog
ICAgIH0gT25lQnl0ZU9wY29kZUlEOwogCiAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgT1Ay
X1VEMiAgICAgICAgICAgICA9IDB4QiwKICAgICAgICAgT1AyX01PVlNEX1ZzZFdzZCAgICA9IDB4
MTAsCiAgICAgICAgIE9QMl9NT1ZTRF9Xc2RWc2QgICAgPSAweDExLAogICAgICAgICBPUDJfTU9W
U1NfVnNkV3NkICAgID0gMHgxMCwKQEAgLTY4MSw2ICs2ODIsMTIgQEAgcHVibGljOgogICAgIH0K
ICNlbmRpZiAvLyBDUFUoWDg2XzY0KQogCisgICAgLy8gT25seSB1c2VkIGZvciB0ZXN0aW5nIHB1
cnBvc2VzLgorICAgIHZvaWQgaWxsZWdhbEluc3RydWN0aW9uKCkKKyAgICB7CisgICAgICAgIG1f
Zm9ybWF0dGVyLnR3b0J5dGVPcChPUDJfVUQyKTsKKyAgICB9CisKICAgICB2b2lkIGluY19yKFJl
Z2lzdGVySUQgZHN0KQogICAgIHsKICAgICAgICAgbV9mb3JtYXR0ZXIub25lQnl0ZU9wKE9QX0dS
T1VQNV9FdiwgR1JPVVAxX09QX0FERCwgZHN0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAyMTE1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjAzOCw2ICsyMDM4LDExIEBAIHZvaWQgSGVh
cDo6Zm9yRWFjaENvZGVCbG9ja0ltcGwoY29uc3QgU2MKICAgICByZXR1cm4gbV9jb2RlQmxvY2tz
LT5pdGVyYXRlKGZ1bmMpOwogfQogCit2b2lkIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmlu
Z0pJVFBsYW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mIGZ1bmMp
Cit7CisgICAgcmV0dXJuIG1fY29kZUJsb2Nrcy0+aXRlcmF0ZShmdW5jKTsKK30KKwogdm9pZCBI
ZWFwOjp3cml0ZUJhcnJpZXJTbG93UGF0aChjb25zdCBKU0NlbGwqIGZyb20pCiB7CiAgICAgaWYg
KFVOTElLRUxZKG11dGF0b3JTaG91bGRCZUZlbmNlZCgpKSkgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuaAkocmV2aXNpb24gMjExNTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvSGVhcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsNiArMjIyLDcgQEAgcHVibGljOgog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZm9yRWFjaFByb3RlY3Rl
ZENlbGwoY29uc3QgRnVuY3RvciYpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IHZv
aWQgZm9yRWFjaENvZGVCbG9jayhjb25zdCBGdW5jdG9yJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhjb25zdCBG
dW5jdG9yJik7CiAKICAgICBIYW5kbGVTZXQqIGhhbmRsZVNldCgpIHsgcmV0dXJuICZtX2hhbmRs
ZVNldDsgfQogICAgIEhhbmRsZVN0YWNrKiBoYW5kbGVTdGFjaygpIHsgcmV0dXJuICZtX2hhbmRs
ZVN0YWNrOyB9CkBAIC00NjcsNiArNDY4LDcgQEAgcHJpdmF0ZToKICAgICBzaXplX3QgYnl0ZXNW
aXNpdGVkKCk7CiAgICAgCiAgICAgdm9pZCBmb3JFYWNoQ29kZUJsb2NrSW1wbChjb25zdCBTY29w
ZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4mKTsKKyAgICB2b2lkIGZvckVhY2hDb2RlQmxvY2tJ
Z25vcmluZ0pJVFBsYW5zSW1wbChjb25zdCBTY29wZWRMYW1iZGE8Ym9vbChDb2RlQmxvY2sqKT4m
KTsKICAgICAKICAgICB2b2lkIHNldE11dGF0b3JTaG91bGRCZUZlbmNlZChib29sIHZhbHVlKTsK
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAkocmV2
aXNpb24gMjExNTg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTczLDYgKzE3MywxMSBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiBpbmxpbmUgdm9pZCBICiAgICAgZm9yRWFjaENvZGVCbG9ja0ltcGwoc2NvcGVkTGFt
YmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaENvZGVCbG9ja0lnbm9yaW5nSklUUGxh
bnMoY29uc3QgRnVuY3RvciYgZnVuYykKK3sKKyAgICBmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdK
SVRQbGFuc0ltcGwoc2NvcGVkTGFtYmRhUmVmPGJvb2woQ29kZUJsb2NrKik+KGZ1bmMpKTsKK30K
KwogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4gaW5saW5lIHZvaWQgSGVhcDo6Zm9yRWFjaFBy
b3RlY3RlZENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBmb3IgKGF1dG8mIHBh
aXIgOiBtX3Byb3RlY3RlZFZhbHVlcykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTE1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiTExJbnRDb21tb24uaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKKyNpbmNs
dWRlICJTaWdpbGxDcmFzaEFuYWx5emVyLmgiCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgogI2luY2x1
ZGUgPGxpbWl0cz4KICNpbmNsdWRlIDxtYXRoLmg+CkBAIC0xNDQsNiArMTQ1LDEwIEBAIGJvb2wg
T3B0aW9uczo6aXNBdmFpbGFibGUoT3B0aW9uczo6SUQgaWQKICAgICBpZiAoaWQgPT0gbWF4U2lu
Z2xlQWxsb2NhdGlvblNpemVJRCkKICAgICAgICAgcmV0dXJuIHRydWU7CiAjZW5kaWYKKyNpZiBP
UyhEQVJXSU4pCisgICAgaWYgKGlkID09IHVzZVNpZ2lsbENyYXNoQW5hbHl6ZXJJRCkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTQyOSw2
ICs0MzQsOCBAQCBzdGF0aWMgdm9pZCByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCkKICAgICBl
bHNlCiAgICAgICAgIGZhc3RTZXRNYXhTaW5nbGVBbGxvY2F0aW9uU2l6ZShzdGQ6Om51bWVyaWNf
bGltaXRzPHNpemVfdD46Om1heCgpKTsKICNlbmRpZgorICAgIGlmIChPcHRpb25zOjp1c2VTaWdp
bGxDcmFzaEFuYWx5emVyKCkpCisgICAgICAgIGVuYWJsZVNpZ2lsbENyYXNoQW5hbHl6ZXIoKTsK
IH0KIAogdm9pZCBPcHRpb25zOjppbml0aWFsaXplKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zLmgJKHJldmlzaW9uIDIxMTU4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzk5LDYgKzM5OSw3
IEBAIHR5cGVkZWYgY29uc3QgY2hhciogb3B0aW9uU3RyaW5nOwogICAgIFwKICAgICB2KGJvb2ws
IHVzZURvbGxhclZNLCBmYWxzZSwgUmVzdHJpY3RlZCwgImluc3RhbGxzIHRoZSAkdm0gZGVidWdn
aW5nIHRvb2wgaW4gZ2xvYmFsIG9iamVjdHMiKSBcCiAgICAgdihvcHRpb25TdHJpbmcsIGZ1bmN0
aW9uT3ZlcnJpZGVzLCBudWxscHRyLCBSZXN0cmljdGVkLCAiZmlsZSB3aXRoIGRlYnVnZ2luZyBv
dmVycmlkZXMgZm9yIGZ1bmN0aW9uIGJvZGllcyIpIFwKKyAgICB2KGJvb2wsIHVzZVNpZ2lsbENy
YXNoQW5hbHl6ZXIsIGZhbHNlLCBDb25maWd1cmFibGUsICJsb2dzIGRhdGEgYWJvdXQgU0lHSUxM
IGNyYXNoZXMiKSBcCiAgICAgXAogICAgIHYodW5zaWduZWQsIHdhdGNoZG9nLCAwLCBOb3JtYWws
ICJ3YXRjaGRvZyB0aW1lb3V0ICgwID0gRGlzYWJsZWQsIE4gPSBhIHRpbWVvdXQgcGVyaW9kIG9m
IE4gbWlsbGlzZWNvbmRzKSIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCShyZXZpc2lvbiAyMTE1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsNyBAQAogI2luY2x1ZGUg
IlR5cGVQcm9maWxlckxvZy5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5j
bHVkZSAiVk1FbnRyeVNjb3BlLmgiCisjaW5jbHVkZSAiVk1JbnNwZWN0b3IuaCIKICNpbmNsdWRl
ICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlICJX
ZWFrTWFwRGF0YS5oIgpAQCAtMzQ5LDEwICszNTAsMTQgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgICAgICBXYXRjaGRvZyYgd2F0Y2hkb2cgPSBlbnN1cmVX
YXRjaGRvZygpOwogICAgICAgICB3YXRjaGRvZy5zZXRUaW1lTGltaXQodGltZW91dE1pbGxpcyk7
CiAgICAgfQorCisgICAgVk1JbnNwZWN0b3I6Omluc3RhbmNlKCkuYWRkKHRoaXMpOwogfQogCiBW
TTo6flZNKCkKIHsKKyAgICBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKS5yZW1vdmUodGhpcyk7CisK
ICAgICAvLyBOZXZlciBHQywgZXZlciBhZ2Fpbi4KICAgICBoZWFwLmluY3JlbWVudERlZmVycmFs
RGVwdGgoKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAy
MTE1ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw2ICs2MSw3IEBACiAjaW5jbHVkZSA8d3RmL0J1bXBQb2ludGVyQWxsb2NhdG9y
Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGVNYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+Cisj
aW5jbHVkZSA8d3RmL0RvdWJseUxpbmtlZExpc3QuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KQEAg
LTI0MSw3ICsyNDIsNyBAQCBzdHJ1Y3QgU2NyYXRjaEJ1ZmZlciB7CiAjcHJhZ21hIHdhcm5pbmco
cG9wKQogI2VuZGlmCiAKLWNsYXNzIFZNIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFZN
PiB7CitjbGFzcyBWTSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxWTT4sIHB1YmxpYyBE
b3VibHlMaW5rZWRMaXN0Tm9kZTxWTT4gewogcHVibGljOgogICAgIC8vIFdlYkNvcmUgaGFzIGEg
b25lLXRvLW9uZSBtYXBwaW5nIG9mIHRocmVhZHMgdG8gVk1zOwogICAgIC8vIGVpdGhlciBjcmVh
dGUoKSBvciBjcmVhdGVMZWFrZWQoKSBzaG91bGQgb25seSBiZSBjYWxsZWQgb25jZQpAQCAtNzc4
LDExICs3NzksMTUgQEAgcHJpdmF0ZToKICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93Q2hpY2tl
bj4gbV9zaGFkb3dDaGlja2VuOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUludHJpbnNp
Y1JlZ2lzdHJ5PiBtX2J5dGVjb2RlSW50cmluc2ljUmVnaXN0cnk7CiAKKyAgICBWTSogbV9wcmV2
OyAvLyBSZXF1aXJlZCBieSBEb3VibHlMaW5rZWRMaXN0Tm9kZS4KKyAgICBWTSogbV9uZXh0OyAv
LyBSZXF1aXJlZCBieSBEb3VibHlMaW5rZWRMaXN0Tm9kZS4KKwogICAgIC8vIEZyaWVuZHMgZm9y
IGV4Y2VwdGlvbiBjaGVja2luZyBwdXJwb3NlIG9ubHkuCiAgICAgZnJpZW5kIGNsYXNzIEhlYXA7
CiAgICAgZnJpZW5kIGNsYXNzIENhdGNoU2NvcGU7CiAgICAgZnJpZW5kIGNsYXNzIEV4Y2VwdGlv
blNjb3BlOwogICAgIGZyaWVuZCBjbGFzcyBUaHJvd1Njb3BlOworICAgIGZyaWVuZCBjbGFzcyBX
VEY6OkRvdWJseUxpbmtlZExpc3ROb2RlPFZNPjsKIH07CiAKICNpZiBFTkFCTEUoR0NfVkFMSURB
VElPTikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5
emVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvU2lnaWxs
Q3Jhc2hBbmFseXplci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpZ2lsbENyYXNoQW5hbHl6ZXIuaCIKKworI2lu
Y2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZN
SW5zcGVjdG9yLmgiCisjaW5jbHVkZSA8bXV0ZXg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorCisjaWYgVVNFKEFSTTY0X0RJU0FTU0VNQkxFUikKKyNpbmNsdWRlICJBNjRET3Bjb2Rl
LmgiCisjZW5kaWYKKworI2lmIEhBVkUoU0lHTkFMX0gpCisjaW5jbHVkZSA8c2lnbmFsLmg+Cisj
ZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKK3N0cnVjdCBTaWduYWxDb250ZXh0OworCitjbGFz
cyBTaWdpbGxDcmFzaEFuYWx5emVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgU2lnaWxsQ3Jhc2hB
bmFseXplciYgaW5zdGFuY2UoKTsKKyAgICB2b2lkIGFuYWx5emUoU2lnbmFsQ29udGV4dCYpOwor
Citwcml2YXRlOgorICAgIFNpZ2lsbENyYXNoQW5hbHl6ZXIoKSB7IH0KKyAgICB2b2lkIGR1bXBD
b2RlQmxvY2soQ29kZUJsb2NrKiwgdm9pZCogbWFjaGluZVBDKTsKKworI2lmIFVTRShBUk02NF9E
SVNBU1NFTUJMRVIpCisgICAgQTY0RE9wY29kZSBtX2FybTY0T3Bjb2RlOworI2VuZGlmCit9Owor
CisjaWYgT1MoREFSV0lOKQorCisjaWYgVVNFKE9TX0xPRykKKworI2RlZmluZSBsb2coZm9ybWF0
LCAuLi4pIFwKKyAgICBvc19sb2dfaW5mbyhPU19MT0dfREVGQVVMVCwgZm9ybWF0LCAjI19fVkFf
QVJHU19fKQorCisjZWxzZSAvLyBVU0UoT1NfTE9HKQorCisjZGVmaW5lIGxvZyhmb3JtYXQsIC4u
LikgXAorICAgIGRhdGFMb2dGKGZvcm1hdCwgIyNfX1ZBX0FSR1NfXykKKyAgICAKKyNlbmRpZiAv
LyBVU0UoT1NfTE9HKQorCisjaWYgQ1BVKFg4Nl82NCkKK3N0cnVjdCBTaWduYWxDb250ZXh0IHsK
KyAgICBTaWduYWxDb250ZXh0KG1jb250ZXh0X3QmIG1jb250ZXh0KQorICAgICAgICA6IG1jb250
ZXh0KG1jb250ZXh0KQorICAgICAgICAsIG1hY2hpbmVQQyhyZWludGVycHJldF9jYXN0PHZvaWQq
PihtY29udGV4dC0+X19zcy5fX3JpcCkpCisgICAgICAgICwgc3RhY2tQb2ludGVyKHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KG1jb250ZXh0LT5fX3NzLl9fcnNwKSkKKyAgICAgICAgLCBmcmFtZVBv
aW50ZXIocmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihtY29udGV4dC0+X19zcy5fX3JicCkp
CisgICAgeyB9CisKKyAgICB2b2lkIGR1bXAoKQorICAgIHsKKyNkZWZpbmUgRk9SX0VBQ0hfUkVH
SVNURVIodikgXAorICAgICAgICB2KHJheCkgXAorICAgICAgICB2KHJieCkgXAorICAgICAgICB2
KHJjeCkgXAorICAgICAgICB2KHJkeCkgXAorICAgICAgICB2KHJkaSkgXAorICAgICAgICB2KHJz
aSkgXAorICAgICAgICB2KHJicCkgXAorICAgICAgICB2KHJzcCkgXAorICAgICAgICB2KHI4KSBc
CisgICAgICAgIHYocjkpIFwKKyAgICAgICAgdihyMTApIFwKKyAgICAgICAgdihyMTEpIFwKKyAg
ICAgICAgdihyMTIpIFwKKyAgICAgICAgdihyMTMpIFwKKyAgICAgICAgdihyMTQpIFwKKyAgICAg
ICAgdihyMTUpIFwKKyAgICAgICAgdihyaXApIFwKKyAgICAgICAgdihyZmxhZ3MpIFwKKyAgICAg
ICAgdihjcykgXAorICAgICAgICB2KGZzKSBcCisgICAgICAgIHYoZ3MpCisKKyNkZWZpbmUgRFVN
UF9SRUdJU1RFUihfX3JlZykgXAorICAgICAgICBsb2coIlJlZ2lzdGVyICIgI19fcmVnICI6ICVw
IiwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obWNvbnRleHQtPl9fc3MuX18jI19fcmVnKSk7Cisg
ICAgICAgIEZPUl9FQUNIX1JFR0lTVEVSKERVTVBfUkVHSVNURVIpCisjdW5kZWYgRk9SX0VBQ0hf
UkVHSVNURVIKKyAgICB9CisKKyAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICB2b2lkKiBt
YWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworICAgIHZvaWQqIGZyYW1lUG9pbnRl
cjsKK307CisKKyNlbGlmIENQVShBUk02NCkKKworc3RydWN0IFNpZ25hbENvbnRleHQgeworICAg
IFNpZ25hbENvbnRleHQobWNvbnRleHRfdCYgbWNvbnRleHQpCisgICAgICAgIDogbWNvbnRleHQo
bWNvbnRleHQpCisgICAgICAgICwgbWFjaGluZVBDKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG1j
b250ZXh0LT5fX3NzLl9fcGMpKQorICAgICAgICAsIHN0YWNrUG9pbnRlcihyZWludGVycHJldF9j
YXN0PHZvaWQqPihtY29udGV4dC0+X19zcy5fX3NwKSkKKyAgICAgICAgLCBmcmFtZVBvaW50ZXIo
cmVpbnRlcnByZXRfY2FzdDxDYWxsRnJhbWUqPihtY29udGV4dC0+X19zcy5fX2ZwKSkKKyAgICB7
IH0KKworICAgIHZvaWQgZHVtcCgpCisgICAgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9y
IChpID0gMDsgaSA8IDI4OyBpICs9IDQpIHsKKyAgICAgICAgICAgIGxvZygieCVkOiAlMDE2bGx4
IHglZDogJTAxNmxseCB4JWQ6ICUwMTZsbHggeCVkOiAlMDE2bGx4IiwKKyAgICAgICAgICAgICAg
ICBpLCBtY29udGV4dC0+X19zcy5fX3hbaV0sCisgICAgICAgICAgICAgICAgaSsxLCBtY29udGV4
dC0+X19zcy5fX3hbaSsxXSwKKyAgICAgICAgICAgICAgICBpKzIsIG1jb250ZXh0LT5fX3NzLl9f
eFtpKzJdLAorICAgICAgICAgICAgICAgIGkrMywgbWNvbnRleHQtPl9fc3MuX194W2krM10pOwor
ICAgICAgICB9CisgICAgICAgIEFTU0VSVChpIDwgMjkpOworICAgICAgICBsb2coInglZDogJTAx
NmxseCBmcDogJTAxNmxseCBscjogJTAxNmxseCIsCisgICAgICAgICAgICBpLCBtY29udGV4dC0+
X19zcy5fX3hbaV0sIG1jb250ZXh0LT5fX3NzLl9fZnAsIG1jb250ZXh0LT5fX3NzLl9fbHIpOwor
ICAgICAgICBsb2coInNwOiAlMDE2bGx4IHBjOiAlMDE2bGx4IGNwc3I6ICUwOHgiLAorICAgICAg
ICAgICAgbWNvbnRleHQtPl9fc3MuX19zcCwgbWNvbnRleHQtPl9fc3MuX19wYywgbWNvbnRleHQt
Pl9fc3MuX19jcHNyKTsKKyAgICB9CisKKyAgICBtY29udGV4dF90JiBtY29udGV4dDsKKyAgICB2
b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworICAgIHZvaWQqIGZyYW1l
UG9pbnRlcjsKK307CisKKyNlbHNlCisKK3N0cnVjdCBTaWduYWxDb250ZXh0IHsKKyAgICBTaWdu
YWxDb250ZXh0KG1jb250ZXh0X3QmKSB7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoKSB7IH0KKyAg
ICAKKyAgICB2b2lkKiBtYWNoaW5lUEM7CisgICAgdm9pZCogc3RhY2tQb2ludGVyOworICAgIHZv
aWQqIGZyYW1lUG9pbnRlcjsKK307CisgICAgCisjZW5kaWYKKworc3RydWN0IHNpZ2FjdGlvbiBv
bGRTaWdJbGxBY3Rpb247CisKK3N0YXRpYyB2b2lkIGhhbmRsZUNyYXNoKGludCwgc2lnaW5mb190
Kiwgdm9pZCogdWFwKQoreworICAgIHNpZ2FjdGlvbihTSUdJTEwsICZvbGRTaWdJbGxBY3Rpb24s
IG51bGxwdHIpOworCisgICAgU2lnbmFsQ29udGV4dCBjb250ZXh0KHN0YXRpY19jYXN0PHVjb250
ZXh0X3QqPih1YXApLT51Y19tY29udGV4dCk7CisgICAgU2lnaWxsQ3Jhc2hBbmFseXplciYgYW5h
bHl6ZXIgPSBTaWdpbGxDcmFzaEFuYWx5emVyOjppbnN0YW5jZSgpOworICAgIGFuYWx5emVyLmFu
YWx5emUoY29udGV4dCk7Cit9CisKK3N0YXRpYyB2b2lkIGluc3RhbGxDcmFzaEhhbmRsZXIoKQor
eworI2lmIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFj
dGlvbjsKKyAgICBhY3Rpb24uc2Ffc2lnYWN0aW9uID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkICgq
KShpbnQsIHNpZ2luZm9fdCAqLCB2b2lkICopPihoYW5kbGVDcmFzaCk7CisgICAgc2lnZmlsbHNl
dCgmYWN0aW9uLnNhX21hc2spOworICAgIGFjdGlvbi5zYV9mbGFncyA9IFNBX1NJR0lORk87Cisg
ICAgc2lnYWN0aW9uKFNJR0lMTCwgJmFjdGlvbiwgJm9sZFNpZ0lsbEFjdGlvbik7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShoYW5kbGVDcmFzaCk7CisjZW5kaWYKK30KKworI2Vsc2UgLy8gT1Mo
REFSV0lOKQorCisjZGVmaW5lIGxvZyhmb3JtYXQsIC4uLikgZG8geyB9IHdoaWxlIChmYWxzZSkK
KyAgICAKK3N0cnVjdCBTaWduYWxDb250ZXh0IHsKKyAgICBTaWduYWxDb250ZXh0KCkgeyB9CisK
KyAgICB2b2lkIGR1bXAoKSB7IH0KKworICAgIHZvaWQqIG1hY2hpbmVQQzsKKyAgICB2b2lkKiBz
dGFja1BvaW50ZXI7CisgICAgdm9pZCogZnJhbWVQb2ludGVyOworfTsKKworc3RhdGljIHZvaWQg
aW5zdGFsbENyYXNoSGFuZGxlcigpCit7CisgICAgLy8gRG8gbm90aGluZy4gTm90IHN1cHBvcnRl
ZCBmb3IgdGhpcyBwbGF0Zm9ybS4KK30KKworI2VuZGlmIC8vIE9TKERBUldJTikKKworU2lnaWxs
Q3Jhc2hBbmFseXplciYgU2lnaWxsQ3Jhc2hBbmFseXplcjo6aW5zdGFuY2UoKQoreworICAgIHN0
YXRpYyBTaWdpbGxDcmFzaEFuYWx5emVyKiBhbmFseXplcjsKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIGluc3Rh
bGxDcmFzaEhhbmRsZXIoKTsKKyAgICAgICAgYW5hbHl6ZXIgPSBuZXcgU2lnaWxsQ3Jhc2hBbmFs
eXplcjsKKyAgICB9KTsKKyAgICByZXR1cm4gKmFuYWx5emVyOworfQorCit2b2lkIGVuYWJsZVNp
Z2lsbENyYXNoQW5hbHl6ZXIoKQoreworICAgIC8vIEp1c3QgaW5zdGFudGlhdGluZyB0aGUgU2ln
aWxsQ3Jhc2hBbmFseXplciB3aWxsIGVuYWJsZSBpdC4KKyAgICBTaWdpbGxDcmFzaEFuYWx5emVy
OjppbnN0YW5jZSgpOworfQorCit2b2lkIFNpZ2lsbENyYXNoQW5hbHl6ZXI6OmFuYWx5emUoU2ln
bmFsQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBsb2coIkJFR0lOIFNJR0lMTCBhbmFseXNpcyIp
OworCisgICAgWyZdICgpIHsKKyAgICAgICAgLy8gRmlyc3QsIGR1bXAgdGhlIHNpZ25hbCBjb250
ZXh0IGluZm8gc28gdGhhdCB3ZSdsbCBhdCBsZWFzdCBoYXZlIHRoZSBzYW1lIGluZm8KKyAgICAg
ICAgLy8gdGhhdCB0aGUgZGVmYXVsdCBjcmFzaCBoYW5kbGVyIHdvdWxkIGdpdmVuIHVzIGluIGNh
c2UgdGhpcyBjcmFzaCBhbmFseXplcgorICAgICAgICAvLyBpdHNlbGYgY3Jhc2hlcy4KKyAgICAg
ICAgY29udGV4dC5kdW1wKCk7CisKKyAgICAgICAgVk1JbnNwZWN0b3ImIGluc3BlY3RvciA9IFZN
SW5zcGVjdG9yOjppbnN0YW5jZSgpOworCisgICAgICAgIC8vIFVzZSBhIHRpbWVvdXQgcGVyaW9k
IG9mIDIgc2Vjb25kcy4gVGhlIGNsaWVudCBpcyBhYm91dCB0byBjcmFzaCwgYW5kIHdlIGRvbid0
CisgICAgICAgIC8vIHdhbnQgdG8gdHVybiB0aGUgY3Jhc2ggaW50byBhIGhhbmcgYnkgcmUtdHJ5
aW5nIHRoZSBsb2NrIGZvciB0b28gbG9uZy4KKyAgICAgICAgYXV0byBleHBlY3RlZExvY2tUb2tl
biA9IGluc3BlY3Rvci5sb2NrKFNlY29uZHMoMikpOworICAgICAgICBpZiAoIWV4cGVjdGVkTG9j
a1Rva2VuKSB7CisgICAgICAgICAgICBBU1NFUlQoZXhwZWN0ZWRMb2NrVG9rZW4uZXJyb3IoKSA9
PSBWTUluc3BlY3Rvcjo6RXJyb3I6OlRpbWVkT3V0KTsKKyAgICAgICAgICAgIGxvZygiRVJST1I6
IFVuYWJsZSB0byBhbmFseXplIFNJR0lMTC4gVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgdG8gaXRl
cmF0ZSBWTXMuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYXV0
byBsb2NrVG9rZW4gPSBleHBlY3RlZExvY2tUb2tlbi52YWx1ZSgpOworCisgICAgICAgIHZvaWQq
IHBjID0gY29udGV4dC5tYWNoaW5lUEM7CisgICAgICAgIGF1dG8gaXNJbkpJVE1lbW9yeSA9IGlu
c3BlY3Rvci5pc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShsb2NrVG9rZW4sIHBjKTsKKyAgICAgICAg
aWYgKCFpc0luSklUTWVtb3J5KSB7CisgICAgICAgICAgICBsb2coIkVSUk9SOiBUaW1lZCBvdXQ6
IG5vdCBhYmxlIHRvIGRldGVybWluZSBpZiBwYyAlcCBpcyBpbiB2YWxpZCBKSVQgZXhlY3V0YWJs
ZSBtZW1vcnkiLCBwYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
aWYgKCFpc0luSklUTWVtb3J5LnZhbHVlKCkpIHsKKyAgICAgICAgICAgIGxvZygicGMgJXAgaXMg
Tk9UIGluIHZhbGlkIEpJVCBleGVjdXRhYmxlIG1lbW9yeSIsIHBjKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBsb2coInBjICVwIGlzIGluIHZhbGlkIEpJVCBleGVj
dXRhYmxlIG1lbW9yeSIsIHBjKTsKKworI2lmIENQVShBUk02NCkKKyAgICAgICAgc2l6ZV90IHBj
QXNTaXplID0gcmVpbnRlcnByZXRfY2FzdDxzaXplX3Q+KHBjKTsKKyAgICAgICAgaWYgKHBjQXNT
aXplICE9IHJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKHVpbnQzMl90KT4ocGNBc1NpemUpKSB7
CisgICAgICAgICAgICBsb2coInBjICVwIGlzIE5PVCBwcm9wZXJseSBhbGlnbmVkIiwgcGMpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gV2Uga25vdyBpdCdz
IHNhZmUgdG8gcmVhZCB0aGUgd29yZCBhdCB0aGUgUEMgYmVjYXVzZSB3ZSdyZSBoYW5kbGluZyBh
IFNJR0lMTC4KKyAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSB3b3VsZCBoYXZlIGNyYXNoZWQgd2l0
aCBhIFNJR0JVUyBpbnN0ZWFkLgorICAgICAgICB1aW50MzJfdCB3b3JkQXRQQyA9ICpyZWludGVy
cHJldF9jYXN0PHVpbnQzMl90Kj4ocGMpOworICAgICAgICBsb2coImluc3RydWN0aW9uIGJpdHMg
YXQgcGMgJXAgaXM6IDB4JTA4eCIsIHBjLCB3b3JkQXRQQyk7CisjZW5kaWYKKworICAgICAgICBh
dXRvIGV4cGVjdGVkQ29kZUJsb2NrID0gaW5zcGVjdG9yLmNvZGVCbG9ja0Zvck1hY2hpbmVQQyhs
b2NrVG9rZW4sIHBjKTsKKyAgICAgICAgaWYgKCFleHBlY3RlZENvZGVCbG9jaykgeworICAgICAg
ICAgICAgaWYgKGV4cGVjdGVkQ29kZUJsb2NrLmVycm9yKCkgPT0gVk1JbnNwZWN0b3I6OkVycm9y
OjpUaW1lZE91dCkKKyAgICAgICAgICAgICAgICBsb2coIkVSUk9SOiBUaW1lZCBvdXQ6IG5vdCBh
YmxlIHRvIGRldGVybWluZSBpZiBwYyAlcCBpcyBpbiBhIHZhbGlkIENvZGVCbG9jayIsIHBjKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2coIlRoZSBjdXJyZW50IHRocmVh
ZCBkb2VzIG5vdCBvd24gYW55IFZNIEpTTG9jayIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhwZWN0ZWRDb2RlQmxvY2su
dmFsdWUoKTsKKyAgICAgICAgaWYgKCFjb2RlQmxvY2spIHsKKyAgICAgICAgICAgIGxvZygibWFj
aGluZSBQQyAlcCBkb2VzIG5vdCBiZWxvbmcgdG8gYW55IENvZGVCbG9jayBpbiB0aGUgY3VycmVu
dGx5IGVudGVyZWQgVk0iLCBwYyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBsb2coInBjICVwIGJlbG9uZ3MgdG8gQ29kZUJsb2NrICVwIG9mIHR5cGUgJXMiLCBw
YywgY29kZUJsb2NrLCBKSVRDb2RlOjp0eXBlTmFtZShjb2RlQmxvY2stPmppdFR5cGUoKSkpOwor
CisgICAgICAgIGR1bXBDb2RlQmxvY2soY29kZUJsb2NrLCBwYyk7CisgICAgfSAoKTsKKworICAg
IGxvZygiRU5EIFNJR0lMTCBhbmFseXNpcyIpOworfQorCit2b2lkIFNpZ2lsbENyYXNoQW5hbHl6
ZXI6OmR1bXBDb2RlQmxvY2soQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHZvaWQqIG1hY2hpbmVQQykK
K3sKKyNpZiBDUFUoQVJNNjQpCisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0
Q29kZSgpLmdldCgpOworCisgICAgLy8gRHVtcCB0aGUgcmF3IGJpdHMgb2YgdGhlIGNvZGUuCisg
ICAgdWludDMyX3QqIHN0YXJ0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGppdENvZGUt
PnN0YXJ0KCkpOworICAgIHVpbnQzMl90KiBlbmQgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90
Kj4oaml0Q29kZS0+ZW5kKCkpOworICAgIGxvZygiSklUQ29kZSAlcCBbJXAtJXBdOiIsIGppdENv
ZGUsIHN0YXJ0LCBlbmQpOworICAgIGlmIChzdGFydCA8IGVuZCkgeworICAgICAgICB1aW50MzJf
dCogcCA9IHN0YXJ0OworICAgICAgICB3aGlsZSAocCArIDggPD0gZW5kKSB7CisgICAgICAgICAg
ICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCIs
IHAsIHArNywgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSwgcFs3XSk7
CisgICAgICAgICAgICBwICs9IDg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHAgKyA3IDw9IGVu
ZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUw
OHggJTA4eCIsIHAsIHArNiwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2
XSk7CisgICAgICAgIGVsc2UgaWYgKHAgKyA2IDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVw
LSVwXTogJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHgiLCBwLCBwKzUsIHBbMF0sIHBbMV0s
IHBbMl0sIHBbM10sIHBbNF0sIHBbNV0pOworICAgICAgICBlbHNlIGlmIChwICsgNSA8PSBlbmQp
CisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCIsIHAs
IHArNCwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSk7CisgICAgICAgIGVsc2UgaWYgKHAg
KyA0IDw9IGVuZCkKKyAgICAgICAgICAgIGxvZygiWyVwLSVwXTogJTA4eCAlMDh4ICUwOHggJTA4
eCIsIHAsIHArMywgcFswXSwgcFsxXSwgcFsyXSwgcFszXSk7CisgICAgICAgIGlmIChwICsgMyA8
PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06ICUwOHggJTA4eCAlMDh4IiwgcCwgcCsy
LCBwWzBdLCBwWzFdLCBwWzJdKTsKKyAgICAgICAgZWxzZSBpZiAocCArIDIgPD0gZW5kKQorICAg
ICAgICAgICAgbG9nKCJbJXAtJXBdOiAlMDh4ICUwOHgiLCBwLCBwKzEsIHBbMF0sIHBbMV0pOwor
ICAgICAgICBlbHNlIGlmIChwICsgMSA8PSBlbmQpCisgICAgICAgICAgICBsb2coIlslcC0lcF06
ICUwOHgiLCBwLCBwLCBwWzBdKTsKKyAgICB9CisKKyAgICAvLyBEdW1wIHRoZSBkaXNhc3NlbWJs
eSBvZiB0aGUgY29kZS4KKyAgICBsb2coIkRpc2Fzc2VtYmx5OiIpOworICAgIHVpbnQzMl90KiBj
dXJyZW50UEMgPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oaml0Q29kZS0+ZXhlY3V0YWJs
ZUFkZHJlc3MoKSk7CisgICAgc2l6ZV90IGJ5dGVDb3VudCA9IGppdENvZGUtPnNpemUoKTsKKyAg
ICB3aGlsZSAoYnl0ZUNvdW50KSB7CisgICAgICAgIGNoYXIgcGNTdHJpbmdbMjRdOworICAgICAg
ICBpZiAoY3VycmVudFBDID09IG1hY2hpbmVQQykgeworICAgICAgICAgICAgc25wcmludGYocGNT
dHJpbmcsIHNpemVvZihwY1N0cmluZyksICIqIDB4JWx4IiwgcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBsb25nPihjdXJyZW50UEMpKTsKKyAgICAgICAgICAgIGxvZygiJTIwczogJXMgICAgPD09
PT09PT09PT09PT09PT09PT09PT09PT0iLCBwY1N0cmluZywgbV9hcm02NE9wY29kZS5kaXNhc3Nl
bWJsZShjdXJyZW50UEMpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNucHJpbnRm
KHBjU3RyaW5nLCBzaXplb2YocGNTdHJpbmcpLCAiMHglbHgiLCByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGxvbmc+KGN1cnJlbnRQQykpOworICAgICAgICAgICAgbG9nKCIlMjBzOiAlcyIsIHBj
U3RyaW5nLCBtX2FybTY0T3Bjb2RlLmRpc2Fzc2VtYmxlKGN1cnJlbnRQQykpOworICAgICAgICB9
CisgICAgICAgIGN1cnJlbnRQQysrOworICAgICAgICBieXRlQ291bnQgLT0gc2l6ZW9mKHVpbnQz
Ml90KTsKKyAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShjb2RlQmxvY2spOworICAgIFVO
VVNFRF9QQVJBTShtYWNoaW5lUEMpOworICAgIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQuCisjZW5k
aWYKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dG9vbHMvU2lnaWxsQ3Jhc2hBbmFseXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90b29scy9TaWdpbGxDcmFzaEFuYWx5emVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1NpZ2lsbENyYXNoQW5hbHl6ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBFbmFibGVz
IHRoZSBTSUdJTEwgY3Jhc2ggYW5hbHl6ZXIuIFRoaXMgaXMgYSBvbmUgd2F5IHRyaXAuIFRoZXJl
J3Mgbm8gZ29pbmcgYmFjay4KK3ZvaWQgZW5hYmxlU2lnaWxsQ3Jhc2hBbmFseXplcigpOworCit9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9WTUlu
c3BlY3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL1ZN
SW5zcGVjdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9v
bHMvVk1JbnNwZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlZNSW5zcGVjdG9yLmgiCisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIK
KyNpbmNsdWRlICJDb2RlQmxvY2tTZXQuaCIKKyNpbmNsdWRlICJIZWFwSW5saW5lcy5oIgorI2lu
Y2x1ZGUgPG11dGV4PgorI2luY2x1ZGUgPHd0Zi9FeHBlY3RlZC5oPgorCisjaWYgIU9TKFdJTkRP
V1MpCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIEpTQyB7CisKK1ZN
SW5zcGVjdG9yJiBWTUluc3BlY3Rvcjo6aW5zdGFuY2UoKQoreworICAgIHN0YXRpYyBWTUluc3Bl
Y3RvciogbWFuYWdlcjsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6
OmNhbGxfb25jZShvbmNlLCBbXSB7CisgICAgICAgIG1hbmFnZXIgPSBuZXcgVk1JbnNwZWN0b3Io
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gKm1hbmFnZXI7Cit9CisKK3ZvaWQgVk1JbnNwZWN0b3I6
OmFkZChWTSogdm0pCit7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOworICAg
IG1fbGlzdC5hcHBlbmQodm0pOworfQorCit2b2lkIFZNSW5zcGVjdG9yOjpyZW1vdmUoVk0qIHZt
KQoreworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBtX2xpc3QucmVt
b3ZlKHZtKTsKK30KKworYXV0byBWTUluc3BlY3Rvcjo6bG9jayhTZWNvbmRzIHRpbWVvdXQpIC0+
IEV4cGVjdGVkPExvY2tUb2tlbiwgRXJyb3I+Cit7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBtYXkg
YmUgY2FsbGVkIGZyb20gYSBzaWduYWwgaGFuZGxlciAoZS5nLiB2aWEgdmlzaXQoKSkuIEhlbmNl
LAorICAgIC8vIGl0IHNob3VsZCBvbmx5IHVzZSBBUElzIHRoYXQgYXJlIHNhZmUgdG8gY2FsbCBm
cm9tIHNpZ25hbCBoYW5kbGVycy4gVGhpcyBpcworICAgIC8vIHdoeSB3ZSB1c2UgdW5pc3RkLmgn
cyBzbGVlcCgpIGluc3RlYWQgb2YgaXRzIGFsdGVybmF0aXZlcy4KKworICAgIC8vIFdlJ2xsIGJl
IGRvaW5nIHNsZWVwKDEpIGJldHdlZW4gdHJpZXMgYmVsb3cuIEhlbmNlLCBzbGVlcFBlclJldHJ5
IGlzIDEuCisgICAgdW5zaWduZWQgbWF4UmV0cmllcyA9ICh0aW1lb3V0IDwgU2Vjb25kczo6aW5m
aW5pdHkoKSkgPyB0aW1lb3V0LnZhbHVlKCkgOiBVSU5UX01BWDsKKworICAgIGJvb2wgbG9ja2Vk
ID0gbV9sb2NrLnRyeUxvY2soKTsKKyAgICB1bnNpZ25lZCB0cnlDb3VudCA9IDA7CisgICAgd2hp
bGUgKCFsb2NrZWQgJiYgdHJ5Q291bnQgPCBtYXhSZXRyaWVzKSB7CisgICAgICAgIC8vIFdlIHdh
bnQgdGhlIHZlcnNpb24gb2Ygc2xlZXAgZnJvbSB1bmlzdGQuaC4gQ2FzdCB0byBkaXNhbWJpZ3Vh
dGUuCisjaWYgIU9TKFdJTkRPV1MpCisgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCAoKiko
dW5zaWduZWQpPihzbGVlcCkpKDEpOworI2VuZGlmCisgICAgICAgIGxvY2tlZCA9IG1fbG9jay50
cnlMb2NrKCk7CisgICAgfQorCisgICAgaWYgKCFsb2NrZWQpCisgICAgICAgIHJldHVybiBtYWtl
VW5leHBlY3RlZChFcnJvcjo6VGltZWRPdXQpOworICAgIHJldHVybiBMb2NrVG9rZW46OkxvY2tl
ZFZhbHVlOworfQorCitzdGF0aWMgYm9vbCBlbnN1cmVJc1NhZmVUb0xvY2soTG9jayYgbG9jaykK
K3sKKyAgICB1bnNpZ25lZCBtYXhSZXRyaWVzID0gMjsKKyAgICB1bnNpZ25lZCB0cnlDb3VudCA9
IDA7CisgICAgd2hpbGUgKHRyeUNvdW50IDw9IG1heFJldHJpZXMpIHsKKyAgICAgICAgYm9vbCBz
dWNjZXNzID0gbG9jay50cnlMb2NrKCk7CisgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAg
ICAgICBsb2NrLnVubG9jaygpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgdHJ5Q291bnQrKzsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfTsKKworYXV0
byBWTUluc3BlY3Rvcjo6aXNWYWxpZEV4ZWN1dGFibGVNZW1vcnkoVk1JbnNwZWN0b3I6OkxvY2tU
b2tlbiwgdm9pZCogbWFjaGluZVBDKSAtPiBFeHBlY3RlZDxib29sLCBFcnJvcj4KK3sKKyAgICBi
b29sIGZvdW5kID0gZmFsc2U7CisgICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7CisgICAgaXRl
cmF0ZShbJl0gKFZNJiB2bSkgLT4gRnVuY3RvclN0YXR1cyB7CisgICAgICAgIGF1dG8gYWxsb2Nh
dG9yID0gdm0uZXhlY3V0YWJsZUFsbG9jYXRvcjsKKyAgICAgICAgYXV0byYgbG9jayA9IGFsbG9j
YXRvci5nZXRMb2NrKCk7CisKKyAgICAgICAgYm9vbCBpc1NhZmVUb0xvY2sgPSBlbnN1cmVJc1Nh
ZmVUb0xvY2sobG9jayk7CisgICAgICAgIGlmICghaXNTYWZlVG9Mb2NrKSB7CisgICAgICAgICAg
ICBoYXNUaW1lb3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBGdW5jdG9yU3RhdHVzOjpD
b250aW51ZTsgLy8gU2tpcCB0aGlzIFZNLgorICAgICAgICB9CisKKyAgICAgICAgTG9ja0hvbGRl
ciBleGVjdXRhYmxlQWxsb2NhdG9yTG9ja2VyKGxvY2spOworICAgICAgICBpZiAoYWxsb2NhdG9y
LmlzVmFsaWRFeGVjdXRhYmxlTWVtb3J5KGV4ZWN1dGFibGVBbGxvY2F0b3JMb2NrZXIsIG1hY2hp
bmVQQykpIHsKKyAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBG
dW5jdG9yU3RhdHVzOjpEb25lOworICAgICAgICB9CisgICAgICAgIHJldHVybiBGdW5jdG9yU3Rh
dHVzOjpDb250aW51ZTsKKyAgICB9KTsKKworICAgIGlmICghZm91bmQgJiYgaGFzVGltZW91dCkK
KyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpUaW1lZE91dCk7CisgICAgcmV0
dXJuIGZvdW5kOworfQorCithdXRvIFZNSW5zcGVjdG9yOjpjb2RlQmxvY2tGb3JNYWNoaW5lUEMo
Vk1JbnNwZWN0b3I6OkxvY2tUb2tlbiwgdm9pZCogbWFjaGluZVBDKSAtPiBFeHBlY3RlZDxDb2Rl
QmxvY2sqLCBFcnJvcj4KK3sKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG51bGxwdHI7Cisg
ICAgYm9vbCBoYXNUaW1lb3V0ID0gZmFsc2U7CisgICAgaXRlcmF0ZShbJl0gKFZNJiB2bSkgewor
ICAgICAgICBpZiAoIXZtLmFwaUxvY2soKS5jdXJyZW50VGhyZWFkSXNIb2xkaW5nTG9jaygpKQor
ICAgICAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0dXM6OkNvbnRpbnVlOworCisgICAgICAgIC8v
IEl0IGlzIHNhZmUgdG8gY2FsbCBIZWFwOjpmb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFu
cyBoZXJlIGJlY2F1c2U6CisgICAgICAgIC8vIDEuIENvZGVCbG9ja3MgYXJlIGFkZGVkIHRvIHRo
ZSBDb2RlQmxvY2tTZXQgZnJvbSB0aGUgbWFpbiB0aHJlYWQgYmVmb3JlCisgICAgICAgIC8vICAg
IHRoZXkgYXJlIGhhbmRlZCB0byB0aGUgSklUIHBsYW5zLiBUaG9zZSBjb2RlQmxvY2tzIHdpbGwg
aGF2ZSBhIG51bGwgaml0Q29kZSwKKyAgICAgICAgLy8gICAgYnV0IHdlIGNoZWNrIGZvciB0aGF0
IGluIG91ciBsYW1iZGEgZnVuY3Rvci4KKyAgICAgICAgLy8gMi4gQ29kZUJsb2NrU2V0OjppdGVy
YXRlKCkgd2lsbCBhY3F1aXJlIHRoZSBDb2RlQmxvY2tTZXQgbG9jayBiZWZvcmUgaXRlcmF0aW5n
LgorICAgICAgICAvLyAgICBUaGlzIGVuc3VyZXMgdGhhdCBhIENvZGVCbG9jayB3b24ndCBiZSBH
Q2VkIHdoaWxlIHdlJ3JlIGl0ZXJhdGluZy4KKyAgICAgICAgLy8gMy4gV2UgZG8gYSB0cnlMb2Nr
IG9uIHRoZSBDb2RlQmxvY2tTZXQncyBsb2NrIGZpcnN0IHRvIGVuc3VyZSB0aGF0IGl0IGlzCisg
ICAgICAgIC8vICAgIHNhZmUgZm9yIHRoZSBjdXJyZW50IHRocmVhZCB0byBsb2NrIGl0IGJlZm9y
ZSBjYWxsaW5nCisgICAgICAgIC8vICAgIEhlYXA6OmZvckVhY2hDb2RlQmxvY2tJZ25vcmluZ0pJ
VFBsYW5zKCkuIEhlbmNlLCB0aGVyZSdzIG5vIHJpc2sgb2YKKyAgICAgICAgLy8gICAgcmUtZW50
ZXJpbmcgdGhlIGxvY2sgYW5kIGRlYWRsb2NraW5nIG9uIGl0LgorCisgICAgICAgIGF1dG8mIGxv
Y2sgPSB2bS5oZWFwLmNvZGVCbG9ja1NldCgpLmdldExvY2soKTsKKyAgICAgICAgYm9vbCBpc1Nh
ZmVUb0xvY2sgPSBlbnN1cmVJc1NhZmVUb0xvY2sobG9jayk7CisgICAgICAgIGlmICghaXNTYWZl
VG9Mb2NrKSB7CisgICAgICAgICAgICBoYXNUaW1lb3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHJl
dHVybiBGdW5jdG9yU3RhdHVzOjpDb250aW51ZTsgLy8gU2tpcCB0aGlzIFZNLgorICAgICAgICB9
CisKKyAgICAgICAgdm0uaGVhcC5mb3JFYWNoQ29kZUJsb2NrSWdub3JpbmdKSVRQbGFucyhbJl0g
KENvZGVCbG9jayogY2IpIHsKKyAgICAgICAgICAgIEpJVENvZGUqIGppdENvZGUgPSBjYi0+aml0
Q29kZSgpLmdldCgpOworICAgICAgICAgICAgaWYgKCFqaXRDb2RlKSB7CisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhlIGNvZGVCbG9jayBpcyBhIHJlcGxhY2VtZW50IGNvZGVCbG9jayB3aGljaCBp
cyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZworICAgICAgICAgICAgICAgIC8vIGNvbXBpbGVkLCBp
dHMgaml0Q29kZSB3aWxsIGJlIG51bGwsIGFuZCB3ZSBjYW4gZGlzcmVnYXJkIGl0IGFzIGEgbWF0
Y2ggZm9yCisgICAgICAgICAgICAgICAgLy8gdGhlIG1hY2hpbmVQQyB3ZSdyZSBzZWFyY2hpbmcg
Zm9yLgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFKSVRDb2RlOjppc0pJVChqaXRDb2RlLT5qaXRUeXBlKCkpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGppdENvZGUtPmNvbnRh
aW5zKG1hY2hpbmVQQykpIHsKKyAgICAgICAgICAgICAgICBjb2RlQmxvY2sgPSBjYjsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfSk7CisgICAgICAgIGlmIChjb2RlQmxvY2spCisgICAgICAgICAg
ICByZXR1cm4gRnVuY3RvclN0YXR1czo6RG9uZTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0b3JTdGF0
dXM6OkNvbnRpbnVlOworICAgIH0pOworCisgICAgaWYgKCFjb2RlQmxvY2sgJiYgaGFzVGltZW91
dCkKKyAgICAgICAgcmV0dXJuIG1ha2VVbmV4cGVjdGVkKEVycm9yOjpUaW1lZE91dCk7CisgICAg
cmV0dXJuIGNvZGVCbG9jazsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvVk1JbnNwZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJWTS5oIgorI2luY2x1ZGUgPHd0Zi9Eb3VibHlM
aW5rZWRMaXN0Lmg+CisjaW5jbHVkZSA8d3RmL0V4cGVjdGVkLmg+CisjaW5jbHVkZSA8d3RmL0xv
Y2suaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIFZNSW5zcGVjdG9yIHsKK3B1YmxpYzoK
KyAgICBlbnVtIGNsYXNzIEVycm9yIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgVGltZWRPdXQK
KyAgICB9OworCisgICAgZW51bSBjbGFzcyBMb2NrVG9rZW4geyBMb2NrZWRWYWx1ZSB9OworCisg
ICAgc3RhdGljIFZNSW5zcGVjdG9yJiBpbnN0YW5jZSgpOworCisgICAgdm9pZCBhZGQoVk0qKTsK
KyAgICB2b2lkIHJlbW92ZShWTSopOworCisgICAgRXhwZWN0ZWQ8TG9ja1Rva2VuLCBFcnJvcj4g
bG9jayhTZWNvbmRzIHRpbWVvdXQgPSBTZWNvbmRzOjppbmZpbml0eSgpKTsKKworICAgIEV4cGVj
dGVkPGJvb2wsIEVycm9yPiBpc1ZhbGlkRXhlY3V0YWJsZU1lbW9yeShMb2NrVG9rZW4sIHZvaWQq
KTsKKyAgICBFeHBlY3RlZDxDb2RlQmxvY2sqLCBFcnJvcj4gY29kZUJsb2NrRm9yTWFjaGluZVBD
KExvY2tUb2tlbiwgdm9pZCopOworCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgRnVuY3RvclN0
YXR1cyB7CisgICAgICAgIENvbnRpbnVlLAorICAgICAgICBEb25lCisgICAgfTsKKyAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBpdGVyYXRlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBmb3IgKFZNKiB2bSA9IG1fbGlzdC5oZWFkKCk7IHZtOyB2bSA9
IHZtLT5uZXh0KCkpIHsKKyAgICAgICAgICAgIEZ1bmN0b3JTdGF0dXMgc3RhdHVzID0gZnVuY3Rv
cigqdm0pOworICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBGdW5jdG9yU3RhdHVzOjpEb25lKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIExvY2sgbV9s
b2NrOworICAgIERvdWJseUxpbmtlZExpc3Q8Vk0+IG1fbGlzdDsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQwpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTU4NSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTctMDItMDIgIE1hcmsgTGFtICA8
bWFyay5sYW1AYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBhIFNJR0lMTCBjcmFzaCBhbmFseXpl
ciB0byBtYWtlIGRlYnVnZ2luZyBTSUdJTExzIGVhc2llci4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzcxNAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMzAzMTgyMzc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiB3dGYvU3RkTGliRXh0cmFzLmg6CisKIDIwMTctMDItMDIgIEFuZHJlYXMgS2xpbmcg
IDxha2xpbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFtNYWNdIEluLXByb2Nlc3MgbWVtb3J5IHBy
ZXNzdXJlIG1vbml0b3IgZm9yIFdlYkNvbnRlbnQgcHJvY2Vzc2VzLgpJbmRleDogU291cmNlL1dU
Ri93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU3RkTGli
RXh0cmFzLmgJKHJldmlzaW9uIDIxMTU4NSkKKysrIFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJh
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00ODksNiArNDg5LDcgQEAgdXNpbmcgV1RGOjppc0NvbXBp
bGF0aW9uVGhyZWFkOwogdXNpbmcgV1RGOjppc1BvaW50ZXJBbGlnbmVkOwogdXNpbmcgV1RGOjpp
c1N0YXRlbGVzc0xhbWJkYTsKIHVzaW5nIFdURjo6aXM4Qnl0ZUFsaWduZWQ7Cit1c2luZyBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Y7CiB1c2luZyBXVEY6OnNhZmVDYXN0OwogdXNpbmcgV1RGOjp0
cnlCaW5hcnlTZWFyY2g7CiAK
</data>
<flag name="review"
          id="322341"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>